Source Code
Overview
MOVR Balance
MOVR Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ODON
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at moonriver.moonscan.io on 2022-04-21
*/
/**
*Submitted for verification at moonriver.moonscan.io on 2022-04-09
*/
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;
interface IBEP20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount)
external
returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender)
external
view
returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
/**
* @dev Interface for the optional metadata functions from the BEP20 standard.
*
* _Available since v4.1._
*/
interface IBEP20Metadata is IBEP20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
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;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
address private _previousOwner;
uint256 private _lockTime;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function _burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
}
// pragma solidity >=0.6.2;
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract ODON is Context, IBEP20, IBEP20Metadata, Ownable {
using SafeMath for uint256;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) private _isExcludedFromFee;
mapping(address => bool) private _isAutomaticMarketMaker;
address public teamWallet = 0x2122EC95a2c2173DDD4f0Ecc79006A0FB9e1d588;
uint256 public MaxSupply;
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private _decimals;
uint256 public _liquidityFee = 50;
uint256 public _teamFee = 30;
uint256 public _burnFee = 20;
/**
* @dev Sets the values for {name}, {symbol} and {decimals}.
*
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
IUniswapV2Router02 public uniswapV2Router;
address public uniswapV2Pair;
bool internal inSwapAndLiquify;
bool public swapAndLiquifyEnabled = false;
uint256 private constant numTokensSellToAddToLiquidity = 500000 * 10**18;
uint256 public _maxTxAmount = 10 * 10**6 * 10**18;
event TaxFeeUpdated(uint256 totalFee);
event MaxTxAmountUpdated(uint256 updatingTxAmount);
event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiquidity
);
modifier lockTheSwap() {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
constructor() {
_name = "ODON";
_symbol = "ODON";
_decimals = 18;
MaxSupply = 30_000_000 * 10**_decimals;
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506
);
// Create a uniswap pair for this new token
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
// set the rest of the contract variables
uniswapV2Router = _uniswapV2Router;
_isExcludedFromFee[address(this)] = true;
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[teamWallet] = true;
_isAutomaticMarketMaker[uniswapV2Pair] = true;
_mint(_msgSender(), 8_000_000);
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {BEP20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IBEP20-balanceOf} and {IBEP20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return _decimals;
}
/**
* @dev See {IBEP20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IBEP20-balanceOf}.
*/
function balanceOf(address account)
public
view
virtual
override
returns (uint256)
{
return _balances[account];
}
/**
* @dev See {IBEP20-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
virtual
override
returns (bool)
{
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IBEP20-allowance}.
*/
function allowance(address owner, address spender)
public
view
virtual
override
returns (uint256)
{
return _allowances[owner][spender];
}
/**
* @dev See {IBEP20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount)
public
virtual
override
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IBEP20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {BEP20}.
*
* 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 virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"BEP20: transfer amount exceeds allowance"
);
_approve(sender, _msgSender(), currentAllowance - amount);
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 {IBEP20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] + 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 {IBEP20-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
virtual
returns (bool)
{
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(
currentAllowance >= subtractedValue,
"BEP20: decreased allowance below zero"
);
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
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), "BEP20: transfer from the zero address");
require(recipient != address(0), "BEP20: transfer to the zero address");
uint256 _TeamAmt;
uint256 _liquidityAmt;
uint256 _burnAmt;
if (_isAutomaticMarketMaker[sender] || _isAutomaticMarketMaker[recipient]) {
if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
_TeamAmt = 0;
_liquidityAmt = 0;
_burnAmt = 0;
} else {
require(amount <= _maxTxAmount, "Transaction limit Exceeded");
_TeamAmt = amount.mul(_teamFee).div(10000);
_liquidityAmt = amount.mul(_liquidityFee).div(10000);
_burnAmt = amount.mul(_burnFee).div(10000);
}
} else {
_TeamAmt = 0;
_liquidityAmt = 0;
_burnAmt = 0;
}
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinTokenBalance = contractTokenBalance >=
numTokensSellToAddToLiquidity;
if (
overMinTokenBalance &&
!inSwapAndLiquify &&
sender != uniswapV2Pair &&
swapAndLiquifyEnabled
) {
contractTokenBalance = numTokensSellToAddToLiquidity;
//add liquidity
swapAndLiquify(contractTokenBalance);
}
uint256 senderBalance = _balances[sender];
require(
senderBalance >= amount,
"BEP20: transfer amount exceeds balance"
);
_balances[sender] = senderBalance - amount;
_balances[teamWallet] += _TeamAmt;
_balances[address(this)] += _liquidityAmt;
if (_burnAmt > 0) {
_totalSupply -= _burnAmt;
emit Transfer(sender, address(0), _burnAmt);
}
_balances[recipient] += amount.sub(_TeamAmt).sub(_liquidityAmt).sub(
_burnAmt
);
if (_TeamAmt > 0) {
emit Transfer(sender, teamWallet, _TeamAmt);
}
emit Transfer(
sender,
recipient,
amount.sub(_TeamAmt).sub(_liquidityAmt).sub(_burnAmt)
);
}
function updateFees(
uint256 liquidityFee,
uint256 burnFee,
uint256 teamFee
) external onlyOwner {
require(
liquidityFee.add(burnFee).add(teamFee) <= 2500,
"You can't set fee more than 25%"
);
_liquidityFee = liquidityFee;
_burnFee = burnFee;
_teamFee = teamFee;
emit TaxFeeUpdated(liquidityFee.add(burnFee).add(teamFee));
}
function ExcludeOrIncludeFromFee(address Account, bool status)
external
onlyOwner
{
require(Account != address(0), "You can't exclude zero address");
_isExcludedFromFee[Account] = status;
}
function isExcludedFromFee(address Account) external view returns (bool) {
return _isExcludedFromFee[Account];
}
function isAutomaticMarketMaker(address account)
external
view
returns (bool)
{
return _isAutomaticMarketMaker[account];
}
function SetAutomaticMarketMaker(address Account, bool status)
external
onlyOwner
{
require(Account != address(0), "You can't exclude zero address");
_isAutomaticMarketMaker[Account] = status;
}
function setMaxTxPercentage(uint256 maxTxPercentage) external onlyOwner {
require(
maxTxPercentage >= 1,
"Percentage should be greater or equal to 1"
);
_maxTxAmount = _totalSupply.mul(maxTxPercentage).div(10**2);
emit MaxTxAmountUpdated(_maxTxAmount);
}
/** @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:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) public virtual onlyOwner {
uint256 Amount = amount * 10**_decimals;
require(
_totalSupply.add(Amount) <= MaxSupply,
"You can't mint more than MaxSupply"
);
require(account != address(0), "BEP20: mint to the zero address");
_beforeTokenTransfer(address(0), account, Amount);
_totalSupply += Amount;
_balances[account] += 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(uint256 amount) external virtual {
uint256 Amount = amount * 10**_decimals;
address account = msg.sender;
require(account != address(0), "BEP20: burn from the zero address");
_beforeTokenTransfer(account, address(0), Amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= Amount, "BEP20: burn amount exceeds balance");
_balances[account] = accountBalance - Amount;
_totalSupply -= Amount;
emit Transfer(account, address(0), Amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This 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 virtual {
require(owner != address(0), "BEP20: approve from the zero address");
require(spender != address(0), "BEP20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
// split the contract balance into halves
uint256 half = contractTokenBalance.div(2);
uint256 otherHalf = contractTokenBalance.sub(half);
// capture the contract's current ETH balance.
// this is so that we can capture exactly the amount of ETH that the
// swap creates, and not make the liquidity event include any ETH that
// has been manually sent to the contract
uint256 initialBalance = address(this).balance;
// swap tokens for ETH
swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
// how much ETH did we just swap into?
uint256 newBalance = address(this).balance.sub(initialBalance);
// add liquidity to uniswap
addLiquidity(otherHalf, newBalance);
emit SwapAndLiquify(half, newBalance, otherHalf);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
owner(),
block.timestamp
);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatingTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"}],"name":"TaxFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"Account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludeOrIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"Account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"SetAutomaticMarketMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","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":[{"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":"isAutomaticMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"Account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercentage","type":"uint256"}],"name":"setMaxTxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"teamFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052732122ec95a2c2173ddd4f0ecc79006a0fb9e1d588600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506032600d55601e600e556014600f556000601160156101000a81548160ff0219169083151502179055506a084595161401484a0000006012553480156200009f57600080fd5b506000620000b26200064a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600481526020017f4f444f4e00000000000000000000000000000000000000000000000000000000815250600a90805190602001906200019d9291906200097c565b506040518060400160405280600481526020017f4f444f4e00000000000000000000000000000000000000000000000000000000815250600b9080519060200190620001eb9291906200097c565b506012600c60006101000a81548160ff021916908360ff160217905550600c60009054906101000a900460ff16600a62000226919062000cce565b6301c9c38062000237919062000e0b565b6008819055506000731b02da8cb0d097eb8d57a175b88c7d8b4799750690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029d57600080fd5b505afa158015620002b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d8919062000a43565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033b57600080fd5b505afa15801562000350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000376919062000a43565b6040518363ffffffff1660e01b81526004016200039592919062000b33565b602060405180830381600087803b158015620003b057600080fd5b505af1158015620003c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003eb919062000a43565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000620004da6200065260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000643620006336200064a60201b60201c565b627a12006200067b60201b60201c565b5062001041565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200068b6200064a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200071b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007129062000ba4565b60405180910390fd5b6000600c60009054906101000a900460ff16600a6200073b919062000cce565b8262000748919062000e0b565b905060085462000769826009546200091460201b620019771790919060201c565b1115620007ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a49062000bc6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000820576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008179062000b82565b60405180910390fd5b62000834600084836200097760201b60201c565b806009600082825462000848919062000c16565b9250508190555080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008a0919062000c16565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000907919062000be8565b60405180910390a3505050565b600080828462000925919062000c16565b9050838110156200096d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009649062000b60565b60405180910390fd5b8091505092915050565b505050565b8280546200098a9062000eb7565b90600052602060002090601f016020900481019282620009ae5760008555620009fa565b82601f10620009c957805160ff1916838001178555620009fa565b82800160010185558215620009fa579182015b82811115620009f9578251825591602001919060010190620009dc565b5b50905062000a09919062000a0d565b5090565b5b8082111562000a2857600081600090555060010162000a0e565b5090565b60008151905062000a3d8162001027565b92915050565b60006020828403121562000a5c5762000a5b62000f4b565b5b600062000a6c8482850162000a2c565b91505092915050565b62000a808162000e6c565b82525050565b600062000a95601b8362000c05565b915062000aa28262000f5d565b602082019050919050565b600062000abc601f8362000c05565b915062000ac98262000f86565b602082019050919050565b600062000ae360208362000c05565b915062000af08262000faf565b602082019050919050565b600062000b0a60228362000c05565b915062000b178262000fd8565b604082019050919050565b62000b2d8162000ea0565b82525050565b600060408201905062000b4a600083018562000a75565b62000b59602083018462000a75565b9392505050565b6000602082019050818103600083015262000b7b8162000a86565b9050919050565b6000602082019050818103600083015262000b9d8162000aad565b9050919050565b6000602082019050818103600083015262000bbf8162000ad4565b9050919050565b6000602082019050818103600083015262000be18162000afb565b9050919050565b600060208201905062000bff600083018462000b22565b92915050565b600082825260208201905092915050565b600062000c238262000ea0565b915062000c308362000ea0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c685762000c6762000eed565b5b828201905092915050565b6000808291508390505b600185111562000cc55780860481111562000c9d5762000c9c62000eed565b5b600185161562000cad5780820291505b808102905062000cbd8562000f50565b945062000c7d565b94509492505050565b600062000cdb8262000ea0565b915062000ce88362000eaa565b925062000d177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d1f565b905092915050565b60008262000d31576001905062000e04565b8162000d41576000905062000e04565b816001811462000d5a576002811462000d655762000d9b565b600191505062000e04565b60ff84111562000d7a5762000d7962000eed565b5b8360020a91508482111562000d945762000d9362000eed565b5b5062000e04565b5060208310610133831016604e8410600b841016171562000dd55782820a90508381111562000dcf5762000dce62000eed565b5b62000e04565b62000de4848484600162000c73565b9250905081840481111562000dfe5762000dfd62000eed565b5b81810290505b9392505050565b600062000e188262000ea0565b915062000e258362000ea0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e615762000e6062000eed565b5b828202905092915050565b600062000e798262000e80565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000ed057607f821691505b6020821081141562000ee75762000ee662000f1c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f752063616e2774206d696e74206d6f7265207468616e204d61785375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b620010328162000e6c565b81146200103e57600080fd5b50565b613e2580620010516000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636bc87c3a1161010f578063a457c2d7116100a2578063c373688211610071578063c373688214610588578063c676af83146105a4578063dd62ed3e146105c0578063f2fde38b146105f0576101e5565b8063a457c2d7146104ec578063a9059cbb1461051c578063b36c12841461054c578063c0b0fda21461056a576101e5565b80638da5cb5b116100de5780638da5cb5b1461047657806395d89b41146104945780639b1f9e74146104b25780639eb942e5146104ce576101e5565b80636bc87c3a1461040057806370a082311461041e578063715018a61461044e5780637d1db4a514610458576101e5565b8063313ce567116101875780634a74bb02116101565780634a74bb02146103785780634e6ec247146103965780635342acb4146103b257806359927044146103e2576101e5565b8063313ce567146102dc57806339509351146102fa5780633979e9ca1461032a57806349bd5a5e1461035a576101e5565b806318160ddd116101c357806318160ddd14610256578063224290851461027457806323b872dd1461029057806328141d5b146102c0576101e5565b806306fdde03146101ea578063095ea7b3146102085780631694505e14610238575b600080fd5b6101f261060c565b6040516101ff919061307d565b60405180910390f35b610222600480360381019061021d9190612b07565b61069e565b60405161022f9190613047565b60405180910390f35b6102406106bc565b60405161024d9190613062565b60405180910390f35b61025e6106e2565b60405161026b91906132ff565b60405180910390f35b61028e60048036038101906102899190612b74565b6106ec565b005b6102aa60048036038101906102a59190612a74565b61085f565b6040516102b79190613047565b60405180910390f35b6102da60048036038101906102d59190612b47565b610960565b005b6102e4610aa3565b6040516102f191906133ab565b60405180910390f35b610314600480360381019061030f9190612b07565b610aba565b6040516103219190613047565b60405180910390f35b610344600480360381019061033f91906129da565b610b66565b6040516103519190613047565b60405180910390f35b610362610bbc565b60405161036f9190612fcb565b60405180910390f35b610380610be2565b60405161038d9190613047565b60405180910390f35b6103b060048036038101906103ab9190612b07565b610bf5565b005b6103cc60048036038101906103c791906129da565b610e64565b6040516103d99190613047565b60405180910390f35b6103ea610eba565b6040516103f79190612fcb565b60405180910390f35b610408610ee0565b60405161041591906132ff565b60405180910390f35b610438600480360381019061043391906129da565b610ee6565b60405161044591906132ff565b60405180910390f35b610456610f2f565b005b610460611082565b60405161046d91906132ff565b60405180910390f35b61047e611088565b60405161048b9190612fcb565b60405180910390f35b61049c6110b1565b6040516104a9919061307d565b60405180910390f35b6104cc60048036038101906104c79190612b47565b611143565b005b6104d661134a565b6040516104e391906132ff565b60405180910390f35b61050660048036038101906105019190612b07565b611350565b6040516105139190613047565b60405180910390f35b61053660048036038101906105319190612b07565b611444565b6040516105439190613047565b60405180910390f35b610554611462565b60405161056191906132ff565b60405180910390f35b610572611468565b60405161057f91906132ff565b60405180910390f35b6105a2600480360381019061059d9190612ac7565b61146e565b005b6105be60048036038101906105b99190612ac7565b6115ce565b005b6105da60048036038101906105d59190612a34565b61172e565b6040516105e791906132ff565b60405180910390f35b61060a600480360381019061060591906129da565b6117b5565b005b6060600a805461061b90613771565b80601f016020809104026020016040519081016040528092919081815260200182805461064790613771565b80156106945780601f1061066957610100808354040283529160200191610694565b820191906000526020600020905b81548152906001019060200180831161067757829003601f168201915b5050505050905090565b60006106b26106ab6119d5565b84846119dd565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b6106f46119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610781576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610778906131df565b60405180910390fd5b6109c46107a98261079b858761197790919063ffffffff16565b61197790919063ffffffff16565b11156107ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e1906132bf565b60405180910390fd5b82600d8190555081600f8190555080600e819055507faa4b71ac29531fdea0ef1650c76ef91e3771dac25f4a4dd2a561ff3e0b9a5de261084582610837858761197790919063ffffffff16565b61197790919063ffffffff16565b60405161085291906132ff565b60405180910390a1505050565b600061086c848484611ba8565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108b76119d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e9061315f565b60405180910390fd5b610954856109436119d5565b858461094f919061366d565b6119dd565b60019150509392505050565b6109686119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ec906131df565b60405180910390fd5b6001811015610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a309061313f565b60405180910390fd5b610a616064610a538360095461237a90919063ffffffff16565b6123f590919063ffffffff16565b6012819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf601254604051610a9891906132ff565b60405180910390a150565b6000600c60009054906101000a900460ff16905090565b6000610b5c610ac76119d5565b848460046000610ad56119d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b57919061341b565b6119dd565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160159054906101000a900460ff1681565b610bfd6119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c81906131df565b60405180910390fd5b6000600c60009054906101000a900460ff16600a610ca891906134f5565b82610cb39190613613565b9050600854610ccd8260095461197790919063ffffffff16565b1115610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d059061327f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d75906131bf565b60405180910390fd5b610d8a6000848361243f565b8060096000828254610d9c919061341b565b9250508190555080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610df2919061341b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e5791906132ff565b60405180910390a3505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f376119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb906131df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b80546110c090613771565b80601f01602080910402602001604051908101604052809291908181526020018280546110ec90613771565b80156111395780601f1061110e57610100808354040283529160200191611139565b820191906000526020600020905b81548152906001019060200180831161111c57829003601f168201915b5050505050905090565b6000600c60009054906101000a900460ff16600a61116191906134f5565b8261116c9190613613565b90506000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da9061325f565b60405180910390fd5b6111ef8160008461243f565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d9061329f565b60405180910390fd5b8281611282919061366d565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600960008282546112d7919061366d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161133c91906132ff565b60405180910390a350505050565b600e5481565b6000806004600061135f6119d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561141c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114139061323f565b60405180910390fd5b6114396114276119d5565b858584611434919061366d565b6119dd565b600191505092915050565b60006114586114516119d5565b8484611ba8565b6001905092915050565b60085481565b600f5481565b6114766119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa906131df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a9061317f565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115d66119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a906131df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca9061317f565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117bd6119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461184a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611841906131df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906130df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611986919061341b565b9050838110156119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c29061311f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a44906130bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab4906132df565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b9b91906132ff565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f9061309f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f9061321f565b60405180910390fd5b6000806000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d2e5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611eb657600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611dd45750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611dea57600092506000915060009050611eb1565b601254841115611e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e26906130ff565b60405180910390fd5b611e58612710611e4a600e548761237a90919063ffffffff16565b6123f590919063ffffffff16565b9250611e83612710611e75600d548761237a90919063ffffffff16565b6123f590919063ffffffff16565b9150611eae612710611ea0600f548761237a90919063ffffffff16565b6123f590919063ffffffff16565b90505b611ec3565b6000925060009150600090505b6000611ece30610ee6565b905060006969e10de76676d08000008210159050808015611efc5750601160149054906101000a900460ff16155b8015611f565750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b8015611f6e5750601160159054906101000a900460ff165b15611f8a576969e10de76676d08000009150611f8982612444565b5b6000600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905086811015612011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612008906131ff565b60405180910390fd5b868161201d919061366d565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560036000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120d1919061341b565b9250508190555084600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612127919061341b565b9250508190555060008411156121b7578360096000828254612149919061366d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516121ae91906132ff565b60405180910390a35b6121ee846121e0876121d28a8c61251a90919063ffffffff16565b61251a90919063ffffffff16565b61251a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223c919061341b565b9250508190555060008611156122d457600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516122cb91906132ff565b60405180910390a35b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61235a8761234c8a61233e8d8f61251a90919063ffffffff16565b61251a90919063ffffffff16565b61251a90919063ffffffff16565b60405161236791906132ff565b60405180910390a3505050505050505050565b60008083141561238d57600090506123ef565b6000828461239b9190613613565b90508284826123aa9190613471565b146123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e19061319f565b60405180910390fd5b809150505b92915050565b600061243783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612564565b905092915050565b505050565b6001601160146101000a81548160ff02191690831515021790555060006124756002836123f590919063ffffffff16565b9050600061248c828461251a90919063ffffffff16565b9050600047905061249c836125c7565b60006124b1824761251a90919063ffffffff16565b90506124bd8382612819565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516124f093929190613374565b60405180910390a1505050506000601160146101000a81548160ff02191690831515021790555050565b600061255c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061290d565b905092915050565b600080831182906125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a2919061307d565b60405180910390fd5b50600083856125ba9190613471565b9050809150509392505050565b6000600267ffffffffffffffff8111156125e4576125e361385f565b5b6040519080825280602002602001820160405280156126125781602001602082028036833780820191505090505b509050308160008151811061262a57612629613830565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126cc57600080fd5b505afa1580156126e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127049190612a07565b8160018151811061271857612717613830565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061277f30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119dd565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127e395949392919061331a565b600060405180830381600087803b1580156127fd57600080fd5b505af1158015612811573d6000803e3d6000fd5b505050505050565b61284630601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119dd565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612892611088565b426040518863ffffffff1660e01b81526004016128b496959493929190612fe6565b6060604051808303818588803b1580156128cd57600080fd5b505af11580156128e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129069190612bc7565b5050505050565b6000838311158290612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c919061307d565b60405180910390fd5b5060008385612964919061366d565b9050809150509392505050565b60008135905061298081613daa565b92915050565b60008151905061299581613daa565b92915050565b6000813590506129aa81613dc1565b92915050565b6000813590506129bf81613dd8565b92915050565b6000815190506129d481613dd8565b92915050565b6000602082840312156129f0576129ef61388e565b5b60006129fe84828501612971565b91505092915050565b600060208284031215612a1d57612a1c61388e565b5b6000612a2b84828501612986565b91505092915050565b60008060408385031215612a4b57612a4a61388e565b5b6000612a5985828601612971565b9250506020612a6a85828601612971565b9150509250929050565b600080600060608486031215612a8d57612a8c61388e565b5b6000612a9b86828701612971565b9350506020612aac86828701612971565b9250506040612abd868287016129b0565b9150509250925092565b60008060408385031215612ade57612add61388e565b5b6000612aec85828601612971565b9250506020612afd8582860161299b565b9150509250929050565b60008060408385031215612b1e57612b1d61388e565b5b6000612b2c85828601612971565b9250506020612b3d858286016129b0565b9150509250929050565b600060208284031215612b5d57612b5c61388e565b5b6000612b6b848285016129b0565b91505092915050565b600080600060608486031215612b8d57612b8c61388e565b5b6000612b9b868287016129b0565b9350506020612bac868287016129b0565b9250506040612bbd868287016129b0565b9150509250925092565b600080600060608486031215612be057612bdf61388e565b5b6000612bee868287016129c5565b9350506020612bff868287016129c5565b9250506040612c10868287016129c5565b9150509250925092565b6000612c268383612c32565b60208301905092915050565b612c3b816136a1565b82525050565b612c4a816136a1565b82525050565b6000612c5b826133d6565b612c6581856133f9565b9350612c70836133c6565b8060005b83811015612ca1578151612c888882612c1a565b9750612c93836133ec565b925050600181019050612c74565b5085935050505092915050565b612cb7816136b3565b82525050565b612cc6816136f6565b82525050565b612cd581613708565b82525050565b6000612ce6826133e1565b612cf0818561340a565b9350612d0081856020860161373e565b612d0981613893565b840191505092915050565b6000612d2160258361340a565b9150612d2c826138b1565b604082019050919050565b6000612d4460248361340a565b9150612d4f82613900565b604082019050919050565b6000612d6760268361340a565b9150612d728261394f565b604082019050919050565b6000612d8a601a8361340a565b9150612d958261399e565b602082019050919050565b6000612dad601b8361340a565b9150612db8826139c7565b602082019050919050565b6000612dd0602a8361340a565b9150612ddb826139f0565b604082019050919050565b6000612df360288361340a565b9150612dfe82613a3f565b604082019050919050565b6000612e16601e8361340a565b9150612e2182613a8e565b602082019050919050565b6000612e3960218361340a565b9150612e4482613ab7565b604082019050919050565b6000612e5c601f8361340a565b9150612e6782613b06565b602082019050919050565b6000612e7f60208361340a565b9150612e8a82613b2f565b602082019050919050565b6000612ea260268361340a565b9150612ead82613b58565b604082019050919050565b6000612ec560238361340a565b9150612ed082613ba7565b604082019050919050565b6000612ee860258361340a565b9150612ef382613bf6565b604082019050919050565b6000612f0b60218361340a565b9150612f1682613c45565b604082019050919050565b6000612f2e60228361340a565b9150612f3982613c94565b604082019050919050565b6000612f5160228361340a565b9150612f5c82613ce3565b604082019050919050565b6000612f74601f8361340a565b9150612f7f82613d32565b602082019050919050565b6000612f9760228361340a565b9150612fa282613d5b565b604082019050919050565b612fb6816136df565b82525050565b612fc5816136e9565b82525050565b6000602082019050612fe06000830184612c41565b92915050565b600060c082019050612ffb6000830189612c41565b6130086020830188612fad565b6130156040830187612ccc565b6130226060830186612ccc565b61302f6080830185612c41565b61303c60a0830184612fad565b979650505050505050565b600060208201905061305c6000830184612cae565b92915050565b60006020820190506130776000830184612cbd565b92915050565b600060208201905081810360008301526130978184612cdb565b905092915050565b600060208201905081810360008301526130b881612d14565b9050919050565b600060208201905081810360008301526130d881612d37565b9050919050565b600060208201905081810360008301526130f881612d5a565b9050919050565b6000602082019050818103600083015261311881612d7d565b9050919050565b6000602082019050818103600083015261313881612da0565b9050919050565b6000602082019050818103600083015261315881612dc3565b9050919050565b6000602082019050818103600083015261317881612de6565b9050919050565b6000602082019050818103600083015261319881612e09565b9050919050565b600060208201905081810360008301526131b881612e2c565b9050919050565b600060208201905081810360008301526131d881612e4f565b9050919050565b600060208201905081810360008301526131f881612e72565b9050919050565b6000602082019050818103600083015261321881612e95565b9050919050565b6000602082019050818103600083015261323881612eb8565b9050919050565b6000602082019050818103600083015261325881612edb565b9050919050565b6000602082019050818103600083015261327881612efe565b9050919050565b6000602082019050818103600083015261329881612f21565b9050919050565b600060208201905081810360008301526132b881612f44565b9050919050565b600060208201905081810360008301526132d881612f67565b9050919050565b600060208201905081810360008301526132f881612f8a565b9050919050565b60006020820190506133146000830184612fad565b92915050565b600060a08201905061332f6000830188612fad565b61333c6020830187612ccc565b818103604083015261334e8186612c50565b905061335d6060830185612c41565b61336a6080830184612fad565b9695505050505050565b60006060820190506133896000830186612fad565b6133966020830185612fad565b6133a36040830184612fad565b949350505050565b60006020820190506133c06000830184612fbc565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613426826136df565b9150613431836136df565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613466576134656137a3565b5b828201905092915050565b600061347c826136df565b9150613487836136df565b925082613497576134966137d2565b5b828204905092915050565b6000808291508390505b60018511156134ec578086048111156134c8576134c76137a3565b5b60018516156134d75780820291505b80810290506134e5856138a4565b94506134ac565b94509492505050565b6000613500826136df565b915061350b836136e9565b92506135387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613540565b905092915050565b600082613550576001905061360c565b8161355e576000905061360c565b8160018114613574576002811461357e576135ad565b600191505061360c565b60ff8411156135905761358f6137a3565b5b8360020a9150848211156135a7576135a66137a3565b5b5061360c565b5060208310610133831016604e8410600b84101617156135e25782820a9050838111156135dd576135dc6137a3565b5b61360c565b6135ef84848460016134a2565b92509050818404811115613606576136056137a3565b5b81810290505b9392505050565b600061361e826136df565b9150613629836136df565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613662576136616137a3565b5b828202905092915050565b6000613678826136df565b9150613683836136df565b925082821015613696576136956137a3565b5b828203905092915050565b60006136ac826136bf565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006137018261371a565b9050919050565b6000613713826136df565b9050919050565b60006137258261372c565b9050919050565b6000613737826136bf565b9050919050565b60005b8381101561375c578082015181840152602081019050613741565b8381111561376b576000848401525b50505050565b6000600282049050600182168061378957607f821691505b6020821081141561379d5761379c613801565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e206c696d6974204578636565646564000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f50657263656e746167652073686f756c642062652067726561746572206f722060008201527f657175616c20746f203100000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e2774206578636c756465207a65726f20616464726573730000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f42455032303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e2774206d696e74206d6f7265207468616e204d61785375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e27742073657420666565206d6f7265207468616e2032352500600082015250565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b613db3816136a1565b8114613dbe57600080fd5b50565b613dca816136b3565b8114613dd557600080fd5b50565b613de1816136df565b8114613dec57600080fd5b5056fea2646970667358221220e6200608cd98599cb9a36ee810fd0af85ff4a430a9c169e411f40dd6b4c35a3964736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80636bc87c3a1161010f578063a457c2d7116100a2578063c373688211610071578063c373688214610588578063c676af83146105a4578063dd62ed3e146105c0578063f2fde38b146105f0576101e5565b8063a457c2d7146104ec578063a9059cbb1461051c578063b36c12841461054c578063c0b0fda21461056a576101e5565b80638da5cb5b116100de5780638da5cb5b1461047657806395d89b41146104945780639b1f9e74146104b25780639eb942e5146104ce576101e5565b80636bc87c3a1461040057806370a082311461041e578063715018a61461044e5780637d1db4a514610458576101e5565b8063313ce567116101875780634a74bb02116101565780634a74bb02146103785780634e6ec247146103965780635342acb4146103b257806359927044146103e2576101e5565b8063313ce567146102dc57806339509351146102fa5780633979e9ca1461032a57806349bd5a5e1461035a576101e5565b806318160ddd116101c357806318160ddd14610256578063224290851461027457806323b872dd1461029057806328141d5b146102c0576101e5565b806306fdde03146101ea578063095ea7b3146102085780631694505e14610238575b600080fd5b6101f261060c565b6040516101ff919061307d565b60405180910390f35b610222600480360381019061021d9190612b07565b61069e565b60405161022f9190613047565b60405180910390f35b6102406106bc565b60405161024d9190613062565b60405180910390f35b61025e6106e2565b60405161026b91906132ff565b60405180910390f35b61028e60048036038101906102899190612b74565b6106ec565b005b6102aa60048036038101906102a59190612a74565b61085f565b6040516102b79190613047565b60405180910390f35b6102da60048036038101906102d59190612b47565b610960565b005b6102e4610aa3565b6040516102f191906133ab565b60405180910390f35b610314600480360381019061030f9190612b07565b610aba565b6040516103219190613047565b60405180910390f35b610344600480360381019061033f91906129da565b610b66565b6040516103519190613047565b60405180910390f35b610362610bbc565b60405161036f9190612fcb565b60405180910390f35b610380610be2565b60405161038d9190613047565b60405180910390f35b6103b060048036038101906103ab9190612b07565b610bf5565b005b6103cc60048036038101906103c791906129da565b610e64565b6040516103d99190613047565b60405180910390f35b6103ea610eba565b6040516103f79190612fcb565b60405180910390f35b610408610ee0565b60405161041591906132ff565b60405180910390f35b610438600480360381019061043391906129da565b610ee6565b60405161044591906132ff565b60405180910390f35b610456610f2f565b005b610460611082565b60405161046d91906132ff565b60405180910390f35b61047e611088565b60405161048b9190612fcb565b60405180910390f35b61049c6110b1565b6040516104a9919061307d565b60405180910390f35b6104cc60048036038101906104c79190612b47565b611143565b005b6104d661134a565b6040516104e391906132ff565b60405180910390f35b61050660048036038101906105019190612b07565b611350565b6040516105139190613047565b60405180910390f35b61053660048036038101906105319190612b07565b611444565b6040516105439190613047565b60405180910390f35b610554611462565b60405161056191906132ff565b60405180910390f35b610572611468565b60405161057f91906132ff565b60405180910390f35b6105a2600480360381019061059d9190612ac7565b61146e565b005b6105be60048036038101906105b99190612ac7565b6115ce565b005b6105da60048036038101906105d59190612a34565b61172e565b6040516105e791906132ff565b60405180910390f35b61060a600480360381019061060591906129da565b6117b5565b005b6060600a805461061b90613771565b80601f016020809104026020016040519081016040528092919081815260200182805461064790613771565b80156106945780601f1061066957610100808354040283529160200191610694565b820191906000526020600020905b81548152906001019060200180831161067757829003601f168201915b5050505050905090565b60006106b26106ab6119d5565b84846119dd565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b6106f46119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610781576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610778906131df565b60405180910390fd5b6109c46107a98261079b858761197790919063ffffffff16565b61197790919063ffffffff16565b11156107ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e1906132bf565b60405180910390fd5b82600d8190555081600f8190555080600e819055507faa4b71ac29531fdea0ef1650c76ef91e3771dac25f4a4dd2a561ff3e0b9a5de261084582610837858761197790919063ffffffff16565b61197790919063ffffffff16565b60405161085291906132ff565b60405180910390a1505050565b600061086c848484611ba8565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108b76119d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e9061315f565b60405180910390fd5b610954856109436119d5565b858461094f919061366d565b6119dd565b60019150509392505050565b6109686119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ec906131df565b60405180910390fd5b6001811015610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a309061313f565b60405180910390fd5b610a616064610a538360095461237a90919063ffffffff16565b6123f590919063ffffffff16565b6012819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf601254604051610a9891906132ff565b60405180910390a150565b6000600c60009054906101000a900460ff16905090565b6000610b5c610ac76119d5565b848460046000610ad56119d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b57919061341b565b6119dd565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160159054906101000a900460ff1681565b610bfd6119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c81906131df565b60405180910390fd5b6000600c60009054906101000a900460ff16600a610ca891906134f5565b82610cb39190613613565b9050600854610ccd8260095461197790919063ffffffff16565b1115610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d059061327f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d75906131bf565b60405180910390fd5b610d8a6000848361243f565b8060096000828254610d9c919061341b565b9250508190555080600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610df2919061341b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e5791906132ff565b60405180910390a3505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f376119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb906131df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600b80546110c090613771565b80601f01602080910402602001604051908101604052809291908181526020018280546110ec90613771565b80156111395780601f1061110e57610100808354040283529160200191611139565b820191906000526020600020905b81548152906001019060200180831161111c57829003601f168201915b5050505050905090565b6000600c60009054906101000a900460ff16600a61116191906134f5565b8261116c9190613613565b90506000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da9061325f565b60405180910390fd5b6111ef8160008461243f565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d9061329f565b60405180910390fd5b8281611282919061366d565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600960008282546112d7919061366d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161133c91906132ff565b60405180910390a350505050565b600e5481565b6000806004600061135f6119d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561141c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114139061323f565b60405180910390fd5b6114396114276119d5565b858584611434919061366d565b6119dd565b600191505092915050565b60006114586114516119d5565b8484611ba8565b6001905092915050565b60085481565b600f5481565b6114766119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa906131df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a9061317f565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115d66119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a906131df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca9061317f565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117bd6119d5565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461184a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611841906131df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906130df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611986919061341b565b9050838110156119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c29061311f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a44906130bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab4906132df565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b9b91906132ff565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f9061309f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f9061321f565b60405180910390fd5b6000806000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d2e5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611eb657600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611dd45750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611dea57600092506000915060009050611eb1565b601254841115611e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e26906130ff565b60405180910390fd5b611e58612710611e4a600e548761237a90919063ffffffff16565b6123f590919063ffffffff16565b9250611e83612710611e75600d548761237a90919063ffffffff16565b6123f590919063ffffffff16565b9150611eae612710611ea0600f548761237a90919063ffffffff16565b6123f590919063ffffffff16565b90505b611ec3565b6000925060009150600090505b6000611ece30610ee6565b905060006969e10de76676d08000008210159050808015611efc5750601160149054906101000a900460ff16155b8015611f565750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b8015611f6e5750601160159054906101000a900460ff165b15611f8a576969e10de76676d08000009150611f8982612444565b5b6000600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905086811015612011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612008906131ff565b60405180910390fd5b868161201d919061366d565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560036000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120d1919061341b565b9250508190555084600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612127919061341b565b9250508190555060008411156121b7578360096000828254612149919061366d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516121ae91906132ff565b60405180910390a35b6121ee846121e0876121d28a8c61251a90919063ffffffff16565b61251a90919063ffffffff16565b61251a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223c919061341b565b9250508190555060008611156122d457600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516122cb91906132ff565b60405180910390a35b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61235a8761234c8a61233e8d8f61251a90919063ffffffff16565b61251a90919063ffffffff16565b61251a90919063ffffffff16565b60405161236791906132ff565b60405180910390a3505050505050505050565b60008083141561238d57600090506123ef565b6000828461239b9190613613565b90508284826123aa9190613471565b146123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e19061319f565b60405180910390fd5b809150505b92915050565b600061243783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612564565b905092915050565b505050565b6001601160146101000a81548160ff02191690831515021790555060006124756002836123f590919063ffffffff16565b9050600061248c828461251a90919063ffffffff16565b9050600047905061249c836125c7565b60006124b1824761251a90919063ffffffff16565b90506124bd8382612819565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516124f093929190613374565b60405180910390a1505050506000601160146101000a81548160ff02191690831515021790555050565b600061255c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061290d565b905092915050565b600080831182906125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a2919061307d565b60405180910390fd5b50600083856125ba9190613471565b9050809150509392505050565b6000600267ffffffffffffffff8111156125e4576125e361385f565b5b6040519080825280602002602001820160405280156126125781602001602082028036833780820191505090505b509050308160008151811061262a57612629613830565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126cc57600080fd5b505afa1580156126e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127049190612a07565b8160018151811061271857612717613830565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061277f30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119dd565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127e395949392919061331a565b600060405180830381600087803b1580156127fd57600080fd5b505af1158015612811573d6000803e3d6000fd5b505050505050565b61284630601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119dd565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612892611088565b426040518863ffffffff1660e01b81526004016128b496959493929190612fe6565b6060604051808303818588803b1580156128cd57600080fd5b505af11580156128e1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129069190612bc7565b5050505050565b6000838311158290612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c919061307d565b60405180910390fd5b5060008385612964919061366d565b9050809150509392505050565b60008135905061298081613daa565b92915050565b60008151905061299581613daa565b92915050565b6000813590506129aa81613dc1565b92915050565b6000813590506129bf81613dd8565b92915050565b6000815190506129d481613dd8565b92915050565b6000602082840312156129f0576129ef61388e565b5b60006129fe84828501612971565b91505092915050565b600060208284031215612a1d57612a1c61388e565b5b6000612a2b84828501612986565b91505092915050565b60008060408385031215612a4b57612a4a61388e565b5b6000612a5985828601612971565b9250506020612a6a85828601612971565b9150509250929050565b600080600060608486031215612a8d57612a8c61388e565b5b6000612a9b86828701612971565b9350506020612aac86828701612971565b9250506040612abd868287016129b0565b9150509250925092565b60008060408385031215612ade57612add61388e565b5b6000612aec85828601612971565b9250506020612afd8582860161299b565b9150509250929050565b60008060408385031215612b1e57612b1d61388e565b5b6000612b2c85828601612971565b9250506020612b3d858286016129b0565b9150509250929050565b600060208284031215612b5d57612b5c61388e565b5b6000612b6b848285016129b0565b91505092915050565b600080600060608486031215612b8d57612b8c61388e565b5b6000612b9b868287016129b0565b9350506020612bac868287016129b0565b9250506040612bbd868287016129b0565b9150509250925092565b600080600060608486031215612be057612bdf61388e565b5b6000612bee868287016129c5565b9350506020612bff868287016129c5565b9250506040612c10868287016129c5565b9150509250925092565b6000612c268383612c32565b60208301905092915050565b612c3b816136a1565b82525050565b612c4a816136a1565b82525050565b6000612c5b826133d6565b612c6581856133f9565b9350612c70836133c6565b8060005b83811015612ca1578151612c888882612c1a565b9750612c93836133ec565b925050600181019050612c74565b5085935050505092915050565b612cb7816136b3565b82525050565b612cc6816136f6565b82525050565b612cd581613708565b82525050565b6000612ce6826133e1565b612cf0818561340a565b9350612d0081856020860161373e565b612d0981613893565b840191505092915050565b6000612d2160258361340a565b9150612d2c826138b1565b604082019050919050565b6000612d4460248361340a565b9150612d4f82613900565b604082019050919050565b6000612d6760268361340a565b9150612d728261394f565b604082019050919050565b6000612d8a601a8361340a565b9150612d958261399e565b602082019050919050565b6000612dad601b8361340a565b9150612db8826139c7565b602082019050919050565b6000612dd0602a8361340a565b9150612ddb826139f0565b604082019050919050565b6000612df360288361340a565b9150612dfe82613a3f565b604082019050919050565b6000612e16601e8361340a565b9150612e2182613a8e565b602082019050919050565b6000612e3960218361340a565b9150612e4482613ab7565b604082019050919050565b6000612e5c601f8361340a565b9150612e6782613b06565b602082019050919050565b6000612e7f60208361340a565b9150612e8a82613b2f565b602082019050919050565b6000612ea260268361340a565b9150612ead82613b58565b604082019050919050565b6000612ec560238361340a565b9150612ed082613ba7565b604082019050919050565b6000612ee860258361340a565b9150612ef382613bf6565b604082019050919050565b6000612f0b60218361340a565b9150612f1682613c45565b604082019050919050565b6000612f2e60228361340a565b9150612f3982613c94565b604082019050919050565b6000612f5160228361340a565b9150612f5c82613ce3565b604082019050919050565b6000612f74601f8361340a565b9150612f7f82613d32565b602082019050919050565b6000612f9760228361340a565b9150612fa282613d5b565b604082019050919050565b612fb6816136df565b82525050565b612fc5816136e9565b82525050565b6000602082019050612fe06000830184612c41565b92915050565b600060c082019050612ffb6000830189612c41565b6130086020830188612fad565b6130156040830187612ccc565b6130226060830186612ccc565b61302f6080830185612c41565b61303c60a0830184612fad565b979650505050505050565b600060208201905061305c6000830184612cae565b92915050565b60006020820190506130776000830184612cbd565b92915050565b600060208201905081810360008301526130978184612cdb565b905092915050565b600060208201905081810360008301526130b881612d14565b9050919050565b600060208201905081810360008301526130d881612d37565b9050919050565b600060208201905081810360008301526130f881612d5a565b9050919050565b6000602082019050818103600083015261311881612d7d565b9050919050565b6000602082019050818103600083015261313881612da0565b9050919050565b6000602082019050818103600083015261315881612dc3565b9050919050565b6000602082019050818103600083015261317881612de6565b9050919050565b6000602082019050818103600083015261319881612e09565b9050919050565b600060208201905081810360008301526131b881612e2c565b9050919050565b600060208201905081810360008301526131d881612e4f565b9050919050565b600060208201905081810360008301526131f881612e72565b9050919050565b6000602082019050818103600083015261321881612e95565b9050919050565b6000602082019050818103600083015261323881612eb8565b9050919050565b6000602082019050818103600083015261325881612edb565b9050919050565b6000602082019050818103600083015261327881612efe565b9050919050565b6000602082019050818103600083015261329881612f21565b9050919050565b600060208201905081810360008301526132b881612f44565b9050919050565b600060208201905081810360008301526132d881612f67565b9050919050565b600060208201905081810360008301526132f881612f8a565b9050919050565b60006020820190506133146000830184612fad565b92915050565b600060a08201905061332f6000830188612fad565b61333c6020830187612ccc565b818103604083015261334e8186612c50565b905061335d6060830185612c41565b61336a6080830184612fad565b9695505050505050565b60006060820190506133896000830186612fad565b6133966020830185612fad565b6133a36040830184612fad565b949350505050565b60006020820190506133c06000830184612fbc565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613426826136df565b9150613431836136df565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613466576134656137a3565b5b828201905092915050565b600061347c826136df565b9150613487836136df565b925082613497576134966137d2565b5b828204905092915050565b6000808291508390505b60018511156134ec578086048111156134c8576134c76137a3565b5b60018516156134d75780820291505b80810290506134e5856138a4565b94506134ac565b94509492505050565b6000613500826136df565b915061350b836136e9565b92506135387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613540565b905092915050565b600082613550576001905061360c565b8161355e576000905061360c565b8160018114613574576002811461357e576135ad565b600191505061360c565b60ff8411156135905761358f6137a3565b5b8360020a9150848211156135a7576135a66137a3565b5b5061360c565b5060208310610133831016604e8410600b84101617156135e25782820a9050838111156135dd576135dc6137a3565b5b61360c565b6135ef84848460016134a2565b92509050818404811115613606576136056137a3565b5b81810290505b9392505050565b600061361e826136df565b9150613629836136df565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613662576136616137a3565b5b828202905092915050565b6000613678826136df565b9150613683836136df565b925082821015613696576136956137a3565b5b828203905092915050565b60006136ac826136bf565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006137018261371a565b9050919050565b6000613713826136df565b9050919050565b60006137258261372c565b9050919050565b6000613737826136bf565b9050919050565b60005b8381101561375c578082015181840152602081019050613741565b8381111561376b576000848401525b50505050565b6000600282049050600182168061378957607f821691505b6020821081141561379d5761379c613801565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e206c696d6974204578636565646564000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f50657263656e746167652073686f756c642062652067726561746572206f722060008201527f657175616c20746f203100000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e2774206578636c756465207a65726f20616464726573730000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f42455032303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e2774206d696e74206d6f7265207468616e204d61785375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e27742073657420666565206d6f7265207468616e2032352500600082015250565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b613db3816136a1565b8114613dbe57600080fd5b50565b613dca816136b3565b8114613dd557600080fd5b50565b613de1816136df565b8114613dec57600080fd5b5056fea2646970667358221220e6200608cd98599cb9a36ee810fd0af85ff4a430a9c169e411f40dd6b4c35a3964736f6c63430008070033
Deployed Bytecode Sourcemap
21291:17555:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23863:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26178:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22187:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24990:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31907:443;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26870:493;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33159:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24825:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27772:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32735:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22235:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22309:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33767:528;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32601:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21638:70;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21871:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25161:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11471:148;;;:::i;:::-;;22438:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10829:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24082:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34628:566;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21911:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28572:446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25551:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21717:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21946:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32358:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32911:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25830:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11774:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23863:100;23917:13;23950:5;23943:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23863:100;:::o;26178:210::-;26297:4;26319:39;26328:12;:10;:12::i;:::-;26342:7;26351:6;26319:8;:39::i;:::-;26376:4;26369:11;;26178:210;;;;:::o;22187:41::-;;;;;;;;;;;;;:::o;24990:108::-;25051:7;25078:12;;25071:19;;24990:108;:::o;31907:443::-;11051:12;:10;:12::i;:::-;11041:22;;:6;;;;;;;;;;:22;;;11033:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32111:4:::1;32069:38;32099:7;32069:25;32086:7;32069:12;:16;;:25;;;;:::i;:::-;:29;;:38;;;;:::i;:::-;:46;;32047:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;32201:12;32185:13;:28;;;;32235:7;32224:8;:18;;;;32264:7;32253:8;:18;;;;32289:53;32303:38;32333:7;32303:25;32320:7;32303:12;:16;;:25;;;;:::i;:::-;:29;;:38;;;;:::i;:::-;32289:53;;;;;;:::i;:::-;;;;;;;;31907:443:::0;;;:::o;26870:493::-;27010:4;27027:36;27037:6;27045:9;27056:6;27027:9;:36::i;:::-;27076:24;27103:11;:19;27115:6;27103:19;;;;;;;;;;;;;;;:33;27123:12;:10;:12::i;:::-;27103:33;;;;;;;;;;;;;;;;27076:60;;27189:6;27169:16;:26;;27147:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;27274:57;27283:6;27291:12;:10;:12::i;:::-;27324:6;27305:16;:25;;;;:::i;:::-;27274:8;:57::i;:::-;27351:4;27344:11;;;26870:493;;;;;:::o;33159:321::-;11051:12;:10;:12::i;:::-;11041:22;;:6;;;;;;;;;;:22;;;11033:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33283:1:::1;33264:15;:20;;33242:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;33380:44;33418:5;33380:33;33397:15;33380:12;;:16;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;33365:12;:59;;;;33440:32;33459:12;;33440:32;;;;;;:::i;:::-;;;;;;;;33159:321:::0;:::o;24825:100::-;24883:5;24908:9;;;;;;;;;;;24901:16;;24825:100;:::o;27772:297::-;27887:4;27909:130;27932:12;:10;:12::i;:::-;27959:7;28018:10;27981:11;:25;27993:12;:10;:12::i;:::-;27981:25;;;;;;;;;;;;;;;:34;28007:7;27981:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;27909:8;:130::i;:::-;28057:4;28050:11;;27772:297;;;;:::o;32735:168::-;32834:4;32863:23;:32;32887:7;32863:32;;;;;;;;;;;;;;;;;;;;;;;;;32856:39;;32735:168;;;:::o;22235:28::-;;;;;;;;;;;;;:::o;22309:41::-;;;;;;;;;;;;;:::o;33767:528::-;11051:12;:10;:12::i;:::-;11041:22;;:6;;;;;;;;;;:22;;;11033:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33851:14:::1;33881:9;;;;;;;;;;;33877:2;:13;;;;:::i;:::-;33868:6;:22;;;;:::i;:::-;33851:39;;33951:9;;33923:24;33940:6;33923:12;;:16;;:24;;;;:::i;:::-;:37;;33901:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;34060:1;34041:21;;:7;:21;;;;34033:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34111:49;34140:1;34144:7;34153:6;34111:20;:49::i;:::-;34189:6;34173:12;;:22;;;;;;;:::i;:::-;;;;;;;;34228:6;34206:9;:18;34216:7;34206:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;34271:7;34250:37;;34267:1;34250:37;;;34280:6;34250:37;;;;;;:::i;:::-;;;;;;;;33840:455;33767:528:::0;;:::o;32601:126::-;32668:4;32692:18;:27;32711:7;32692:27;;;;;;;;;;;;;;;;;;;;;;;;;32685:34;;32601:126;;;:::o;21638:70::-;;;;;;;;;;;;;:::o;21871:33::-;;;;:::o;25161:177::-;25280:7;25312:9;:18;25322:7;25312:18;;;;;;;;;;;;;;;;25305:25;;25161:177;;;:::o;11471:148::-;11051:12;:10;:12::i;:::-;11041:22;;:6;;;;;;;;;;:22;;;11033:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11578:1:::1;11541:40;;11562:6;::::0;::::1;;;;;;;;11541:40;;;;;;;;;;;;11609:1;11592:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;11471:148::o:0;22438:49::-;;;;:::o;10829:79::-;10867:7;10894:6;;;;;;;;;;;10887:13;;10829:79;:::o;24082:104::-;24138:13;24171:7;24164:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24082:104;:::o;34628:566::-;34687:14;34717:9;;;;;;;;;;;34713:2;:13;;;;:::i;:::-;34704:6;:22;;;;:::i;:::-;34687:39;;34737:15;34755:10;34737:28;;34803:1;34784:21;;:7;:21;;;;34776:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34856:49;34877:7;34894:1;34898:6;34856:20;:49::i;:::-;34918:22;34943:9;:18;34953:7;34943:18;;;;;;;;;;;;;;;;34918:43;;34998:6;34980:14;:24;;34972:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35092:6;35075:14;:23;;;;:::i;:::-;35054:9;:18;35064:7;35054:18;;;;;;;;;;;;;;;:44;;;;35125:6;35109:12;;:22;;;;;;;:::i;:::-;;;;;;;;35175:1;35149:37;;35158:7;35149:37;;;35179:6;35149:37;;;;;;:::i;:::-;;;;;;;;34676:518;;;34628:566;:::o;21911:28::-;;;;:::o;28572:446::-;28692:4;28714:24;28741:11;:25;28753:12;:10;:12::i;:::-;28741:25;;;;;;;;;;;;;;;:34;28767:7;28741:34;;;;;;;;;;;;;;;;28714:61;;28828:15;28808:16;:35;;28786:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;28919:67;28928:12;:10;:12::i;:::-;28942:7;28970:15;28951:16;:34;;;;:::i;:::-;28919:8;:67::i;:::-;29006:4;28999:11;;;28572:446;;;;:::o;25551:216::-;25673:4;25695:42;25705:12;:10;:12::i;:::-;25719:9;25730:6;25695:9;:42::i;:::-;25755:4;25748:11;;25551:216;;;;:::o;21717:24::-;;;;:::o;21946:28::-;;;;:::o;32358:235::-;11051:12;:10;:12::i;:::-;11041:22;;:6;;;;;;;;;;:22;;;11033:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32501:1:::1;32482:21;;:7;:21;;;;32474:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32579:6;32549:18;:27;32568:7;32549:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32358:235:::0;;:::o;32911:240::-;11051:12;:10;:12::i;:::-;11041:22;;:6;;;;;;;;;;:22;;;11033:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33054:1:::1;33035:21;;:7;:21;;;;33027:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33137:6;33102:23;:32;33126:7;33102:32;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;32911:240:::0;;:::o;25830:201::-;25964:7;25996:11;:18;26008:5;25996:18;;;;;;;;;;;;;;;:27;26015:7;25996:27;;;;;;;;;;;;;;;;25989:34;;25830:201;;;;:::o;11774:281::-;11051:12;:10;:12::i;:::-;11041:22;;:6;;;;;;;;;;:22;;;11033:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11897:1:::1;11877:22;;:8;:22;;;;11855:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;12010:8;11981:38;;12002:6;::::0;::::1;;;;;;;;11981:38;;;;;;;;;;;;12039:8;12030:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;11774:281:::0;:::o;5175:181::-;5233:7;5253:9;5269:1;5265;:5;;;;:::i;:::-;5253:17;;5294:1;5289;:6;;5281:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5347:1;5340:8;;;5175:181;;;;:::o;3985:98::-;4038:7;4065:10;4058:17;;3985:98;:::o;35632:380::-;35785:1;35768:19;;:5;:19;;;;35760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35866:1;35847:21;;:7;:21;;;;35839:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35950:6;35920:11;:18;35932:5;35920:18;;;;;;;;;;;;;;;:27;35939:7;35920:27;;;;;;;;;;;;;;;:36;;;;35988:7;35972:32;;35981:5;35972:32;;;35997:6;35972:32;;;;;;:::i;:::-;;;;;;;;35632:380;;;:::o;29508:2391::-;29666:1;29648:20;;:6;:20;;;;29640:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29750:1;29729:23;;:9;:23;;;;29721:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29805:16;29832:21;29864:16;29895:23;:31;29919:6;29895:31;;;;;;;;;;;;;;;;;;;;;;;;;:69;;;;29930:23;:34;29954:9;29930:34;;;;;;;;;;;;;;;;;;;;;;;;;29895:69;29891:679;;;29985:18;:26;30004:6;29985:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;30015:18;:29;30034:9;30015:29;;;;;;;;;;;;;;;;;;;;;;;;;29985:59;29981:474;;;30076:1;30065:12;;30112:1;30096:17;;30143:1;30132:12;;29981:474;;;30203:12;;30193:6;:22;;30185:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30276:31;30301:5;30276:20;30287:8;;30276:6;:10;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;30265:42;;30342:36;30372:5;30342:25;30353:13;;30342:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;30326:52;;30408:31;30433:5;30408:20;30419:8;;30408:6;:10;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;30397:42;;29981:474;29891:679;;;30498:1;30487:12;;30530:1;30514:17;;30557:1;30546:12;;29891:679;30582:28;30613:24;30631:4;30613:9;:24::i;:::-;30582:55;;30648:24;22416:15;30675:20;:66;;30648:93;;30770:19;:53;;;;;30807:16;;;;;;;;;;;30806:17;30770:53;:93;;;;;30850:13;;;;;;;;;;;30840:23;;:6;:23;;;;30770:93;:131;;;;;30880:21;;;;;;;;;;;30770:131;30752:320;;;22416:15;30928:52;;31024:36;31039:20;31024:14;:36::i;:::-;30752:320;31084:21;31108:9;:17;31118:6;31108:17;;;;;;;;;;;;;;;;31084:41;;31175:6;31158:13;:23;;31136:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31294:6;31278:13;:22;;;;:::i;:::-;31258:9;:17;31268:6;31258:17;;;;;;;;;;;;;;;:42;;;;31336:8;31311:9;:21;31321:10;;;;;;;;;;;31311:21;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;31383:13;31355:9;:24;31373:4;31355:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;31422:1;31411:8;:12;31407:127;;;31456:8;31440:12;;:24;;;;;;;:::i;:::-;;;;;;;;31509:1;31484:38;;31493:6;31484:38;;;31513:8;31484:38;;;;;;:::i;:::-;;;;;;;;31407:127;31568:77;31626:8;31568:39;31593:13;31568:20;31579:8;31568:6;:10;;:20;;;;:::i;:::-;:24;;:39;;;;:::i;:::-;:43;;:77;;;;:::i;:::-;31544:9;:20;31554:9;31544:20;;;;;;;;;;;;;;;;:101;;;;;;;:::i;:::-;;;;;;;;31671:1;31660:8;:12;31656:88;;;31711:10;;;;;;;;;;;31694:38;;31703:6;31694:38;;;31723:8;31694:38;;;;;;:::i;:::-;;;;;;;;31656:88;31803:9;31759:132;;31782:6;31759:132;;;31827:53;31871:8;31827:39;31852:13;31827:20;31838:8;31827:6;:10;;:20;;;;:::i;:::-;:24;;:39;;;;:::i;:::-;:43;;:53;;;;:::i;:::-;31759:132;;;;;;:::i;:::-;;;;;;;;29629:2270;;;;;;29508:2391;;;:::o;6563:471::-;6621:7;6871:1;6866;:6;6862:47;;;6896:1;6889:8;;;;6862:47;6921:9;6937:1;6933;:5;;;;:::i;:::-;6921:17;;6966:1;6961;6957;:5;;;;:::i;:::-;:10;6949:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7025:1;7018:8;;;6563:471;;;;;:::o;7510:132::-;7568:7;7595:39;7599:1;7602;7595:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7588:46;;7510:132;;;;:::o;36615:125::-;;;;:::o;36748:977::-;22909:4;22890:16;;:23;;;;;;;;;;;;;;;;;;36884:12:::1;36899:27;36924:1;36899:20;:24;;:27;;;;:::i;:::-;36884:42;;36937:17;36957:30;36982:4;36957:20;:24;;:30;;;;:::i;:::-;36937:50;;37265:22;37290:21;37265:46;;37356:22;37373:4;37356:16;:22::i;:::-;37509:18;37530:41;37556:14;37530:21;:25;;:41;;;;:::i;:::-;37509:62;;37621:35;37634:9;37645:10;37621:12;:35::i;:::-;37674:43;37689:4;37695:10;37707:9;37674:43;;;;;;;;:::i;:::-;;;;;;;;36822:903;;;;22955:5:::0;22936:16;;:24;;;;;;;;;;;;;;;;;;36748:977;:::o;5639:136::-;5697:7;5724:43;5728:1;5731;5724:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5717:50;;5639:136;;;;:::o;8138:312::-;8258:7;8290:1;8286;:5;8293:12;8278:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8317:9;8333:1;8329;:5;;;;:::i;:::-;8317:17;;8441:1;8434:8;;;8138:312;;;;;:::o;37733:589::-;37859:21;37897:1;37883:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37859:40;;37928:4;37910;37915:1;37910:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37954:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37944:4;37949:1;37944:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37989:62;38006:4;38021:15;;;;;;;;;;;38039:11;37989:8;:62::i;:::-;38090:15;;;;;;;;;;;:66;;;38171:11;38197:1;38241:4;38268;38288:15;38090:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37788:534;37733:589;:::o;38330:513::-;38478:62;38495:4;38510:15;;;;;;;;;;;38528:11;38478:8;:62::i;:::-;38583:15;;;;;;;;;;;:31;;;38622:9;38655:4;38675:11;38701:1;38744;38787:7;:5;:7::i;:::-;38809:15;38583:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38330:513;;:::o;6078:226::-;6198:7;6231:1;6226;:6;;6234:12;6218:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6258:9;6274:1;6270;:5;;;;:::i;:::-;6258:17;;6295:1;6288:8;;;6078:226;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:119;;;848:79;;:::i;:::-;810:119;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;734:329;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1069:351;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1426:474;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:119;;;2054:79;;:::i;:::-;2016:119;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;1906:619;;;;;:::o;2531:468::-;2596:6;2604;2653:2;2641:9;2632:7;2628:23;2624:32;2621:119;;;2659:79;;:::i;:::-;2621:119;2779:1;2804:53;2849:7;2840:6;2829:9;2825:22;2804:53;:::i;:::-;2794:63;;2750:117;2906:2;2932:50;2974:7;2965:6;2954:9;2950:22;2932:50;:::i;:::-;2922:60;;2877:115;2531:468;;;;;:::o;3005:474::-;3073:6;3081;3130:2;3118:9;3109:7;3105:23;3101:32;3098:119;;;3136:79;;:::i;:::-;3098:119;3256:1;3281:53;3326:7;3317:6;3306:9;3302:22;3281:53;:::i;:::-;3271:63;;3227:117;3383:2;3409:53;3454:7;3445:6;3434:9;3430:22;3409:53;:::i;:::-;3399:63;;3354:118;3005:474;;;;;:::o;3485:329::-;3544:6;3593:2;3581:9;3572:7;3568:23;3564:32;3561:119;;;3599:79;;:::i;:::-;3561:119;3719:1;3744:53;3789:7;3780:6;3769:9;3765:22;3744:53;:::i;:::-;3734:63;;3690:117;3485:329;;;;:::o;3820:619::-;3897:6;3905;3913;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;4215:2;4241:53;4286:7;4277:6;4266:9;4262:22;4241:53;:::i;:::-;4231:63;;4186:118;4343:2;4369:53;4414:7;4405:6;4394:9;4390:22;4369:53;:::i;:::-;4359:63;;4314:118;3820:619;;;;;:::o;4445:663::-;4533:6;4541;4549;4598:2;4586:9;4577:7;4573:23;4569:32;4566:119;;;4604:79;;:::i;:::-;4566:119;4724:1;4749:64;4805:7;4796:6;4785:9;4781:22;4749:64;:::i;:::-;4739:74;;4695:128;4862:2;4888:64;4944:7;4935:6;4924:9;4920:22;4888:64;:::i;:::-;4878:74;;4833:129;5001:2;5027:64;5083:7;5074:6;5063:9;5059:22;5027:64;:::i;:::-;5017:74;;4972:129;4445:663;;;;;:::o;5114:179::-;5183:10;5204:46;5246:3;5238:6;5204:46;:::i;:::-;5282:4;5277:3;5273:14;5259:28;;5114:179;;;;:::o;5299:108::-;5376:24;5394:5;5376:24;:::i;:::-;5371:3;5364:37;5299:108;;:::o;5413:118::-;5500:24;5518:5;5500:24;:::i;:::-;5495:3;5488:37;5413:118;;:::o;5567:732::-;5686:3;5715:54;5763:5;5715:54;:::i;:::-;5785:86;5864:6;5859:3;5785:86;:::i;:::-;5778:93;;5895:56;5945:5;5895:56;:::i;:::-;5974:7;6005:1;5990:284;6015:6;6012:1;6009:13;5990:284;;;6091:6;6085:13;6118:63;6177:3;6162:13;6118:63;:::i;:::-;6111:70;;6204:60;6257:6;6204:60;:::i;:::-;6194:70;;6050:224;6037:1;6034;6030:9;6025:14;;5990:284;;;5994:14;6290:3;6283:10;;5691:608;;;5567:732;;;;:::o;6305:109::-;6386:21;6401:5;6386:21;:::i;:::-;6381:3;6374:34;6305:109;;:::o;6420:185::-;6534:64;6592:5;6534:64;:::i;:::-;6529:3;6522:77;6420:185;;:::o;6611:147::-;6706:45;6745:5;6706:45;:::i;:::-;6701:3;6694:58;6611:147;;:::o;6764:364::-;6852:3;6880:39;6913:5;6880:39;:::i;:::-;6935:71;6999:6;6994:3;6935:71;:::i;:::-;6928:78;;7015:52;7060:6;7055:3;7048:4;7041:5;7037:16;7015:52;:::i;:::-;7092:29;7114:6;7092:29;:::i;:::-;7087:3;7083:39;7076:46;;6856:272;6764:364;;;;:::o;7134:366::-;7276:3;7297:67;7361:2;7356:3;7297:67;:::i;:::-;7290:74;;7373:93;7462:3;7373:93;:::i;:::-;7491:2;7486:3;7482:12;7475:19;;7134:366;;;:::o;7506:::-;7648:3;7669:67;7733:2;7728:3;7669:67;:::i;:::-;7662:74;;7745:93;7834:3;7745:93;:::i;:::-;7863:2;7858:3;7854:12;7847:19;;7506:366;;;:::o;7878:::-;8020:3;8041:67;8105:2;8100:3;8041:67;:::i;:::-;8034:74;;8117:93;8206:3;8117:93;:::i;:::-;8235:2;8230:3;8226:12;8219:19;;7878:366;;;:::o;8250:::-;8392:3;8413:67;8477:2;8472:3;8413:67;:::i;:::-;8406:74;;8489:93;8578:3;8489:93;:::i;:::-;8607:2;8602:3;8598:12;8591:19;;8250:366;;;:::o;8622:::-;8764:3;8785:67;8849:2;8844:3;8785:67;:::i;:::-;8778:74;;8861:93;8950:3;8861:93;:::i;:::-;8979:2;8974:3;8970:12;8963:19;;8622:366;;;:::o;8994:::-;9136:3;9157:67;9221:2;9216:3;9157:67;:::i;:::-;9150:74;;9233:93;9322:3;9233:93;:::i;:::-;9351:2;9346:3;9342:12;9335:19;;8994:366;;;:::o;9366:::-;9508:3;9529:67;9593:2;9588:3;9529:67;:::i;:::-;9522:74;;9605:93;9694:3;9605:93;:::i;:::-;9723:2;9718:3;9714:12;9707:19;;9366:366;;;:::o;9738:::-;9880:3;9901:67;9965:2;9960:3;9901:67;:::i;:::-;9894:74;;9977:93;10066:3;9977:93;:::i;:::-;10095:2;10090:3;10086:12;10079:19;;9738:366;;;:::o;10110:::-;10252:3;10273:67;10337:2;10332:3;10273:67;:::i;:::-;10266:74;;10349:93;10438:3;10349:93;:::i;:::-;10467:2;10462:3;10458:12;10451:19;;10110:366;;;:::o;10482:::-;10624:3;10645:67;10709:2;10704:3;10645:67;:::i;:::-;10638:74;;10721:93;10810:3;10721:93;:::i;:::-;10839:2;10834:3;10830:12;10823:19;;10482:366;;;:::o;10854:::-;10996:3;11017:67;11081:2;11076:3;11017:67;:::i;:::-;11010:74;;11093:93;11182:3;11093:93;:::i;:::-;11211:2;11206:3;11202:12;11195:19;;10854:366;;;:::o;11226:::-;11368:3;11389:67;11453:2;11448:3;11389:67;:::i;:::-;11382:74;;11465:93;11554:3;11465:93;:::i;:::-;11583:2;11578:3;11574:12;11567:19;;11226:366;;;:::o;11598:::-;11740:3;11761:67;11825:2;11820:3;11761:67;:::i;:::-;11754:74;;11837:93;11926:3;11837:93;:::i;:::-;11955:2;11950:3;11946:12;11939:19;;11598:366;;;:::o;11970:::-;12112:3;12133:67;12197:2;12192:3;12133:67;:::i;:::-;12126:74;;12209:93;12298:3;12209:93;:::i;:::-;12327:2;12322:3;12318:12;12311:19;;11970:366;;;:::o;12342:::-;12484:3;12505:67;12569:2;12564:3;12505:67;:::i;:::-;12498:74;;12581:93;12670:3;12581:93;:::i;:::-;12699:2;12694:3;12690:12;12683:19;;12342:366;;;:::o;12714:::-;12856:3;12877:67;12941:2;12936:3;12877:67;:::i;:::-;12870:74;;12953:93;13042:3;12953:93;:::i;:::-;13071:2;13066:3;13062:12;13055:19;;12714:366;;;:::o;13086:::-;13228:3;13249:67;13313:2;13308:3;13249:67;:::i;:::-;13242:74;;13325:93;13414:3;13325:93;:::i;:::-;13443:2;13438:3;13434:12;13427:19;;13086:366;;;:::o;13458:::-;13600:3;13621:67;13685:2;13680:3;13621:67;:::i;:::-;13614:74;;13697:93;13786:3;13697:93;:::i;:::-;13815:2;13810:3;13806:12;13799:19;;13458:366;;;:::o;13830:::-;13972:3;13993:67;14057:2;14052:3;13993:67;:::i;:::-;13986:74;;14069:93;14158:3;14069:93;:::i;:::-;14187:2;14182:3;14178:12;14171:19;;13830:366;;;:::o;14202:118::-;14289:24;14307:5;14289:24;:::i;:::-;14284:3;14277:37;14202:118;;:::o;14326:112::-;14409:22;14425:5;14409:22;:::i;:::-;14404:3;14397:35;14326:112;;:::o;14444:222::-;14537:4;14575:2;14564:9;14560:18;14552:26;;14588:71;14656:1;14645:9;14641:17;14632:6;14588:71;:::i;:::-;14444:222;;;;:::o;14672:807::-;14921:4;14959:3;14948:9;14944:19;14936:27;;14973:71;15041:1;15030:9;15026:17;15017:6;14973:71;:::i;:::-;15054:72;15122:2;15111:9;15107:18;15098:6;15054:72;:::i;:::-;15136:80;15212:2;15201:9;15197:18;15188:6;15136:80;:::i;:::-;15226;15302:2;15291:9;15287:18;15278:6;15226:80;:::i;:::-;15316:73;15384:3;15373:9;15369:19;15360:6;15316:73;:::i;:::-;15399;15467:3;15456:9;15452:19;15443:6;15399:73;:::i;:::-;14672:807;;;;;;;;;:::o;15485:210::-;15572:4;15610:2;15599:9;15595:18;15587:26;;15623:65;15685:1;15674:9;15670:17;15661:6;15623:65;:::i;:::-;15485:210;;;;:::o;15701:276::-;15821:4;15859:2;15848:9;15844:18;15836:26;;15872:98;15967:1;15956:9;15952:17;15943:6;15872:98;:::i;:::-;15701:276;;;;:::o;15983:313::-;16096:4;16134:2;16123:9;16119:18;16111:26;;16183:9;16177:4;16173:20;16169:1;16158:9;16154:17;16147:47;16211:78;16284:4;16275:6;16211:78;:::i;:::-;16203:86;;15983:313;;;;:::o;16302:419::-;16468:4;16506:2;16495:9;16491:18;16483:26;;16555:9;16549:4;16545:20;16541:1;16530:9;16526:17;16519:47;16583:131;16709:4;16583:131;:::i;:::-;16575:139;;16302:419;;;:::o;16727:::-;16893:4;16931:2;16920:9;16916:18;16908:26;;16980:9;16974:4;16970:20;16966:1;16955:9;16951:17;16944:47;17008:131;17134:4;17008:131;:::i;:::-;17000:139;;16727:419;;;:::o;17152:::-;17318:4;17356:2;17345:9;17341:18;17333:26;;17405:9;17399:4;17395:20;17391:1;17380:9;17376:17;17369:47;17433:131;17559:4;17433:131;:::i;:::-;17425:139;;17152:419;;;:::o;17577:::-;17743:4;17781:2;17770:9;17766:18;17758:26;;17830:9;17824:4;17820:20;17816:1;17805:9;17801:17;17794:47;17858:131;17984:4;17858:131;:::i;:::-;17850:139;;17577:419;;;:::o;18002:::-;18168:4;18206:2;18195:9;18191:18;18183:26;;18255:9;18249:4;18245:20;18241:1;18230:9;18226:17;18219:47;18283:131;18409:4;18283:131;:::i;:::-;18275:139;;18002:419;;;:::o;18427:::-;18593:4;18631:2;18620:9;18616:18;18608:26;;18680:9;18674:4;18670:20;18666:1;18655:9;18651:17;18644:47;18708:131;18834:4;18708:131;:::i;:::-;18700:139;;18427:419;;;:::o;18852:::-;19018:4;19056:2;19045:9;19041:18;19033:26;;19105:9;19099:4;19095:20;19091:1;19080:9;19076:17;19069:47;19133:131;19259:4;19133:131;:::i;:::-;19125:139;;18852:419;;;:::o;19277:::-;19443:4;19481:2;19470:9;19466:18;19458:26;;19530:9;19524:4;19520:20;19516:1;19505:9;19501:17;19494:47;19558:131;19684:4;19558:131;:::i;:::-;19550:139;;19277:419;;;:::o;19702:::-;19868:4;19906:2;19895:9;19891:18;19883:26;;19955:9;19949:4;19945:20;19941:1;19930:9;19926:17;19919:47;19983:131;20109:4;19983:131;:::i;:::-;19975:139;;19702:419;;;:::o;20127:::-;20293:4;20331:2;20320:9;20316:18;20308:26;;20380:9;20374:4;20370:20;20366:1;20355:9;20351:17;20344:47;20408:131;20534:4;20408:131;:::i;:::-;20400:139;;20127:419;;;:::o;20552:::-;20718:4;20756:2;20745:9;20741:18;20733:26;;20805:9;20799:4;20795:20;20791:1;20780:9;20776:17;20769:47;20833:131;20959:4;20833:131;:::i;:::-;20825:139;;20552:419;;;:::o;20977:::-;21143:4;21181:2;21170:9;21166:18;21158:26;;21230:9;21224:4;21220:20;21216:1;21205:9;21201:17;21194:47;21258:131;21384:4;21258:131;:::i;:::-;21250:139;;20977:419;;;:::o;21402:::-;21568:4;21606:2;21595:9;21591:18;21583:26;;21655:9;21649:4;21645:20;21641:1;21630:9;21626:17;21619:47;21683:131;21809:4;21683:131;:::i;:::-;21675:139;;21402:419;;;:::o;21827:::-;21993:4;22031:2;22020:9;22016:18;22008:26;;22080:9;22074:4;22070:20;22066:1;22055:9;22051:17;22044:47;22108:131;22234:4;22108:131;:::i;:::-;22100:139;;21827:419;;;:::o;22252:::-;22418:4;22456:2;22445:9;22441:18;22433:26;;22505:9;22499:4;22495:20;22491:1;22480:9;22476:17;22469:47;22533:131;22659:4;22533:131;:::i;:::-;22525:139;;22252:419;;;:::o;22677:::-;22843:4;22881:2;22870:9;22866:18;22858:26;;22930:9;22924:4;22920:20;22916:1;22905:9;22901:17;22894:47;22958:131;23084:4;22958:131;:::i;:::-;22950:139;;22677:419;;;:::o;23102:::-;23268:4;23306:2;23295:9;23291:18;23283:26;;23355:9;23349:4;23345:20;23341:1;23330:9;23326:17;23319:47;23383:131;23509:4;23383:131;:::i;:::-;23375:139;;23102:419;;;:::o;23527:::-;23693:4;23731:2;23720:9;23716:18;23708:26;;23780:9;23774:4;23770:20;23766:1;23755:9;23751:17;23744:47;23808:131;23934:4;23808:131;:::i;:::-;23800:139;;23527:419;;;:::o;23952:::-;24118:4;24156:2;24145:9;24141:18;24133:26;;24205:9;24199:4;24195:20;24191:1;24180:9;24176:17;24169:47;24233:131;24359:4;24233:131;:::i;:::-;24225:139;;23952:419;;;:::o;24377:222::-;24470:4;24508:2;24497:9;24493:18;24485:26;;24521:71;24589:1;24578:9;24574:17;24565:6;24521:71;:::i;:::-;24377:222;;;;:::o;24605:831::-;24868:4;24906:3;24895:9;24891:19;24883:27;;24920:71;24988:1;24977:9;24973:17;24964:6;24920:71;:::i;:::-;25001:80;25077:2;25066:9;25062:18;25053:6;25001:80;:::i;:::-;25128:9;25122:4;25118:20;25113:2;25102:9;25098:18;25091:48;25156:108;25259:4;25250:6;25156:108;:::i;:::-;25148:116;;25274:72;25342:2;25331:9;25327:18;25318:6;25274:72;:::i;:::-;25356:73;25424:3;25413:9;25409:19;25400:6;25356:73;:::i;:::-;24605:831;;;;;;;;:::o;25442:442::-;25591:4;25629:2;25618:9;25614:18;25606:26;;25642:71;25710:1;25699:9;25695:17;25686:6;25642:71;:::i;:::-;25723:72;25791:2;25780:9;25776:18;25767:6;25723:72;:::i;:::-;25805;25873:2;25862:9;25858:18;25849:6;25805:72;:::i;:::-;25442:442;;;;;;:::o;25890:214::-;25979:4;26017:2;26006:9;26002:18;25994:26;;26030:67;26094:1;26083:9;26079:17;26070:6;26030:67;:::i;:::-;25890:214;;;;:::o;26191:132::-;26258:4;26281:3;26273:11;;26311:4;26306:3;26302:14;26294:22;;26191:132;;;:::o;26329:114::-;26396:6;26430:5;26424:12;26414:22;;26329:114;;;:::o;26449:99::-;26501:6;26535:5;26529:12;26519:22;;26449:99;;;:::o;26554:113::-;26624:4;26656;26651:3;26647:14;26639:22;;26554:113;;;:::o;26673:184::-;26772:11;26806:6;26801:3;26794:19;26846:4;26841:3;26837:14;26822:29;;26673:184;;;;:::o;26863:169::-;26947:11;26981:6;26976:3;26969:19;27021:4;27016:3;27012:14;26997:29;;26863:169;;;;:::o;27038:305::-;27078:3;27097:20;27115:1;27097:20;:::i;:::-;27092:25;;27131:20;27149:1;27131:20;:::i;:::-;27126:25;;27285:1;27217:66;27213:74;27210:1;27207:81;27204:107;;;27291:18;;:::i;:::-;27204:107;27335:1;27332;27328:9;27321:16;;27038:305;;;;:::o;27349:185::-;27389:1;27406:20;27424:1;27406:20;:::i;:::-;27401:25;;27440:20;27458:1;27440:20;:::i;:::-;27435:25;;27479:1;27469:35;;27484:18;;:::i;:::-;27469:35;27526:1;27523;27519:9;27514:14;;27349:185;;;;:::o;27540:848::-;27601:5;27608:4;27632:6;27623:15;;27656:5;27647:14;;27670:712;27691:1;27681:8;27678:15;27670:712;;;27786:4;27781:3;27777:14;27771:4;27768:24;27765:50;;;27795:18;;:::i;:::-;27765:50;27845:1;27835:8;27831:16;27828:451;;;28260:4;28253:5;28249:16;28240:25;;27828:451;28310:4;28304;28300:15;28292:23;;28340:32;28363:8;28340:32;:::i;:::-;28328:44;;27670:712;;;27540:848;;;;;;;:::o;28394:281::-;28452:5;28476:23;28494:4;28476:23;:::i;:::-;28468:31;;28520:25;28536:8;28520:25;:::i;:::-;28508:37;;28564:104;28601:66;28591:8;28585:4;28564:104;:::i;:::-;28555:113;;28394:281;;;;:::o;28681:1073::-;28735:5;28926:8;28916:40;;28947:1;28938:10;;28949:5;;28916:40;28975:4;28965:36;;28992:1;28983:10;;28994:5;;28965:36;29061:4;29109:1;29104:27;;;;29145:1;29140:191;;;;29054:277;;29104:27;29122:1;29113:10;;29124:5;;;29140:191;29185:3;29175:8;29172:17;29169:43;;;29192:18;;:::i;:::-;29169:43;29241:8;29238:1;29234:16;29225:25;;29276:3;29269:5;29266:14;29263:40;;;29283:18;;:::i;:::-;29263:40;29316:5;;;29054:277;;29440:2;29430:8;29427:16;29421:3;29415:4;29412:13;29408:36;29390:2;29380:8;29377:16;29372:2;29366:4;29363:12;29359:35;29343:111;29340:246;;;29496:8;29490:4;29486:19;29477:28;;29531:3;29524:5;29521:14;29518:40;;;29538:18;;:::i;:::-;29518:40;29571:5;;29340:246;29611:42;29649:3;29639:8;29633:4;29630:1;29611:42;:::i;:::-;29596:57;;;;29685:4;29680:3;29676:14;29669:5;29666:25;29663:51;;;29694:18;;:::i;:::-;29663:51;29743:4;29736:5;29732:16;29723:25;;28681:1073;;;;;;:::o;29760:348::-;29800:7;29823:20;29841:1;29823:20;:::i;:::-;29818:25;;29857:20;29875:1;29857:20;:::i;:::-;29852:25;;30045:1;29977:66;29973:74;29970:1;29967:81;29962:1;29955:9;29948:17;29944:105;29941:131;;;30052:18;;:::i;:::-;29941:131;30100:1;30097;30093:9;30082:20;;29760:348;;;;:::o;30114:191::-;30154:4;30174:20;30192:1;30174:20;:::i;:::-;30169:25;;30208:20;30226:1;30208:20;:::i;:::-;30203:25;;30247:1;30244;30241:8;30238:34;;;30252:18;;:::i;:::-;30238:34;30297:1;30294;30290:9;30282:17;;30114:191;;;;:::o;30311:96::-;30348:7;30377:24;30395:5;30377:24;:::i;:::-;30366:35;;30311:96;;;:::o;30413:90::-;30447:7;30490:5;30483:13;30476:21;30465:32;;30413:90;;;:::o;30509:126::-;30546:7;30586:42;30579:5;30575:54;30564:65;;30509:126;;;:::o;30641:77::-;30678:7;30707:5;30696:16;;30641:77;;;:::o;30724:86::-;30759:7;30799:4;30792:5;30788:16;30777:27;;30724:86;;;:::o;30816:153::-;30893:9;30926:37;30957:5;30926:37;:::i;:::-;30913:50;;30816:153;;;:::o;30975:121::-;31033:9;31066:24;31084:5;31066:24;:::i;:::-;31053:37;;30975:121;;;:::o;31102:126::-;31152:9;31185:37;31216:5;31185:37;:::i;:::-;31172:50;;31102:126;;;:::o;31234:113::-;31284:9;31317:24;31335:5;31317:24;:::i;:::-;31304:37;;31234:113;;;:::o;31353:307::-;31421:1;31431:113;31445:6;31442:1;31439:13;31431:113;;;31530:1;31525:3;31521:11;31515:18;31511:1;31506:3;31502:11;31495:39;31467:2;31464:1;31460:10;31455:15;;31431:113;;;31562:6;31559:1;31556:13;31553:101;;;31642:1;31633:6;31628:3;31624:16;31617:27;31553:101;31402:258;31353:307;;;:::o;31666:320::-;31710:6;31747:1;31741:4;31737:12;31727:22;;31794:1;31788:4;31784:12;31815:18;31805:81;;31871:4;31863:6;31859:17;31849:27;;31805:81;31933:2;31925:6;31922:14;31902:18;31899:38;31896:84;;;31952:18;;:::i;:::-;31896:84;31717:269;31666:320;;;:::o;31992:180::-;32040:77;32037:1;32030:88;32137:4;32134:1;32127:15;32161:4;32158:1;32151:15;32178:180;32226:77;32223:1;32216:88;32323:4;32320:1;32313:15;32347:4;32344:1;32337:15;32364:180;32412:77;32409:1;32402:88;32509:4;32506:1;32499:15;32533:4;32530:1;32523:15;32550:180;32598:77;32595:1;32588:88;32695:4;32692:1;32685:15;32719:4;32716:1;32709:15;32736:180;32784:77;32781:1;32774:88;32881:4;32878:1;32871:15;32905:4;32902:1;32895:15;33045:117;33154:1;33151;33144:12;33168:102;33209:6;33260:2;33256:7;33251:2;33244:5;33240:14;33236:28;33226:38;;33168:102;;;:::o;33276:::-;33318:8;33365:5;33362:1;33358:13;33337:34;;33276:102;;;:::o;33384:224::-;33524:34;33520:1;33512:6;33508:14;33501:58;33593:7;33588:2;33580:6;33576:15;33569:32;33384:224;:::o;33614:223::-;33754:34;33750:1;33742:6;33738:14;33731:58;33823:6;33818:2;33810:6;33806:15;33799:31;33614:223;:::o;33843:225::-;33983:34;33979:1;33971:6;33967:14;33960:58;34052:8;34047:2;34039:6;34035:15;34028:33;33843:225;:::o;34074:176::-;34214:28;34210:1;34202:6;34198:14;34191:52;34074:176;:::o;34256:177::-;34396:29;34392:1;34384:6;34380:14;34373:53;34256:177;:::o;34439:229::-;34579:34;34575:1;34567:6;34563:14;34556:58;34648:12;34643:2;34635:6;34631:15;34624:37;34439:229;:::o;34674:227::-;34814:34;34810:1;34802:6;34798:14;34791:58;34883:10;34878:2;34870:6;34866:15;34859:35;34674:227;:::o;34907:180::-;35047:32;35043:1;35035:6;35031:14;35024:56;34907:180;:::o;35093:220::-;35233:34;35229:1;35221:6;35217:14;35210:58;35302:3;35297:2;35289:6;35285:15;35278:28;35093:220;:::o;35319:181::-;35459:33;35455:1;35447:6;35443:14;35436:57;35319:181;:::o;35506:182::-;35646:34;35642:1;35634:6;35630:14;35623:58;35506:182;:::o;35694:225::-;35834:34;35830:1;35822:6;35818:14;35811:58;35903:8;35898:2;35890:6;35886:15;35879:33;35694:225;:::o;35925:222::-;36065:34;36061:1;36053:6;36049:14;36042:58;36134:5;36129:2;36121:6;36117:15;36110:30;35925:222;:::o;36153:224::-;36293:34;36289:1;36281:6;36277:14;36270:58;36362:7;36357:2;36349:6;36345:15;36338:32;36153:224;:::o;36383:220::-;36523:34;36519:1;36511:6;36507:14;36500:58;36592:3;36587:2;36579:6;36575:15;36568:28;36383:220;:::o;36609:221::-;36749:34;36745:1;36737:6;36733:14;36726:58;36818:4;36813:2;36805:6;36801:15;36794:29;36609:221;:::o;36836:::-;36976:34;36972:1;36964:6;36960:14;36953:58;37045:4;37040:2;37032:6;37028:15;37021:29;36836:221;:::o;37063:181::-;37203:33;37199:1;37191:6;37187:14;37180:57;37063:181;:::o;37250:221::-;37390:34;37386:1;37378:6;37374:14;37367:58;37459:4;37454:2;37446:6;37442:15;37435:29;37250:221;:::o;37477:122::-;37550:24;37568:5;37550:24;:::i;:::-;37543:5;37540:35;37530:63;;37589:1;37586;37579:12;37530:63;37477:122;:::o;37605:116::-;37675:21;37690:5;37675:21;:::i;:::-;37668:5;37665:32;37655:60;;37711:1;37708;37701:12;37655:60;37605:116;:::o;37727:122::-;37800:24;37818:5;37800:24;:::i;:::-;37793:5;37790:35;37780:63;;37839:1;37836;37829:12;37780:63;37727:122;:::o
Swarm Source
ipfs://e6200608cd98599cb9a36ee810fd0af85ff4a430a9c169e411f40dd6b4c35a39
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MOVR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.