ERC-20
Overview
Max Total Supply
1 DOLLA
Holders
121
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.008435662877010048 DOLLAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
One
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-08 */ /** * SPDX-License-Identifier: MIT */ pragma solidity >=0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface 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 { 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 18; } /** * @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); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {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] + 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This 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); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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 += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract One is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public lpWallet; address public marketingWallet; uint256 public maxTokensForSwapback; uint256 public swapTokensAtAmount; uint256 public maxTransactionAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public swapEnabled = false; bool public tradingActive = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; /******************/ // 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); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("One Dolla", "DOLLA") { 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 _buyMarketingFee = 13; uint256 _buyLiquidityFee = 12; uint256 _sellMarketingFee = 23; uint256 _sellLiquidityFee = 22; uint256 totalSupply = 1 * 1e18; maxTransactionAmount = (totalSupply * 1) / 100; // 1% of total supply maxWallet = (totalSupply * 1) / 100; // 1% of total supply swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapback trigger maxTokensForSwapback = (totalSupply * 6) / 1000; // 0.6% max swapback buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyMarketingFee + buyLiquidityFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; marketingWallet = address(0x30CEE3668742B4b096c5dfDaD82c8b6b956EEB3a); lpWallet = msg.sender; // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(marketingWallet, true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); excludeFromMaxTransaction(marketingWallet, true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} /// @dev Launches the token and enables trading. Irriversable. function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } /// @dev Removes the max wallet and max transaction limits function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } /// @dev Disables the Same wallet block transfer delay function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } /// @dev Changes the minimum balance of tokens the contract must have before swapping tokens for ETH. Base 100000, so 0.5% = 500. function updateSwapTokensAtAmount(uint256 newMin, uint256 newMax) external onlyOwner returns (bool) { require( newMin >= 1, "Swap amount cannot be lower than 0.001% total supply." ); require( newMin <= 500, "Swap amount cannot be higher than 0.5% total supply." ); require( newMin <= newMax, "Swap amount cannot be higher than maxTokensForSwapback" ); swapTokensAtAmount = newMin * totalSupply()/ 100000; maxTokensForSwapback = newMax * totalSupply()/ 100000; return true; } /// @dev Changes the maximum amount of tokens that can be bought or sold in a single transaction /// @param newNum Base 1000, so 1% = 10 function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10**18); } /// @dev Changes the maximum amount of tokens a wallet can hold /// @param newNum Base 1000, so 1% = 10 function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= 5, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * totalSupply()/1000; } /// @dev Sets if a wallet is excluded from the max wallet and tx limits /// @param updAds The wallet to update /// @param isEx If the wallet is excluded or not function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } /// @dev Sets if the contract can sell tokens /// @param enabled set to false to disable selling function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } /// @dev Sets the fees for buys /// @param _marketingFee The fee for the marketing wallet /// @param _liquidityFee The fee for the liquidity pool function updateBuyFees( uint256 _marketingFee, uint256 _liquidityFee ) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyMarketingFee + buyLiquidityFee; require(buyTotalFees <= 11, "Must keep fees at 11% or less"); } /// @dev Sets the fees for sells /// @param _marketingFee The fee for the marketing wallet /// @param _liquidityFee The fee for the liquidity pool function updateSellFees( uint256 _marketingFee, uint256 _liquidityFee ) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellMarketingFee + sellLiquidityFee; require(sellTotalFees <= 11, "Must keep fees at 11% or less"); } /// @dev Sets if a wallet is excluded from fees /// @param account The wallet to update /// @param excluded If the wallet is excluded or not function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } /// @dev Sets an address as a new liquidity pair. You probably dont want to do this. /// @param pair The new pair 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 updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateLPWallet(address newLPWallet) external onlyOwner { lpWallet = newLPWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); 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; } } //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 && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } 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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable lpWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > maxTokensForSwapback) { contractBalance = maxTokensForSwapback; } // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div( totalTokensToSwap ); uint256 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForMarketing = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } (success, ) = address(marketingWallet).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":"sniper","type":"address"}],"name":"BoughtEarly","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","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":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","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":"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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":[{"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMin","type":"uint256"},{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f4f6e6520446f6c6c6100000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f444f4c4c410000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000dbc565b5080600490816200010d919062000dbc565b50505062000130620001246200060360201b60201c565b6200060b60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620006d160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062000f0d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000f0d565b6040518363ffffffff1660e01b8152600401620002af92919062000f50565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000f0d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a0516001620006d160201b60201c565b6200035260a0516001620007bb60201b60201c565b6000600d90506000600c90506000601790506000601690506000670de0b6b3a76400009050606460018262000388919062000fac565b62000394919062001026565b600a819055506064600182620003ab919062000fac565b620003b7919062001026565b600b81905550612710600582620003cf919062000fac565b620003db919062001026565b6009819055506103e8600682620003f3919062000fac565b620003ff919062001026565b60088190555084601081905550836011819055506011546010546200042591906200105e565b600f8190555082601381905550816014819055506014546013546200044b91906200105e565b6012819055507330cee3668742b4b096c5dfdad82c8b6b956eeb3a600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000509620004fb6200085c60201b60201c565b60016200088660201b60201c565b6200051c3060016200088660201b60201c565b6200053161dead60016200088660201b60201c565b62000566600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200088660201b60201c565b620005886200057a6200085c60201b60201c565b6001620006d160201b60201c565b6200059b306001620006d160201b60201c565b620005b061dead6001620006d160201b60201c565b620005e5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006d160201b60201c565b620005f73382620009c060201b60201c565b505050505050620011f6565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006e16200060360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007076200085c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075790620010fa565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008966200060360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008bc6200085c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000915576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090c90620010fa565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009b4919062001139565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2990620011a6565b60405180910390fd5b62000a466000838362000b3860201b60201c565b806002600082825462000a5a91906200105e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ab191906200105e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b189190620011d9565b60405180910390a362000b346000838362000b3d60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bc457607f821691505b60208210810362000bda5762000bd962000b7c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c05565b62000c50868362000c05565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c9d62000c9762000c918462000c68565b62000c72565b62000c68565b9050919050565b6000819050919050565b62000cb98362000c7c565b62000cd162000cc88262000ca4565b84845462000c12565b825550505050565b600090565b62000ce862000cd9565b62000cf581848462000cae565b505050565b5b8181101562000d1d5762000d1160008262000cde565b60018101905062000cfb565b5050565b601f82111562000d6c5762000d368162000be0565b62000d418462000bf5565b8101602085101562000d51578190505b62000d6962000d608562000bf5565b83018262000cfa565b50505b505050565b600082821c905092915050565b600062000d916000198460080262000d71565b1980831691505092915050565b600062000dac838362000d7e565b9150826002028217905092915050565b62000dc78262000b42565b67ffffffffffffffff81111562000de35762000de262000b4d565b5b62000def825462000bab565b62000dfc82828562000d21565b600060209050601f83116001811462000e34576000841562000e1f578287015190505b62000e2b858262000d9e565b86555062000e9b565b601f19841662000e448662000be0565b60005b8281101562000e6e5784890151825560018201915060208501945060208101905062000e47565b8683101562000e8e578489015162000e8a601f89168262000d7e565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ed58262000ea8565b9050919050565b62000ee78162000ec8565b811462000ef357600080fd5b50565b60008151905062000f078162000edc565b92915050565b60006020828403121562000f265762000f2562000ea3565b5b600062000f368482850162000ef6565b91505092915050565b62000f4a8162000ec8565b82525050565b600060408201905062000f67600083018562000f3f565b62000f76602083018462000f3f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fb98262000c68565b915062000fc68362000c68565b925082820262000fd68162000c68565b9150828204841483151762000ff05762000fef62000f7d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010338262000c68565b9150620010408362000c68565b92508262001053576200105262000ff7565b5b828204905092915050565b60006200106b8262000c68565b9150620010788362000c68565b925082820190508082111562001093576200109262000f7d565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010e260208362001099565b9150620010ef82620010aa565b602082019050919050565b600060208201905081810360008301526200111581620010d3565b9050919050565b60008115159050919050565b62001133816200111c565b82525050565b600060208201905062001150600083018462001128565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200118e601f8362001099565b91506200119b8262001156565b602082019050919050565b60006020820190508181036000830152620011c1816200117f565b9050919050565b620011d38162000c68565b82525050565b6000602082019050620011f06000830184620011c8565b92915050565b60805160a051614e1a62001254600039600081816112ad015281816119670152612722015260008181610e0f015281816126ca01528181613664015281816137450152818161376c01528181613808015261382f0152614e1a6000f3fe6080604052600436106103035760003560e01c806377c1835211610190578063c0246668116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610bab578063f637434214610bd4578063f8b45b0514610bff578063fbc10c5514610c2a5761030a565b8063e2f4560514610b2a578063e884f26014610b55578063f11a24d314610b805761030a565b8063c024666814610a1a578063c18bc19514610a43578063c876d0b914610a6c578063c8c8ebe414610a97578063d85ba06314610ac2578063dd62ed3e14610aed5761030a565b806395d89b4111610149578063a9059cbb11610123578063a9059cbb1461094c578063aacebbe314610989578063b62496f5146109b2578063bbc0c742146109ef5761030a565b806395d89b41146108bb5780639a7a23d6146108e6578063a457c2d71461090f5761030a565b806377c18352146107cf5780637bce5a04146107fa5780638a8c523c146108255780638da5cb5b1461083c5780639213691314610867578063924de9b7146108925761030a565b8063395093511161024f5780636a486a8e11610208578063715018a6116101e2578063715018a614610739578063751039fc146107505780637571336a1461077b57806375f0a874146107a45761030a565b80636a486a8e146106a65780636ddd1713146106d157806370a08231146106fc5761030a565b8063395093511461058257806349bd5a5e146105bf5780634a62bb65146105ea5780634fbee193146106155780636303516c1461065257806366ca9b831461067d5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b257806327c8f835146104ef5780632c0e22cc1461051a578063313ce567146105575761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806302dbd8f81461030f57806306fdde0314610338578063095ea7b31461036357806310d5de53146103a05780631694505e146103dd57806318160ddd146104085761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613939565b610c53565b005b34801561034457600080fd5b5061034d610d3d565b60405161035a9190613a09565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613a89565b610dcf565b6040516103979190613ae4565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613aff565b610ded565b6040516103d49190613ae4565b60405180910390f35b3480156103e957600080fd5b506103f2610e0d565b6040516103ff9190613b8b565b60405180910390f35b34801561041457600080fd5b5061041d610e31565b60405161042a9190613bb5565b60405180910390f35b34801561043f57600080fd5b50610448610e3b565b6040516104559190613bb5565b60405180910390f35b34801561046a57600080fd5b50610473610e41565b6040516104809190613bb5565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190613bd0565b610e47565b005b3480156104be57600080fd5b506104d960048036038101906104d49190613bfd565b610f56565b6040516104e69190613ae4565b60405180910390f35b3480156104fb57600080fd5b5061050461104e565b6040516105119190613c5f565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190613939565b611054565b60405161054e9190613ae4565b60405180910390f35b34801561056357600080fd5b5061056c6111f6565b6040516105799190613c96565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a49190613a89565b6111ff565b6040516105b69190613ae4565b60405180910390f35b3480156105cb57600080fd5b506105d46112ab565b6040516105e19190613c5f565b60405180910390f35b3480156105f657600080fd5b506105ff6112cf565b60405161060c9190613ae4565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190613aff565b6112e2565b6040516106499190613ae4565b60405180910390f35b34801561065e57600080fd5b50610667611338565b6040516106749190613c5f565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190613939565b61135e565b005b3480156106b257600080fd5b506106bb611448565b6040516106c89190613bb5565b60405180910390f35b3480156106dd57600080fd5b506106e661144e565b6040516106f39190613ae4565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613aff565b611461565b6040516107309190613bb5565b60405180910390f35b34801561074557600080fd5b5061074e6114a9565b005b34801561075c57600080fd5b50610765611531565b6040516107729190613ae4565b60405180910390f35b34801561078757600080fd5b506107a2600480360381019061079d9190613cdd565b6115d1565b005b3480156107b057600080fd5b506107b96116a8565b6040516107c69190613c5f565b60405180910390f35b3480156107db57600080fd5b506107e46116ce565b6040516107f19190613bb5565b60405180910390f35b34801561080657600080fd5b5061080f6116d4565b60405161081c9190613bb5565b60405180910390f35b34801561083157600080fd5b5061083a6116da565b005b34801561084857600080fd5b5061085161178e565b60405161085e9190613c5f565b60405180910390f35b34801561087357600080fd5b5061087c6117b8565b6040516108899190613bb5565b60405180910390f35b34801561089e57600080fd5b506108b960048036038101906108b49190613d1d565b6117be565b005b3480156108c757600080fd5b506108d0611857565b6040516108dd9190613a09565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190613cdd565b6118e9565b005b34801561091b57600080fd5b5061093660048036038101906109319190613a89565b611a01565b6040516109439190613ae4565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e9190613a89565b611aec565b6040516109809190613ae4565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190613aff565b611b0a565b005b3480156109be57600080fd5b506109d960048036038101906109d49190613aff565b611c46565b6040516109e69190613ae4565b60405180910390f35b3480156109fb57600080fd5b50610a04611c66565b604051610a119190613ae4565b60405180910390f35b348015610a2657600080fd5b50610a416004803603810190610a3c9190613cdd565b611c79565b005b348015610a4f57600080fd5b50610a6a6004803603810190610a659190613bd0565b611d9e565b005b348015610a7857600080fd5b50610a81611e87565b604051610a8e9190613ae4565b60405180910390f35b348015610aa357600080fd5b50610aac611e9a565b604051610ab99190613bb5565b60405180910390f35b348015610ace57600080fd5b50610ad7611ea0565b604051610ae49190613bb5565b60405180910390f35b348015610af957600080fd5b50610b146004803603810190610b0f9190613d4a565b611ea6565b604051610b219190613bb5565b60405180910390f35b348015610b3657600080fd5b50610b3f611f2d565b604051610b4c9190613bb5565b60405180910390f35b348015610b6157600080fd5b50610b6a611f33565b604051610b779190613ae4565b60405180910390f35b348015610b8c57600080fd5b50610b95611fd3565b604051610ba29190613bb5565b60405180910390f35b348015610bb757600080fd5b50610bd26004803603810190610bcd9190613aff565b611fd9565b005b348015610be057600080fd5b50610be96120d0565b604051610bf69190613bb5565b60405180910390f35b348015610c0b57600080fd5b50610c146120d6565b604051610c219190613bb5565b60405180910390f35b348015610c3657600080fd5b50610c516004803603810190610c4c9190613aff565b6120dc565b005b610c5b61219c565b73ffffffffffffffffffffffffffffffffffffffff16610c7961178e565b73ffffffffffffffffffffffffffffffffffffffff1614610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613dd6565b60405180910390fd5b8160138190555080601481905550601454601354610ced9190613e25565b601281905550600b6012541115610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090613ea5565b60405180910390fd5b5050565b606060038054610d4c90613ef4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7890613ef4565b8015610dc55780601f10610d9a57610100808354040283529160200191610dc5565b820191906000526020600020905b815481529060010190602001808311610da857829003601f168201915b5050505050905090565b6000610de3610ddc61219c565b84846121a4565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60165481565b60155481565b610e4f61219c565b73ffffffffffffffffffffffffffffffffffffffff16610e6d61178e565b73ffffffffffffffffffffffffffffffffffffffff1614610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba90613dd6565b60405180910390fd5b670de0b6b3a76400006103e86001610ed9610e31565b610ee39190613f25565b610eed9190613f96565b610ef79190613f96565b811015610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090614039565b60405180910390fd5b670de0b6b3a764000081610f4d9190613f25565b600a8190555050565b6000610f6384848461236d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fae61219c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561102e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611025906140cb565b60405180910390fd5b6110428561103a61219c565b8584036121a4565b60019150509392505050565b61dead81565b600061105e61219c565b73ffffffffffffffffffffffffffffffffffffffff1661107c61178e565b73ffffffffffffffffffffffffffffffffffffffff16146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990613dd6565b60405180910390fd5b6001831015611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d9061415d565b60405180910390fd5b6101f483111561115b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611152906141ef565b60405180910390fd5b8183111561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590614281565b60405180910390fd5b620186a06111aa610e31565b846111b59190613f25565b6111bf9190613f96565b600981905550620186a06111d1610e31565b836111dc9190613f25565b6111e69190613f96565b6008819055506001905092915050565b60006012905090565b60006112a161120c61219c565b84846001600061121a61219c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129c9190613e25565b6121a4565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61136661219c565b73ffffffffffffffffffffffffffffffffffffffff1661138461178e565b73ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190613dd6565b60405180910390fd5b81601081905550806011819055506011546010546113f89190613e25565b600f81905550600b600f541115611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613ea5565b60405180910390fd5b5050565b60125481565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114b161219c565b73ffffffffffffffffffffffffffffffffffffffff166114cf61178e565b73ffffffffffffffffffffffffffffffffffffffff1614611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c90613dd6565b60405180910390fd5b61152f6000612f9e565b565b600061153b61219c565b73ffffffffffffffffffffffffffffffffffffffff1661155961178e565b73ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690613dd6565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6115d961219c565b73ffffffffffffffffffffffffffffffffffffffff166115f761178e565b73ffffffffffffffffffffffffffffffffffffffff161461164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490613dd6565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60105481565b6116e261219c565b73ffffffffffffffffffffffffffffffffffffffff1661170061178e565b73ffffffffffffffffffffffffffffffffffffffff1614611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174d90613dd6565b60405180910390fd5b6001600c60026101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6117c661219c565b73ffffffffffffffffffffffffffffffffffffffff166117e461178e565b73ffffffffffffffffffffffffffffffffffffffff161461183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613dd6565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60606004805461186690613ef4565b80601f016020809104026020016040519081016040528092919081815260200182805461189290613ef4565b80156118df5780601f106118b4576101008083540402835291602001916118df565b820191906000526020600020905b8154815290600101906020018083116118c257829003601f168201915b5050505050905090565b6118f161219c565b73ffffffffffffffffffffffffffffffffffffffff1661190f61178e565b73ffffffffffffffffffffffffffffffffffffffff1614611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c90613dd6565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90614313565b60405180910390fd5b6119fd8282613064565b5050565b60008060016000611a1061219c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac4906143a5565b60405180910390fd5b611ae1611ad861219c565b858584036121a4565b600191505092915050565b6000611b00611af961219c565b848461236d565b6001905092915050565b611b1261219c565b73ffffffffffffffffffffffffffffffffffffffff16611b3061178e565b73ffffffffffffffffffffffffffffffffffffffff1614611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d90613dd6565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600c60029054906101000a900460ff1681565b611c8161219c565b73ffffffffffffffffffffffffffffffffffffffff16611c9f61178e565b73ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613dd6565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d929190613ae4565b60405180910390a25050565b611da661219c565b73ffffffffffffffffffffffffffffffffffffffff16611dc461178e565b73ffffffffffffffffffffffffffffffffffffffff1614611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190613dd6565b60405180910390fd5b6005811015611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590614437565b60405180910390fd5b6103e8611e69610e31565b82611e749190613f25565b611e7e9190613f96565b600b8190555050565b600e60009054906101000a900460ff1681565b600a5481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f3d61219c565b73ffffffffffffffffffffffffffffffffffffffff16611f5b61178e565b73ffffffffffffffffffffffffffffffffffffffff1614611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890613dd6565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b611fe161219c565b73ffffffffffffffffffffffffffffffffffffffff16611fff61178e565b73ffffffffffffffffffffffffffffffffffffffff1614612055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204c90613dd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb906144c9565b60405180910390fd5b6120cd81612f9e565b50565b60145481565b600b5481565b6120e461219c565b73ffffffffffffffffffffffffffffffffffffffff1661210261178e565b73ffffffffffffffffffffffffffffffffffffffff1614612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214f90613dd6565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a9061455b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612279906145ed565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123609190613bb5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d39061467f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290614711565b60405180910390fd5b600081036124645761245f83836000613105565b612f99565b600c60009054906101000a900460ff1615612b275761248161178e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124ef57506124bf61178e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125285750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612562575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561257b5750600560149054906101000a900460ff16155b15612b2657600c60029054906101000a900460ff1661267557601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126355750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266b9061477d565b60405180910390fd5b5b600e60009054906101000a900460ff161561283d5761269261178e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561271957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561277157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561283c5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106127f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ee90614835565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128e05750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561298757600a5481111561292a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612921906148c7565b60405180910390fd5b600b5461293683611461565b826129419190613e25565b1115612982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297990614933565b60405180910390fd5b612b25565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a2a5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a7957600a54811115612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6b906149c5565b60405180910390fd5b612b24565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b2357600b54612ad683611461565b82612ae19190613e25565b1115612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990614933565b60405180910390fd5b5b5b5b5b5b6000612b3230611461565b905060006009548210159050808015612b575750600c60019054906101000a900460ff165b8015612b705750600560149054906101000a900460ff16155b8015612bc65750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c1c5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c725750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cb6576001600560146101000a81548160ff021916908315150217905550612c9a613384565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d6c5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d7657600090505b60008115612f8957601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dd957506000601254115b15612e7357612e066064612df86012548861357990919063ffffffff16565b61358f90919063ffffffff16565b905060125460145482612e199190613f25565b612e239190613f96565b60166000828254612e349190613e25565b9250508190555060125460135482612e4c9190613f25565b612e569190613f96565b60156000828254612e679190613e25565b92505081905550612f65565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ece57506000600f54115b15612f6457612efb6064612eed600f548861357990919063ffffffff16565b61358f90919063ffffffff16565b9050600f5460115482612f0e9190613f25565b612f189190613f96565b60166000828254612f299190613e25565b92505081905550600f5460105482612f419190613f25565b612f4b9190613f96565b60156000828254612f5c9190613e25565b925050819055505b5b6000811115612f7a57612f79873083613105565b5b8085612f8691906149e5565b94505b612f94878787613105565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316b9061467f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131da90614711565b60405180910390fd5b6131ee8383836135a5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614a8b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133079190613e25565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161336b9190613bb5565b60405180910390a361337e8484846135aa565b50505050565b600061338f30611461565b905060006015546016546133a39190613e25565b90506000808314806133b55750600082145b156133c257505050613577565b6008548311156133d25760085492505b6000600283601654866133e59190613f25565b6133ef9190613f96565b6133f99190613f96565b9050600061341082866135af90919063ffffffff16565b90506000479050613420826135c5565b600061343582476135af90919063ffffffff16565b90506000613460876134526015548561357990919063ffffffff16565b61358f90919063ffffffff16565b90506000818361347091906149e5565b9050600060168190555060006015819055506000861180156134925750600081115b156134df576134a18682613802565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516134d693929190614aab565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161352590614b13565b60006040518083038185875af1925050503d8060008114613562576040519150601f19603f3d011682016040523d82523d6000602084013e613567565b606091505b5050809750505050505050505050505b565b600081836135879190613f25565b905092915050565b6000818361359d9190613f96565b905092915050565b505050565b505050565b600081836135bd91906149e5565b905092915050565b6000600267ffffffffffffffff8111156135e2576135e1614b28565b5b6040519080825280602002602001820160405280156136105781602001602082028036833780820191505090505b509050308160008151811061362857613627614b57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f19190614b9b565b8160018151811061370557613704614b57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061376a307f0000000000000000000000000000000000000000000000000000000000000000846121a4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016137cc959493929190614cc1565b600060405180830381600087803b1580156137e657600080fd5b505af11580156137fa573d6000803e3d6000fd5b505050505050565b61382d307f0000000000000000000000000000000000000000000000000000000000000000846121a4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016138b496959493929190614d1b565b60606040518083038185885af11580156138d2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138f79190614d91565b5050505050565b600080fd5b6000819050919050565b61391681613903565b811461392157600080fd5b50565b6000813590506139338161390d565b92915050565b600080604083850312156139505761394f6138fe565b5b600061395e85828601613924565b925050602061396f85828601613924565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139b3578082015181840152602081019050613998565b60008484015250505050565b6000601f19601f8301169050919050565b60006139db82613979565b6139e58185613984565b93506139f5818560208601613995565b6139fe816139bf565b840191505092915050565b60006020820190508181036000830152613a2381846139d0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a5682613a2b565b9050919050565b613a6681613a4b565b8114613a7157600080fd5b50565b600081359050613a8381613a5d565b92915050565b60008060408385031215613aa057613a9f6138fe565b5b6000613aae85828601613a74565b9250506020613abf85828601613924565b9150509250929050565b60008115159050919050565b613ade81613ac9565b82525050565b6000602082019050613af96000830184613ad5565b92915050565b600060208284031215613b1557613b146138fe565b5b6000613b2384828501613a74565b91505092915050565b6000819050919050565b6000613b51613b4c613b4784613a2b565b613b2c565b613a2b565b9050919050565b6000613b6382613b36565b9050919050565b6000613b7582613b58565b9050919050565b613b8581613b6a565b82525050565b6000602082019050613ba06000830184613b7c565b92915050565b613baf81613903565b82525050565b6000602082019050613bca6000830184613ba6565b92915050565b600060208284031215613be657613be56138fe565b5b6000613bf484828501613924565b91505092915050565b600080600060608486031215613c1657613c156138fe565b5b6000613c2486828701613a74565b9350506020613c3586828701613a74565b9250506040613c4686828701613924565b9150509250925092565b613c5981613a4b565b82525050565b6000602082019050613c746000830184613c50565b92915050565b600060ff82169050919050565b613c9081613c7a565b82525050565b6000602082019050613cab6000830184613c87565b92915050565b613cba81613ac9565b8114613cc557600080fd5b50565b600081359050613cd781613cb1565b92915050565b60008060408385031215613cf457613cf36138fe565b5b6000613d0285828601613a74565b9250506020613d1385828601613cc8565b9150509250929050565b600060208284031215613d3357613d326138fe565b5b6000613d4184828501613cc8565b91505092915050565b60008060408385031215613d6157613d606138fe565b5b6000613d6f85828601613a74565b9250506020613d8085828601613a74565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc0602083613984565b9150613dcb82613d8a565b602082019050919050565b60006020820190508181036000830152613def81613db3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e3082613903565b9150613e3b83613903565b9250828201905080821115613e5357613e52613df6565b5b92915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000613e8f601d83613984565b9150613e9a82613e59565b602082019050919050565b60006020820190508181036000830152613ebe81613e82565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f0c57607f821691505b602082108103613f1f57613f1e613ec5565b5b50919050565b6000613f3082613903565b9150613f3b83613903565b9250828202613f4981613903565b91508282048414831517613f6057613f5f613df6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa182613903565b9150613fac83613903565b925082613fbc57613fbb613f67565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614023602f83613984565b915061402e82613fc7565b604082019050919050565b6000602082019050818103600083015261405281614016565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006140b5602883613984565b91506140c082614059565b604082019050919050565b600060208201905081810360008301526140e4816140a8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614147603583613984565b9150614152826140eb565b604082019050919050565b600060208201905081810360008301526141768161413a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006141d9603483613984565b91506141e48261417d565b604082019050919050565b60006020820190508181036000830152614208816141cc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b600061426b603683613984565b91506142768261420f565b604082019050919050565b6000602082019050818103600083015261429a8161425e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142fd603983613984565b9150614308826142a1565b604082019050919050565b6000602082019050818103600083015261432c816142f0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061438f602583613984565b915061439a82614333565b604082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614421602483613984565b915061442c826143c5565b604082019050919050565b6000602082019050818103600083015261445081614414565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144b3602683613984565b91506144be82614457565b604082019050919050565b600060208201905081810360008301526144e2816144a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614545602483613984565b9150614550826144e9565b604082019050919050565b6000602082019050818103600083015261457481614538565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145d7602283613984565b91506145e28261457b565b604082019050919050565b60006020820190508181036000830152614606816145ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614669602583613984565b91506146748261460d565b604082019050919050565b600060208201905081810360008301526146988161465c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146fb602383613984565b91506147068261469f565b604082019050919050565b6000602082019050818103600083015261472a816146ee565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614767601683613984565b915061477282614731565b602082019050919050565b600060208201905081810360008301526147968161475a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061481f604983613984565b915061482a8261479d565b606082019050919050565b6000602082019050818103600083015261484e81614812565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006148b1603583613984565b91506148bc82614855565b604082019050919050565b600060208201905081810360008301526148e0816148a4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061491d601383613984565b9150614928826148e7565b602082019050919050565b6000602082019050818103600083015261494c81614910565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006149af603683613984565b91506149ba82614953565b604082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b60006149f082613903565b91506149fb83613903565b9250828203905081811115614a1357614a12613df6565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a75602683613984565b9150614a8082614a19565b604082019050919050565b60006020820190508181036000830152614aa481614a68565b9050919050565b6000606082019050614ac06000830186613ba6565b614acd6020830185613ba6565b614ada6040830184613ba6565b949350505050565b600081905092915050565b50565b6000614afd600083614ae2565b9150614b0882614aed565b600082019050919050565b6000614b1e82614af0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b9581613a5d565b92915050565b600060208284031215614bb157614bb06138fe565b5b6000614bbf84828501614b86565b91505092915050565b6000819050919050565b6000614bed614be8614be384614bc8565b613b2c565b613903565b9050919050565b614bfd81614bd2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c3881613a4b565b82525050565b6000614c4a8383614c2f565b60208301905092915050565b6000602082019050919050565b6000614c6e82614c03565b614c788185614c0e565b9350614c8383614c1f565b8060005b83811015614cb4578151614c9b8882614c3e565b9750614ca683614c56565b925050600181019050614c87565b5085935050505092915050565b600060a082019050614cd66000830188613ba6565b614ce36020830187614bf4565b8181036040830152614cf58186614c63565b9050614d046060830185613c50565b614d116080830184613ba6565b9695505050505050565b600060c082019050614d306000830189613c50565b614d3d6020830188613ba6565b614d4a6040830187614bf4565b614d576060830186614bf4565b614d646080830185613c50565b614d7160a0830184613ba6565b979650505050505050565b600081519050614d8b8161390d565b92915050565b600080600060608486031215614daa57614da96138fe565b5b6000614db886828701614d7c565b9350506020614dc986828701614d7c565b9250506040614dda86828701614d7c565b915050925092509256fea264697066735822122050424c96131af1712dd74662acdd30d951c3e836f8bb81f2c84ea178872f283964736f6c63430008130033
Deployed Bytecode
0x6080604052600436106103035760003560e01c806377c1835211610190578063c0246668116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b14610bab578063f637434214610bd4578063f8b45b0514610bff578063fbc10c5514610c2a5761030a565b8063e2f4560514610b2a578063e884f26014610b55578063f11a24d314610b805761030a565b8063c024666814610a1a578063c18bc19514610a43578063c876d0b914610a6c578063c8c8ebe414610a97578063d85ba06314610ac2578063dd62ed3e14610aed5761030a565b806395d89b4111610149578063a9059cbb11610123578063a9059cbb1461094c578063aacebbe314610989578063b62496f5146109b2578063bbc0c742146109ef5761030a565b806395d89b41146108bb5780639a7a23d6146108e6578063a457c2d71461090f5761030a565b806377c18352146107cf5780637bce5a04146107fa5780638a8c523c146108255780638da5cb5b1461083c5780639213691314610867578063924de9b7146108925761030a565b8063395093511161024f5780636a486a8e11610208578063715018a6116101e2578063715018a614610739578063751039fc146107505780637571336a1461077b57806375f0a874146107a45761030a565b80636a486a8e146106a65780636ddd1713146106d157806370a08231146106fc5761030a565b8063395093511461058257806349bd5a5e146105bf5780634a62bb65146105ea5780634fbee193146106155780636303516c1461065257806366ca9b831461067d5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b257806327c8f835146104ef5780632c0e22cc1461051a578063313ce567146105575761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806302dbd8f81461030f57806306fdde0314610338578063095ea7b31461036357806310d5de53146103a05780631694505e146103dd57806318160ddd146104085761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613939565b610c53565b005b34801561034457600080fd5b5061034d610d3d565b60405161035a9190613a09565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613a89565b610dcf565b6040516103979190613ae4565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613aff565b610ded565b6040516103d49190613ae4565b60405180910390f35b3480156103e957600080fd5b506103f2610e0d565b6040516103ff9190613b8b565b60405180910390f35b34801561041457600080fd5b5061041d610e31565b60405161042a9190613bb5565b60405180910390f35b34801561043f57600080fd5b50610448610e3b565b6040516104559190613bb5565b60405180910390f35b34801561046a57600080fd5b50610473610e41565b6040516104809190613bb5565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190613bd0565b610e47565b005b3480156104be57600080fd5b506104d960048036038101906104d49190613bfd565b610f56565b6040516104e69190613ae4565b60405180910390f35b3480156104fb57600080fd5b5061050461104e565b6040516105119190613c5f565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190613939565b611054565b60405161054e9190613ae4565b60405180910390f35b34801561056357600080fd5b5061056c6111f6565b6040516105799190613c96565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a49190613a89565b6111ff565b6040516105b69190613ae4565b60405180910390f35b3480156105cb57600080fd5b506105d46112ab565b6040516105e19190613c5f565b60405180910390f35b3480156105f657600080fd5b506105ff6112cf565b60405161060c9190613ae4565b60405180910390f35b34801561062157600080fd5b5061063c60048036038101906106379190613aff565b6112e2565b6040516106499190613ae4565b60405180910390f35b34801561065e57600080fd5b50610667611338565b6040516106749190613c5f565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190613939565b61135e565b005b3480156106b257600080fd5b506106bb611448565b6040516106c89190613bb5565b60405180910390f35b3480156106dd57600080fd5b506106e661144e565b6040516106f39190613ae4565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613aff565b611461565b6040516107309190613bb5565b60405180910390f35b34801561074557600080fd5b5061074e6114a9565b005b34801561075c57600080fd5b50610765611531565b6040516107729190613ae4565b60405180910390f35b34801561078757600080fd5b506107a2600480360381019061079d9190613cdd565b6115d1565b005b3480156107b057600080fd5b506107b96116a8565b6040516107c69190613c5f565b60405180910390f35b3480156107db57600080fd5b506107e46116ce565b6040516107f19190613bb5565b60405180910390f35b34801561080657600080fd5b5061080f6116d4565b60405161081c9190613bb5565b60405180910390f35b34801561083157600080fd5b5061083a6116da565b005b34801561084857600080fd5b5061085161178e565b60405161085e9190613c5f565b60405180910390f35b34801561087357600080fd5b5061087c6117b8565b6040516108899190613bb5565b60405180910390f35b34801561089e57600080fd5b506108b960048036038101906108b49190613d1d565b6117be565b005b3480156108c757600080fd5b506108d0611857565b6040516108dd9190613a09565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190613cdd565b6118e9565b005b34801561091b57600080fd5b5061093660048036038101906109319190613a89565b611a01565b6040516109439190613ae4565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e9190613a89565b611aec565b6040516109809190613ae4565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190613aff565b611b0a565b005b3480156109be57600080fd5b506109d960048036038101906109d49190613aff565b611c46565b6040516109e69190613ae4565b60405180910390f35b3480156109fb57600080fd5b50610a04611c66565b604051610a119190613ae4565b60405180910390f35b348015610a2657600080fd5b50610a416004803603810190610a3c9190613cdd565b611c79565b005b348015610a4f57600080fd5b50610a6a6004803603810190610a659190613bd0565b611d9e565b005b348015610a7857600080fd5b50610a81611e87565b604051610a8e9190613ae4565b60405180910390f35b348015610aa357600080fd5b50610aac611e9a565b604051610ab99190613bb5565b60405180910390f35b348015610ace57600080fd5b50610ad7611ea0565b604051610ae49190613bb5565b60405180910390f35b348015610af957600080fd5b50610b146004803603810190610b0f9190613d4a565b611ea6565b604051610b219190613bb5565b60405180910390f35b348015610b3657600080fd5b50610b3f611f2d565b604051610b4c9190613bb5565b60405180910390f35b348015610b6157600080fd5b50610b6a611f33565b604051610b779190613ae4565b60405180910390f35b348015610b8c57600080fd5b50610b95611fd3565b604051610ba29190613bb5565b60405180910390f35b348015610bb757600080fd5b50610bd26004803603810190610bcd9190613aff565b611fd9565b005b348015610be057600080fd5b50610be96120d0565b604051610bf69190613bb5565b60405180910390f35b348015610c0b57600080fd5b50610c146120d6565b604051610c219190613bb5565b60405180910390f35b348015610c3657600080fd5b50610c516004803603810190610c4c9190613aff565b6120dc565b005b610c5b61219c565b73ffffffffffffffffffffffffffffffffffffffff16610c7961178e565b73ffffffffffffffffffffffffffffffffffffffff1614610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613dd6565b60405180910390fd5b8160138190555080601481905550601454601354610ced9190613e25565b601281905550600b6012541115610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090613ea5565b60405180910390fd5b5050565b606060038054610d4c90613ef4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7890613ef4565b8015610dc55780601f10610d9a57610100808354040283529160200191610dc5565b820191906000526020600020905b815481529060010190602001808311610da857829003601f168201915b5050505050905090565b6000610de3610ddc61219c565b84846121a4565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60165481565b60155481565b610e4f61219c565b73ffffffffffffffffffffffffffffffffffffffff16610e6d61178e565b73ffffffffffffffffffffffffffffffffffffffff1614610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba90613dd6565b60405180910390fd5b670de0b6b3a76400006103e86001610ed9610e31565b610ee39190613f25565b610eed9190613f96565b610ef79190613f96565b811015610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090614039565b60405180910390fd5b670de0b6b3a764000081610f4d9190613f25565b600a8190555050565b6000610f6384848461236d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fae61219c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561102e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611025906140cb565b60405180910390fd5b6110428561103a61219c565b8584036121a4565b60019150509392505050565b61dead81565b600061105e61219c565b73ffffffffffffffffffffffffffffffffffffffff1661107c61178e565b73ffffffffffffffffffffffffffffffffffffffff16146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990613dd6565b60405180910390fd5b6001831015611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d9061415d565b60405180910390fd5b6101f483111561115b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611152906141ef565b60405180910390fd5b8183111561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590614281565b60405180910390fd5b620186a06111aa610e31565b846111b59190613f25565b6111bf9190613f96565b600981905550620186a06111d1610e31565b836111dc9190613f25565b6111e69190613f96565b6008819055506001905092915050565b60006012905090565b60006112a161120c61219c565b84846001600061121a61219c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129c9190613e25565b6121a4565b6001905092915050565b7f000000000000000000000000103e9fd18991ad01fc2da1cea9bb777febef1e8681565b600c60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61136661219c565b73ffffffffffffffffffffffffffffffffffffffff1661138461178e565b73ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190613dd6565b60405180910390fd5b81601081905550806011819055506011546010546113f89190613e25565b600f81905550600b600f541115611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613ea5565b60405180910390fd5b5050565b60125481565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114b161219c565b73ffffffffffffffffffffffffffffffffffffffff166114cf61178e565b73ffffffffffffffffffffffffffffffffffffffff1614611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c90613dd6565b60405180910390fd5b61152f6000612f9e565b565b600061153b61219c565b73ffffffffffffffffffffffffffffffffffffffff1661155961178e565b73ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690613dd6565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6115d961219c565b73ffffffffffffffffffffffffffffffffffffffff166115f761178e565b73ffffffffffffffffffffffffffffffffffffffff161461164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490613dd6565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60105481565b6116e261219c565b73ffffffffffffffffffffffffffffffffffffffff1661170061178e565b73ffffffffffffffffffffffffffffffffffffffff1614611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174d90613dd6565b60405180910390fd5b6001600c60026101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6117c661219c565b73ffffffffffffffffffffffffffffffffffffffff166117e461178e565b73ffffffffffffffffffffffffffffffffffffffff161461183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613dd6565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60606004805461186690613ef4565b80601f016020809104026020016040519081016040528092919081815260200182805461189290613ef4565b80156118df5780601f106118b4576101008083540402835291602001916118df565b820191906000526020600020905b8154815290600101906020018083116118c257829003601f168201915b5050505050905090565b6118f161219c565b73ffffffffffffffffffffffffffffffffffffffff1661190f61178e565b73ffffffffffffffffffffffffffffffffffffffff1614611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c90613dd6565b60405180910390fd5b7f000000000000000000000000103e9fd18991ad01fc2da1cea9bb777febef1e8673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90614313565b60405180910390fd5b6119fd8282613064565b5050565b60008060016000611a1061219c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac4906143a5565b60405180910390fd5b611ae1611ad861219c565b858584036121a4565b600191505092915050565b6000611b00611af961219c565b848461236d565b6001905092915050565b611b1261219c565b73ffffffffffffffffffffffffffffffffffffffff16611b3061178e565b73ffffffffffffffffffffffffffffffffffffffff1614611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d90613dd6565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600c60029054906101000a900460ff1681565b611c8161219c565b73ffffffffffffffffffffffffffffffffffffffff16611c9f61178e565b73ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613dd6565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d929190613ae4565b60405180910390a25050565b611da661219c565b73ffffffffffffffffffffffffffffffffffffffff16611dc461178e565b73ffffffffffffffffffffffffffffffffffffffff1614611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190613dd6565b60405180910390fd5b6005811015611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590614437565b60405180910390fd5b6103e8611e69610e31565b82611e749190613f25565b611e7e9190613f96565b600b8190555050565b600e60009054906101000a900460ff1681565b600a5481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f3d61219c565b73ffffffffffffffffffffffffffffffffffffffff16611f5b61178e565b73ffffffffffffffffffffffffffffffffffffffff1614611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890613dd6565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b611fe161219c565b73ffffffffffffffffffffffffffffffffffffffff16611fff61178e565b73ffffffffffffffffffffffffffffffffffffffff1614612055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204c90613dd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb906144c9565b60405180910390fd5b6120cd81612f9e565b50565b60145481565b600b5481565b6120e461219c565b73ffffffffffffffffffffffffffffffffffffffff1661210261178e565b73ffffffffffffffffffffffffffffffffffffffff1614612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214f90613dd6565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a9061455b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612279906145ed565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123609190613bb5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d39061467f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290614711565b60405180910390fd5b600081036124645761245f83836000613105565b612f99565b600c60009054906101000a900460ff1615612b275761248161178e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124ef57506124bf61178e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125285750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612562575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561257b5750600560149054906101000a900460ff16155b15612b2657600c60029054906101000a900460ff1661267557601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126355750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266b9061477d565b60405180910390fd5b5b600e60009054906101000a900460ff161561283d5761269261178e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561271957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561277157507f000000000000000000000000103e9fd18991ad01fc2da1cea9bb777febef1e8673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561283c5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106127f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ee90614835565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128e05750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561298757600a5481111561292a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612921906148c7565b60405180910390fd5b600b5461293683611461565b826129419190613e25565b1115612982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297990614933565b60405180910390fd5b612b25565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a2a5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a7957600a54811115612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6b906149c5565b60405180910390fd5b612b24565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b2357600b54612ad683611461565b82612ae19190613e25565b1115612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990614933565b60405180910390fd5b5b5b5b5b5b6000612b3230611461565b905060006009548210159050808015612b575750600c60019054906101000a900460ff165b8015612b705750600560149054906101000a900460ff16155b8015612bc65750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c1c5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c725750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cb6576001600560146101000a81548160ff021916908315150217905550612c9a613384565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d6c5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d7657600090505b60008115612f8957601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dd957506000601254115b15612e7357612e066064612df86012548861357990919063ffffffff16565b61358f90919063ffffffff16565b905060125460145482612e199190613f25565b612e239190613f96565b60166000828254612e349190613e25565b9250508190555060125460135482612e4c9190613f25565b612e569190613f96565b60156000828254612e679190613e25565b92505081905550612f65565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ece57506000600f54115b15612f6457612efb6064612eed600f548861357990919063ffffffff16565b61358f90919063ffffffff16565b9050600f5460115482612f0e9190613f25565b612f189190613f96565b60166000828254612f299190613e25565b92505081905550600f5460105482612f419190613f25565b612f4b9190613f96565b60156000828254612f5c9190613e25565b925050819055505b5b6000811115612f7a57612f79873083613105565b5b8085612f8691906149e5565b94505b612f94878787613105565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316b9061467f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131da90614711565b60405180910390fd5b6131ee8383836135a5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614a8b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133079190613e25565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161336b9190613bb5565b60405180910390a361337e8484846135aa565b50505050565b600061338f30611461565b905060006015546016546133a39190613e25565b90506000808314806133b55750600082145b156133c257505050613577565b6008548311156133d25760085492505b6000600283601654866133e59190613f25565b6133ef9190613f96565b6133f99190613f96565b9050600061341082866135af90919063ffffffff16565b90506000479050613420826135c5565b600061343582476135af90919063ffffffff16565b90506000613460876134526015548561357990919063ffffffff16565b61358f90919063ffffffff16565b90506000818361347091906149e5565b9050600060168190555060006015819055506000861180156134925750600081115b156134df576134a18682613802565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516134d693929190614aab565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161352590614b13565b60006040518083038185875af1925050503d8060008114613562576040519150601f19603f3d011682016040523d82523d6000602084013e613567565b606091505b5050809750505050505050505050505b565b600081836135879190613f25565b905092915050565b6000818361359d9190613f96565b905092915050565b505050565b505050565b600081836135bd91906149e5565b905092915050565b6000600267ffffffffffffffff8111156135e2576135e1614b28565b5b6040519080825280602002602001820160405280156136105781602001602082028036833780820191505090505b509050308160008151811061362857613627614b57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136f19190614b9b565b8160018151811061370557613704614b57565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061376a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121a4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016137cc959493929190614cc1565b600060405180830381600087803b1580156137e657600080fd5b505af11580156137fa573d6000803e3d6000fd5b505050505050565b61382d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121a4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016138b496959493929190614d1b565b60606040518083038185885af11580156138d2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138f79190614d91565b5050505050565b600080fd5b6000819050919050565b61391681613903565b811461392157600080fd5b50565b6000813590506139338161390d565b92915050565b600080604083850312156139505761394f6138fe565b5b600061395e85828601613924565b925050602061396f85828601613924565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139b3578082015181840152602081019050613998565b60008484015250505050565b6000601f19601f8301169050919050565b60006139db82613979565b6139e58185613984565b93506139f5818560208601613995565b6139fe816139bf565b840191505092915050565b60006020820190508181036000830152613a2381846139d0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a5682613a2b565b9050919050565b613a6681613a4b565b8114613a7157600080fd5b50565b600081359050613a8381613a5d565b92915050565b60008060408385031215613aa057613a9f6138fe565b5b6000613aae85828601613a74565b9250506020613abf85828601613924565b9150509250929050565b60008115159050919050565b613ade81613ac9565b82525050565b6000602082019050613af96000830184613ad5565b92915050565b600060208284031215613b1557613b146138fe565b5b6000613b2384828501613a74565b91505092915050565b6000819050919050565b6000613b51613b4c613b4784613a2b565b613b2c565b613a2b565b9050919050565b6000613b6382613b36565b9050919050565b6000613b7582613b58565b9050919050565b613b8581613b6a565b82525050565b6000602082019050613ba06000830184613b7c565b92915050565b613baf81613903565b82525050565b6000602082019050613bca6000830184613ba6565b92915050565b600060208284031215613be657613be56138fe565b5b6000613bf484828501613924565b91505092915050565b600080600060608486031215613c1657613c156138fe565b5b6000613c2486828701613a74565b9350506020613c3586828701613a74565b9250506040613c4686828701613924565b9150509250925092565b613c5981613a4b565b82525050565b6000602082019050613c746000830184613c50565b92915050565b600060ff82169050919050565b613c9081613c7a565b82525050565b6000602082019050613cab6000830184613c87565b92915050565b613cba81613ac9565b8114613cc557600080fd5b50565b600081359050613cd781613cb1565b92915050565b60008060408385031215613cf457613cf36138fe565b5b6000613d0285828601613a74565b9250506020613d1385828601613cc8565b9150509250929050565b600060208284031215613d3357613d326138fe565b5b6000613d4184828501613cc8565b91505092915050565b60008060408385031215613d6157613d606138fe565b5b6000613d6f85828601613a74565b9250506020613d8085828601613a74565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc0602083613984565b9150613dcb82613d8a565b602082019050919050565b60006020820190508181036000830152613def81613db3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e3082613903565b9150613e3b83613903565b9250828201905080821115613e5357613e52613df6565b5b92915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000613e8f601d83613984565b9150613e9a82613e59565b602082019050919050565b60006020820190508181036000830152613ebe81613e82565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f0c57607f821691505b602082108103613f1f57613f1e613ec5565b5b50919050565b6000613f3082613903565b9150613f3b83613903565b9250828202613f4981613903565b91508282048414831517613f6057613f5f613df6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fa182613903565b9150613fac83613903565b925082613fbc57613fbb613f67565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614023602f83613984565b915061402e82613fc7565b604082019050919050565b6000602082019050818103600083015261405281614016565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006140b5602883613984565b91506140c082614059565b604082019050919050565b600060208201905081810360008301526140e4816140a8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614147603583613984565b9150614152826140eb565b604082019050919050565b600060208201905081810360008301526141768161413a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006141d9603483613984565b91506141e48261417d565b604082019050919050565b60006020820190508181036000830152614208816141cc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b600061426b603683613984565b91506142768261420f565b604082019050919050565b6000602082019050818103600083015261429a8161425e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142fd603983613984565b9150614308826142a1565b604082019050919050565b6000602082019050818103600083015261432c816142f0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061438f602583613984565b915061439a82614333565b604082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614421602483613984565b915061442c826143c5565b604082019050919050565b6000602082019050818103600083015261445081614414565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144b3602683613984565b91506144be82614457565b604082019050919050565b600060208201905081810360008301526144e2816144a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614545602483613984565b9150614550826144e9565b604082019050919050565b6000602082019050818103600083015261457481614538565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145d7602283613984565b91506145e28261457b565b604082019050919050565b60006020820190508181036000830152614606816145ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614669602583613984565b91506146748261460d565b604082019050919050565b600060208201905081810360008301526146988161465c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146fb602383613984565b91506147068261469f565b604082019050919050565b6000602082019050818103600083015261472a816146ee565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614767601683613984565b915061477282614731565b602082019050919050565b600060208201905081810360008301526147968161475a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061481f604983613984565b915061482a8261479d565b606082019050919050565b6000602082019050818103600083015261484e81614812565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006148b1603583613984565b91506148bc82614855565b604082019050919050565b600060208201905081810360008301526148e0816148a4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061491d601383613984565b9150614928826148e7565b602082019050919050565b6000602082019050818103600083015261494c81614910565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006149af603683613984565b91506149ba82614953565b604082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b60006149f082613903565b91506149fb83613903565b9250828203905081811115614a1357614a12613df6565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a75602683613984565b9150614a8082614a19565b604082019050919050565b60006020820190508181036000830152614aa481614a68565b9050919050565b6000606082019050614ac06000830186613ba6565b614acd6020830185613ba6565b614ada6040830184613ba6565b949350505050565b600081905092915050565b50565b6000614afd600083614ae2565b9150614b0882614aed565b600082019050919050565b6000614b1e82614af0565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b9581613a5d565b92915050565b600060208284031215614bb157614bb06138fe565b5b6000614bbf84828501614b86565b91505092915050565b6000819050919050565b6000614bed614be8614be384614bc8565b613b2c565b613903565b9050919050565b614bfd81614bd2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c3881613a4b565b82525050565b6000614c4a8383614c2f565b60208301905092915050565b6000602082019050919050565b6000614c6e82614c03565b614c788185614c0e565b9350614c8383614c1f565b8060005b83811015614cb4578151614c9b8882614c3e565b9750614ca683614c56565b925050600181019050614c87565b5085935050505092915050565b600060a082019050614cd66000830188613ba6565b614ce36020830187614bf4565b8181036040830152614cf58186614c63565b9050614d046060830185613c50565b614d116080830184613ba6565b9695505050505050565b600060c082019050614d306000830189613c50565b614d3d6020830188613ba6565b614d4a6040830187614bf4565b614d576060830186614bf4565b614d646080830185613c50565b614d7160a0830184613ba6565b979650505050505050565b600081519050614d8b8161390d565b92915050565b600080600060608486031215614daa57614da96138fe565b5b6000614db886828701614d7c565b9350506020614dc986828701614d7c565b9250506040614dda86828701614d7c565b915050925092509256fea264697066735822122050424c96131af1712dd74662acdd30d951c3e836f8bb81f2c84ea178872f283964736f6c63430008130033
Deployed Bytecode Sourcemap
27809:16890:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35572:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6076:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8243:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29096:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27882:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7196:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28914:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28874;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33698:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8894:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27985:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32873:670;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7038:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9795:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27940:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28305:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37275:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28077:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35067:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28761:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28345:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7367:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1382:103;;;;;;;;;;;;;:::i;:::-;;32406:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34512:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28107:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28146:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28685:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32222:112;;;;;;;;;;;;;:::i;:::-;;731:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28796:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34794:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6295:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36392:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10513:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7707:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36900:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29317:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28385:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36078:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34095:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28603:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28230:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28651:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7945:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28188:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32595:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28722:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1640:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28834:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28272:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37139:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35572:342;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35716:13:::1;35697:16;:32;;;;35759:13;35740:16;:32;;;;35818:16;;35799;;:35;;;;:::i;:::-;35783:13;:51;;;;35870:2;35853:13;;:19;;35845:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35572:342:::0;;:::o;6076:100::-;6130:13;6163:5;6156:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6076:100;:::o;8243:169::-;8326:4;8343:39;8352:12;:10;:12::i;:::-;8366:7;8375:6;8343:8;:39::i;:::-;8400:4;8393:11;;8243:169;;;;:::o;29096:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;27882:51::-;;;:::o;7196:108::-;7257:7;7284:12;;7277:19;;7196:108;:::o;28914:33::-;;;;:::o;28874:::-;;;;:::o;33698:275::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33835:4:::1;33827;33822:1;33806:13;:11;:13::i;:::-;:17;;;;:::i;:::-;33805:26;;;;:::i;:::-;33804:35;;;;:::i;:::-;33794:6;:45;;33772:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;33958:6;33948;:17;;;;:::i;:::-;33925:20;:40;;;;33698:275:::0;:::o;8894:492::-;9034:4;9051:36;9061:6;9069:9;9080:6;9051:9;:36::i;:::-;9100:24;9127:11;:19;9139:6;9127:19;;;;;;;;;;;;;;;:33;9147:12;:10;:12::i;:::-;9127:33;;;;;;;;;;;;;;;;9100:60;;9199:6;9179:16;:26;;9171:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9286:57;9295:6;9303:12;:10;:12::i;:::-;9336:6;9317:16;:25;9286:8;:57::i;:::-;9374:4;9367:11;;;8894:492;;;;;:::o;27985:53::-;28031:6;27985:53;:::o;32873:670::-;32994:4;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33048:1:::1;33038:6;:11;;33016:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;33173:3;33163:6;:13;;33141:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;33299:6;33289;:16;;33267:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;33443:6;33428:13;:11;:13::i;:::-;33419:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;33398:18;:51;;;;33507:6;33492:13;:11;:13::i;:::-;33483:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;33460:20;:53;;;;33531:4;33524:11;;32873:670:::0;;;;:::o;7038:93::-;7096:5;7121:2;7114:9;;7038:93;:::o;9795:215::-;9883:4;9900:80;9909:12;:10;:12::i;:::-;9923:7;9969:10;9932:11;:25;9944:12;:10;:12::i;:::-;9932:25;;;;;;;;;;;;;;;:34;9958:7;9932:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9900:8;:80::i;:::-;9998:4;9991:11;;9795:215;;;;:::o;27940:38::-;;;:::o;28305:33::-;;;;;;;;;;;;;:::o;37275:126::-;37341:4;37365:19;:28;37385:7;37365:28;;;;;;;;;;;;;;;;;;;;;;;;;37358:35;;37275:126;;;:::o;28077:23::-;;;;;;;;;;;;;:::o;35067:335::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35209:13:::1;35191:15;:31;;;;35251:13;35233:15;:31;;;;35308:15;;35290;;:33;;;;:::i;:::-;35275:12;:48;;;;35358:2;35342:12;;:18;;35334:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35067:335:::0;;:::o;28761:28::-;;;;:::o;28345:31::-;;;;;;;;;;;;;:::o;7367:127::-;7441:7;7468:9;:18;7478:7;7468:18;;;;;;;;;;;;;;;;7461:25;;7367:127;;;:::o;1382:103::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1447:30:::1;1474:1;1447:18;:30::i;:::-;1382:103::o:0;32406:121::-;32458:4;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32492:5:::1;32475:14;;:22;;;;;;;;;;;;;;;;;;32515:4;32508:11;;32406:121:::0;:::o;34512:167::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34667:4:::1;34625:31;:39;34657:6;34625:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34512:167:::0;;:::o;28107:30::-;;;;;;;;;;;;;:::o;28146:35::-;;;;:::o;28685:30::-;;;;:::o;32222:112::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32293:4:::1;32277:13;;:20;;;;;;;;;;;;;;;;;;32322:4;32308:11;;:18;;;;;;;;;;;;;;;;;;32222:112::o:0;731:87::-;777:7;804:6;;;;;;;;;;;797:13;;731:87;:::o;28796:31::-;;;;:::o;34794:100::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34879:7:::1;34865:11;;:21;;;;;;;;;;;;;;;;;;34794:100:::0;:::o;6295:104::-;6351:13;6384:7;6377:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6295:104;:::o;36392:304::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36536:13:::1;36528:21;;:4;:21;;::::0;36506:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36647:41;36676:4;36682:5;36647:28;:41::i;:::-;36392:304:::0;;:::o;10513:413::-;10606:4;10623:24;10650:11;:25;10662:12;:10;:12::i;:::-;10650:25;;;;;;;;;;;;;;;:34;10676:7;10650:34;;;;;;;;;;;;;;;;10623:61;;10723:15;10703:16;:35;;10695:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10816:67;10825:12;:10;:12::i;:::-;10839:7;10867:15;10848:16;:34;10816:8;:67::i;:::-;10914:4;10907:11;;;10513:413;;;;:::o;7707:175::-;7793:4;7810:42;7820:12;:10;:12::i;:::-;7834:9;7845:6;7810:9;:42::i;:::-;7870:4;7863:11;;7707:175;;;;:::o;36900:231::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37060:15:::1;;;;;;;;;;;37017:59;;37040:18;37017:59;;;;;;;;;;;;37105:18;37087:15;;:36;;;;;;;;;;;;;;;;;;36900:231:::0;:::o;29317:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;28385:33::-;;;;;;;;;;;;;:::o;36078:182::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36194:8:::1;36163:19;:28;36183:7;36163:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36234:7;36218:34;;;36243:8;36218:34;;;;;;:::i;:::-;;;;;;;;36078:182:::0;;:::o;34095:232::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34204:1:::1;34194:6;:11;;34172:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;34315:4;34301:13;:11;:13::i;:::-;34292:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;34280:9;:39;;;;34095:232:::0;:::o;28603:39::-;;;;;;;;;;;;;:::o;28230:35::-;;;;:::o;28651:27::-;;;;:::o;7945:151::-;8034:7;8061:11;:18;8073:5;8061:18;;;;;;;;;;;;;;;:27;8080:7;8061:27;;;;;;;;;;;;;;;;8054:34;;7945:151;;;;:::o;28188:33::-;;;;:::o;32595:135::-;32655:4;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32695:5:::1;32672:20;;:28;;;;;;;;;;;;;;;;;;32718:4;32711:11;;32595:135:::0;:::o;28722:30::-;;;;:::o;1640:201::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1749:1:::1;1729:22;;:8;:22;;::::0;1721:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1805:28;1824:8;1805:18;:28::i;:::-;1640:201:::0;:::o;28834:31::-;;;;:::o;28272:24::-;;;;:::o;37139:128::-;962:12;:10;:12::i;:::-;951:23;;:7;:5;:7::i;:::-;:23;;;943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37248:11:::1;37237:8;;:22;;;;;;;;;;;;;;;;;;37139:128:::0;:::o;105:98::-;158:7;185:10;178:17;;105:98;:::o;14197:380::-;14350:1;14333:19;;:5;:19;;;14325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14431:1;14412:21;;:7;:21;;;14404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14515:6;14485:11;:18;14497:5;14485:18;;;;;;;;;;;;;;;:27;14504:7;14485:27;;;;;;;;;;;;;;;:36;;;;14553:7;14537:32;;14546:5;14537:32;;;14562:6;14537:32;;;;;;:::i;:::-;;;;;;;;14197:380;;;:::o;37459:4579::-;37607:1;37591:18;;:4;:18;;;37583:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37684:1;37670:16;;:2;:16;;;37662:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37753:1;37743:6;:11;37739:93;;37771:28;37787:4;37793:2;37797:1;37771:15;:28::i;:::-;37814:7;;37739:93;37848:14;;;;;;;;;;;37844:2487;;;37909:7;:5;:7::i;:::-;37901:15;;:4;:15;;;;:49;;;;;37943:7;:5;:7::i;:::-;37937:13;;:2;:13;;;;37901:49;:86;;;;;37985:1;37971:16;;:2;:16;;;;37901:86;:128;;;;;38022:6;38008:21;;:2;:21;;;;37901:128;:158;;;;;38051:8;;;;;;;;;;;38050:9;37901:158;37879:2441;;;38099:13;;;;;;;;;;;38094:223;;38171:19;:25;38191:4;38171:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38200:19;:23;38220:2;38200:23;;;;;;;;;;;;;;;;;;;;;;;;;38171:52;38137:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;38094:223;38473:20;;;;;;;;;;;38469:641;;;38554:7;:5;:7::i;:::-;38548:13;;:2;:13;;;;:72;;;;;38604:15;38590:30;;:2;:30;;;;38548:72;:129;;;;;38663:13;38649:28;;:2;:28;;;;38548:129;38518:573;;;38841:12;38766:28;:39;38795:9;38766:39;;;;;;;;;;;;;;;;:87;38728:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;39055:12;39013:28;:39;39042:9;39013:39;;;;;;;;;;;;;;;:54;;;;38518:573;38469:641;39184:25;:31;39210:4;39184:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;39241:31;:35;39273:2;39241:35;;;;;;;;;;;;;;;;;;;;;;;;;39240:36;39184:92;39158:1147;;;39363:20;;39353:6;:30;;39319:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;39571:9;;39554:13;39564:2;39554:9;:13::i;:::-;39545:6;:22;;;;:::i;:::-;:35;;39511:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39158:1147;;;39749:25;:29;39775:2;39749:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;39804:31;:37;39836:4;39804:37;;;;;;;;;;;;;;;;;;;;;;;;;39803:38;39749:92;39723:582;;;39928:20;;39918:6;:30;;39884:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;39723:582;;;40085:31;:35;40117:2;40085:35;;;;;;;;;;;;;;;;;;;;;;;;;40080:225;;40205:9;;40188:13;40198:2;40188:9;:13::i;:::-;40179:6;:22;;;;:::i;:::-;:35;;40145:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40080:225;39723:582;39158:1147;37879:2441;37844:2487;40343:28;40374:24;40392:4;40374:9;:24::i;:::-;40343:55;;40411:12;40450:18;;40426:20;:42;;40411:57;;40499:7;:35;;;;;40523:11;;;;;;;;;;;40499:35;:61;;;;;40552:8;;;;;;;;;;;40551:9;40499:61;:110;;;;;40578:25;:31;40604:4;40578:31;;;;;;;;;;;;;;;;;;;;;;;;;40577:32;40499:110;:153;;;;;40627:19;:25;40647:4;40627:25;;;;;;;;;;;;;;;;;;;;;;;;;40626:26;40499:153;:194;;;;;40670:19;:23;40690:2;40670:23;;;;;;;;;;;;;;;;;;;;;;;;;40669:24;40499:194;40481:326;;;40731:4;40720:8;;:15;;;;;;;;;;;;;;;;;;40752:10;:8;:10::i;:::-;40790:5;40779:8;;:16;;;;;;;;;;;;;;;;;;40481:326;40819:12;40835:8;;;;;;;;;;;40834:9;40819:24;;40945:19;:25;40965:4;40945:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40974:19;:23;40994:2;40974:23;;;;;;;;;;;;;;;;;;;;;;;;;40945:52;40941:100;;;41024:5;41014:15;;40941:100;41053:12;41158:7;41154:831;;;41210:25;:29;41236:2;41210:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41259:1;41243:13;;:17;41210:50;41206:630;;;41288:34;41318:3;41288:25;41299:13;;41288:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41281:41;;41391:13;;41371:16;;41364:4;:23;;;;:::i;:::-;41363:41;;;;:::i;:::-;41341:18;;:63;;;;;;;:::i;:::-;;;;;;;;41473:13;;41453:16;;41446:4;:23;;;;:::i;:::-;41445:41;;;;:::i;:::-;41423:18;;:63;;;;;;;:::i;:::-;;;;;;;;41206:630;;;41548:25;:31;41574:4;41548:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41598:1;41583:12;;:16;41548:51;41544:292;;;41627:33;41656:3;41627:24;41638:12;;41627:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41620:40;;41728:12;;41709:15;;41702:4;:22;;;;:::i;:::-;41701:39;;;;:::i;:::-;41679:18;;:61;;;;;;;:::i;:::-;;;;;;;;41808:12;;41789:15;;41782:4;:22;;;;:::i;:::-;41781:39;;;;:::i;:::-;41759:18;;:61;;;;;;;:::i;:::-;;;;;;;;41544:292;41206:630;41863:1;41856:4;:8;41852:91;;;41885:42;41901:4;41915;41922;41885:15;:42::i;:::-;41852:91;41969:4;41959:14;;;;;:::i;:::-;;;41154:831;41997:33;42013:4;42019:2;42023:6;41997:15;:33::i;:::-;37572:4466;;;;37459:4579;;;;:::o;2001:191::-;2075:16;2094:6;;;;;;;;;;;2075:25;;2120:8;2111:6;;:17;;;;;;;;;;;;;;;;;;2175:8;2144:40;;2165:8;2144:40;;;;;;;;;;;;2064:128;2001:191;:::o;36704:188::-;36821:5;36787:25;:31;36813:4;36787:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36878:5;36844:40;;36872:4;36844:40;;;;;;;;;;;;36704:188;;:::o;11416:733::-;11574:1;11556:20;;:6;:20;;;11548:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11658:1;11637:23;;:9;:23;;;11629:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11713:47;11734:6;11742:9;11753:6;11713:20;:47::i;:::-;11773:21;11797:9;:17;11807:6;11797:17;;;;;;;;;;;;;;;;11773:41;;11850:6;11833:13;:23;;11825:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11971:6;11955:13;:22;11935:9;:17;11945:6;11935:17;;;;;;;;;;;;;;;:42;;;;12023:6;11999:9;:20;12009:9;11999:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12064:9;12047:35;;12056:6;12047:35;;;12075:6;12047:35;;;;;;:::i;:::-;;;;;;;;12095:46;12115:6;12123:9;12134:6;12095:19;:46::i;:::-;11537:612;11416:733;;;:::o;43165:1531::-;43204:23;43230:24;43248:4;43230:9;:24::i;:::-;43204:50;;43265:25;43327:18;;43293;;:52;;;;:::i;:::-;43265:80;;43356:12;43404:1;43385:15;:20;:46;;;;43430:1;43409:17;:22;43385:46;43381:85;;;43448:7;;;;;43381:85;43500:20;;43482:15;:38;43478:109;;;43555:20;;43537:38;;43478:109;43648:23;43761:1;43728:17;43693:18;;43675:15;:36;;;;:::i;:::-;43674:71;;;;:::i;:::-;:88;;;;:::i;:::-;43648:114;;43773:26;43802:36;43822:15;43802;:19;;:36;;;;:::i;:::-;43773:65;;43851:25;43879:21;43851:49;;43913:36;43930:18;43913:16;:36::i;:::-;43962:18;43983:44;44009:17;43983:21;:25;;:44;;;;:::i;:::-;43962:65;;44040:23;44066:81;44119:17;44066:34;44081:18;;44066:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;44040:107;;44160:23;44199:15;44186:10;:28;;;;:::i;:::-;44160:54;;44248:1;44227:18;:22;;;;44281:1;44260:18;:22;;;;44319:1;44301:15;:19;:42;;;;;44342:1;44324:15;:19;44301:42;44297:278;;;44360:46;44373:15;44390;44360:12;:46::i;:::-;44426:137;44459:18;44496:15;44530:18;;44426:137;;;;;;;;:::i;:::-;;;;;;;;44297:278;44609:15;;;;;;;;;;;44601:29;;44652:21;44601:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44587:101;;;;;43193:1503;;;;;;;;;43165:1531;:::o;19126:98::-;19184:7;19215:1;19211;:5;;;;:::i;:::-;19204:12;;19126:98;;;;:::o;19525:::-;19583:7;19614:1;19610;:5;;;;:::i;:::-;19603:12;;19525:98;;;;:::o;15177:125::-;;;;:::o;15906:124::-;;;;:::o;18769:98::-;18827:7;18858:1;18854;:5;;;;:::i;:::-;18847:12;;18769:98;;;;:::o;42046:589::-;42172:21;42210:1;42196:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:40;;42241:4;42223;42228:1;42223:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42267:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42257:4;42262:1;42257:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42302:62;42319:4;42334:15;42352:11;42302:8;:62::i;:::-;42403:15;:66;;;42484:11;42510:1;42554:4;42581;42601:15;42403:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42101:534;42046:589;:::o;42643:514::-;42791:62;42808:4;42823:15;42841:11;42791:8;:62::i;:::-;42896:15;:31;;;42935:9;42968:4;42988:11;43014:1;43057;43100:8;;;;;;;;;;;43123:15;42896:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42643:514;;:::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:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:60::-;4289:3;4310:5;4303:12;;4261:60;;;:::o;4327:142::-;4377:9;4410:53;4428:34;4437:24;4455:5;4437:24;:::i;:::-;4428:34;:::i;:::-;4410:53;:::i;:::-;4397:66;;4327:142;;;:::o;4475:126::-;4525:9;4558:37;4589:5;4558:37;:::i;:::-;4545:50;;4475:126;;;:::o;4607:153::-;4684:9;4717:37;4748:5;4717:37;:::i;:::-;4704:50;;4607:153;;;:::o;4766:185::-;4880:64;4938:5;4880:64;:::i;:::-;4875:3;4868:77;4766:185;;:::o;4957:276::-;5077:4;5115:2;5104:9;5100:18;5092:26;;5128:98;5223:1;5212:9;5208:17;5199:6;5128:98;:::i;:::-;4957:276;;;;:::o;5239:118::-;5326:24;5344:5;5326:24;:::i;:::-;5321:3;5314:37;5239:118;;:::o;5363:222::-;5456:4;5494:2;5483:9;5479:18;5471:26;;5507:71;5575:1;5564:9;5560:17;5551:6;5507:71;:::i;:::-;5363:222;;;;:::o;5591:329::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::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:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:182::-;9017:34;9013:1;9005:6;9001:14;8994:58;8877:182;:::o;9065:366::-;9207:3;9228:67;9292:2;9287:3;9228:67;:::i;:::-;9221:74;;9304:93;9393:3;9304:93;:::i;:::-;9422:2;9417:3;9413:12;9406:19;;9065:366;;;:::o;9437:419::-;9603:4;9641:2;9630:9;9626:18;9618:26;;9690:9;9684:4;9680:20;9676:1;9665:9;9661:17;9654:47;9718:131;9844:4;9718:131;:::i;:::-;9710:139;;9437:419;;;:::o;9862:180::-;9910:77;9907:1;9900:88;10007:4;10004:1;9997:15;10031:4;10028:1;10021:15;10048:191;10088:3;10107:20;10125:1;10107:20;:::i;:::-;10102:25;;10141:20;10159:1;10141:20;:::i;:::-;10136:25;;10184:1;10181;10177:9;10170:16;;10205:3;10202:1;10199:10;10196:36;;;10212:18;;:::i;:::-;10196:36;10048:191;;;;:::o;10245:179::-;10385:31;10381:1;10373:6;10369:14;10362:55;10245:179;:::o;10430:366::-;10572:3;10593:67;10657:2;10652:3;10593:67;:::i;:::-;10586:74;;10669:93;10758:3;10669:93;:::i;:::-;10787:2;10782:3;10778:12;10771:19;;10430:366;;;:::o;10802:419::-;10968:4;11006:2;10995:9;10991:18;10983:26;;11055:9;11049:4;11045:20;11041:1;11030:9;11026:17;11019:47;11083:131;11209:4;11083:131;:::i;:::-;11075:139;;10802:419;;;:::o;11227:180::-;11275:77;11272:1;11265:88;11372:4;11369:1;11362:15;11396:4;11393:1;11386:15;11413:320;11457:6;11494:1;11488:4;11484:12;11474:22;;11541:1;11535:4;11531:12;11562:18;11552:81;;11618:4;11610:6;11606:17;11596:27;;11552:81;11680:2;11672:6;11669:14;11649:18;11646:38;11643:84;;11699:18;;:::i;:::-;11643:84;11464:269;11413:320;;;:::o;11739:410::-;11779:7;11802:20;11820:1;11802:20;:::i;:::-;11797:25;;11836:20;11854:1;11836:20;:::i;:::-;11831:25;;11891:1;11888;11884:9;11913:30;11931:11;11913:30;:::i;:::-;11902:41;;12092:1;12083:7;12079:15;12076:1;12073:22;12053:1;12046:9;12026:83;12003:139;;12122:18;;:::i;:::-;12003:139;11787:362;11739:410;;;;:::o;12155:180::-;12203:77;12200:1;12193:88;12300:4;12297:1;12290:15;12324:4;12321:1;12314:15;12341:185;12381:1;12398:20;12416:1;12398:20;:::i;:::-;12393:25;;12432:20;12450:1;12432:20;:::i;:::-;12427:25;;12471:1;12461:35;;12476:18;;:::i;:::-;12461:35;12518:1;12515;12511:9;12506:14;;12341:185;;;;:::o;12532:234::-;12672:34;12668:1;12660:6;12656:14;12649:58;12741:17;12736:2;12728:6;12724:15;12717:42;12532:234;:::o;12772:366::-;12914:3;12935:67;12999:2;12994:3;12935:67;:::i;:::-;12928:74;;13011:93;13100:3;13011:93;:::i;:::-;13129:2;13124:3;13120:12;13113:19;;12772:366;;;:::o;13144:419::-;13310:4;13348:2;13337:9;13333:18;13325:26;;13397:9;13391:4;13387:20;13383:1;13372:9;13368:17;13361:47;13425:131;13551:4;13425:131;:::i;:::-;13417:139;;13144:419;;;:::o;13569:227::-;13709:34;13705:1;13697:6;13693:14;13686:58;13778:10;13773:2;13765:6;13761:15;13754:35;13569:227;:::o;13802:366::-;13944:3;13965:67;14029:2;14024:3;13965:67;:::i;:::-;13958:74;;14041:93;14130:3;14041:93;:::i;:::-;14159:2;14154:3;14150:12;14143:19;;13802:366;;;:::o;14174:419::-;14340:4;14378:2;14367:9;14363:18;14355:26;;14427:9;14421:4;14417:20;14413:1;14402:9;14398:17;14391:47;14455:131;14581:4;14455:131;:::i;:::-;14447:139;;14174:419;;;:::o;14599:240::-;14739:34;14735:1;14727:6;14723:14;14716:58;14808:23;14803:2;14795:6;14791:15;14784:48;14599:240;:::o;14845:366::-;14987:3;15008:67;15072:2;15067:3;15008:67;:::i;:::-;15001:74;;15084:93;15173:3;15084:93;:::i;:::-;15202:2;15197:3;15193:12;15186:19;;14845:366;;;:::o;15217:419::-;15383:4;15421:2;15410:9;15406:18;15398:26;;15470:9;15464:4;15460:20;15456:1;15445:9;15441:17;15434:47;15498:131;15624:4;15498:131;:::i;:::-;15490:139;;15217:419;;;:::o;15642:239::-;15782:34;15778:1;15770:6;15766:14;15759:58;15851:22;15846:2;15838:6;15834:15;15827:47;15642:239;:::o;15887:366::-;16029:3;16050:67;16114:2;16109:3;16050:67;:::i;:::-;16043:74;;16126:93;16215:3;16126:93;:::i;:::-;16244:2;16239:3;16235:12;16228:19;;15887:366;;;:::o;16259:419::-;16425:4;16463:2;16452:9;16448:18;16440:26;;16512:9;16506:4;16502:20;16498:1;16487:9;16483:17;16476:47;16540:131;16666:4;16540:131;:::i;:::-;16532:139;;16259:419;;;:::o;16684:241::-;16824:34;16820:1;16812:6;16808:14;16801:58;16893:24;16888:2;16880:6;16876:15;16869:49;16684:241;:::o;16931:366::-;17073:3;17094:67;17158:2;17153:3;17094:67;:::i;:::-;17087:74;;17170:93;17259:3;17170:93;:::i;:::-;17288:2;17283:3;17279:12;17272:19;;16931:366;;;:::o;17303:419::-;17469:4;17507:2;17496:9;17492:18;17484:26;;17556:9;17550:4;17546:20;17542:1;17531:9;17527:17;17520:47;17584:131;17710:4;17584:131;:::i;:::-;17576:139;;17303:419;;;:::o;17728:244::-;17868:34;17864:1;17856:6;17852:14;17845:58;17937:27;17932:2;17924:6;17920:15;17913:52;17728:244;:::o;17978:366::-;18120:3;18141:67;18205:2;18200:3;18141:67;:::i;:::-;18134:74;;18217:93;18306:3;18217:93;:::i;:::-;18335:2;18330:3;18326:12;18319:19;;17978:366;;;:::o;18350:419::-;18516:4;18554:2;18543:9;18539:18;18531:26;;18603:9;18597:4;18593:20;18589:1;18578:9;18574:17;18567:47;18631:131;18757:4;18631:131;:::i;:::-;18623:139;;18350:419;;;:::o;18775:224::-;18915:34;18911:1;18903:6;18899:14;18892:58;18984:7;18979:2;18971:6;18967:15;18960:32;18775:224;:::o;19005:366::-;19147:3;19168:67;19232:2;19227:3;19168:67;:::i;:::-;19161:74;;19244:93;19333:3;19244:93;:::i;:::-;19362:2;19357:3;19353:12;19346:19;;19005:366;;;:::o;19377:419::-;19543:4;19581:2;19570:9;19566:18;19558:26;;19630:9;19624:4;19620:20;19616:1;19605:9;19601:17;19594:47;19658:131;19784:4;19658:131;:::i;:::-;19650:139;;19377:419;;;:::o;19802:223::-;19942:34;19938:1;19930:6;19926:14;19919:58;20011:6;20006:2;19998:6;19994:15;19987:31;19802:223;:::o;20031:366::-;20173:3;20194:67;20258:2;20253:3;20194:67;:::i;:::-;20187:74;;20270:93;20359:3;20270:93;:::i;:::-;20388:2;20383:3;20379:12;20372:19;;20031:366;;;:::o;20403:419::-;20569:4;20607:2;20596:9;20592:18;20584:26;;20656:9;20650:4;20646:20;20642:1;20631:9;20627:17;20620:47;20684:131;20810:4;20684:131;:::i;:::-;20676:139;;20403:419;;;:::o;20828:225::-;20968:34;20964:1;20956:6;20952:14;20945:58;21037:8;21032:2;21024:6;21020:15;21013:33;20828:225;:::o;21059:366::-;21201:3;21222:67;21286:2;21281:3;21222:67;:::i;:::-;21215:74;;21298:93;21387:3;21298:93;:::i;:::-;21416:2;21411:3;21407:12;21400:19;;21059:366;;;:::o;21431:419::-;21597:4;21635:2;21624:9;21620:18;21612:26;;21684:9;21678:4;21674:20;21670:1;21659:9;21655:17;21648:47;21712:131;21838:4;21712:131;:::i;:::-;21704:139;;21431:419;;;:::o;21856:223::-;21996:34;21992:1;21984:6;21980:14;21973:58;22065:6;22060:2;22052:6;22048:15;22041:31;21856:223;:::o;22085:366::-;22227:3;22248:67;22312:2;22307:3;22248:67;:::i;:::-;22241:74;;22324:93;22413:3;22324:93;:::i;:::-;22442:2;22437:3;22433:12;22426:19;;22085:366;;;:::o;22457:419::-;22623:4;22661:2;22650:9;22646:18;22638:26;;22710:9;22704:4;22700:20;22696:1;22685:9;22681:17;22674:47;22738:131;22864:4;22738:131;:::i;:::-;22730:139;;22457:419;;;:::o;22882:221::-;23022:34;23018:1;23010:6;23006:14;22999:58;23091:4;23086:2;23078:6;23074:15;23067:29;22882:221;:::o;23109:366::-;23251:3;23272:67;23336:2;23331:3;23272:67;:::i;:::-;23265:74;;23348:93;23437:3;23348:93;:::i;:::-;23466:2;23461:3;23457:12;23450:19;;23109:366;;;:::o;23481:419::-;23647:4;23685:2;23674:9;23670:18;23662:26;;23734:9;23728:4;23724:20;23720:1;23709:9;23705:17;23698:47;23762:131;23888:4;23762:131;:::i;:::-;23754:139;;23481:419;;;:::o;23906:224::-;24046:34;24042:1;24034:6;24030:14;24023:58;24115:7;24110:2;24102:6;24098:15;24091:32;23906:224;:::o;24136:366::-;24278:3;24299:67;24363:2;24358:3;24299:67;:::i;:::-;24292:74;;24375:93;24464:3;24375:93;:::i;:::-;24493:2;24488:3;24484:12;24477:19;;24136:366;;;:::o;24508:419::-;24674:4;24712:2;24701:9;24697:18;24689:26;;24761:9;24755:4;24751:20;24747:1;24736:9;24732:17;24725:47;24789:131;24915:4;24789:131;:::i;:::-;24781:139;;24508:419;;;:::o;24933:222::-;25073:34;25069:1;25061:6;25057:14;25050:58;25142:5;25137:2;25129:6;25125:15;25118:30;24933:222;:::o;25161:366::-;25303:3;25324:67;25388:2;25383:3;25324:67;:::i;:::-;25317:74;;25400:93;25489:3;25400:93;:::i;:::-;25518:2;25513:3;25509:12;25502:19;;25161:366;;;:::o;25533:419::-;25699:4;25737:2;25726:9;25722:18;25714:26;;25786:9;25780:4;25776:20;25772:1;25761:9;25757:17;25750:47;25814:131;25940:4;25814:131;:::i;:::-;25806:139;;25533:419;;;:::o;25958:172::-;26098:24;26094:1;26086:6;26082:14;26075:48;25958:172;:::o;26136:366::-;26278:3;26299:67;26363:2;26358:3;26299:67;:::i;:::-;26292:74;;26375:93;26464:3;26375:93;:::i;:::-;26493:2;26488:3;26484:12;26477:19;;26136:366;;;:::o;26508:419::-;26674:4;26712:2;26701:9;26697:18;26689:26;;26761:9;26755:4;26751:20;26747:1;26736:9;26732:17;26725:47;26789:131;26915:4;26789:131;:::i;:::-;26781:139;;26508:419;;;:::o;26933:297::-;27073:34;27069:1;27061:6;27057:14;27050:58;27142:34;27137:2;27129:6;27125:15;27118:59;27211:11;27206:2;27198:6;27194:15;27187:36;26933:297;:::o;27236:366::-;27378:3;27399:67;27463:2;27458:3;27399:67;:::i;:::-;27392:74;;27475:93;27564:3;27475:93;:::i;:::-;27593:2;27588:3;27584:12;27577:19;;27236:366;;;:::o;27608:419::-;27774:4;27812:2;27801:9;27797:18;27789:26;;27861:9;27855:4;27851:20;27847:1;27836:9;27832:17;27825:47;27889:131;28015:4;27889:131;:::i;:::-;27881:139;;27608:419;;;:::o;28033:240::-;28173:34;28169:1;28161:6;28157:14;28150:58;28242:23;28237:2;28229:6;28225:15;28218:48;28033:240;:::o;28279:366::-;28421:3;28442:67;28506:2;28501:3;28442:67;:::i;:::-;28435:74;;28518:93;28607:3;28518:93;:::i;:::-;28636:2;28631:3;28627:12;28620:19;;28279:366;;;:::o;28651:419::-;28817:4;28855:2;28844:9;28840:18;28832:26;;28904:9;28898:4;28894:20;28890:1;28879:9;28875:17;28868:47;28932:131;29058:4;28932:131;:::i;:::-;28924:139;;28651:419;;;:::o;29076:169::-;29216:21;29212:1;29204:6;29200:14;29193:45;29076:169;:::o;29251:366::-;29393:3;29414:67;29478:2;29473:3;29414:67;:::i;:::-;29407:74;;29490:93;29579:3;29490:93;:::i;:::-;29608:2;29603:3;29599:12;29592:19;;29251:366;;;:::o;29623:419::-;29789:4;29827:2;29816:9;29812:18;29804:26;;29876:9;29870:4;29866:20;29862:1;29851:9;29847:17;29840:47;29904:131;30030:4;29904:131;:::i;:::-;29896:139;;29623:419;;;:::o;30048:241::-;30188:34;30184:1;30176:6;30172:14;30165:58;30257:24;30252:2;30244:6;30240:15;30233:49;30048:241;:::o;30295:366::-;30437:3;30458:67;30522:2;30517:3;30458:67;:::i;:::-;30451:74;;30534:93;30623:3;30534:93;:::i;:::-;30652:2;30647:3;30643:12;30636:19;;30295:366;;;:::o;30667:419::-;30833:4;30871:2;30860:9;30856:18;30848:26;;30920:9;30914:4;30910:20;30906:1;30895:9;30891:17;30884:47;30948:131;31074:4;30948:131;:::i;:::-;30940:139;;30667:419;;;:::o;31092:194::-;31132:4;31152:20;31170:1;31152:20;:::i;:::-;31147:25;;31186:20;31204:1;31186:20;:::i;:::-;31181:25;;31230:1;31227;31223:9;31215:17;;31254:1;31248:4;31245:11;31242:37;;;31259:18;;:::i;:::-;31242:37;31092:194;;;;:::o;31292:225::-;31432:34;31428:1;31420:6;31416:14;31409:58;31501:8;31496:2;31488:6;31484:15;31477:33;31292:225;:::o;31523:366::-;31665:3;31686:67;31750:2;31745:3;31686:67;:::i;:::-;31679:74;;31762:93;31851:3;31762:93;:::i;:::-;31880:2;31875:3;31871:12;31864:19;;31523:366;;;:::o;31895:419::-;32061:4;32099:2;32088:9;32084:18;32076:26;;32148:9;32142:4;32138:20;32134:1;32123:9;32119:17;32112:47;32176:131;32302:4;32176:131;:::i;:::-;32168:139;;31895:419;;;:::o;32320:442::-;32469:4;32507:2;32496:9;32492:18;32484:26;;32520:71;32588:1;32577:9;32573:17;32564:6;32520:71;:::i;:::-;32601:72;32669:2;32658:9;32654:18;32645:6;32601:72;:::i;:::-;32683;32751:2;32740:9;32736:18;32727:6;32683:72;:::i;:::-;32320:442;;;;;;:::o;32768:147::-;32869:11;32906:3;32891:18;;32768:147;;;;:::o;32921:114::-;;:::o;33041:398::-;33200:3;33221:83;33302:1;33297:3;33221:83;:::i;:::-;33214:90;;33313:93;33402:3;33313:93;:::i;:::-;33431:1;33426:3;33422:11;33415:18;;33041:398;;;:::o;33445:379::-;33629:3;33651:147;33794:3;33651:147;:::i;:::-;33644:154;;33815:3;33808:10;;33445:379;;;:::o;33830:180::-;33878:77;33875:1;33868:88;33975:4;33972:1;33965:15;33999:4;33996:1;33989:15;34016:180;34064:77;34061:1;34054:88;34161:4;34158:1;34151:15;34185:4;34182:1;34175:15;34202:143;34259:5;34290:6;34284:13;34275:22;;34306:33;34333:5;34306:33;:::i;:::-;34202:143;;;;:::o;34351:351::-;34421:6;34470:2;34458:9;34449:7;34445:23;34441:32;34438:119;;;34476:79;;:::i;:::-;34438:119;34596:1;34621:64;34677:7;34668:6;34657:9;34653:22;34621:64;:::i;:::-;34611:74;;34567:128;34351:351;;;;:::o;34708:85::-;34753:7;34782:5;34771:16;;34708:85;;;:::o;34799:158::-;34857:9;34890:61;34908:42;34917:32;34943:5;34917:32;:::i;:::-;34908:42;:::i;:::-;34890:61;:::i;:::-;34877:74;;34799:158;;;:::o;34963:147::-;35058:45;35097:5;35058:45;:::i;:::-;35053:3;35046:58;34963:147;;:::o;35116:114::-;35183:6;35217:5;35211:12;35201:22;;35116:114;;;:::o;35236:184::-;35335:11;35369:6;35364:3;35357:19;35409:4;35404:3;35400:14;35385:29;;35236:184;;;;:::o;35426:132::-;35493:4;35516:3;35508:11;;35546:4;35541:3;35537:14;35529:22;;35426:132;;;:::o;35564:108::-;35641:24;35659:5;35641:24;:::i;:::-;35636:3;35629:37;35564:108;;:::o;35678:179::-;35747:10;35768:46;35810:3;35802:6;35768:46;:::i;:::-;35846:4;35841:3;35837:14;35823:28;;35678:179;;;;:::o;35863:113::-;35933:4;35965;35960:3;35956:14;35948:22;;35863:113;;;:::o;36012:732::-;36131:3;36160:54;36208:5;36160:54;:::i;:::-;36230:86;36309:6;36304:3;36230:86;:::i;:::-;36223:93;;36340:56;36390:5;36340:56;:::i;:::-;36419:7;36450:1;36435:284;36460:6;36457:1;36454:13;36435:284;;;36536:6;36530:13;36563:63;36622:3;36607:13;36563:63;:::i;:::-;36556:70;;36649:60;36702:6;36649:60;:::i;:::-;36639:70;;36495:224;36482:1;36479;36475:9;36470:14;;36435:284;;;36439:14;36735:3;36728:10;;36136:608;;;36012:732;;;;:::o;36750:831::-;37013:4;37051:3;37040:9;37036:19;37028:27;;37065:71;37133:1;37122:9;37118:17;37109:6;37065:71;:::i;:::-;37146:80;37222:2;37211:9;37207:18;37198:6;37146:80;:::i;:::-;37273:9;37267:4;37263:20;37258:2;37247:9;37243:18;37236:48;37301:108;37404:4;37395:6;37301:108;:::i;:::-;37293:116;;37419:72;37487:2;37476:9;37472:18;37463:6;37419:72;:::i;:::-;37501:73;37569:3;37558:9;37554:19;37545:6;37501:73;:::i;:::-;36750:831;;;;;;;;:::o;37587:807::-;37836:4;37874:3;37863:9;37859:19;37851:27;;37888:71;37956:1;37945:9;37941:17;37932:6;37888:71;:::i;:::-;37969:72;38037:2;38026:9;38022:18;38013:6;37969:72;:::i;:::-;38051:80;38127:2;38116:9;38112:18;38103:6;38051:80;:::i;:::-;38141;38217:2;38206:9;38202:18;38193:6;38141:80;:::i;:::-;38231:73;38299:3;38288:9;38284:19;38275:6;38231:73;:::i;:::-;38314;38382:3;38371:9;38367:19;38358:6;38314:73;:::i;:::-;37587:807;;;;;;;;;:::o;38400:143::-;38457:5;38488:6;38482:13;38473:22;;38504:33;38531:5;38504:33;:::i;:::-;38400:143;;;;:::o;38549:663::-;38637:6;38645;38653;38702:2;38690:9;38681:7;38677:23;38673:32;38670:119;;;38708:79;;:::i;:::-;38670:119;38828:1;38853:64;38909:7;38900:6;38889:9;38885:22;38853:64;:::i;:::-;38843:74;;38799:128;38966:2;38992:64;39048:7;39039:6;39028:9;39024:22;38992:64;:::i;:::-;38982:74;;38937:129;39105:2;39131:64;39187:7;39178:6;39167:9;39163:22;39131:64;:::i;:::-;39121:74;;39076:129;38549:663;;;;;:::o
Swarm Source
ipfs://50424c96131af1712dd74662acdd30d951c3e836f8bb81f2c84ea178872f2839
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.