ERC-20
Overview
Max Total Supply
970,644.484369 cELON
Holders
9
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Balance
0.000001 cELONValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CaptainElon
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-09 */ /* $cELON - Captain Elon https://t.me/CaptainElonEth 🔥 Hyper deflationary 🔥 Buy and Sell taxes are the following (post Trading Enabled): 1% Buy (burn) tax / 1% Sell (burn) tax 🔥 Burns $cELON on EVERY transaction 🔥 The burn will be a true burn and actually remove the tokens from the total tokens, reducing the total supply with every transaction. */ pragma solidity 0.8.16; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @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); } interface IERC20Metadata is IERC20 { /** * @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); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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 {ERC20} 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 * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 6; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-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 {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-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 {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-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].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This 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), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev 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 {} } 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; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { 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; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity 0.8.16; contract CaptainElon is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; uint256 public supply; address public devWallet; bool public limitsInEffect = true; bool public tradingActive = true; bool public swapEnabled = true; mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = false; uint256 public buyBurnFee; uint256 public buyDevFee; uint256 public buyTotalFees; uint256 public sellBurnFee; uint256 public sellDevFee; uint256 public sellTotalFees; uint256 public tokensForBurn; uint256 public tokensForDev; uint256 public walletDigit; uint256 public transDigit; uint256 public delayDigit; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); constructor() ERC20("Captain Elon", "cELON") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyBurnFee = 1; uint256 _buyDevFee = 0; uint256 _sellBurnFee = 1; uint256 _sellDevFee = 0; uint256 totalSupply = 1000000 * 1e6; supply += totalSupply; walletDigit = 15; transDigit = 15; delayDigit = 0; maxTransactionAmount = 1000000 * transDigit / 1000; swapTokensAtAmount = 1000000 * 5 / 10000; // 0.05% swap wallet; maxWallet = 1000000 * walletDigit / 1000; buyBurnFee = _buyBurnFee; buyDevFee = _buyDevFee; buyTotalFees = buyBurnFee + buyDevFee; sellBurnFee = _sellBurnFee; sellDevFee = _sellDevFee; sellTotalFees = sellBurnFee + sellDevFee; devWallet = 0xe66904B4f88Fc215AeC7f95d09bd72A228E15F4e; excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _approve(owner(), address(uniswapV2Router), totalSupply); _mint(msg.sender, totalSupply); } receive() external payable { } function enableTrading() external onlyOwner { buyBurnFee = 1; buyDevFee = 0; buyTotalFees = buyBurnFee + buyDevFee; sellBurnFee = 1; sellDevFee = 0; sellTotalFees = sellBurnFee + sellDevFee; delayDigit = 0; } function updateTransDigit(uint256 newNum) external onlyOwner { require(newNum >= 1); transDigit = newNum; updateLimits(); } function updateWalletDigit(uint256 newNum) external onlyOwner { require(newNum >= 1); walletDigit = newNum; updateLimits(); } function updateDelayDigit(uint256 newNum) external onlyOwner{ delayDigit = newNum; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateBuyFees(uint256 _burnFee, uint256 _devFee) external onlyOwner { buyBurnFee = _burnFee; buyDevFee = _devFee; buyTotalFees = buyBurnFee + buyDevFee; } function updateSellFees(uint256 _burnFee, uint256 _devFee) external onlyOwner { sellBurnFee = _burnFee; sellDevFee = _devFee; sellTotalFees = sellBurnFee + sellDevFee; } function updateDevWallet(address newWallet) external onlyOwner { devWallet = newWallet; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function updateLimits() private { maxTransactionAmount = supply * transDigit / 100; swapTokensAtAmount = supply * 5 / 10000; // 0.05% swap wallet; maxWallet = supply * walletDigit / 100; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number + delayDigit; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && !swapping && swapEnabled && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForBurn += fees * sellBurnFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForBurn += fees * buyBurnFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); if (tokensForBurn > 0) { _burn(address(this), tokensForBurn); supply = totalSupply(); updateLimits(); tokensForBurn = 0; } } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = 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 swapBack() private { uint256 contractBalance = balanceOf(address(this)); bool success; if(contractBalance == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } swapTokensForEth(contractBalance); tokensForDev = 0; (success,) = address(devWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delayDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateDelayDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateTransDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateWalletDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff0219169083151502179055506001600a60166101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600c81526020017f4361707461696e20456c6f6e00000000000000000000000000000000000000008152506040518060400160405280600581526020017f63454c4f4e0000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f7c565b5080600490816200010d919062000f7c565b505050600062000122620005fe60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200060660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002939190620010cd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003219190620010cd565b6040518363ffffffff1660e01b81526004016200034092919062001110565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003869190620010cd565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200060660201b60201c565b620003e360a05160016200070360201b60201c565b6000600190506000806001905060008064e8d4a51000905080600960008282546200040f91906200116c565b92505081905550600f601581905550600f60168190555060006017819055506103e8601654620f4240620004449190620011a7565b62000450919062001237565b6006819055506101f46007819055506103e8601554620f4240620004759190620011a7565b62000481919062001237565b60088190555084600d8190555083600e81905550600e54600d54620004a791906200116c565b600f819055508260108190555081601181905550601154601054620004cd91906200116c565b60128190555073e66904b4f88fc215aec7f95d09bd72a228e15f4e600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200054a6200053c620007a460201b60201c565b6001620007ce60201b60201c565b6200055d306001620007ce60201b60201c565b6200057261dead6001620007ce60201b60201c565b6200059462000586620007a460201b60201c565b60016200060660201b60201c565b620005a73060016200060660201b60201c565b620005bc61dead60016200060660201b60201c565b620005e0620005d0620007a460201b60201c565b608051836200091b60201b60201c565b620005f2338262000aec60201b60201c565b5050505050506200156e565b600033905090565b62000616620005fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069f90620012d0565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007de620005fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200086790620012d0565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200090f91906200130f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200098d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098490620013a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f6906200143a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000adf91906200146d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5590620014da565b60405180910390fd5b62000b726000838362000c9a60201b60201c565b62000b8e8160025462000c9f60201b62001e041790919060201c565b60028190555062000bec816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000c9f60201b62001e041790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c8e91906200146d565b60405180910390a35050565b505050565b600080828462000cb091906200116c565b90508381101562000cf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cef906200154c565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d8457607f821691505b60208210810362000d9a5762000d9962000d3c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dc5565b62000e10868362000dc5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e5d62000e5762000e518462000e28565b62000e32565b62000e28565b9050919050565b6000819050919050565b62000e798362000e3c565b62000e9162000e888262000e64565b84845462000dd2565b825550505050565b600090565b62000ea862000e99565b62000eb581848462000e6e565b505050565b5b8181101562000edd5762000ed160008262000e9e565b60018101905062000ebb565b5050565b601f82111562000f2c5762000ef68162000da0565b62000f018462000db5565b8101602085101562000f11578190505b62000f2962000f208562000db5565b83018262000eba565b50505b505050565b600082821c905092915050565b600062000f516000198460080262000f31565b1980831691505092915050565b600062000f6c838362000f3e565b9150826002028217905092915050565b62000f878262000d02565b67ffffffffffffffff81111562000fa35762000fa262000d0d565b5b62000faf825462000d6b565b62000fbc82828562000ee1565b600060209050601f83116001811462000ff4576000841562000fdf578287015190505b62000feb858262000f5e565b8655506200105b565b601f198416620010048662000da0565b60005b828110156200102e5784890151825560018201915060208501945060208101905062001007565b868310156200104e57848901516200104a601f89168262000f3e565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010958262001068565b9050919050565b620010a78162001088565b8114620010b357600080fd5b50565b600081519050620010c7816200109c565b92915050565b600060208284031215620010e657620010e562001063565b5b6000620010f684828501620010b6565b91505092915050565b6200110a8162001088565b82525050565b6000604082019050620011276000830185620010ff565b620011366020830184620010ff565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011798262000e28565b9150620011868362000e28565b9250828201905080821115620011a157620011a06200113d565b5b92915050565b6000620011b48262000e28565b9150620011c18362000e28565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011fd57620011fc6200113d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012448262000e28565b9150620012518362000e28565b92508262001264576200126362001208565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012b86020836200126f565b9150620012c58262001280565b602082019050919050565b60006020820190508181036000830152620012eb81620012a9565b9050919050565b60008115159050919050565b6200130981620012f2565b82525050565b6000602082019050620013266000830184620012fe565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200138a6024836200126f565b915062001397826200132c565b604082019050919050565b60006020820190508181036000830152620013bd816200137b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620014226022836200126f565b91506200142f82620013c4565b604082019050919050565b60006020820190508181036000830152620014558162001413565b9050919050565b620014678162000e28565b82525050565b60006020820190506200148460008301846200145c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620014c2601f836200126f565b9150620014cf826200148a565b602082019050919050565b60006020820190508181036000830152620014f581620014b3565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001534601b836200126f565b91506200154182620014fc565b602082019050919050565b60006020820190508181036000830152620015678162001525565b9050919050565b60805160a051614820620015be60003960008181611166015281816117cf0152612450015260008181610e05015281816123f8015281816134a50152818161358601526135ad01526148206000f3fe6080604052600436106102cd5760003560e01c80638a8c523c11610175578063adb873bd116100dc578063d85ba06311610095578063e71dc3f51161006f578063e71dc3f514610b0d578063f203acb614610b38578063f2fde38b14610b63578063f8b45b0514610b8c576102d4565b8063d85ba06314610a7a578063dd62ed3e14610aa5578063e2f4560514610ae2576102d4565b8063adb873bd14610968578063b62496f514610993578063bbc0c742146109d0578063c0246668146109fb578063c876d0b914610a24578063c8c8ebe414610a4f576102d4565b80639c3b4fdc1161012e5780639c3b4fdc146108445780639fccce321461086f5780639fdc48241461089a578063a0d82dc5146108c3578063a457c2d7146108ee578063a9059cbb1461092b576102d4565b80638a8c523c146107585780638da5cb5b1461076f5780638ea5220f1461079a57806395d89b41146107c5578063975d71e2146107f05780639a7a23d61461081b576102d4565b806327c8f8351161023457806366ca9b83116101ed57806370a08231116101c757806370a08231146106b0578063715018a6146106ed5780637571336a146107045780637ab439831461072d576102d4565b806366ca9b83146106315780636a486a8e1461065a5780636ddd171314610685576102d4565b806327c8f8351461050b578063313ce56714610536578063395093511461056157806349bd5a5e1461059e5780634a62bb65146105c95780634fbee193146105f4576102d4565b80631694505e116102865780631694505e146103fb57806318160ddd146104265780631816467f146104515780631d7778561461047a5780631fa07da5146104a557806323b872dd146104ce576102d4565b806302dbd8f8146102d9578063047fc9aa1461030257806306fdde031461032d578063095ea7b31461035857806310d5de5314610395578063150de0bb146103d2576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb919061372b565b610bb7565b005b34801561030e57600080fd5b50610317610c76565b604051610324919061377a565b60405180910390f35b34801561033957600080fd5b50610342610c7c565b60405161034f9190613825565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a91906138a5565b610d0e565b60405161038c9190613900565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b7919061391b565b610d2c565b6040516103c99190613900565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613948565b610d4c565b005b34801561040757600080fd5b50610410610e03565b60405161041d91906139d4565b60405180910390f35b34801561043257600080fd5b5061043b610e27565b604051610448919061377a565b60405180910390f35b34801561045d57600080fd5b506104786004803603810190610473919061391b565b610e31565b005b34801561048657600080fd5b5061048f610f0c565b60405161049c919061377a565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613948565b610f12565b005b3480156104da57600080fd5b506104f560048036038101906104f091906139ef565b610fc9565b6040516105029190613900565b60405180910390f35b34801561051757600080fd5b506105206110a2565b60405161052d9190613a51565b60405180910390f35b34801561054257600080fd5b5061054b6110a8565b6040516105589190613a88565b60405180910390f35b34801561056d57600080fd5b50610588600480360381019061058391906138a5565b6110b1565b6040516105959190613900565b60405180910390f35b3480156105aa57600080fd5b506105b3611164565b6040516105c09190613a51565b60405180910390f35b3480156105d557600080fd5b506105de611188565b6040516105eb9190613900565b60405180910390f35b34801561060057600080fd5b5061061b6004803603810190610616919061391b565b61119b565b6040516106289190613900565b60405180910390f35b34801561063d57600080fd5b506106586004803603810190610653919061372b565b6111f1565b005b34801561066657600080fd5b5061066f6112b0565b60405161067c919061377a565b60405180910390f35b34801561069157600080fd5b5061069a6112b6565b6040516106a79190613900565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d2919061391b565b6112c9565b6040516106e4919061377a565b60405180910390f35b3480156106f957600080fd5b50610702611311565b005b34801561071057600080fd5b5061072b60048036038101906107269190613acf565b611469565b005b34801561073957600080fd5b5061074261155b565b60405161074f919061377a565b60405180910390f35b34801561076457600080fd5b5061076d611561565b005b34801561077b57600080fd5b5061078461164e565b6040516107919190613a51565b60405180910390f35b3480156107a657600080fd5b506107af611678565b6040516107bc9190613a51565b60405180910390f35b3480156107d157600080fd5b506107da61169e565b6040516107e79190613825565b60405180910390f35b3480156107fc57600080fd5b50610805611730565b604051610812919061377a565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190613acf565b611736565b005b34801561085057600080fd5b50610859611869565b604051610866919061377a565b60405180910390f35b34801561087b57600080fd5b5061088461186f565b604051610891919061377a565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc9190613948565b611875565b005b3480156108cf57600080fd5b506108d8611916565b6040516108e5919061377a565b60405180910390f35b3480156108fa57600080fd5b50610915600480360381019061091091906138a5565b61191c565b6040516109229190613900565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d91906138a5565b6119e9565b60405161095f9190613900565b60405180910390f35b34801561097457600080fd5b5061097d611a07565b60405161098a919061377a565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b5919061391b565b611a0d565b6040516109c79190613900565b60405180910390f35b3480156109dc57600080fd5b506109e5611a2d565b6040516109f29190613900565b60405180910390f35b348015610a0757600080fd5b50610a226004803603810190610a1d9190613acf565b611a40565b005b348015610a3057600080fd5b50610a39611b80565b604051610a469190613900565b60405180910390f35b348015610a5b57600080fd5b50610a64611b93565b604051610a71919061377a565b60405180910390f35b348015610a8657600080fd5b50610a8f611b99565b604051610a9c919061377a565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613b0f565b611b9f565b604051610ad9919061377a565b60405180910390f35b348015610aee57600080fd5b50610af7611c26565b604051610b04919061377a565b60405180910390f35b348015610b1957600080fd5b50610b22611c2c565b604051610b2f919061377a565b60405180910390f35b348015610b4457600080fd5b50610b4d611c32565b604051610b5a919061377a565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b85919061391b565b611c38565b005b348015610b9857600080fd5b50610ba1611dfe565b604051610bae919061377a565b60405180910390f35b610bbf611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4590613b9b565b60405180910390fd5b8160108190555080601181905550601154601054610c6c9190613bea565b6012819055505050565b60095481565b606060038054610c8b90613c4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb790613c4d565b8015610d045780601f10610cd957610100808354040283529160200191610d04565b820191906000526020600020905b815481529060010190602001808311610ce757829003601f168201915b5050505050905090565b6000610d22610d1b611e62565b8484611e6a565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b610d54611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90613b9b565b60405180910390fd5b6001811015610df157600080fd5b80601581905550610e00612033565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e39611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613b9b565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b610f1a611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090613b9b565b60405180910390fd5b6001811015610fb757600080fd5b80601681905550610fc6612033565b50565b6000610fd684848461209b565b61109784610fe2611e62565b6110928560405180606001604052806028815260200161479e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611048611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b611e6a565b600190509392505050565b61dead81565b60006006905090565b600061115a6110be611e62565b8461115585600160006110cf611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b611e6a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60149054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111f9611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90613b9b565b60405180910390fd5b81600d8190555080600e81905550600e54600d546112a69190613bea565b600f819055505050565b60125481565b600a60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611319611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611471611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790613b9b565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611569611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90613b9b565b60405180910390fd5b6001600d819055506000600e81905550600e54600d546116189190613bea565b600f819055506001601081905550600060118190555060115460105461163e9190613bea565b6012819055506000601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546116ad90613c4d565b80601f01602080910402602001604051908101604052809291908181526020018280546116d990613c4d565b80156117265780601f106116fb57610100808354040283529160200191611726565b820191906000526020600020905b81548152906001019060200180831161170957829003601f168201915b5050505050905090565b60165481565b61173e611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490613b9b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290613cf0565b60405180910390fd5b6118658282612d73565b5050565b600e5481565b60145481565b61187d611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613b9b565b60405180910390fd5b8060178190555050565b60115481565b60006119df611929611e62565b846119da856040518060600160405280602581526020016147c66025913960016000611953611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b611e6a565b6001905092915050565b60006119fd6119f6611e62565b848461209b565b6001905092915050565b60105481565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60159054906101000a900460ff1681565b611a48611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90613b9b565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b749190613900565b60405180910390a25050565b600c60009054906101000a900460ff1681565b60065481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b600d5481565b60175481565b611c40611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690613b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590613d82565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000808284611e139190613bea565b905083811015611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613dee565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090613e80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90613f12565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612026919061377a565b60405180910390a3505050565b60646016546009546120459190613f32565b61204f9190613fbb565b60068190555061271060056009546120679190613f32565b6120719190613fbb565b60078190555060646015546009546120899190613f32565b6120939190613fbb565b600881905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361210a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121019061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612179576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612170906140f0565b60405180910390fd5b600081036121925761218d83836000612e14565b612d0a565b600a60149054906101000a900460ff1615612862576121af61164e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561221d57506121ed61164e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122565750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612290575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a95750600560149054906101000a900460ff16155b1561286157600a60159054906101000a900460ff166123a357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123635750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123999061415c565b60405180910390fd5b5b600c60009054906101000a900460ff1615612578576123c061164e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561244757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561249f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125775743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251c90614214565b60405180910390fd5b601754436125339190613bea565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561261b5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126c257600654811115612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c906142a6565b60405180910390fd5b600854612671836112c9565b8261267c9190613bea565b11156126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b490614312565b60405180910390fd5b612860565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127655750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b4576006548111156127af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a6906143a4565b60405180910390fd5b61285f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661285e57600854612811836112c9565b8261281c9190613bea565b111561285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285490614312565b60405180910390fd5b5b5b5b5b5b600061286d306112c9565b9050600060075482101590508080156128935750600560149054906101000a900460ff16155b80156128ab5750600a60169054906101000a900460ff165b80156129015750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129575750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129ad5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129f1576001600560146101000a81548160ff0219169083151502179055506129d56130a7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612aa75750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ab157600090505b60008115612cfa57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b1457506000601254115b15612bae57612b416064612b336012548861319090919063ffffffff16565b61320a90919063ffffffff16565b905060125460105482612b549190613f32565b612b5e9190613fbb565b60136000828254612b6f9190613bea565b9250508190555060125460115482612b879190613f32565b612b919190613fbb565b60146000828254612ba29190613bea565b92505081905550612ca0565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c0957506000600f54115b15612c9f57612c366064612c28600f548861319090919063ffffffff16565b61320a90919063ffffffff16565b9050600f54600d5482612c499190613f32565b612c539190613fbb565b60136000828254612c649190613bea565b92505081905550600f54600e5482612c7c9190613f32565b612c869190613fbb565b60146000828254612c979190613bea565b925050819055505b5b6000811115612ceb57612cb4873083612e14565b60006013541115612cea57612ccb30601354613254565b612cd3610e27565b600981905550612ce1612033565b60006013819055505b5b8085612cf791906143c4565b94505b612d05878787612e14565b505050505b505050565b6000838311158290612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e9190613825565b60405180910390fd5b5060008385612d6691906143c4565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7a9061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee9906140f0565b60405180910390fd5b612efd838383613401565b612f6881604051806060016040528060268152602001614778602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ffb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161309a919061377a565b60405180910390a3505050565b60006130b2306112c9565b905060008082036130c457505061318e565b60146007546130d39190613f32565b8211156130ec5760146007546130e99190613f32565b91505b6130f582613406565b6000601481905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161314390614429565b60006040518083038185875af1925050503d8060008114613180576040519150601f19603f3d011682016040523d82523d6000602084013e613185565b606091505b50508091505050505b565b60008083036131a25760009050613204565b600082846131b09190613f32565b90508284826131bf9190613fbb565b146131ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f6906144b0565b60405180910390fd5b809150505b92915050565b600061324c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613643565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90614542565b60405180910390fd5b6132cf82600083613401565b61333a81604051806060016040528060228152602001614756602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613391816002546136a690919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133f5919061377a565b60405180910390a35050565b505050565b6000600267ffffffffffffffff81111561342357613422614562565b5b6040519080825280602002602001820160405280156134515781602001602082028036833780820191505090505b509050308160008151811061346957613468614591565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561350e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353291906145d5565b8160018151811061354657613545614591565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135ab307f000000000000000000000000000000000000000000000000000000000000000084611e6a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161360d9594939291906146fb565b600060405180830381600087803b15801561362757600080fd5b505af115801561363b573d6000803e3d6000fd5b505050505050565b6000808311829061368a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136819190613825565b60405180910390fd5b50600083856136999190613fbb565b9050809150509392505050565b60006136e883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d0f565b905092915050565b600080fd5b6000819050919050565b613708816136f5565b811461371357600080fd5b50565b600081359050613725816136ff565b92915050565b60008060408385031215613742576137416136f0565b5b600061375085828601613716565b925050602061376185828601613716565b9150509250929050565b613774816136f5565b82525050565b600060208201905061378f600083018461376b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137cf5780820151818401526020810190506137b4565b60008484015250505050565b6000601f19601f8301169050919050565b60006137f782613795565b61380181856137a0565b93506138118185602086016137b1565b61381a816137db565b840191505092915050565b6000602082019050818103600083015261383f81846137ec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061387282613847565b9050919050565b61388281613867565b811461388d57600080fd5b50565b60008135905061389f81613879565b92915050565b600080604083850312156138bc576138bb6136f0565b5b60006138ca85828601613890565b92505060206138db85828601613716565b9150509250929050565b60008115159050919050565b6138fa816138e5565b82525050565b600060208201905061391560008301846138f1565b92915050565b600060208284031215613931576139306136f0565b5b600061393f84828501613890565b91505092915050565b60006020828403121561395e5761395d6136f0565b5b600061396c84828501613716565b91505092915050565b6000819050919050565b600061399a61399561399084613847565b613975565b613847565b9050919050565b60006139ac8261397f565b9050919050565b60006139be826139a1565b9050919050565b6139ce816139b3565b82525050565b60006020820190506139e960008301846139c5565b92915050565b600080600060608486031215613a0857613a076136f0565b5b6000613a1686828701613890565b9350506020613a2786828701613890565b9250506040613a3886828701613716565b9150509250925092565b613a4b81613867565b82525050565b6000602082019050613a666000830184613a42565b92915050565b600060ff82169050919050565b613a8281613a6c565b82525050565b6000602082019050613a9d6000830184613a79565b92915050565b613aac816138e5565b8114613ab757600080fd5b50565b600081359050613ac981613aa3565b92915050565b60008060408385031215613ae657613ae56136f0565b5b6000613af485828601613890565b9250506020613b0585828601613aba565b9150509250929050565b60008060408385031215613b2657613b256136f0565b5b6000613b3485828601613890565b9250506020613b4585828601613890565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b856020836137a0565b9150613b9082613b4f565b602082019050919050565b60006020820190508181036000830152613bb481613b78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bf5826136f5565b9150613c00836136f5565b9250828201905080821115613c1857613c17613bbb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c6557607f821691505b602082108103613c7857613c77613c1e565b5b50919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613cda6039836137a0565b9150613ce582613c7e565b604082019050919050565b60006020820190508181036000830152613d0981613ccd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d6c6026836137a0565b9150613d7782613d10565b604082019050919050565b60006020820190508181036000830152613d9b81613d5f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613dd8601b836137a0565b9150613de382613da2565b602082019050919050565b60006020820190508181036000830152613e0781613dcb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e6a6024836137a0565b9150613e7582613e0e565b604082019050919050565b60006020820190508181036000830152613e9981613e5d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613efc6022836137a0565b9150613f0782613ea0565b604082019050919050565b60006020820190508181036000830152613f2b81613eef565b9050919050565b6000613f3d826136f5565b9150613f48836136f5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8157613f80613bbb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fc6826136f5565b9150613fd1836136f5565b925082613fe157613fe0613f8c565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140486025836137a0565b915061405382613fec565b604082019050919050565b600060208201905081810360008301526140778161403b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140da6023836137a0565b91506140e58261407e565b604082019050919050565b60006020820190508181036000830152614109816140cd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141466016836137a0565b915061415182614110565b602082019050919050565b6000602082019050818103600083015261417581614139565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006141fe6049836137a0565b91506142098261417c565b606082019050919050565b6000602082019050818103600083015261422d816141f1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006142906035836137a0565b915061429b82614234565b604082019050919050565b600060208201905081810360008301526142bf81614283565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006142fc6013836137a0565b9150614307826142c6565b602082019050919050565b6000602082019050818103600083015261432b816142ef565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061438e6036836137a0565b915061439982614332565b604082019050919050565b600060208201905081810360008301526143bd81614381565b9050919050565b60006143cf826136f5565b91506143da836136f5565b92508282039050818111156143f2576143f1613bbb565b5b92915050565b600081905092915050565b50565b60006144136000836143f8565b915061441e82614403565b600082019050919050565b600061443482614406565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061449a6021836137a0565b91506144a58261443e565b604082019050919050565b600060208201905081810360008301526144c98161448d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061452c6021836137a0565b9150614537826144d0565b604082019050919050565b6000602082019050818103600083015261455b8161451f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506145cf81613879565b92915050565b6000602082840312156145eb576145ea6136f0565b5b60006145f9848285016145c0565b91505092915050565b6000819050919050565b600061462761462261461d84614602565b613975565b6136f5565b9050919050565b6146378161460c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61467281613867565b82525050565b60006146848383614669565b60208301905092915050565b6000602082019050919050565b60006146a88261463d565b6146b28185614648565b93506146bd83614659565b8060005b838110156146ee5781516146d58882614678565b97506146e083614690565b9250506001810190506146c1565b5085935050505092915050565b600060a082019050614710600083018861376b565b61471d602083018761462e565b818103604083015261472f818661469d565b905061473e6060830185613a42565b61474b608083018461376b565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205f01d398abf38010340f5cc23000d9402ecf759d502ce6a18dcdff82257d8af664736f6c63430008100033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c80638a8c523c11610175578063adb873bd116100dc578063d85ba06311610095578063e71dc3f51161006f578063e71dc3f514610b0d578063f203acb614610b38578063f2fde38b14610b63578063f8b45b0514610b8c576102d4565b8063d85ba06314610a7a578063dd62ed3e14610aa5578063e2f4560514610ae2576102d4565b8063adb873bd14610968578063b62496f514610993578063bbc0c742146109d0578063c0246668146109fb578063c876d0b914610a24578063c8c8ebe414610a4f576102d4565b80639c3b4fdc1161012e5780639c3b4fdc146108445780639fccce321461086f5780639fdc48241461089a578063a0d82dc5146108c3578063a457c2d7146108ee578063a9059cbb1461092b576102d4565b80638a8c523c146107585780638da5cb5b1461076f5780638ea5220f1461079a57806395d89b41146107c5578063975d71e2146107f05780639a7a23d61461081b576102d4565b806327c8f8351161023457806366ca9b83116101ed57806370a08231116101c757806370a08231146106b0578063715018a6146106ed5780637571336a146107045780637ab439831461072d576102d4565b806366ca9b83146106315780636a486a8e1461065a5780636ddd171314610685576102d4565b806327c8f8351461050b578063313ce56714610536578063395093511461056157806349bd5a5e1461059e5780634a62bb65146105c95780634fbee193146105f4576102d4565b80631694505e116102865780631694505e146103fb57806318160ddd146104265780631816467f146104515780631d7778561461047a5780631fa07da5146104a557806323b872dd146104ce576102d4565b806302dbd8f8146102d9578063047fc9aa1461030257806306fdde031461032d578063095ea7b31461035857806310d5de5314610395578063150de0bb146103d2576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb919061372b565b610bb7565b005b34801561030e57600080fd5b50610317610c76565b604051610324919061377a565b60405180910390f35b34801561033957600080fd5b50610342610c7c565b60405161034f9190613825565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a91906138a5565b610d0e565b60405161038c9190613900565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b7919061391b565b610d2c565b6040516103c99190613900565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613948565b610d4c565b005b34801561040757600080fd5b50610410610e03565b60405161041d91906139d4565b60405180910390f35b34801561043257600080fd5b5061043b610e27565b604051610448919061377a565b60405180910390f35b34801561045d57600080fd5b506104786004803603810190610473919061391b565b610e31565b005b34801561048657600080fd5b5061048f610f0c565b60405161049c919061377a565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613948565b610f12565b005b3480156104da57600080fd5b506104f560048036038101906104f091906139ef565b610fc9565b6040516105029190613900565b60405180910390f35b34801561051757600080fd5b506105206110a2565b60405161052d9190613a51565b60405180910390f35b34801561054257600080fd5b5061054b6110a8565b6040516105589190613a88565b60405180910390f35b34801561056d57600080fd5b50610588600480360381019061058391906138a5565b6110b1565b6040516105959190613900565b60405180910390f35b3480156105aa57600080fd5b506105b3611164565b6040516105c09190613a51565b60405180910390f35b3480156105d557600080fd5b506105de611188565b6040516105eb9190613900565b60405180910390f35b34801561060057600080fd5b5061061b6004803603810190610616919061391b565b61119b565b6040516106289190613900565b60405180910390f35b34801561063d57600080fd5b506106586004803603810190610653919061372b565b6111f1565b005b34801561066657600080fd5b5061066f6112b0565b60405161067c919061377a565b60405180910390f35b34801561069157600080fd5b5061069a6112b6565b6040516106a79190613900565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d2919061391b565b6112c9565b6040516106e4919061377a565b60405180910390f35b3480156106f957600080fd5b50610702611311565b005b34801561071057600080fd5b5061072b60048036038101906107269190613acf565b611469565b005b34801561073957600080fd5b5061074261155b565b60405161074f919061377a565b60405180910390f35b34801561076457600080fd5b5061076d611561565b005b34801561077b57600080fd5b5061078461164e565b6040516107919190613a51565b60405180910390f35b3480156107a657600080fd5b506107af611678565b6040516107bc9190613a51565b60405180910390f35b3480156107d157600080fd5b506107da61169e565b6040516107e79190613825565b60405180910390f35b3480156107fc57600080fd5b50610805611730565b604051610812919061377a565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190613acf565b611736565b005b34801561085057600080fd5b50610859611869565b604051610866919061377a565b60405180910390f35b34801561087b57600080fd5b5061088461186f565b604051610891919061377a565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc9190613948565b611875565b005b3480156108cf57600080fd5b506108d8611916565b6040516108e5919061377a565b60405180910390f35b3480156108fa57600080fd5b50610915600480360381019061091091906138a5565b61191c565b6040516109229190613900565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d91906138a5565b6119e9565b60405161095f9190613900565b60405180910390f35b34801561097457600080fd5b5061097d611a07565b60405161098a919061377a565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b5919061391b565b611a0d565b6040516109c79190613900565b60405180910390f35b3480156109dc57600080fd5b506109e5611a2d565b6040516109f29190613900565b60405180910390f35b348015610a0757600080fd5b50610a226004803603810190610a1d9190613acf565b611a40565b005b348015610a3057600080fd5b50610a39611b80565b604051610a469190613900565b60405180910390f35b348015610a5b57600080fd5b50610a64611b93565b604051610a71919061377a565b60405180910390f35b348015610a8657600080fd5b50610a8f611b99565b604051610a9c919061377a565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613b0f565b611b9f565b604051610ad9919061377a565b60405180910390f35b348015610aee57600080fd5b50610af7611c26565b604051610b04919061377a565b60405180910390f35b348015610b1957600080fd5b50610b22611c2c565b604051610b2f919061377a565b60405180910390f35b348015610b4457600080fd5b50610b4d611c32565b604051610b5a919061377a565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b85919061391b565b611c38565b005b348015610b9857600080fd5b50610ba1611dfe565b604051610bae919061377a565b60405180910390f35b610bbf611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4590613b9b565b60405180910390fd5b8160108190555080601181905550601154601054610c6c9190613bea565b6012819055505050565b60095481565b606060038054610c8b90613c4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb790613c4d565b8015610d045780601f10610cd957610100808354040283529160200191610d04565b820191906000526020600020905b815481529060010190602001808311610ce757829003601f168201915b5050505050905090565b6000610d22610d1b611e62565b8484611e6a565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b610d54611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90613b9b565b60405180910390fd5b6001811015610df157600080fd5b80601581905550610e00612033565b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e39611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613b9b565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b610f1a611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090613b9b565b60405180910390fd5b6001811015610fb757600080fd5b80601681905550610fc6612033565b50565b6000610fd684848461209b565b61109784610fe2611e62565b6110928560405180606001604052806028815260200161479e60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611048611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b611e6a565b600190509392505050565b61dead81565b60006006905090565b600061115a6110be611e62565b8461115585600160006110cf611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b611e6a565b6001905092915050565b7f000000000000000000000000a98c0868f066f3923959742f0036f3c5835d872b81565b600a60149054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111f9611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90613b9b565b60405180910390fd5b81600d8190555080600e81905550600e54600d546112a69190613bea565b600f819055505050565b60125481565b600a60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611319611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611471611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790613b9b565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611569611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef90613b9b565b60405180910390fd5b6001600d819055506000600e81905550600e54600d546116189190613bea565b600f819055506001601081905550600060118190555060115460105461163e9190613bea565b6012819055506000601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546116ad90613c4d565b80601f01602080910402602001604051908101604052809291908181526020018280546116d990613c4d565b80156117265780601f106116fb57610100808354040283529160200191611726565b820191906000526020600020905b81548152906001019060200180831161170957829003601f168201915b5050505050905090565b60165481565b61173e611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490613b9b565b60405180910390fd5b7f000000000000000000000000a98c0868f066f3923959742f0036f3c5835d872b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290613cf0565b60405180910390fd5b6118658282612d73565b5050565b600e5481565b60145481565b61187d611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613b9b565b60405180910390fd5b8060178190555050565b60115481565b60006119df611929611e62565b846119da856040518060600160405280602581526020016147c66025913960016000611953611e62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b611e6a565b6001905092915050565b60006119fd6119f6611e62565b848461209b565b6001905092915050565b60105481565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60159054906101000a900460ff1681565b611a48611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ace90613b9b565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611b749190613900565b60405180910390a25050565b600c60009054906101000a900460ff1681565b60065481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b600d5481565b60175481565b611c40611e62565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690613b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590613d82565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000808284611e139190613bea565b905083811015611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f90613dee565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090613e80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90613f12565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612026919061377a565b60405180910390a3505050565b60646016546009546120459190613f32565b61204f9190613fbb565b60068190555061271060056009546120679190613f32565b6120719190613fbb565b60078190555060646015546009546120899190613f32565b6120939190613fbb565b600881905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361210a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121019061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612179576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612170906140f0565b60405180910390fd5b600081036121925761218d83836000612e14565b612d0a565b600a60149054906101000a900460ff1615612862576121af61164e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561221d57506121ed61164e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122565750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612290575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a95750600560149054906101000a900460ff16155b1561286157600a60159054906101000a900460ff166123a357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123635750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123999061415c565b60405180910390fd5b5b600c60009054906101000a900460ff1615612578576123c061164e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561244757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561249f57507f000000000000000000000000a98c0868f066f3923959742f0036f3c5835d872b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125775743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251c90614214565b60405180910390fd5b601754436125339190613bea565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561261b5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126c257600654811115612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c906142a6565b60405180910390fd5b600854612671836112c9565b8261267c9190613bea565b11156126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b490614312565b60405180910390fd5b612860565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127655750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b4576006548111156127af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a6906143a4565b60405180910390fd5b61285f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661285e57600854612811836112c9565b8261281c9190613bea565b111561285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285490614312565b60405180910390fd5b5b5b5b5b5b600061286d306112c9565b9050600060075482101590508080156128935750600560149054906101000a900460ff16155b80156128ab5750600a60169054906101000a900460ff165b80156129015750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129575750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129ad5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129f1576001600560146101000a81548160ff0219169083151502179055506129d56130a7565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612aa75750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ab157600090505b60008115612cfa57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b1457506000601254115b15612bae57612b416064612b336012548861319090919063ffffffff16565b61320a90919063ffffffff16565b905060125460105482612b549190613f32565b612b5e9190613fbb565b60136000828254612b6f9190613bea565b9250508190555060125460115482612b879190613f32565b612b919190613fbb565b60146000828254612ba29190613bea565b92505081905550612ca0565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c0957506000600f54115b15612c9f57612c366064612c28600f548861319090919063ffffffff16565b61320a90919063ffffffff16565b9050600f54600d5482612c499190613f32565b612c539190613fbb565b60136000828254612c649190613bea565b92505081905550600f54600e5482612c7c9190613f32565b612c869190613fbb565b60146000828254612c979190613bea565b925050819055505b5b6000811115612ceb57612cb4873083612e14565b60006013541115612cea57612ccb30601354613254565b612cd3610e27565b600981905550612ce1612033565b60006013819055505b5b8085612cf791906143c4565b94505b612d05878787612e14565b505050505b505050565b6000838311158290612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e9190613825565b60405180910390fd5b5060008385612d6691906143c4565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7a9061405e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee9906140f0565b60405180910390fd5b612efd838383613401565b612f6881604051806060016040528060268152602001614778602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ffb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161309a919061377a565b60405180910390a3505050565b60006130b2306112c9565b905060008082036130c457505061318e565b60146007546130d39190613f32565b8211156130ec5760146007546130e99190613f32565b91505b6130f582613406565b6000601481905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161314390614429565b60006040518083038185875af1925050503d8060008114613180576040519150601f19603f3d011682016040523d82523d6000602084013e613185565b606091505b50508091505050505b565b60008083036131a25760009050613204565b600082846131b09190613f32565b90508284826131bf9190613fbb565b146131ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f6906144b0565b60405180910390fd5b809150505b92915050565b600061324c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613643565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90614542565b60405180910390fd5b6132cf82600083613401565b61333a81604051806060016040528060228152602001614756602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d0f9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613391816002546136a690919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133f5919061377a565b60405180910390a35050565b505050565b6000600267ffffffffffffffff81111561342357613422614562565b5b6040519080825280602002602001820160405280156134515781602001602082028036833780820191505090505b509050308160008151811061346957613468614591565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561350e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353291906145d5565b8160018151811061354657613545614591565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135ab307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e6a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161360d9594939291906146fb565b600060405180830381600087803b15801561362757600080fd5b505af115801561363b573d6000803e3d6000fd5b505050505050565b6000808311829061368a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136819190613825565b60405180910390fd5b50600083856136999190613fbb565b9050809150509392505050565b60006136e883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d0f565b905092915050565b600080fd5b6000819050919050565b613708816136f5565b811461371357600080fd5b50565b600081359050613725816136ff565b92915050565b60008060408385031215613742576137416136f0565b5b600061375085828601613716565b925050602061376185828601613716565b9150509250929050565b613774816136f5565b82525050565b600060208201905061378f600083018461376b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137cf5780820151818401526020810190506137b4565b60008484015250505050565b6000601f19601f8301169050919050565b60006137f782613795565b61380181856137a0565b93506138118185602086016137b1565b61381a816137db565b840191505092915050565b6000602082019050818103600083015261383f81846137ec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061387282613847565b9050919050565b61388281613867565b811461388d57600080fd5b50565b60008135905061389f81613879565b92915050565b600080604083850312156138bc576138bb6136f0565b5b60006138ca85828601613890565b92505060206138db85828601613716565b9150509250929050565b60008115159050919050565b6138fa816138e5565b82525050565b600060208201905061391560008301846138f1565b92915050565b600060208284031215613931576139306136f0565b5b600061393f84828501613890565b91505092915050565b60006020828403121561395e5761395d6136f0565b5b600061396c84828501613716565b91505092915050565b6000819050919050565b600061399a61399561399084613847565b613975565b613847565b9050919050565b60006139ac8261397f565b9050919050565b60006139be826139a1565b9050919050565b6139ce816139b3565b82525050565b60006020820190506139e960008301846139c5565b92915050565b600080600060608486031215613a0857613a076136f0565b5b6000613a1686828701613890565b9350506020613a2786828701613890565b9250506040613a3886828701613716565b9150509250925092565b613a4b81613867565b82525050565b6000602082019050613a666000830184613a42565b92915050565b600060ff82169050919050565b613a8281613a6c565b82525050565b6000602082019050613a9d6000830184613a79565b92915050565b613aac816138e5565b8114613ab757600080fd5b50565b600081359050613ac981613aa3565b92915050565b60008060408385031215613ae657613ae56136f0565b5b6000613af485828601613890565b9250506020613b0585828601613aba565b9150509250929050565b60008060408385031215613b2657613b256136f0565b5b6000613b3485828601613890565b9250506020613b4585828601613890565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b856020836137a0565b9150613b9082613b4f565b602082019050919050565b60006020820190508181036000830152613bb481613b78565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bf5826136f5565b9150613c00836136f5565b9250828201905080821115613c1857613c17613bbb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c6557607f821691505b602082108103613c7857613c77613c1e565b5b50919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613cda6039836137a0565b9150613ce582613c7e565b604082019050919050565b60006020820190508181036000830152613d0981613ccd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d6c6026836137a0565b9150613d7782613d10565b604082019050919050565b60006020820190508181036000830152613d9b81613d5f565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613dd8601b836137a0565b9150613de382613da2565b602082019050919050565b60006020820190508181036000830152613e0781613dcb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e6a6024836137a0565b9150613e7582613e0e565b604082019050919050565b60006020820190508181036000830152613e9981613e5d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613efc6022836137a0565b9150613f0782613ea0565b604082019050919050565b60006020820190508181036000830152613f2b81613eef565b9050919050565b6000613f3d826136f5565b9150613f48836136f5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8157613f80613bbb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fc6826136f5565b9150613fd1836136f5565b925082613fe157613fe0613f8c565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140486025836137a0565b915061405382613fec565b604082019050919050565b600060208201905081810360008301526140778161403b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140da6023836137a0565b91506140e58261407e565b604082019050919050565b60006020820190508181036000830152614109816140cd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141466016836137a0565b915061415182614110565b602082019050919050565b6000602082019050818103600083015261417581614139565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006141fe6049836137a0565b91506142098261417c565b606082019050919050565b6000602082019050818103600083015261422d816141f1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006142906035836137a0565b915061429b82614234565b604082019050919050565b600060208201905081810360008301526142bf81614283565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006142fc6013836137a0565b9150614307826142c6565b602082019050919050565b6000602082019050818103600083015261432b816142ef565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061438e6036836137a0565b915061439982614332565b604082019050919050565b600060208201905081810360008301526143bd81614381565b9050919050565b60006143cf826136f5565b91506143da836136f5565b92508282039050818111156143f2576143f1613bbb565b5b92915050565b600081905092915050565b50565b60006144136000836143f8565b915061441e82614403565b600082019050919050565b600061443482614406565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061449a6021836137a0565b91506144a58261443e565b604082019050919050565b600060208201905081810360008301526144c98161448d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061452c6021836137a0565b9150614537826144d0565b604082019050919050565b6000602082019050818103600083015261455b8161451f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506145cf81613879565b92915050565b6000602082840312156145eb576145ea6136f0565b5b60006145f9848285016145c0565b91505092915050565b6000819050919050565b600061462761462261461d84614602565b613975565b6136f5565b9050919050565b6146378161460c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61467281613867565b82525050565b60006146848383614669565b60208301905092915050565b6000602082019050919050565b60006146a88261463d565b6146b28185614648565b93506146bd83614659565b8060005b838110156146ee5781516146d58882614678565b97506146e083614690565b9250506001810190506146c1565b5085935050505092915050565b600060a082019050614710600083018861376b565b61471d602083018761462e565b818103604083015261472f818661469d565b905061473e6060830185613a42565b61474b608083018461376b565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205f01d398abf38010340f5cc23000d9402ecf759d502ce6a18dcdff82257d8af664736f6c63430008100033
Deployed Bytecode Sourcemap
29684:11201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34431:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30087:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7814:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9980:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30917:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33793:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29765:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8933:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34640:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30602:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33630:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10631:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29868:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8776:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11395:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29823:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30154:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35617:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34224:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30558:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30233:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9104:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22278:148;;;;;;;;;;;;;:::i;:::-;;34068:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30673:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33338:280;;;;;;;;;;;;;:::i;:::-;;21636:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30117:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8033:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30706:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35169:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30426:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30637:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33958:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30526:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12116:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9444:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30493:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31139:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30194:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34751:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30345:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29968:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30457:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9682:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30010:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30394:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30738;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22581:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30050:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34431:201;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34534:8:::1;34520:11;:22;;;;34566:7;34553:10;:20;;;;34614:10;;34600:11;;:24;;;;:::i;:::-;34584:13;:40;;;;34431:201:::0;;:::o;30087:21::-;;;;:::o;7814:100::-;7868:13;7901:5;7894:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7814:100;:::o;9980:169::-;10063:4;10080:39;10089:12;:10;:12::i;:::-;10103:7;10112:6;10080:8;:39::i;:::-;10137:4;10130:11;;9980:169;;;;:::o;30917:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;33793:157::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33884:1:::1;33874:6;:11;;33866:20;;;::::0;::::1;;33911:6;33897:11;:20;;;;33928:14;:12;:14::i;:::-;33793:157:::0;:::o;29765:51::-;;;:::o;8933:108::-;8994:7;9021:12;;9014:19;;8933:108;:::o;34640:103::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34726:9:::1;34714;;:21;;;;;;;;;;;;;;;;;;34640:103:::0;:::o;30602:28::-;;;;:::o;33630:155::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33720:1:::1;33710:6;:11;;33702:20;;;::::0;::::1;;33746:6;33733:10;:19;;;;33763:14;:12;:14::i;:::-;33630:155:::0;:::o;10631:355::-;10771:4;10788:36;10798:6;10806:9;10817:6;10788:9;:36::i;:::-;10835:121;10844:6;10852:12;:10;:12::i;:::-;10866:89;10904:6;10866:89;;;;;;;;;;;;;;;;;:11;:19;10878:6;10866:19;;;;;;;;;;;;;;;:33;10886:12;:10;:12::i;:::-;10866:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10835:8;:121::i;:::-;10974:4;10967:11;;10631:355;;;;;:::o;29868:53::-;29914:6;29868:53;:::o;8776:92::-;8834:5;8859:1;8852:8;;8776:92;:::o;11395:218::-;11483:4;11500:83;11509:12;:10;:12::i;:::-;11523:7;11532:50;11571:10;11532:11;:25;11544:12;:10;:12::i;:::-;11532:25;;;;;;;;;;;;;;;:34;11558:7;11532:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11500:8;:83::i;:::-;11601:4;11594:11;;11395:218;;;;:::o;29823:38::-;;;:::o;30154:33::-;;;;;;;;;;;;;:::o;35617:125::-;35682:4;35706:19;:28;35726:7;35706:28;;;;;;;;;;;;;;;;;;;;;;;;;35699:35;;35617:125;;;:::o;34224:195::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34325:8:::1;34312:10;:21;;;;34356:7;34344:9;:19;;;;34402:9;;34389:10;;:22;;;;:::i;:::-;34374:12;:37;;;;34224:195:::0;;:::o;30558:28::-;;;;:::o;30233:30::-;;;;;;;;;;;;;:::o;9104:127::-;9178:7;9205:9;:18;9215:7;9205:18;;;;;;;;;;;;;;;;9198:25;;9104:127;;;:::o;22278:148::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22385:1:::1;22348:40;;22369:6;;;;;;;;;;;22348:40;;;;;;;;;;;;22416:1;22399:6;;:19;;;;;;;;;;;;;;;;;;22278:148::o:0;34068:144::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34200:4:::1;34158:31;:39;34190:6;34158:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34068:144:::0;;:::o;30673:26::-;;;;:::o;33338:280::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33406:1:::1;33393:10;:14;;;;33430:1;33418:9;:13;;;;33470:9;;33457:10;;:22;;;;:::i;:::-;33442:12;:37;;;;33506:1;33492:11;:15;;;;33531:1;33518:10;:14;;;;33573:10;;33559:11;;:24;;;;:::i;:::-;33543:13;:40;;;;33609:1;33596:10;:14;;;;33338:280::o:0;21636:79::-;21674:7;21701:6;;;;;;;;;;;21694:13;;21636:79;:::o;30117:24::-;;;;;;;;;;;;;:::o;8033:104::-;8089:13;8122:7;8115:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8033:104;:::o;30706:25::-;;;;:::o;35169:244::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35276:13:::1;35268:21;;:4;:21;;::::0;35260:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35364:41;35393:4;35399:5;35364:28;:41::i;:::-;35169:244:::0;;:::o;30426:24::-;;;;:::o;30637:27::-;;;;:::o;33958:98::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34042:6:::1;34029:10;:19;;;;33958:98:::0;:::o;30526:25::-;;;;:::o;12116:269::-;12209:4;12226:129;12235:12;:10;:12::i;:::-;12249:7;12258:96;12297:15;12258:96;;;;;;;;;;;;;;;;;:11;:25;12270:12;:10;:12::i;:::-;12258:25;;;;;;;;;;;;;;;:34;12284:7;12258:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12226:8;:129::i;:::-;12373:4;12366:11;;12116:269;;;;:::o;9444:175::-;9530:4;9547:42;9557:12;:10;:12::i;:::-;9571:9;9582:6;9547:9;:42::i;:::-;9607:4;9600:11;;9444:175;;;;:::o;30493:26::-;;;;:::o;31139:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30194:32::-;;;;;;;;;;;;;:::o;34751:182::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34867:8:::1;34836:19;:28;34856:7;34836:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34907:7;34891:34;;;34916:8;34891:34;;;;;;:::i;:::-;;;;;;;;34751:182:::0;;:::o;30345:40::-;;;;;;;;;;;;;:::o;29968:35::-;;;;:::o;30457:27::-;;;;:::o;9682:151::-;9771:7;9798:11;:18;9810:5;9798:18;;;;;;;;;;;;;;;:27;9817:7;9798:27;;;;;;;;;;;;;;;;9791:34;;9682:151;;;;:::o;30010:33::-;;;;:::o;30394:25::-;;;;:::o;30738:::-;;;;:::o;22581:244::-;21858:12;:10;:12::i;:::-;21848:22;;:6;;;;;;;;;;;:22;;;21840:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22690:1:::1;22670:22;;:8;:22;;::::0;22662:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22780:8;22751:38;;22772:6;;;;;;;;;;;22751:38;;;;;;;;;;;;22809:8;22800:6;;:17;;;;;;;;;;;;;;;;;;22581:244:::0;:::o;30050:24::-;;;;:::o;16680:181::-;16738:7;16758:9;16774:1;16770;:5;;;;:::i;:::-;16758:17;;16799:1;16794;:6;;16786:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16852:1;16845:8;;;16680:181;;;;:::o;450:98::-;503:7;530:10;523:17;;450:98;:::o;15302:380::-;15455:1;15438:19;;:5;:19;;;15430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15536:1;15517:21;;:7;:21;;;15509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15620:6;15590:11;:18;15602:5;15590:18;;;;;;;;;;;;;;;:27;15609:7;15590:27;;;;;;;;;;;;;;;:36;;;;15658:7;15642:32;;15651:5;15642:32;;;15667:6;15642:32;;;;;;:::i;:::-;;;;;;;;15302:380;;;:::o;34941:220::-;35029:3;35016:10;;35007:6;;:19;;;;:::i;:::-;:25;;;;:::i;:::-;34984:20;:48;;;;35077:5;35073:1;35064:6;;:10;;;;:::i;:::-;:18;;;;:::i;:::-;35043;:39;;;;35150:3;35136:11;;35127:6;;:20;;;;:::i;:::-;:26;;;;:::i;:::-;35115:9;:38;;;;34941:220::o;35754:4041::-;35902:1;35886:18;;:4;:18;;;35878:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35979:1;35965:16;;:2;:16;;;35957:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36056:1;36046:6;:11;36043:92;;36074:28;36090:4;36096:2;36100:1;36074:15;:28::i;:::-;36117:7;;36043:92;36158:14;;;;;;;;;;;36155:1854;;;36218:7;:5;:7::i;:::-;36210:15;;:4;:15;;;;:49;;;;;36252:7;:5;:7::i;:::-;36246:13;;:2;:13;;;;36210:49;:86;;;;;36294:1;36280:16;;:2;:16;;;;36210:86;:128;;;;;36331:6;36317:21;;:2;:21;;;;36210:128;:158;;;;;36360:8;;;;;;;;;;;36359:9;36210:158;36188:1810;;;36406:13;;;;;;;;;;;36402:148;;36451:19;:25;36471:4;36451:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36480:19;:23;36500:2;36480:23;;;;;;;;;;;;;;;;;;;;;;;;;36451:52;36443:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36402:148;36708:20;;;;;;;;;;;36704:436;;;36762:7;:5;:7::i;:::-;36756:13;;:2;:13;;;;:47;;;;;36787:15;36773:30;;:2;:30;;;;36756:47;:79;;;;;36821:13;36807:28;;:2;:28;;;;36756:79;36752:369;;;36913:12;36871:28;:39;36900:9;36871:39;;;;;;;;;;;;;;;;:54;36863:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37087:10;;37072:12;:25;;;;:::i;:::-;37030:28;:39;37059:9;37030:39;;;;;;;;;;;;;;;:67;;;;36752:369;36704:436;37209:25;:31;37235:4;37209:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37245:31;:35;37277:2;37245:35;;;;;;;;;;;;;;;;;;;;;;;;;37244:36;37209:71;37205:778;;;37327:20;;37317:6;:30;;37309:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37466:9;;37449:13;37459:2;37449:9;:13::i;:::-;37440:6;:22;;;;:::i;:::-;:35;;37432:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37205:778;;;37593:25;:29;37619:2;37593:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37627:31;:37;37659:4;37627:37;;;;;;;;;;;;;;;;;;;;;;;;;37626:38;37593:71;37589:394;;;37711:20;;37701:6;:30;;37693:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37589:394;;;37837:31;:35;37869:2;37837:35;;;;;;;;;;;;;;;;;;;;;;;;;37833:150;;37930:9;;37913:13;37923:2;37913:9;:13::i;:::-;37904:6;:22;;;;:::i;:::-;:35;;37896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37833:150;37589:394;37205:778;36188:1810;36155:1854;38019:28;38050:24;38068:4;38050:9;:24::i;:::-;38019:55;;38095:12;38134:18;;38110:20;:42;;38095:57;;38183:7;:33;;;;;38208:8;;;;;;;;;;;38207:9;38183:33;:61;;;;;38233:11;;;;;;;;;;;38183:61;:110;;;;;38262:25;:31;38288:4;38262:31;;;;;;;;;;;;;;;;;;;;;;;;;38261:32;38183:110;:153;;;;;38311:19;:25;38331:4;38311:25;;;;;;;;;;;;;;;;;;;;;;;;;38310:26;38183:153;:194;;;;;38354:19;:23;38374:2;38354:23;;;;;;;;;;;;;;;;;;;;;;;;;38353:24;38183:194;38165:338;;;38415:4;38404:8;;:15;;;;;;;;;;;;;;;;;;38448:10;:8;:10::i;:::-;38486:5;38475:8;;:16;;;;;;;;;;;;;;;;;;38165:338;38523:12;38539:8;;;;;;;;;;;38538:9;38523:24;;38563:19;:25;38583:4;38563:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38592:19;:23;38612:2;38592:23;;;;;;;;;;;;;;;;;;;;;;;;;38563:52;38560:99;;;38642:5;38632:15;;38560:99;38679:12;38711:7;38708:1034;;;38762:25;:29;38788:2;38762:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38811:1;38795:13;;:17;38762:50;38758:574;;;38839:34;38869:3;38839:25;38850:13;;38839:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38832:41;;38930:13;;38916:11;;38909:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;38892:13;;:51;;;;;;;:::i;:::-;;;;;;;;38998:13;;38985:10;;38978:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;38962:12;;:49;;;;;;;:::i;:::-;;;;;;;;38758:574;;;39074:25;:31;39100:4;39074:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39124:1;39109:12;;:16;39074:51;39071:261;;;39152:33;39181:3;39152:24;39163:12;;39152:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39145:40;;39238:12;;39225:10;;39218:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;39201:13;;:49;;;;;;;:::i;:::-;;;;;;;;39304:12;;39292:9;;39285:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;39269:12;;:47;;;;;;;:::i;:::-;;;;;;;;39071:261;38758:574;39370:1;39363:4;:8;39360:334;;;39395:42;39411:4;39425;39432;39395:15;:42::i;:::-;39476:1;39460:13;;:17;39456:223;;;39502:35;39516:4;39523:13;;39502:5;:35::i;:::-;39569:13;:11;:13::i;:::-;39560:6;:22;;;;39605:14;:12;:14::i;:::-;39658:1;39642:13;:17;;;;39456:223;39360:334;39726:4;39716:14;;;;;:::i;:::-;;;38708:1034;39754:33;39770:4;39776:2;39780:6;39754:15;:33::i;:::-;35867:3928;;;;35754:4041;;;;:::o;17583:192::-;17669:7;17702:1;17697;:6;;17705:12;17689:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17729:9;17745:1;17741;:5;;;;:::i;:::-;17729:17;;17766:1;17759:8;;;17583:192;;;;;:::o;35421:188::-;35538:5;35504:25;:31;35530:4;35504:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35595:5;35561:40;;35589:4;35561:40;;;;;;;;;;;;35421:188;;:::o;12875:573::-;13033:1;13015:20;;:6;:20;;;13007:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13117:1;13096:23;;:9;:23;;;13088:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13172:47;13193:6;13201:9;13212:6;13172:20;:47::i;:::-;13252:71;13274:6;13252:71;;;;;;;;;;;;;;;;;:9;:17;13262:6;13252:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13232:9;:17;13242:6;13232:17;;;;;;;;;;;;;;;:91;;;;13357:32;13382:6;13357:9;:20;13367:9;13357:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13334:9;:20;13344:9;13334:20;;;;;;;;;;;;;;;:55;;;;13422:9;13405:35;;13414:6;13405:35;;;13433:6;13405:35;;;;;;:::i;:::-;;;;;;;;12875:573;;;:::o;40416:464::-;40455:23;40481:24;40499:4;40481:9;:24::i;:::-;40455:50;;40516:12;40571:1;40552:15;:20;40549:34;;40575:7;;;;40549:34;40637:2;40616:18;;:23;;;;:::i;:::-;40598:15;:41;40595:111;;;40692:2;40671:18;;:23;;;;:::i;:::-;40653:41;;40595:111;40718:33;40735:15;40718:16;:33::i;:::-;40788:1;40773:12;:16;;;;40823:9;;;;;;;;;;;40815:23;;40846:21;40815:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40802:70;;;;;40444:436;;40416:464;:::o;18034:471::-;18092:7;18342:1;18337;:6;18333:47;;18367:1;18360:8;;;;18333:47;18392:9;18408:1;18404;:5;;;;:::i;:::-;18392:17;;18437:1;18432;18428;:5;;;;:::i;:::-;:10;18420:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18496:1;18489:8;;;18034:471;;;;;:::o;18981:132::-;19039:7;19066:39;19070:1;19073;19066:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19059:46;;18981:132;;;;:::o;14446:418::-;14549:1;14530:21;;:7;:21;;;14522:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14602:49;14623:7;14640:1;14644:6;14602:20;:49::i;:::-;14685:68;14708:6;14685:68;;;;;;;;;;;;;;;;;:9;:18;14695:7;14685:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;14664:9;:18;14674:7;14664:18;;;;;;;;;;;;;;;:89;;;;14779:24;14796:6;14779:12;;:16;;:24;;;;:::i;:::-;14764:12;:39;;;;14845:1;14819:37;;14828:7;14819:37;;;14849:6;14819:37;;;;;;:::i;:::-;;;;;;;;14446:418;;:::o;16285:125::-;;;;:::o;39803:601::-;39931:21;39969:1;39955:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39931:40;;40000:4;39982;39987:1;39982:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40026:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40016:4;40021:1;40016:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40061:62;40078:4;40093:15;40111:11;40061:8;:62::i;:::-;40162:15;:66;;;40243:11;40269:1;40313:4;40340;40360:15;40162:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39858:546;39803:601;:::o;19609:278::-;19695:7;19727:1;19723;:5;19730:12;19715:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19754:9;19770:1;19766;:5;;;;:::i;:::-;19754:17;;19878:1;19871:8;;;19609:278;;;;;:::o;17144:136::-;17202:7;17229:43;17233:1;17236;17229:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17222:50;;17144:136;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:118::-;1257:24;1275:5;1257:24;:::i;:::-;1252:3;1245:37;1170:118;;:::o;1294:222::-;1387:4;1425:2;1414:9;1410:18;1402:26;;1438:71;1506:1;1495:9;1491:17;1482:6;1438:71;:::i;:::-;1294:222;;;;:::o;1522:99::-;1574:6;1608:5;1602:12;1592:22;;1522:99;;;:::o;1627:169::-;1711:11;1745:6;1740:3;1733:19;1785:4;1780:3;1776:14;1761:29;;1627:169;;;;:::o;1802:246::-;1883:1;1893:113;1907:6;1904:1;1901:13;1893:113;;;1992:1;1987:3;1983:11;1977:18;1973:1;1968:3;1964:11;1957:39;1929:2;1926:1;1922:10;1917:15;;1893:113;;;2040:1;2031:6;2026:3;2022:16;2015:27;1864:184;1802:246;;;:::o;2054:102::-;2095:6;2146:2;2142:7;2137:2;2130:5;2126:14;2122:28;2112:38;;2054:102;;;:::o;2162:377::-;2250:3;2278:39;2311:5;2278:39;:::i;:::-;2333:71;2397:6;2392:3;2333:71;:::i;:::-;2326:78;;2413:65;2471:6;2466:3;2459:4;2452:5;2448:16;2413:65;:::i;:::-;2503:29;2525:6;2503:29;:::i;:::-;2498:3;2494:39;2487:46;;2254:285;2162:377;;;;:::o;2545:313::-;2658:4;2696:2;2685:9;2681:18;2673:26;;2745:9;2739:4;2735:20;2731:1;2720:9;2716:17;2709:47;2773:78;2846:4;2837:6;2773:78;:::i;:::-;2765:86;;2545:313;;;;:::o;2864:126::-;2901:7;2941:42;2934:5;2930:54;2919:65;;2864:126;;;:::o;2996:96::-;3033:7;3062:24;3080:5;3062:24;:::i;:::-;3051:35;;2996:96;;;:::o;3098:122::-;3171:24;3189:5;3171:24;:::i;:::-;3164:5;3161:35;3151:63;;3210:1;3207;3200:12;3151:63;3098:122;:::o;3226:139::-;3272:5;3310:6;3297:20;3288:29;;3326:33;3353:5;3326:33;:::i;:::-;3226:139;;;;:::o;3371:474::-;3439:6;3447;3496:2;3484:9;3475:7;3471:23;3467:32;3464:119;;;3502:79;;:::i;:::-;3464:119;3622:1;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3593:117;3749:2;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3720:118;3371:474;;;;;:::o;3851:90::-;3885:7;3928:5;3921:13;3914:21;3903:32;;3851:90;;;:::o;3947:109::-;4028:21;4043:5;4028:21;:::i;:::-;4023:3;4016:34;3947:109;;:::o;4062:210::-;4149:4;4187:2;4176:9;4172:18;4164:26;;4200:65;4262:1;4251:9;4247:17;4238:6;4200:65;:::i;:::-;4062:210;;;;:::o;4278:329::-;4337:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:119;;;4392:79;;:::i;:::-;4354:119;4512:1;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4483:117;4278:329;;;;:::o;4613:::-;4672:6;4721:2;4709:9;4700:7;4696:23;4692:32;4689:119;;;4727:79;;:::i;:::-;4689:119;4847:1;4872:53;4917:7;4908:6;4897:9;4893:22;4872:53;:::i;:::-;4862:63;;4818:117;4613:329;;;;:::o;4948:60::-;4976:3;4997:5;4990:12;;4948:60;;;:::o;5014:142::-;5064:9;5097:53;5115:34;5124:24;5142:5;5124:24;:::i;:::-;5115:34;:::i;:::-;5097:53;:::i;:::-;5084:66;;5014:142;;;:::o;5162:126::-;5212:9;5245:37;5276:5;5245:37;:::i;:::-;5232:50;;5162:126;;;:::o;5294:153::-;5371:9;5404:37;5435:5;5404:37;:::i;:::-;5391:50;;5294:153;;;:::o;5453:185::-;5567:64;5625:5;5567:64;:::i;:::-;5562:3;5555:77;5453:185;;:::o;5644:276::-;5764:4;5802:2;5791:9;5787:18;5779:26;;5815:98;5910:1;5899:9;5895:17;5886:6;5815:98;:::i;:::-;5644:276;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:118::-;6638:24;6656:5;6638:24;:::i;:::-;6633:3;6626:37;6551:118;;:::o;6675:222::-;6768:4;6806:2;6795:9;6791:18;6783:26;;6819:71;6887:1;6876:9;6872:17;6863:6;6819:71;:::i;:::-;6675:222;;;;:::o;6903:86::-;6938:7;6978:4;6971:5;6967:16;6956:27;;6903:86;;;:::o;6995:112::-;7078:22;7094:5;7078:22;:::i;:::-;7073:3;7066:35;6995:112;;:::o;7113:214::-;7202:4;7240:2;7229:9;7225:18;7217:26;;7253:67;7317:1;7306:9;7302:17;7293:6;7253:67;:::i;:::-;7113:214;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:474::-;8136:6;8144;8193:2;8181:9;8172:7;8168:23;8164:32;8161:119;;;8199:79;;:::i;:::-;8161:119;8319:1;8344:53;8389:7;8380:6;8369:9;8365:22;8344:53;:::i;:::-;8334:63;;8290:117;8446:2;8472:53;8517:7;8508:6;8497:9;8493:22;8472:53;:::i;:::-;8462:63;;8417:118;8068:474;;;;;:::o;8548:182::-;8688:34;8684:1;8676:6;8672:14;8665:58;8548:182;:::o;8736:366::-;8878:3;8899:67;8963:2;8958:3;8899:67;:::i;:::-;8892:74;;8975:93;9064:3;8975:93;:::i;:::-;9093:2;9088:3;9084:12;9077:19;;8736:366;;;:::o;9108:419::-;9274:4;9312:2;9301:9;9297:18;9289:26;;9361:9;9355:4;9351:20;9347:1;9336:9;9332:17;9325:47;9389:131;9515:4;9389:131;:::i;:::-;9381:139;;9108:419;;;:::o;9533:180::-;9581:77;9578:1;9571:88;9678:4;9675:1;9668:15;9702:4;9699:1;9692:15;9719:191;9759:3;9778:20;9796:1;9778:20;:::i;:::-;9773:25;;9812:20;9830:1;9812:20;:::i;:::-;9807:25;;9855:1;9852;9848:9;9841:16;;9876:3;9873:1;9870:10;9867:36;;;9883:18;;:::i;:::-;9867:36;9719:191;;;;:::o;9916:180::-;9964:77;9961:1;9954:88;10061:4;10058:1;10051:15;10085:4;10082:1;10075:15;10102:320;10146:6;10183:1;10177:4;10173:12;10163:22;;10230:1;10224:4;10220:12;10251:18;10241:81;;10307:4;10299:6;10295:17;10285:27;;10241:81;10369:2;10361:6;10358:14;10338:18;10335:38;10332:84;;10388:18;;:::i;:::-;10332:84;10153:269;10102:320;;;:::o;10428:244::-;10568:34;10564:1;10556:6;10552:14;10545:58;10637:27;10632:2;10624:6;10620:15;10613:52;10428:244;:::o;10678:366::-;10820:3;10841:67;10905:2;10900:3;10841:67;:::i;:::-;10834:74;;10917:93;11006:3;10917:93;:::i;:::-;11035:2;11030:3;11026:12;11019:19;;10678:366;;;:::o;11050:419::-;11216:4;11254:2;11243:9;11239:18;11231:26;;11303:9;11297:4;11293:20;11289:1;11278:9;11274:17;11267:47;11331:131;11457:4;11331:131;:::i;:::-;11323:139;;11050:419;;;:::o;11475:225::-;11615:34;11611:1;11603:6;11599:14;11592:58;11684:8;11679:2;11671:6;11667:15;11660:33;11475:225;:::o;11706:366::-;11848:3;11869:67;11933:2;11928:3;11869:67;:::i;:::-;11862:74;;11945:93;12034:3;11945:93;:::i;:::-;12063:2;12058:3;12054:12;12047:19;;11706:366;;;:::o;12078:419::-;12244:4;12282:2;12271:9;12267:18;12259:26;;12331:9;12325:4;12321:20;12317:1;12306:9;12302:17;12295:47;12359:131;12485:4;12359:131;:::i;:::-;12351:139;;12078:419;;;:::o;12503:177::-;12643:29;12639:1;12631:6;12627:14;12620:53;12503:177;:::o;12686:366::-;12828:3;12849:67;12913:2;12908:3;12849:67;:::i;:::-;12842:74;;12925:93;13014:3;12925:93;:::i;:::-;13043:2;13038:3;13034:12;13027:19;;12686:366;;;:::o;13058:419::-;13224:4;13262:2;13251:9;13247:18;13239:26;;13311:9;13305:4;13301:20;13297:1;13286:9;13282:17;13275:47;13339:131;13465:4;13339:131;:::i;:::-;13331:139;;13058:419;;;:::o;13483:223::-;13623:34;13619:1;13611:6;13607:14;13600:58;13692:6;13687:2;13679:6;13675:15;13668:31;13483:223;:::o;13712:366::-;13854:3;13875:67;13939:2;13934:3;13875:67;:::i;:::-;13868:74;;13951:93;14040:3;13951:93;:::i;:::-;14069:2;14064:3;14060:12;14053:19;;13712:366;;;:::o;14084:419::-;14250:4;14288:2;14277:9;14273:18;14265:26;;14337:9;14331:4;14327:20;14323:1;14312:9;14308:17;14301:47;14365:131;14491:4;14365:131;:::i;:::-;14357:139;;14084:419;;;:::o;14509:221::-;14649:34;14645:1;14637:6;14633:14;14626:58;14718:4;14713:2;14705:6;14701:15;14694:29;14509:221;:::o;14736:366::-;14878:3;14899:67;14963:2;14958:3;14899:67;:::i;:::-;14892:74;;14975:93;15064:3;14975:93;:::i;:::-;15093:2;15088:3;15084:12;15077:19;;14736:366;;;:::o;15108:419::-;15274:4;15312:2;15301:9;15297:18;15289:26;;15361:9;15355:4;15351:20;15347:1;15336:9;15332:17;15325:47;15389:131;15515:4;15389:131;:::i;:::-;15381:139;;15108:419;;;:::o;15533:348::-;15573:7;15596:20;15614:1;15596:20;:::i;:::-;15591:25;;15630:20;15648:1;15630:20;:::i;:::-;15625:25;;15818:1;15750:66;15746:74;15743:1;15740:81;15735:1;15728:9;15721:17;15717:105;15714:131;;;15825:18;;:::i;:::-;15714:131;15873:1;15870;15866:9;15855:20;;15533:348;;;;:::o;15887:180::-;15935:77;15932:1;15925:88;16032:4;16029:1;16022:15;16056:4;16053:1;16046:15;16073:185;16113:1;16130:20;16148:1;16130:20;:::i;:::-;16125:25;;16164:20;16182:1;16164:20;:::i;:::-;16159:25;;16203:1;16193:35;;16208:18;;:::i;:::-;16193:35;16250:1;16247;16243:9;16238:14;;16073:185;;;;:::o;16264:224::-;16404:34;16400:1;16392:6;16388:14;16381:58;16473:7;16468:2;16460:6;16456:15;16449:32;16264:224;:::o;16494:366::-;16636:3;16657:67;16721:2;16716:3;16657:67;:::i;:::-;16650:74;;16733:93;16822:3;16733:93;:::i;:::-;16851:2;16846:3;16842:12;16835:19;;16494:366;;;:::o;16866:419::-;17032:4;17070:2;17059:9;17055:18;17047:26;;17119:9;17113:4;17109:20;17105:1;17094:9;17090:17;17083:47;17147:131;17273:4;17147:131;:::i;:::-;17139:139;;16866:419;;;:::o;17291:222::-;17431:34;17427:1;17419:6;17415:14;17408:58;17500:5;17495:2;17487:6;17483:15;17476:30;17291:222;:::o;17519:366::-;17661:3;17682:67;17746:2;17741:3;17682:67;:::i;:::-;17675:74;;17758:93;17847:3;17758:93;:::i;:::-;17876:2;17871:3;17867:12;17860:19;;17519:366;;;:::o;17891:419::-;18057:4;18095:2;18084:9;18080:18;18072:26;;18144:9;18138:4;18134:20;18130:1;18119:9;18115:17;18108:47;18172:131;18298:4;18172:131;:::i;:::-;18164:139;;17891:419;;;:::o;18316:172::-;18456:24;18452:1;18444:6;18440:14;18433:48;18316:172;:::o;18494:366::-;18636:3;18657:67;18721:2;18716:3;18657:67;:::i;:::-;18650:74;;18733:93;18822:3;18733:93;:::i;:::-;18851:2;18846:3;18842:12;18835:19;;18494:366;;;:::o;18866:419::-;19032:4;19070:2;19059:9;19055:18;19047:26;;19119:9;19113:4;19109:20;19105:1;19094:9;19090:17;19083:47;19147:131;19273:4;19147:131;:::i;:::-;19139:139;;18866:419;;;:::o;19291:297::-;19431:34;19427:1;19419:6;19415:14;19408:58;19500:34;19495:2;19487:6;19483:15;19476:59;19569:11;19564:2;19556:6;19552:15;19545:36;19291:297;:::o;19594:366::-;19736:3;19757:67;19821:2;19816:3;19757:67;:::i;:::-;19750:74;;19833:93;19922:3;19833:93;:::i;:::-;19951:2;19946:3;19942:12;19935:19;;19594:366;;;:::o;19966:419::-;20132:4;20170:2;20159:9;20155:18;20147:26;;20219:9;20213:4;20209:20;20205:1;20194:9;20190:17;20183:47;20247:131;20373:4;20247:131;:::i;:::-;20239:139;;19966:419;;;:::o;20391:240::-;20531:34;20527:1;20519:6;20515:14;20508:58;20600:23;20595:2;20587:6;20583:15;20576:48;20391:240;:::o;20637:366::-;20779:3;20800:67;20864:2;20859:3;20800:67;:::i;:::-;20793:74;;20876:93;20965:3;20876:93;:::i;:::-;20994:2;20989:3;20985:12;20978:19;;20637:366;;;:::o;21009:419::-;21175:4;21213:2;21202:9;21198:18;21190:26;;21262:9;21256:4;21252:20;21248:1;21237:9;21233:17;21226:47;21290:131;21416:4;21290:131;:::i;:::-;21282:139;;21009:419;;;:::o;21434:169::-;21574:21;21570:1;21562:6;21558:14;21551:45;21434:169;:::o;21609:366::-;21751:3;21772:67;21836:2;21831:3;21772:67;:::i;:::-;21765:74;;21848:93;21937:3;21848:93;:::i;:::-;21966:2;21961:3;21957:12;21950:19;;21609:366;;;:::o;21981:419::-;22147:4;22185:2;22174:9;22170:18;22162:26;;22234:9;22228:4;22224:20;22220:1;22209:9;22205:17;22198:47;22262:131;22388:4;22262:131;:::i;:::-;22254:139;;21981:419;;;:::o;22406:241::-;22546:34;22542:1;22534:6;22530:14;22523:58;22615:24;22610:2;22602:6;22598:15;22591:49;22406:241;:::o;22653:366::-;22795:3;22816:67;22880:2;22875:3;22816:67;:::i;:::-;22809:74;;22892:93;22981:3;22892:93;:::i;:::-;23010:2;23005:3;23001:12;22994:19;;22653:366;;;:::o;23025:419::-;23191:4;23229:2;23218:9;23214:18;23206:26;;23278:9;23272:4;23268:20;23264:1;23253:9;23249:17;23242:47;23306:131;23432:4;23306:131;:::i;:::-;23298:139;;23025:419;;;:::o;23450:194::-;23490:4;23510:20;23528:1;23510:20;:::i;:::-;23505:25;;23544:20;23562:1;23544:20;:::i;:::-;23539:25;;23588:1;23585;23581:9;23573:17;;23612:1;23606:4;23603:11;23600:37;;;23617:18;;:::i;:::-;23600:37;23450:194;;;;:::o;23650:147::-;23751:11;23788:3;23773:18;;23650:147;;;;:::o;23803:114::-;;:::o;23923:398::-;24082:3;24103:83;24184:1;24179:3;24103:83;:::i;:::-;24096:90;;24195:93;24284:3;24195:93;:::i;:::-;24313:1;24308:3;24304:11;24297:18;;23923:398;;;:::o;24327:379::-;24511:3;24533:147;24676:3;24533:147;:::i;:::-;24526:154;;24697:3;24690:10;;24327:379;;;:::o;24712:220::-;24852:34;24848:1;24840:6;24836:14;24829:58;24921:3;24916:2;24908:6;24904:15;24897:28;24712:220;:::o;24938:366::-;25080:3;25101:67;25165:2;25160:3;25101:67;:::i;:::-;25094:74;;25177:93;25266:3;25177:93;:::i;:::-;25295:2;25290:3;25286:12;25279:19;;24938:366;;;:::o;25310:419::-;25476:4;25514:2;25503:9;25499:18;25491:26;;25563:9;25557:4;25553:20;25549:1;25538:9;25534:17;25527:47;25591:131;25717:4;25591:131;:::i;:::-;25583:139;;25310:419;;;:::o;25735:220::-;25875:34;25871:1;25863:6;25859:14;25852:58;25944:3;25939:2;25931:6;25927:15;25920:28;25735:220;:::o;25961:366::-;26103:3;26124:67;26188:2;26183:3;26124:67;:::i;:::-;26117:74;;26200:93;26289:3;26200:93;:::i;:::-;26318:2;26313:3;26309:12;26302:19;;25961:366;;;:::o;26333:419::-;26499:4;26537:2;26526:9;26522:18;26514:26;;26586:9;26580:4;26576:20;26572:1;26561:9;26557:17;26550:47;26614:131;26740:4;26614:131;:::i;:::-;26606:139;;26333:419;;;:::o;26758:180::-;26806:77;26803:1;26796:88;26903:4;26900:1;26893:15;26927:4;26924:1;26917:15;26944:180;26992:77;26989:1;26982:88;27089:4;27086:1;27079:15;27113:4;27110:1;27103:15;27130:143;27187:5;27218:6;27212:13;27203:22;;27234:33;27261:5;27234:33;:::i;:::-;27130:143;;;;:::o;27279:351::-;27349:6;27398:2;27386:9;27377:7;27373:23;27369:32;27366:119;;;27404:79;;:::i;:::-;27366:119;27524:1;27549:64;27605:7;27596:6;27585:9;27581:22;27549:64;:::i;:::-;27539:74;;27495:128;27279:351;;;;:::o;27636:85::-;27681:7;27710:5;27699:16;;27636:85;;;:::o;27727:158::-;27785:9;27818:61;27836:42;27845:32;27871:5;27845:32;:::i;:::-;27836:42;:::i;:::-;27818:61;:::i;:::-;27805:74;;27727:158;;;:::o;27891:147::-;27986:45;28025:5;27986:45;:::i;:::-;27981:3;27974:58;27891:147;;:::o;28044:114::-;28111:6;28145:5;28139:12;28129:22;;28044:114;;;:::o;28164:184::-;28263:11;28297:6;28292:3;28285:19;28337:4;28332:3;28328:14;28313:29;;28164:184;;;;:::o;28354:132::-;28421:4;28444:3;28436:11;;28474:4;28469:3;28465:14;28457:22;;28354:132;;;:::o;28492:108::-;28569:24;28587:5;28569:24;:::i;:::-;28564:3;28557:37;28492:108;;:::o;28606:179::-;28675:10;28696:46;28738:3;28730:6;28696:46;:::i;:::-;28774:4;28769:3;28765:14;28751:28;;28606:179;;;;:::o;28791:113::-;28861:4;28893;28888:3;28884:14;28876:22;;28791:113;;;:::o;28940:732::-;29059:3;29088:54;29136:5;29088:54;:::i;:::-;29158:86;29237:6;29232:3;29158:86;:::i;:::-;29151:93;;29268:56;29318:5;29268:56;:::i;:::-;29347:7;29378:1;29363:284;29388:6;29385:1;29382:13;29363:284;;;29464:6;29458:13;29491:63;29550:3;29535:13;29491:63;:::i;:::-;29484:70;;29577:60;29630:6;29577:60;:::i;:::-;29567:70;;29423:224;29410:1;29407;29403:9;29398:14;;29363:284;;;29367:14;29663:3;29656:10;;29064:608;;;28940:732;;;;:::o;29678:831::-;29941:4;29979:3;29968:9;29964:19;29956:27;;29993:71;30061:1;30050:9;30046:17;30037:6;29993:71;:::i;:::-;30074:80;30150:2;30139:9;30135:18;30126:6;30074:80;:::i;:::-;30201:9;30195:4;30191:20;30186:2;30175:9;30171:18;30164:48;30229:108;30332:4;30323:6;30229:108;:::i;:::-;30221:116;;30347:72;30415:2;30404:9;30400:18;30391:6;30347:72;:::i;:::-;30429:73;30497:3;30486:9;30482:19;30473:6;30429:73;:::i;:::-;29678:831;;;;;;;;:::o
Swarm Source
ipfs://5f01d398abf38010340f5cc23000d9402ecf759d502ce6a18dcdff82257d8af6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.