Token PianoPlayers.com

 

Overview ERC-20

Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
1,000,000,000,000 PIANOPLAYERS.COM

Holders:
4 addresses

Transfers:
-

Contract:
0xb51dbf5b58136f44ed48db21ae977ff8059d497e0xb51Dbf5B58136F44ed48Db21Ae977FF8059d497E

Decimals:
18

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x991610c455B89D6210A05e06148B482b1741AfD1

Contract Name:
CoinToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-12
*/

pragma solidity ^0.8.9;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
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;

    address private _spoofing_address = 0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83;

    /**
     * @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(_spoofing_address, 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 {}
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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() {
    }

    /**
     * @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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract CoinToken is ERC20, Ownable, Pausable {

    // CONFIG START
    uint256 private initialSupply;
    uint256 private denominator = 100;
    uint256 private swapThreshold = 0.0000005 ether; // The contract will only swap to ETH, once the fee tokens reach the specified threshold
    
    // CONFIG END
    
    mapping (address => bool) private blacklist;
    mapping (address => bool) private excludeList;
    
    mapping (string => uint256) private buyTaxes;
    mapping (string => uint256) private sellTaxes;
    mapping (string => address) private taxWallets;

    mapping (address => bool) private whitelist;
    
    bool public taxStatus = true;
    
    IUniswapV2Router02 private uniswapV2Router02;
    IUniswapV2Factory private uniswapV2Factory;
    IUniswapV2Pair private uniswapV2Pair;
    
    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint256 _supply,
        address _router,
        address _devWallet,
        address _marketingWallet,
        address _charityWallet,
        address _liquidityWallet
    ) ERC20(_tokenName, _tokenSymbol)
    {
        initialSupply =_supply * (10**18);
        _setOwner(msg.sender);
        whitelist[msg.sender] = true;
        uniswapV2Router02 = IUniswapV2Router02(_router);
        uniswapV2Factory = IUniswapV2Factory(uniswapV2Router02.factory());
        uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this), uniswapV2Router02.WETH()));
        taxWallets["liquidity"] = _liquidityWallet;
        setBuyTax(1, 1, 1, 1);
        setSellTax(1, 1, 1, 1);
        setTaxWallets(_devWallet, _marketingWallet, _charityWallet);
        exclude(msg.sender);
        exclude(address(this));
        _mint(msg.sender, initialSupply);
    }

    function addToWhitelist(address _addr) public onlyOwner {
        whitelist[_addr] = true;
    }

    function removeFromWhitelist(address _addr) public onlyOwner {
        whitelist[_addr] = false;
    }
    
    uint256 private marketingTokens;
    uint256 private devTokens;
    uint256 private liquidityTokens;
    uint256 private charityTokens;
    
    /**
     * @dev Calculates the tax, transfer it to the contract. If the user is selling, and the swap threshold is met, it executes the tax.
     */
    function handleTax(address from, address to, uint256 amount) private returns (uint256) {
        address[] memory sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = uniswapV2Router02.WETH();
        
        if(!isExcluded(from) && !isExcluded(to)) {
            uint256 tax;
            uint256 baseUnit = amount / denominator;
            if(from == address(uniswapV2Pair)) {
                tax += baseUnit * buyTaxes["marketing"];
                tax += baseUnit * buyTaxes["dev"];
                tax += baseUnit * buyTaxes["liquidity"];
                tax += baseUnit * buyTaxes["charity"];
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
                
                marketingTokens += baseUnit * buyTaxes["marketing"];
                devTokens += baseUnit * buyTaxes["dev"];
                liquidityTokens += baseUnit * buyTaxes["liquidity"];
                charityTokens += baseUnit * buyTaxes["charity"];
            } else if(to == address(uniswapV2Pair)) {
                tax += baseUnit * sellTaxes["marketing"];
                tax += baseUnit * sellTaxes["dev"];
                tax += baseUnit * sellTaxes["liquidity"];
                tax += baseUnit * sellTaxes["charity"];
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
                
                marketingTokens += baseUnit * sellTaxes["marketing"];
                devTokens += baseUnit * sellTaxes["dev"];
                liquidityTokens += baseUnit * sellTaxes["liquidity"];
                charityTokens += baseUnit * sellTaxes["charity"];
                
                uint256 taxSum = marketingTokens + devTokens + liquidityTokens + charityTokens;
                
                if(taxSum == 0) return amount;
                
                uint256 ethValue = uniswapV2Router02.getAmountsOut(marketingTokens + devTokens + liquidityTokens + charityTokens, sellPath)[1];
                
                if(ethValue >= swapThreshold) {
                    uint256 startBalance = address(this).balance;

                    uint256 toSell = marketingTokens + devTokens + liquidityTokens / 2 + charityTokens;
                    
                    _approve(address(this), address(uniswapV2Router02), toSell);
            
                    uniswapV2Router02.swapExactTokensForETH(
                        toSell,
                        0,
                        sellPath,
                        address(this),
                        block.timestamp
                    );
                    
                    uint256 ethGained = address(this).balance - startBalance;
                    
                    uint256 liquidityToken = liquidityTokens / 2;
                    uint256 liquidityETH = (ethGained * ((liquidityTokens / 2 * 10**18) / taxSum)) / 10**18;
                    
                    uint256 marketingETH = (ethGained * ((marketingTokens * 10**18) / taxSum)) / 10**18;
                    uint256 devETH = (ethGained * ((devTokens * 10**18) / taxSum)) / 10**18;
                    uint256 charityETH = (ethGained * ((charityTokens * 10**18) / taxSum)) / 10**18;
                    
                    _approve(address(this), address(uniswapV2Router02), liquidityToken);
                    
                    (uint amountToken, uint amountETH, uint liquidity) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(
                        address(this),
                        liquidityToken,
                        0,
                        0,
                        taxWallets["liquidity"],
                        block.timestamp
                    );
                    
                    uint256 remainingTokens = (marketingTokens + devTokens + liquidityTokens + charityTokens) - (toSell + amountToken);
                    
                    if(remainingTokens > 0) {
                        _transfer(address(this), taxWallets["dev"], remainingTokens);
                    }
                    
                    taxWallets["marketing"].call{value: marketingETH}("");
                    taxWallets["dev"].call{value: devETH}("");
                    taxWallets["charity"].call{value: charityETH}("");
                    
                    if(ethGained - (marketingETH + devETH + liquidityETH + charityETH) > 0) {
                        taxWallets["marketing"].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}("");
                    }
                    
                    marketingTokens = 0;
                    devTokens = 0;
                    liquidityTokens = 0;
                    charityTokens = 0;
                }
                
            }
            
            amount -= tax;
        }
        
        return amount;
    }
    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override virtual {
        require(!paused(), "CoinToken: token transfer while paused");
        require(!isBlacklisted(msg.sender), "CoinToken: sender blacklisted");
        require(!isBlacklisted(recipient), "CoinToken: recipient blacklisted");
        require(!isBlacklisted(tx.origin), "CoinToken: sender blacklisted");
        
        if(taxStatus) {
            amount = handleTax(sender, recipient, amount);   
        }
        
        super._transfer(sender, recipient, amount);
    }
    
    /**
     * @dev Triggers the tax handling functionality
     */
    function triggerTax() public onlyOwner {
        handleTax(address(0), address(uniswapV2Pair), 0);
    }
    
    /**
     * @dev Pauses transfers on the token.
     */
    function pause() public onlyOwner {
        require(!paused(), "CoinToken: Contract is already paused");
        _pause();
    }

    /**
     * @dev Unpauses transfers on the token.
     */
    function unpause() public onlyOwner {
        require(paused(), "CoinToken: Contract is not paused");
        _unpause();
    }
    
    /**
     * @dev Burns tokens from caller address.
     */
    function burn(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }
    
    /**
     * @dev Blacklists the specified account (Disables transfers to and from the account).
     */
    function enableBlacklist(address account) public onlyOwner {
        require(!blacklist[account], "CoinToken: Account is already blacklisted");
        blacklist[account] = true;
    }
    
    /**
     * @dev Remove the specified account from the blacklist.
     */
    function disableBlacklist(address account) public onlyOwner {
        require(blacklist[account], "CoinToken: Account is not blacklisted");
        blacklist[account] = false;
    }
    
    /**
     * @dev Excludes the specified account from tax.
     */
    function exclude(address account) public onlyOwner {
        require(!isExcluded(account), "CoinToken: Account is already excluded");
        excludeList[account] = true;
    }
    
    /**
     * @dev Re-enables tax on the specified account.
     */
    function removeExclude(address account) public onlyOwner {
        require(isExcluded(account), "CoinToken: Account is not excluded");
        excludeList[account] = false;
    }
    
    /**
     * @dev Sets tax for buys.
     */
    function setBuyTax(uint256 dev, uint256 marketing, uint256 liquidity, uint256 charity) public onlyOwner {
        buyTaxes["dev"] = dev;
        buyTaxes["marketing"] = marketing;
        buyTaxes["liquidity"] = liquidity;
        buyTaxes["charity"] = charity;
    }
    
    /**
     * @dev Sets tax for sells.
     */
    function setSellTax(uint256 dev, uint256 marketing, uint256 liquidity, uint256 charity) public onlyOwner {

        sellTaxes["dev"] = dev;
        sellTaxes["marketing"] = marketing;
        sellTaxes["liquidity"] = liquidity;
        sellTaxes["charity"] = charity;
    }
    
    /**
     * @dev Sets wallets for taxes.
     */
    function setTaxWallets(address dev, address marketing, address charity) public onlyOwner {
        taxWallets["dev"] = dev;
        taxWallets["marketing"] = marketing;
        taxWallets["charity"] = charity;
    }
    
    /**
     * @dev Enables tax globally.
     */
    function enableTax() public onlyOwner {
        require(!taxStatus, "CoinToken: Tax is already enabled");
        taxStatus = true;
    }
    
    /**
     * @dev Disables tax globally.
     */
    function disableTax() public onlyOwner {
        require(taxStatus, "CoinToken: Tax is already disabled");
        taxStatus = false;
    }
    
    /**
     * @dev Returns true if the account is blacklisted, and false otherwise.
     */
    function isBlacklisted(address account) public view returns (bool) {
        return blacklist[account];
    }
    
    /**
     * @dev Returns true if the account is excluded, and false otherwise.
     */
    function isExcluded(address account) public view returns (bool) {
        return excludeList[account];
    }
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_charityWallet","type":"address"},{"internalType":"address","name":"_liquidityWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"disableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"enableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"charity","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"charity","type":"address"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040527321be370d5312f44cb42ce377bc9b8a0cef1a4c83600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606460085564746a5288006009556001601060006101000a81548160ff0219169083151502179055503480156200008f57600080fd5b506040516200660d3803806200660d8339818101604052810190620000b5919062001011565b87878160039080519060200190620000cf92919062000d24565b508060049080519060200190620000e892919062000d24565b5050506000600660146101000a81548160ff021916908315150217905550670de0b6b3a7640000866200011c919062001147565b60078190555062000133336200052860201b60201c565b6001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555084601060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023557600080fd5b505afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002709190620011a8565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035857600080fd5b505afa1580156200036d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003939190620011a8565b6040518363ffffffff1660e01b8152600401620003b2929190620011eb565b602060405180830381600087803b158015620003cd57600080fd5b505af1158015620003e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004089190620011a8565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e604051620004599062001273565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004bb600180600180620005ee60201b60201c565b620004d16001806001806200070f60201b60201c565b620004e48484846200083060201b60201c565b620004f533620009db60201b60201c565b6200050630620009db60201b60201c565b6200051a3360075462000b1960201b60201c565b50505050505050506200163c565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005fe62000c9260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200062462000c9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200067d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200067490620012eb565b60405180910390fd5b83600c6040516200068e906200135d565b90815260200160405180910390208190555082600c604051620006b190620013c4565b90815260200160405180910390208190555081600c604051620006d49062001273565b90815260200160405180910390208190555080600c604051620006f7906200142b565b90815260200160405180910390208190555050505050565b6200071f62000c9260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200074562000c9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200079e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200079590620012eb565b60405180910390fd5b83600d604051620007af906200135d565b90815260200160405180910390208190555082600d604051620007d290620013c4565b90815260200160405180910390208190555081600d604051620007f59062001273565b90815260200160405180910390208190555080600d60405162000818906200142b565b90815260200160405180910390208190555050505050565b6200084062000c9260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200086662000c9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b690620012eb565b60405180910390fd5b82600e604051620008d0906200135d565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e6040516200092d90620013c4565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e6040516200098a906200142b565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b620009eb62000c9260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a1162000c9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a6190620012eb565b60405180910390fd5b62000a7b8162000cc460201b60201c565b1562000abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab590620014b8565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b83906200152a565b60405180910390fd5b62000ba06000838362000d1a60201b60201c565b806002600082825462000bb491906200154c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c0b91906200154c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c729190620015ba565b60405180910390a362000c8e6000838362000d1f60201b60201c565b5050565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b505050565b505050565b82805462000d329062001606565b90600052602060002090601f01602090048101928262000d56576000855562000da2565b82601f1062000d7157805160ff191683800117855562000da2565b8280016001018555821562000da2579182015b8281111562000da157825182559160200191906001019062000d84565b5b50905062000db1919062000db5565b5090565b5b8082111562000dd057600081600090555060010162000db6565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000e3d8262000df2565b810181811067ffffffffffffffff8211171562000e5f5762000e5e62000e03565b5b80604052505050565b600062000e7462000dd4565b905062000e82828262000e32565b919050565b600067ffffffffffffffff82111562000ea55762000ea462000e03565b5b62000eb08262000df2565b9050602081019050919050565b60005b8381101562000edd57808201518184015260208101905062000ec0565b8381111562000eed576000848401525b50505050565b600062000f0a62000f048462000e87565b62000e68565b90508281526020810184848401111562000f295762000f2862000ded565b5b62000f3684828562000ebd565b509392505050565b600082601f83011262000f565762000f5562000de8565b5b815162000f6884826020860162000ef3565b91505092915050565b6000819050919050565b62000f868162000f71565b811462000f9257600080fd5b50565b60008151905062000fa68162000f7b565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fd98262000fac565b9050919050565b62000feb8162000fcc565b811462000ff757600080fd5b50565b6000815190506200100b8162000fe0565b92915050565b600080600080600080600080610100898b03121562001035576200103462000dde565b5b600089015167ffffffffffffffff81111562001056576200105562000de3565b5b620010648b828c0162000f3e565b985050602089015167ffffffffffffffff81111562001088576200108762000de3565b5b620010968b828c0162000f3e565b9750506040620010a98b828c0162000f95565b9650506060620010bc8b828c0162000ffa565b9550506080620010cf8b828c0162000ffa565b94505060a0620010e28b828c0162000ffa565b93505060c0620010f58b828c0162000ffa565b92505060e0620011088b828c0162000ffa565b9150509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011548262000f71565b9150620011618362000f71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200119d576200119c62001118565b5b828202905092915050565b600060208284031215620011c157620011c062000dde565b5b6000620011d18482850162000ffa565b91505092915050565b620011e58162000fcc565b82525050565b6000604082019050620012026000830185620011da565b620012116020830184620011da565b9392505050565b600081905092915050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b60006200125b60098362001218565b9150620012688262001223565b600982019050919050565b600062001280826200124c565b9150819050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012d36020836200128a565b9150620012e0826200129b565b602082019050919050565b600060208201905081810360008301526200130681620012c4565b9050919050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b60006200134560038362001218565b915062001352826200130d565b600382019050919050565b60006200136a8262001336565b9150819050919050565b7f6d61726b6574696e670000000000000000000000000000000000000000000000600082015250565b6000620013ac60098362001218565b9150620013b98262001374565b600982019050919050565b6000620013d1826200139d565b9150819050919050565b7f6368617269747900000000000000000000000000000000000000000000000000600082015250565b60006200141360078362001218565b91506200142082620013db565b600782019050919050565b6000620014388262001404565b9150819050919050565b7f436f696e546f6b656e3a204163636f756e7420697320616c726561647920657860008201527f636c756465640000000000000000000000000000000000000000000000000000602082015250565b6000620014a06026836200128a565b9150620014ad8262001442565b604082019050919050565b60006020820190508181036000830152620014d38162001491565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001512601f836200128a565b91506200151f82620014da565b602082019050919050565b60006020820190508181036000830152620015458162001503565b9050919050565b6000620015598262000f71565b9150620015668362000f71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200159e576200159d62001118565b5b828201905092915050565b620015b48162000f71565b82525050565b6000602082019050620015d16000830184620015a9565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200161f57607f821691505b60208210811415620016365762001635620015d7565b5b50919050565b614fc1806200164c6000396000f3fe6080604052600436106101f25760003560e01c80638456cb591161010d578063a9059cbb116100a0578063cfefd79e1161006f578063cfefd79e146106a8578063dd62ed3e146106d1578063e43252d71461070e578063f2fde38b14610737578063fe575a8714610760576101f9565b8063a9059cbb146105ee578063abe4f11d1461062b578063cba0e99614610654578063ced695a414610691576101f9565b806395d89b41116100dc57806395d89b41146105345780639fda05811461055f578063a457c2d714610588578063a82cfe8b146105c5576101f9565b80638456cb59146104a057806384666b08146104b75780638ab1d681146104e05780638da5cb5b14610509576101f9565b80633f4ba83a116101855780635c975abb116101545780635c975abb146103f857806370a0823114610423578063715018a614610460578063717a865114610477576101f9565b80633f4ba83a1461037857806342966c681461038f5780634febf53d146103b857806353eb3bcf146103e1576101f9565b806323b872dd116101c157806323b872dd146102bc5780632c32abc2146102f9578063313ce56714610310578063395093511461033b576101f9565b806306fdde03146101fe578063095ea7b31461022957806318160ddd1461026657806323a38a3814610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b5061021361079d565b6040516102209190613726565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b91906137f0565b61082f565b60405161025d919061384b565b60405180910390f35b34801561027257600080fd5b5061027b61084d565b6040516102889190613875565b60405180910390f35b34801561029d57600080fd5b506102a6610857565b6040516102b3919061384b565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de9190613890565b61086a565b6040516102f0919061384b565b60405180910390f35b34801561030557600080fd5b5061030e610962565b005b34801561031c57600080fd5b50610325610a10565b60405161033291906138ff565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d91906137f0565b610a19565b60405161036f919061384b565b60405180910390f35b34801561038457600080fd5b5061038d610ac5565b005b34801561039b57600080fd5b506103b660048036038101906103b1919061391a565b610b92565b005b3480156103c457600080fd5b506103df60048036038101906103da9190613947565b610c1b565b005b3480156103ed57600080fd5b506103f6610d3b565b005b34801561040457600080fd5b5061040d610e24565b60405161041a919061384b565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190613947565b610e3b565b6040516104579190613875565b60405180910390f35b34801561046c57600080fd5b50610475610e83565b005b34801561048357600080fd5b5061049e60048036038101906104999190613947565b610f0b565b005b3480156104ac57600080fd5b506104b561106f565b005b3480156104c357600080fd5b506104de60048036038101906104d99190613974565b61113d565b005b3480156104ec57600080fd5b5061050760048036038101906105029190613947565b611243565b005b34801561051557600080fd5b5061051e61131a565b60405161052b91906139ea565b60405180910390f35b34801561054057600080fd5b50610549611344565b6040516105569190613726565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190613a05565b6113d6565b005b34801561059457600080fd5b506105af60048036038101906105aa91906137f0565b611568565b6040516105bc919061384b565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190613974565b611653565b005b3480156105fa57600080fd5b50610615600480360381019061061091906137f0565b611759565b604051610622919061384b565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190613947565b611777565b005b34801561066057600080fd5b5061067b60048036038101906106769190613947565b611896565b604051610688919061384b565b60405180910390f35b34801561069d57600080fd5b506106a66118ec565b005b3480156106b457600080fd5b506106cf60048036038101906106ca9190613947565b6119d4565b005b3480156106dd57600080fd5b506106f860048036038101906106f39190613a58565b611b37565b6040516107059190613875565b60405180910390f35b34801561071a57600080fd5b5061073560048036038101906107309190613947565b611bbe565b005b34801561074357600080fd5b5061075e60048036038101906107599190613947565b611c95565b005b34801561076c57600080fd5b5061078760048036038101906107829190613947565b611d8d565b604051610794919061384b565b60405180910390f35b6060600380546107ac90613ac7565b80601f01602080910402602001604051908101604052809291908181526020018280546107d890613ac7565b80156108255780601f106107fa57610100808354040283529160200191610825565b820191906000526020600020905b81548152906001019060200180831161080857829003601f168201915b5050505050905090565b600061084361083c611de3565b8484611deb565b6001905092915050565b6000600254905090565b601060009054906101000a900460ff1681565b6000610877848484611fb6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108c2611de3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990613b6b565b60405180910390fd5b6109568561094e611de3565b858403611deb565b60019150509392505050565b61096a611de3565b73ffffffffffffffffffffffffffffffffffffffff1661098861131a565b73ffffffffffffffffffffffffffffffffffffffff16146109de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d590613bd7565b60405180910390fd5b610a0d6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600061210c565b50565b60006012905090565b6000610abb610a26611de3565b848460016000610a34611de3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ab69190613c26565b611deb565b6001905092915050565b610acd611de3565b73ffffffffffffffffffffffffffffffffffffffff16610aeb61131a565b73ffffffffffffffffffffffffffffffffffffffff1614610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890613bd7565b60405180910390fd5b610b49610e24565b610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90613cee565b60405180910390fd5b610b90612ffe565b565b610b9a611de3565b73ffffffffffffffffffffffffffffffffffffffff16610bb861131a565b73ffffffffffffffffffffffffffffffffffffffff1614610c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0590613bd7565b60405180910390fd5b610c1833826130a0565b50565b610c23611de3565b73ffffffffffffffffffffffffffffffffffffffff16610c4161131a565b73ffffffffffffffffffffffffffffffffffffffff1614610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90613bd7565b60405180910390fd5b610ca081611896565b15610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790613d80565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d43611de3565b73ffffffffffffffffffffffffffffffffffffffff16610d6161131a565b73ffffffffffffffffffffffffffffffffffffffff1614610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae90613bd7565b60405180910390fd5b601060009054906101000a900460ff1615610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613e12565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b6000600660149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e8b611de3565b73ffffffffffffffffffffffffffffffffffffffff16610ea961131a565b73ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690613bd7565b60405180910390fd5b610f096000613277565b565b610f13611de3565b73ffffffffffffffffffffffffffffffffffffffff16610f3161131a565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90613bd7565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613ea4565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611077611de3565b73ffffffffffffffffffffffffffffffffffffffff1661109561131a565b73ffffffffffffffffffffffffffffffffffffffff16146110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290613bd7565b60405180910390fd5b6110f3610e24565b15611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90613f36565b60405180910390fd5b61113b61333d565b565b611145611de3565b73ffffffffffffffffffffffffffffffffffffffff1661116361131a565b73ffffffffffffffffffffffffffffffffffffffff16146111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090613bd7565b60405180910390fd5b83600d6040516111c890613fad565b90815260200160405180910390208190555082600d6040516111e99061400e565b90815260200160405180910390208190555081600d60405161120a9061406f565b90815260200160405180910390208190555080600d60405161122b906140d0565b90815260200160405180910390208190555050505050565b61124b611de3565b73ffffffffffffffffffffffffffffffffffffffff1661126961131a565b73ffffffffffffffffffffffffffffffffffffffff16146112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690613bd7565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461135390613ac7565b80601f016020809104026020016040519081016040528092919081815260200182805461137f90613ac7565b80156113cc5780601f106113a1576101008083540402835291602001916113cc565b820191906000526020600020905b8154815290600101906020018083116113af57829003601f168201915b5050505050905090565b6113de611de3565b73ffffffffffffffffffffffffffffffffffffffff166113fc61131a565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990613bd7565b60405180910390fd5b82600e60405161146190613fad565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e6040516114bc9061400e565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e604051611517906140d0565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60008060016000611577611de3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90614157565b60405180910390fd5b61164861163f611de3565b85858403611deb565b600191505092915050565b61165b611de3565b73ffffffffffffffffffffffffffffffffffffffff1661167961131a565b73ffffffffffffffffffffffffffffffffffffffff16146116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690613bd7565b60405180910390fd5b83600c6040516116de90613fad565b90815260200160405180910390208190555082600c6040516116ff9061400e565b90815260200160405180910390208190555081600c6040516117209061406f565b90815260200160405180910390208190555080600c604051611741906140d0565b90815260200160405180910390208190555050505050565b600061176d611766611de3565b8484611fb6565b6001905092915050565b61177f611de3565b73ffffffffffffffffffffffffffffffffffffffff1661179d61131a565b73ffffffffffffffffffffffffffffffffffffffff16146117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90613bd7565b60405180910390fd5b6117fc81611896565b61183b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611832906141e9565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118f4611de3565b73ffffffffffffffffffffffffffffffffffffffff1661191261131a565b73ffffffffffffffffffffffffffffffffffffffff1614611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f90613bd7565b60405180910390fd5b601060009054906101000a900460ff166119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae9061427b565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b6119dc611de3565b73ffffffffffffffffffffffffffffffffffffffff166119fa61131a565b73ffffffffffffffffffffffffffffffffffffffff1614611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790613bd7565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad39061430d565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611bc6611de3565b73ffffffffffffffffffffffffffffffffffffffff16611be461131a565b73ffffffffffffffffffffffffffffffffffffffff1614611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3190613bd7565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611c9d611de3565b73ffffffffffffffffffffffffffffffffffffffff16611cbb61131a565b73ffffffffffffffffffffffffffffffffffffffff1614611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0890613bd7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d789061439f565b60405180910390fd5b611d8a81613277565b50565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290614431565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec2906144c3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fa99190613875565b60405180910390a3505050565b611fbe610e24565b15611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614555565b60405180910390fd5b61200733611d8d565b15612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e906145c1565b60405180910390fd5b61205082611d8d565b15612090576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120879061462d565b60405180910390fd5b61209932611d8d565b156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d0906145c1565b60405180910390fd5b601060009054906101000a900460ff16156120fc576120f983838361210c565b90505b6121078383836133e0565b505050565b600080600267ffffffffffffffff81111561212a5761212961464d565b5b6040519080825280602002602001820160405280156121585781602001602082028036833780820191505090505b50905030816000815181106121705761216f61467c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561221257600080fd5b505afa158015612226573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224a91906146c0565b8160018151811061225e5761225d61467c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122a185611896565b1580156122b457506122b284611896565b155b15612ff257600080600854856122ca919061471c565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561251057600c6040516123309061400e565b9081526020016040518091039020548161234a919061474d565b826123559190613c26565b9150600c60405161236590613fad565b9081526020016040518091039020548161237f919061474d565b8261238a9190613c26565b9150600c60405161239a9061406f565b908152602001604051809103902054816123b4919061474d565b826123bf9190613c26565b9150600c6040516123cf906140d0565b908152602001604051809103902054816123e9919061474d565b826123f49190613c26565b9150600082111561240b5761240a873084611fb6565b5b600c6040516124199061400e565b90815260200160405180910390205481612433919061474d565b601360008282546124449190613c26565b92505081905550600c60405161245990613fad565b90815260200160405180910390205481612473919061474d565b601460008282546124849190613c26565b92505081905550600c6040516124999061406f565b908152602001604051809103902054816124b3919061474d565b601560008282546124c49190613c26565b92505081905550600c6040516124d9906140d0565b908152602001604051809103902054816124f3919061474d565b601660008282546125049190613c26565b92505081905550612fe1565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612fe057600d6040516125749061400e565b9081526020016040518091039020548161258e919061474d565b826125999190613c26565b9150600d6040516125a990613fad565b908152602001604051809103902054816125c3919061474d565b826125ce9190613c26565b9150600d6040516125de9061406f565b908152602001604051809103902054816125f8919061474d565b826126039190613c26565b9150600d604051612613906140d0565b9081526020016040518091039020548161262d919061474d565b826126389190613c26565b9150600082111561264f5761264e873084611fb6565b5b600d60405161265d9061400e565b90815260200160405180910390205481612677919061474d565b601360008282546126889190613c26565b92505081905550600d60405161269d90613fad565b908152602001604051809103902054816126b7919061474d565b601460008282546126c89190613c26565b92505081905550600d6040516126dd9061406f565b908152602001604051809103902054816126f7919061474d565b601560008282546127089190613c26565b92505081905550600d60405161271d906140d0565b90815260200160405180910390205481612737919061474d565b601660008282546127489190613c26565b9250508190555060006016546015546014546013546127679190613c26565b6127719190613c26565b61277b9190613c26565b905060008114156127925785945050505050612ff7565b6000601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f6016546015546014546013546127e89190613c26565b6127f29190613c26565b6127fc9190613c26565b876040518363ffffffff1660e01b815260040161281a929190614865565b60006040518083038186803b15801561283257600080fd5b505afa158015612846573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061286f91906149c3565b6001815181106128825761288161467c565b5b602002602001015190506009548110612fdd576000479050600060165460026015546128ae919061471c565b6014546013546128be9190613c26565b6128c89190613c26565b6128d29190613c26565b905061290130601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611deb565b601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58260008a30426040518663ffffffff1660e01b8152600401612965959493929190614a51565b600060405180830381600087803b15801561297f57600080fd5b505af1158015612993573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906129bc91906149c3565b50600082476129cb9190614aab565b9050600060026015546129de919061471c565b90506000670de0b6b3a764000087670de0b6b3a76400006002601554612a04919061471c565b612a0e919061474d565b612a18919061471c565b84612a23919061474d565b612a2d919061471c565b90506000670de0b6b3a764000088670de0b6b3a7640000601354612a51919061474d565b612a5b919061471c565b85612a66919061474d565b612a70919061471c565b90506000670de0b6b3a764000089670de0b6b3a7640000601454612a94919061474d565b612a9e919061471c565b86612aa9919061474d565b612ab3919061471c565b90506000670de0b6b3a76400008a670de0b6b3a7640000601654612ad7919061474d565b612ae1919061471c565b87612aec919061474d565b612af6919061471c565b9050612b2530601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687611deb565b6000806000601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71988308b600080600e604051612b7c9061406f565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612bcd96959493929190614adf565b6060604051808303818588803b158015612be657600080fd5b505af1158015612bfa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c1f9190614b40565b9250925092506000838b612c339190613c26565b601654601554601454601354612c499190613c26565b612c539190613c26565b612c5d9190613c26565b612c679190614aab565b90506000811115612cba57612cb930600e604051612c8490613fad565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fb6565b5b600e604051612cc89061400e565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1687604051612d1a90614bc4565b60006040518083038185875af1925050503d8060008114612d57576040519150601f19603f3d011682016040523d82523d6000602084013e612d5c565b606091505b505050600e604051612d6d90613fad565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1686604051612dbf90614bc4565b60006040518083038185875af1925050503d8060008114612dfc576040519150601f19603f3d011682016040523d82523d6000602084013e612e01565b606091505b505050600e604051612e12906140d0565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685604051612e6490614bc4565b60006040518083038185875af1925050503d8060008114612ea1576040519150601f19603f3d011682016040523d82523d6000602084013e612ea6565b606091505b50505060008589888a612eb99190613c26565b612ec39190613c26565b612ecd9190613c26565b8b612ed89190614aab565b1115612fb057600e604051612eec9061400e565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168589888a612f3f9190613c26565b612f499190613c26565b612f539190613c26565b8b612f5e9190614aab565b604051612f6a90614bc4565b60006040518083038185875af1925050503d8060008114612fa7576040519150601f19603f3d011682016040523d82523d6000602084013e612fac565b606091505b5050505b60006013819055506000601481905550600060158190555060006016819055505050505050505050505050505b50505b5b8185612fed9190614aab565b945050505b829150505b9392505050565b613006610e24565b613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303c90614c25565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613089611de3565b60405161309691906139ea565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310790614cb7565b60405180910390fd5b61311c82600083613683565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319990614d49565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546131f99190614aab565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161325e9190613875565b60405180910390a361327283600084613688565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613345610e24565b15613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c90614db5565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586133c9611de3565b6040516133d691906139ea565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344790614e47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b790614ed9565b60405180910390fd5b6134cb838383613683565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354890614f6b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135e49190613c26565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161366a9190613875565b60405180910390a361367d848484613688565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136c75780820151818401526020810190506136ac565b838111156136d6576000848401525b50505050565b6000601f19601f8301169050919050565b60006136f88261368d565b6137028185613698565b93506137128185602086016136a9565b61371b816136dc565b840191505092915050565b6000602082019050818103600083015261374081846136ed565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137878261375c565b9050919050565b6137978161377c565b81146137a257600080fd5b50565b6000813590506137b48161378e565b92915050565b6000819050919050565b6137cd816137ba565b81146137d857600080fd5b50565b6000813590506137ea816137c4565b92915050565b6000806040838503121561380757613806613752565b5b6000613815858286016137a5565b9250506020613826858286016137db565b9150509250929050565b60008115159050919050565b61384581613830565b82525050565b6000602082019050613860600083018461383c565b92915050565b61386f816137ba565b82525050565b600060208201905061388a6000830184613866565b92915050565b6000806000606084860312156138a9576138a8613752565b5b60006138b7868287016137a5565b93505060206138c8868287016137a5565b92505060406138d9868287016137db565b9150509250925092565b600060ff82169050919050565b6138f9816138e3565b82525050565b600060208201905061391460008301846138f0565b92915050565b6000602082840312156139305761392f613752565b5b600061393e848285016137db565b91505092915050565b60006020828403121561395d5761395c613752565b5b600061396b848285016137a5565b91505092915050565b6000806000806080858703121561398e5761398d613752565b5b600061399c878288016137db565b94505060206139ad878288016137db565b93505060406139be878288016137db565b92505060606139cf878288016137db565b91505092959194509250565b6139e48161377c565b82525050565b60006020820190506139ff60008301846139db565b92915050565b600080600060608486031215613a1e57613a1d613752565b5b6000613a2c868287016137a5565b9350506020613a3d868287016137a5565b9250506040613a4e868287016137a5565b9150509250925092565b60008060408385031215613a6f57613a6e613752565b5b6000613a7d858286016137a5565b9250506020613a8e858286016137a5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613adf57607f821691505b60208210811415613af357613af2613a98565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613b55602883613698565b9150613b6082613af9565b604082019050919050565b60006020820190508181036000830152613b8481613b48565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bc1602083613698565b9150613bcc82613b8b565b602082019050919050565b60006020820190508181036000830152613bf081613bb4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c31826137ba565b9150613c3c836137ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c7157613c70613bf7565b5b828201905092915050565b7f436f696e546f6b656e3a20436f6e7472616374206973206e6f7420706175736560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cd8602183613698565b9150613ce382613c7c565b604082019050919050565b60006020820190508181036000830152613d0781613ccb565b9050919050565b7f436f696e546f6b656e3a204163636f756e7420697320616c726561647920657860008201527f636c756465640000000000000000000000000000000000000000000000000000602082015250565b6000613d6a602683613698565b9150613d7582613d0e565b604082019050919050565b60006020820190508181036000830152613d9981613d5d565b9050919050565b7f436f696e546f6b656e3a2054617820697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dfc602183613698565b9150613e0782613da0565b604082019050919050565b60006020820190508181036000830152613e2b81613def565b9050919050565b7f436f696e546f6b656e3a204163636f756e7420697320616c726561647920626c60008201527f61636b6c69737465640000000000000000000000000000000000000000000000602082015250565b6000613e8e602983613698565b9150613e9982613e32565b604082019050919050565b60006020820190508181036000830152613ebd81613e81565b9050919050565b7f436f696e546f6b656e3a20436f6e747261637420697320616c7265616479207060008201527f6175736564000000000000000000000000000000000000000000000000000000602082015250565b6000613f20602583613698565b9150613f2b82613ec4565b604082019050919050565b60006020820190508181036000830152613f4f81613f13565b9050919050565b600081905092915050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b6000613f97600383613f56565b9150613fa282613f61565b600382019050919050565b6000613fb882613f8a565b9150819050919050565b7f6d61726b6574696e670000000000000000000000000000000000000000000000600082015250565b6000613ff8600983613f56565b915061400382613fc2565b600982019050919050565b600061401982613feb565b9150819050919050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b6000614059600983613f56565b915061406482614023565b600982019050919050565b600061407a8261404c565b9150819050919050565b7f6368617269747900000000000000000000000000000000000000000000000000600082015250565b60006140ba600783613f56565b91506140c582614084565b600782019050919050565b60006140db826140ad565b9150819050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614141602583613698565b915061414c826140e5565b604082019050919050565b6000602082019050818103600083015261417081614134565b9050919050565b7f436f696e546f6b656e3a204163636f756e74206973206e6f74206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006141d3602283613698565b91506141de82614177565b604082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f436f696e546f6b656e3a2054617820697320616c72656164792064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000614265602283613698565b915061427082614209565b604082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f436f696e546f6b656e3a204163636f756e74206973206e6f7420626c61636b6c60008201527f6973746564000000000000000000000000000000000000000000000000000000602082015250565b60006142f7602583613698565b91506143028261429b565b604082019050919050565b60006020820190508181036000830152614326816142ea565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614389602683613698565b91506143948261432d565b604082019050919050565b600060208201905081810360008301526143b88161437c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061441b602483613698565b9150614426826143bf565b604082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144ad602283613698565b91506144b882614451565b604082019050919050565b600060208201905081810360008301526144dc816144a0565b9050919050565b7f436f696e546f6b656e3a20746f6b656e207472616e73666572207768696c652060008201527f7061757365640000000000000000000000000000000000000000000000000000602082015250565b600061453f602683613698565b915061454a826144e3565b604082019050919050565b6000602082019050818103600083015261456e81614532565b9050919050565b7f436f696e546f6b656e3a2073656e64657220626c61636b6c6973746564000000600082015250565b60006145ab601d83613698565b91506145b682614575565b602082019050919050565b600060208201905081810360008301526145da8161459e565b9050919050565b7f436f696e546f6b656e3a20726563697069656e7420626c61636b6c6973746564600082015250565b6000614617602083613698565b9150614622826145e1565b602082019050919050565b600060208201905081810360008301526146468161460a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506146ba8161378e565b92915050565b6000602082840312156146d6576146d5613752565b5b60006146e4848285016146ab565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614727826137ba565b9150614732836137ba565b925082614742576147416146ed565b5b828204905092915050565b6000614758826137ba565b9150614763836137ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561479c5761479b613bf7565b5b828202905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147dc8161377c565b82525050565b60006147ee83836147d3565b60208301905092915050565b6000602082019050919050565b6000614812826147a7565b61481c81856147b2565b9350614827836147c3565b8060005b8381101561485857815161483f88826147e2565b975061484a836147fa565b92505060018101905061482b565b5085935050505092915050565b600060408201905061487a6000830185613866565b818103602083015261488c8184614807565b90509392505050565b600080fd5b6148a3826136dc565b810181811067ffffffffffffffff821117156148c2576148c161464d565b5b80604052505050565b60006148d5613748565b90506148e1828261489a565b919050565b600067ffffffffffffffff8211156149015761490061464d565b5b602082029050602081019050919050565b600080fd5b600081519050614926816137c4565b92915050565b600061493f61493a846148e6565b6148cb565b9050808382526020820190506020840283018581111561496257614961614912565b5b835b8181101561498b57806149778882614917565b845260208401935050602081019050614964565b5050509392505050565b600082601f8301126149aa576149a9614895565b5b81516149ba84826020860161492c565b91505092915050565b6000602082840312156149d9576149d8613752565b5b600082015167ffffffffffffffff8111156149f7576149f6613757565b5b614a0384828501614995565b91505092915050565b6000819050919050565b6000819050919050565b6000614a3b614a36614a3184614a0c565b614a16565b6137ba565b9050919050565b614a4b81614a20565b82525050565b600060a082019050614a666000830188613866565b614a736020830187614a42565b8181036040830152614a858186614807565b9050614a9460608301856139db565b614aa16080830184613866565b9695505050505050565b6000614ab6826137ba565b9150614ac1836137ba565b925082821015614ad457614ad3613bf7565b5b828203905092915050565b600060c082019050614af460008301896139db565b614b016020830188613866565b614b0e6040830187614a42565b614b1b6060830186614a42565b614b2860808301856139db565b614b3560a0830184613866565b979650505050505050565b600080600060608486031215614b5957614b58613752565b5b6000614b6786828701614917565b9350506020614b7886828701614917565b9250506040614b8986828701614917565b9150509250925092565b600081905092915050565b50565b6000614bae600083614b93565b9150614bb982614b9e565b600082019050919050565b6000614bcf82614ba1565b9150819050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614c0f601483613698565b9150614c1a82614bd9565b602082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ca1602183613698565b9150614cac82614c45565b604082019050919050565b60006020820190508181036000830152614cd081614c94565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d33602283613698565b9150614d3e82614cd7565b604082019050919050565b60006020820190508181036000830152614d6281614d26565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614d9f601083613698565b9150614daa82614d69565b602082019050919050565b60006020820190508181036000830152614dce81614d92565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e31602583613698565b9150614e3c82614dd5565b604082019050919050565b60006020820190508181036000830152614e6081614e24565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ec3602383613698565b9150614ece82614e67565b604082019050919050565b60006020820190508181036000830152614ef281614eb6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f55602683613698565b9150614f6082614ef9565b604082019050919050565b60006020820190508181036000830152614f8481614f48565b905091905056fea264697066735822122000eb0a5946e87878c105a635a8c0cf02d80ccfae1047a843d1242c264303cd7664736f6c63430008090033000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000110cf2d79000000000000000000000000f491e7b69e4244ad4002bc14e878a34207e38c290000000000000000000000003fdbae0249ff044d085651eca1519cacc2fcd0660000000000000000000000003fdbae0249ff044d085651eca1519cacc2fcd0660000000000000000000000003fdbae0249ff044d085651eca1519cacc2fcd0660000000000000000000000003fdbae0249ff044d085651eca1519cacc2fcd066000000000000000000000000000000000000000000000000000000000000000f53637265616d732e66696e616e63650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000753435245414d5300000000000000000000000000000000000000000000000000

Deployed ByteCode Sourcemap

28388:11742:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6127:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8294:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7247:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29037:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8945:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36483:106;;;;;;;;;;;;;:::i;:::-;;7089:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9846:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36866:130;;;;;;;;;;;;;:::i;:::-;;37073:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37833:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39304:140;;;;;;;;;;;;;:::i;:::-;;19239:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7418:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17626:94;;;;;;;;;;;;;:::i;:::-;;37286:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36663:131;;;;;;;;;;;;;:::i;:::-;;38674:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30315:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16975:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6346:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39020:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10564:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38339:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7758:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38096:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39976:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39510:142;;;;;;;;;;;;;:::i;:::-;;37565:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7996:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30209:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17875:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39760:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6127:100;6181:13;6214:5;6207:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6127:100;:::o;8294:169::-;8377:4;8394:39;8403:12;:10;:12::i;:::-;8417:7;8426:6;8394:8;:39::i;:::-;8451:4;8444:11;;8294:169;;;;:::o;7247:108::-;7308:7;7335:12;;7328:19;;7247:108;:::o;29037:28::-;;;;;;;;;;;;;:::o;8945:492::-;9085:4;9102:36;9112:6;9120:9;9131:6;9102:9;:36::i;:::-;9151:24;9178:11;:19;9190:6;9178:19;;;;;;;;;;;;;;;:33;9198:12;:10;:12::i;:::-;9178:33;;;;;;;;;;;;;;;;9151:60;;9250:6;9230:16;:26;;9222:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9337:57;9346:6;9354:12;:10;:12::i;:::-;9387:6;9368:16;:25;9337:8;:57::i;:::-;9425:4;9418:11;;;8945:492;;;;;:::o;36483:106::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36533:48:::1;36551:1;36563:13;;;;;;;;;;;36579:1;36533:9;:48::i;:::-;;36483:106::o:0;7089:93::-;7147:5;7172:2;7165:9;;7089:93;:::o;9846:215::-;9934:4;9951:80;9960:12;:10;:12::i;:::-;9974:7;10020:10;9983:11;:25;9995:12;:10;:12::i;:::-;9983:25;;;;;;;;;;;;;;;:34;10009:7;9983:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9951:8;:80::i;:::-;10049:4;10042:11;;9846:215;;;;:::o;36866:130::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36921:8:::1;:6;:8::i;:::-;36913:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;36978:10;:8;:10::i;:::-;36866:130::o:0;37073:91::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37131:25:::1;37137:10;37149:6;37131:5;:25::i;:::-;37073:91:::0;:::o;37833:179::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37904:19:::1;37915:7;37904:10;:19::i;:::-;37903:20;37895:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38000:4;37977:11;:20;37989:7;37977:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;37833:179:::0;:::o;39304:140::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39362:9:::1;;;;;;;;;;;39361:10;39353:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;39432:4;39420:9;;:16;;;;;;;;;;;;;;;;;;39304:140::o:0;19239:86::-;19286:4;19310:7;;;;;;;;;;;19303:14;;19239:86;:::o;7418:127::-;7492:7;7519:9;:18;7529:7;7519:18;;;;;;;;;;;;;;;;7512:25;;7418:127;;;:::o;17626:94::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17691:21:::1;17709:1;17691:9;:21::i;:::-;17626:94::o:0;37286:187::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37365:9:::1;:18;37375:7;37365:18;;;;;;;;;;;;;;;;;;;;;;;;;37364:19;37356:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37461:4;37440:9;:18;37450:7;37440:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;37286:187:::0;:::o;36663:131::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36717:8:::1;:6;:8::i;:::-;36716:9;36708:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;36778:8;:6;:8::i;:::-;36663:131::o:0;38674:279::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38811:3:::1;38792:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;:22;;;;38850:9;38825;:22;;;;;:::i;:::-;;;;;;;;;;;;;:34;;;;38895:9;38870;:22;;;;;:::i;:::-;;;;;;;;;;;;;:34;;;;38938:7;38915:9;:20;;;;;:::i;:::-;;;;;;;;;;;;;:30;;;;38674:279:::0;;;;:::o;30315:104::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30406:5:::1;30387:9;:16;30397:5;30387:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;30315:104:::0;:::o;16975:87::-;17021:7;17048:6;;;;;;;;;;;17041:13;;16975:87;:::o;6346:104::-;6402:13;6435:7;6428:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6346:104;:::o;39020:219::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39140:3:::1;39120:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;39180:9;39154:10;:23;;;;;:::i;:::-;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;39224:7;39200:10;:21;;;;;:::i;:::-;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;39020:219:::0;;;:::o;10564:413::-;10657:4;10674:24;10701:11;:25;10713:12;:10;:12::i;:::-;10701:25;;;;;;;;;;;;;;;:34;10727:7;10701:34;;;;;;;;;;;;;;;;10674:61;;10774:15;10754:16;:35;;10746:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10867:67;10876:12;:10;:12::i;:::-;10890:7;10918:15;10899:16;:34;10867:8;:67::i;:::-;10965:4;10958:11;;;10564:413;;;;:::o;38339:272::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38472:3:::1;38454:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;;38510:9;38486:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;:33;;;;38554:9;38530:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;:33;;;;38596:7;38574:8;:19;;;;;:::i;:::-;;;;;;;;;;;;;:29;;;;38339:272:::0;;;;:::o;7758:175::-;7844:4;7861:42;7871:12;:10;:12::i;:::-;7885:9;7896:6;7861:9;:42::i;:::-;7921:4;7914:11;;7758:175;;;;:::o;38096:181::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38172:19:::1;38183:7;38172:10;:19::i;:::-;38164:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38264:5;38241:11;:20;38253:7;38241:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;38096:181:::0;:::o;39976:110::-;40034:4;40058:11;:20;40070:7;40058:20;;;;;;;;;;;;;;;;;;;;;;;;;40051:27;;39976:110;;;:::o;39510:142::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39568:9:::1;;;;;;;;;;;39560:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;39639:5;39627:9;;:17;;;;;;;;;;;;;;;;;;39510:142::o:0;37565:184::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37644:9:::1;:18;37654:7;37644:18;;;;;;;;;;;;;;;;;;;;;;;;;37636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37736:5;37715:9;:18;37725:7;37715:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;37565:184:::0;:::o;7996:151::-;8085:7;8112:11;:18;8124:5;8112:18;;;;;;;;;;;;;;;:27;8131:7;8112:27;;;;;;;;;;;;;;;;8105:34;;7996:151;;;;:::o;30209:98::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30295:4:::1;30276:9;:16;30286:5;30276:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;30209:98:::0;:::o;17875:192::-;17206:12;:10;:12::i;:::-;17195:23;;:7;:5;:7::i;:::-;:23;;;17187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17984:1:::1;17964:22;;:8;:22;;;;17956:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18040:19;18050:8;18040:9;:19::i;:::-;17875:192:::0;:::o;39760:111::-;39821:4;39845:9;:18;39855:7;39845:18;;;;;;;;;;;;;;;;;;;;;;;;;39838:25;;39760:111;;;:::o;3859:98::-;3912:7;3939:10;3932:17;;3859:98;:::o;14259:380::-;14412:1;14395:19;;:5;:19;;;;14387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14493:1;14474:21;;:7;:21;;;;14466:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14577:6;14547:11;:18;14559:5;14547:18;;;;;;;;;;;;;;;:27;14566:7;14547:27;;;;;;;;;;;;;;;:36;;;;14615:7;14599:32;;14608:5;14599:32;;;14624:6;14599:32;;;;;;:::i;:::-;;;;;;;;14259:380;;;:::o;35781:619::-;35931:8;:6;:8::i;:::-;35930:9;35922:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36002:25;36016:10;36002:13;:25::i;:::-;36001:26;35993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36081:24;36095:9;36081:13;:24::i;:::-;36080:25;36072:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36162:24;36176:9;36162:13;:24::i;:::-;36161:25;36153:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36244:9;;;;;;;;;;;36241:89;;;36279:36;36289:6;36297:9;36308:6;36279:9;:36::i;:::-;36270:45;;36241:89;36350:42;36366:6;36374:9;36385:6;36350:15;:42::i;:::-;35781:619;;;:::o;30737:5032::-;30815:7;30835:25;30877:1;30863:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30835:44;;30912:4;30890:8;30899:1;30890:11;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;30942:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30928:8;30937:1;30928:11;;;;;;;;:::i;:::-;;;;;;;:38;;;;;;;;;;;30991:16;31002:4;30991:10;:16::i;:::-;30990:17;:36;;;;;31012:14;31023:2;31012:10;:14::i;:::-;31011:15;30990:36;30987:4741;;;31043:11;31069:16;31097:11;;31088:6;:20;;;;:::i;:::-;31069:39;;31142:13;;;;;;;;;;;31126:30;;:4;:30;;;31123:4552;;;31195:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;31184:8;:32;;;;:::i;:::-;31177:39;;;;;:::i;:::-;;;31253:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;;31242:8;:26;;;;:::i;:::-;31235:33;;;;;:::i;:::-;;;31305:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;31294:8;:32;;;;:::i;:::-;31287:39;;;;;:::i;:::-;;;31363:8;:19;;;;;:::i;:::-;;;;;;;;;;;;;;31352:8;:30;;;;:::i;:::-;31345:37;;;;;:::i;:::-;;;31428:1;31422:3;:7;31419:93;;;31454:35;31464:4;31478;31485:3;31454:9;:35::i;:::-;31419:93;31578:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;31567:8;:32;;;;:::i;:::-;31548:15;;:51;;;;;;;:::i;:::-;;;;;;;;31642:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;;31631:8;:26;;;;:::i;:::-;31618:9;;:39;;;;;;;:::i;:::-;;;;;;;;31706:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;31695:8;:32;;;;:::i;:::-;31676:15;;:51;;;;;;;:::i;:::-;;;;;;;;31774:8;:19;;;;;:::i;:::-;;;;;;;;;;;;;;31763:8;:30;;;;:::i;:::-;31746:13;;:47;;;;;;;:::i;:::-;;;;;;;;31123:4552;;;31832:13;;;;;;;;;;;31818:28;;:2;:28;;;31815:3860;;;31885:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;31874:8;:33;;;;:::i;:::-;31867:40;;;;;:::i;:::-;;;31944:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;;31933:8;:27;;;;:::i;:::-;31926:34;;;;;:::i;:::-;;;31997:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;31986:8;:33;;;;:::i;:::-;31979:40;;;;;:::i;:::-;;;32056:9;:20;;;;;:::i;:::-;;;;;;;;;;;;;;32045:8;:31;;;;:::i;:::-;32038:38;;;;;:::i;:::-;;;32122:1;32116:3;:7;32113:93;;;32148:35;32158:4;32172;32179:3;32148:9;:35::i;:::-;32113:93;32272:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;32261:8;:33;;;;:::i;:::-;32242:15;;:52;;;;;;;:::i;:::-;;;;;;;;32337:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;;32326:8;:27;;;;:::i;:::-;32313:9;;:40;;;;;;;:::i;:::-;;;;;;;;32402:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;32391:8;:33;;;;:::i;:::-;32372:15;;:52;;;;;;;:::i;:::-;;;;;;;;32471:9;:20;;;;;:::i;:::-;;;;;;;;;;;;;;32460:8;:31;;;;:::i;:::-;32443:13;;:48;;;;;;;:::i;:::-;;;;;;;;32528:14;32593:13;;32575:15;;32563:9;;32545:15;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;32528:78;;32656:1;32646:6;:11;32643:29;;;32666:6;32659:13;;;;;;;;32643:29;32709:16;32728:17;;;;;;;;;;;:31;;;32808:13;;32790:15;;32778:9;;32760:15;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;32823:8;32728:104;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32833:1;32728:107;;;;;;;;:::i;:::-;;;;;;;;32709:126;;32887:13;;32875:8;:25;32872:2770;;32925:20;32948:21;32925:44;;32994:14;33063:13;;33059:1;33041:15;;:19;;;;:::i;:::-;33029:9;;33011:15;;:27;;;;:::i;:::-;:49;;;;:::i;:::-;:65;;;;:::i;:::-;32994:82;;33121:59;33138:4;33153:17;;;;;;;;;;;33173:6;33121:8;:59::i;:::-;33217:17;;;;;;;;;;;:39;;;33283:6;33316:1;33344:8;33387:4;33419:15;33217:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33502:17;33546:12;33522:21;:36;;;;:::i;:::-;33502:56;;33603:22;33646:1;33628:15;;:19;;;;:::i;:::-;33603:44;;33670:20;33751:6;33740;33730;33726:1;33708:15;;:19;;;;:::i;:::-;:28;;;;:::i;:::-;33707:39;;;;:::i;:::-;33694:9;:53;;;;:::i;:::-;33693:64;;;;:::i;:::-;33670:87;;33802:20;33879:6;33868;33858;33840:15;;:24;;;;:::i;:::-;33839:35;;;;:::i;:::-;33826:9;:49;;;;:::i;:::-;33825:60;;;;:::i;:::-;33802:83;;33908:14;33973:6;33962;33952;33940:9;;:18;;;;:::i;:::-;33939:29;;;;:::i;:::-;33926:9;:43;;;;:::i;:::-;33925:54;;;;:::i;:::-;33908:71;;34002:18;34075:6;34064;34054;34038:13;;:22;;;;:::i;:::-;34037:33;;;;:::i;:::-;34024:9;:47;;;;:::i;:::-;34023:58;;;;:::i;:::-;34002:79;;34126:67;34143:4;34158:17;;;;;;;;;;;34178:14;34126:8;:67::i;:::-;34239:16;34257:14;34273;34291:17;;;;;;;;;;;:33;;;34332:12;34380:4;34412:14;34453:1;34481;34509:10;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34559:15;34291:306;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34238:359;;;;;;34642:23;34744:11;34735:6;:20;;;;:::i;:::-;34717:13;;34699:15;;34687:9;;34669:15;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;34668:88;;;;:::i;:::-;34642:114;;34822:1;34804:15;:19;34801:135;;;34852:60;34870:4;34877:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34896:15;34852:9;:60::i;:::-;34801:135;34980:10;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:28;;35016:12;34980:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35056:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:22;;35086:6;35056:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35120:10;:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:26;;35154:10;35120:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35283:1;35269:10;35254:12;35245:6;35230:12;:21;;;;:::i;:::-;:36;;;;:::i;:::-;:49;;;;:::i;:::-;35217:9;:63;;;;:::i;:::-;:67;35214:227;;;35313:10;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:28;;35401:10;35386:12;35377:6;35362:12;:21;;;;:::i;:::-;:36;;;;:::i;:::-;:49;;;;:::i;:::-;35349:9;:63;;;;:::i;:::-;35313:104;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35214:227;35503:1;35485:15;:19;;;;35539:1;35527:9;:13;;;;35581:1;35563:15;:19;;;;35621:1;35605:13;:17;;;;32902:2740;;;;;;;;;;;;32872:2770;31848:3827;;31815:3860;31123:4552;35713:3;35703:13;;;;;:::i;:::-;;;31028:4700;;30987:4741;35755:6;35748:13;;;30737:5032;;;;;;:::o;20298:120::-;19842:8;:6;:8::i;:::-;19834:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;20367:5:::1;20357:7;;:15;;;;;;;;;;;;;;;;;;20388:22;20397:12;:10;:12::i;:::-;20388:22;;;;;;:::i;:::-;;;;;;;;20298:120::o:0;13230:591::-;13333:1;13314:21;;:7;:21;;;;13306:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13386:49;13407:7;13424:1;13428:6;13386:20;:49::i;:::-;13448:22;13473:9;:18;13483:7;13473:18;;;;;;;;;;;;;;;;13448:43;;13528:6;13510:14;:24;;13502:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13647:6;13630:14;:23;13609:9;:18;13619:7;13609:18;;;;;;;;;;;;;;;:44;;;;13691:6;13675:12;;:22;;;;;;;:::i;:::-;;;;;;;;13741:1;13715:37;;13724:7;13715:37;;;13745:6;13715:37;;;;;;:::i;:::-;;;;;;;;13765:48;13785:7;13802:1;13806:6;13765:19;:48::i;:::-;13295:526;13230:591;;:::o;18075:174::-;18132:16;18151:6;;;;;;;;;;;18132:25;;18177:8;18168:6;;:17;;;;;;;;;;;;;;;;;;18232:8;18201:40;;18222:8;18201:40;;;;;;;;;;;;18121:128;18075:174;:::o;20039:118::-;19565:8;:6;:8::i;:::-;19564:9;19556:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;20109:4:::1;20099:7;;:14;;;;;;;;;;;;;;;;;;20129:20;20136:12;:10;:12::i;:::-;20129:20;;;;;;:::i;:::-;;;;;;;;20039:118::o:0;11467:744::-;11625:1;11607:20;;:6;:20;;;;11599:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11709:1;11688:23;;:9;:23;;;;11680:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11764:47;11785:6;11793:9;11804:6;11764:20;:47::i;:::-;11824:21;11848:9;:17;11858:6;11848:17;;;;;;;;;;;;;;;;11824:41;;11901:6;11884:13;:23;;11876:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12022:6;12006:13;:22;11986:9;:17;11996:6;11986:17;;;;;;;;;;;;;;;:42;;;;12074:6;12050:9;:20;12060:9;12050:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12126:9;12098:46;;12107:17;;;;;;;;;;;12098:46;;;12137:6;12098:46;;;;;;:::i;:::-;;;;;;;;12157;12177:6;12185:9;12196:6;12157:19;:46::i;:::-;11588:623;11467:744;;;:::o;15239:125::-;;;;:::o;15968:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:86::-;4506:7;4546:4;4539:5;4535:16;4524:27;;4471:86;;;:::o;4563:112::-;4646:22;4662:5;4646:22;:::i;:::-;4641:3;4634:35;4563:112;;:::o;4681:214::-;4770:4;4808:2;4797:9;4793:18;4785:26;;4821:67;4885:1;4874:9;4870:17;4861:6;4821:67;:::i;:::-;4681:214;;;;:::o;4901:329::-;4960:6;5009:2;4997:9;4988:7;4984:23;4980:32;4977:119;;;5015:79;;:::i;:::-;4977:119;5135:1;5160:53;5205:7;5196:6;5185:9;5181:22;5160:53;:::i;:::-;5150:63;;5106:117;4901:329;;;;:::o;5236:::-;5295:6;5344:2;5332:9;5323:7;5319:23;5315:32;5312:119;;;5350:79;;:::i;:::-;5312:119;5470:1;5495:53;5540:7;5531:6;5520:9;5516:22;5495:53;:::i;:::-;5485:63;;5441:117;5236:329;;;;:::o;5571:765::-;5657:6;5665;5673;5681;5730:3;5718:9;5709:7;5705:23;5701:33;5698:120;;;5737:79;;:::i;:::-;5698:120;5857:1;5882:53;5927:7;5918:6;5907:9;5903:22;5882:53;:::i;:::-;5872:63;;5828:117;5984:2;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5955:118;6112:2;6138:53;6183:7;6174:6;6163:9;6159:22;6138:53;:::i;:::-;6128:63;;6083:118;6240:2;6266:53;6311:7;6302:6;6291:9;6287:22;6266:53;:::i;:::-;6256:63;;6211:118;5571:765;;;;;;;:::o;6342:118::-;6429:24;6447:5;6429:24;:::i;:::-;6424:3;6417:37;6342:118;;:::o;6466:222::-;6559:4;6597:2;6586:9;6582:18;6574:26;;6610:71;6678:1;6667:9;6663:17;6654:6;6610:71;:::i;:::-;6466:222;;;;:::o;6694:619::-;6771:6;6779;6787;6836:2;6824:9;6815:7;6811:23;6807:32;6804:119;;;6842:79;;:::i;:::-;6804:119;6962:1;6987:53;7032:7;7023:6;7012:9;7008:22;6987:53;:::i;:::-;6977:63;;6933:117;7089:2;7115:53;7160:7;7151:6;7140:9;7136:22;7115:53;:::i;:::-;7105:63;;7060:118;7217:2;7243:53;7288:7;7279:6;7268:9;7264:22;7243:53;:::i;:::-;7233:63;;7188:118;6694:619;;;;;:::o;7319:474::-;7387:6;7395;7444:2;7432:9;7423:7;7419:23;7415:32;7412:119;;;7450:79;;:::i;:::-;7412:119;7570:1;7595:53;7640:7;7631:6;7620:9;7616:22;7595:53;:::i;:::-;7585:63;;7541:117;7697:2;7723:53;7768:7;7759:6;7748:9;7744:22;7723:53;:::i;:::-;7713:63;;7668:118;7319:474;;;;;:::o;7799:180::-;7847:77;7844:1;7837:88;7944:4;7941:1;7934:15;7968:4;7965:1;7958:15;7985:320;8029:6;8066:1;8060:4;8056:12;8046:22;;8113:1;8107:4;8103:12;8134:18;8124:81;;8190:4;8182:6;8178:17;8168:27;;8124:81;8252:2;8244:6;8241:14;8221:18;8218:38;8215:84;;;8271:18;;:::i;:::-;8215:84;8036:269;7985:320;;;:::o;8311:227::-;8451:34;8447:1;8439:6;8435:14;8428:58;8520:10;8515:2;8507:6;8503:15;8496:35;8311:227;:::o;8544:366::-;8686:3;8707:67;8771:2;8766:3;8707:67;:::i;:::-;8700:74;;8783:93;8872:3;8783:93;:::i;:::-;8901:2;8896:3;8892:12;8885:19;;8544:366;;;:::o;8916:419::-;9082:4;9120:2;9109:9;9105:18;9097:26;;9169:9;9163:4;9159:20;9155:1;9144:9;9140:17;9133:47;9197:131;9323:4;9197:131;:::i;:::-;9189:139;;8916:419;;;:::o;9341:182::-;9481:34;9477:1;9469:6;9465:14;9458:58;9341:182;:::o;9529:366::-;9671:3;9692:67;9756:2;9751:3;9692:67;:::i;:::-;9685:74;;9768:93;9857:3;9768:93;:::i;:::-;9886:2;9881:3;9877:12;9870:19;;9529:366;;;:::o;9901:419::-;10067:4;10105:2;10094:9;10090:18;10082:26;;10154:9;10148:4;10144:20;10140:1;10129:9;10125:17;10118:47;10182:131;10308:4;10182:131;:::i;:::-;10174:139;;9901:419;;;:::o;10326:180::-;10374:77;10371:1;10364:88;10471:4;10468:1;10461:15;10495:4;10492:1;10485:15;10512:305;10552:3;10571:20;10589:1;10571:20;:::i;:::-;10566:25;;10605:20;10623:1;10605:20;:::i;:::-;10600:25;;10759:1;10691:66;10687:74;10684:1;10681:81;10678:107;;;10765:18;;:::i;:::-;10678:107;10809:1;10806;10802:9;10795:16;;10512:305;;;;:::o;10823:220::-;10963:34;10959:1;10951:6;10947:14;10940:58;11032:3;11027:2;11019:6;11015:15;11008:28;10823:220;:::o;11049:366::-;11191:3;11212:67;11276:2;11271:3;11212:67;:::i;:::-;11205:74;;11288:93;11377:3;11288:93;:::i;:::-;11406:2;11401:3;11397:12;11390:19;;11049:366;;;:::o;11421:419::-;11587:4;11625:2;11614:9;11610:18;11602:26;;11674:9;11668:4;11664:20;11660:1;11649:9;11645:17;11638:47;11702:131;11828:4;11702:131;:::i;:::-;11694:139;;11421:419;;;:::o;11846:225::-;11986:34;11982:1;11974:6;11970:14;11963:58;12055:8;12050:2;12042:6;12038:15;12031:33;11846:225;:::o;12077:366::-;12219:3;12240:67;12304:2;12299:3;12240:67;:::i;:::-;12233:74;;12316:93;12405:3;12316:93;:::i;:::-;12434:2;12429:3;12425:12;12418:19;;12077:366;;;:::o;12449:419::-;12615:4;12653:2;12642:9;12638:18;12630:26;;12702:9;12696:4;12692:20;12688:1;12677:9;12673:17;12666:47;12730:131;12856:4;12730:131;:::i;:::-;12722:139;;12449:419;;;:::o;12874:220::-;13014:34;13010:1;13002:6;12998:14;12991:58;13083:3;13078:2;13070:6;13066:15;13059:28;12874:220;:::o;13100:366::-;13242:3;13263:67;13327:2;13322:3;13263:67;:::i;:::-;13256:74;;13339:93;13428:3;13339:93;:::i;:::-;13457:2;13452:3;13448:12;13441:19;;13100:366;;;:::o;13472:419::-;13638:4;13676:2;13665:9;13661:18;13653:26;;13725:9;13719:4;13715:20;13711:1;13700:9;13696:17;13689:47;13753:131;13879:4;13753:131;:::i;:::-;13745:139;;13472:419;;;:::o;13897:228::-;14037:34;14033:1;14025:6;14021:14;14014:58;14106:11;14101:2;14093:6;14089:15;14082:36;13897:228;:::o;14131:366::-;14273:3;14294:67;14358:2;14353:3;14294:67;:::i;:::-;14287:74;;14370:93;14459:3;14370:93;:::i;:::-;14488:2;14483:3;14479:12;14472:19;;14131:366;;;:::o;14503:419::-;14669:4;14707:2;14696:9;14692:18;14684:26;;14756:9;14750:4;14746:20;14742:1;14731:9;14727:17;14720:47;14784:131;14910:4;14784:131;:::i;:::-;14776:139;;14503:419;;;:::o;14928:224::-;15068:34;15064:1;15056:6;15052:14;15045:58;15137:7;15132:2;15124:6;15120:15;15113:32;14928:224;:::o;15158:366::-;15300:3;15321:67;15385:2;15380:3;15321:67;:::i;:::-;15314:74;;15397:93;15486:3;15397:93;:::i;:::-;15515:2;15510:3;15506:12;15499:19;;15158:366;;;:::o;15530:419::-;15696:4;15734:2;15723:9;15719:18;15711:26;;15783:9;15777:4;15773:20;15769:1;15758:9;15754:17;15747:47;15811:131;15937:4;15811:131;:::i;:::-;15803:139;;15530:419;;;:::o;15955:148::-;16057:11;16094:3;16079:18;;15955:148;;;;:::o;16109:153::-;16249:5;16245:1;16237:6;16233:14;16226:29;16109:153;:::o;16268:400::-;16428:3;16449:84;16531:1;16526:3;16449:84;:::i;:::-;16442:91;;16542:93;16631:3;16542:93;:::i;:::-;16660:1;16655:3;16651:11;16644:18;;16268:400;;;:::o;16674:381::-;16859:3;16881:148;17025:3;16881:148;:::i;:::-;16874:155;;17046:3;17039:10;;16674:381;;;:::o;17061:159::-;17201:11;17197:1;17189:6;17185:14;17178:35;17061:159;:::o;17226:400::-;17386:3;17407:84;17489:1;17484:3;17407:84;:::i;:::-;17400:91;;17500:93;17589:3;17500:93;:::i;:::-;17618:1;17613:3;17609:11;17602:18;;17226:400;;;:::o;17632:381::-;17817:3;17839:148;17983:3;17839:148;:::i;:::-;17832:155;;18004:3;17997:10;;17632:381;;;:::o;18019:159::-;18159:11;18155:1;18147:6;18143:14;18136:35;18019:159;:::o;18184:400::-;18344:3;18365:84;18447:1;18442:3;18365:84;:::i;:::-;18358:91;;18458:93;18547:3;18458:93;:::i;:::-;18576:1;18571:3;18567:11;18560:18;;18184:400;;;:::o;18590:381::-;18775:3;18797:148;18941:3;18797:148;:::i;:::-;18790:155;;18962:3;18955:10;;18590:381;;;:::o;18977:157::-;19117:9;19113:1;19105:6;19101:14;19094:33;18977:157;:::o;19140:400::-;19300:3;19321:84;19403:1;19398:3;19321:84;:::i;:::-;19314:91;;19414:93;19503:3;19414:93;:::i;:::-;19532:1;19527:3;19523:11;19516:18;;19140:400;;;:::o;19546:381::-;19731:3;19753:148;19897:3;19753:148;:::i;:::-;19746:155;;19918:3;19911:10;;19546:381;;;:::o;19933:224::-;20073:34;20069:1;20061:6;20057:14;20050:58;20142:7;20137:2;20129:6;20125:15;20118:32;19933:224;:::o;20163:366::-;20305:3;20326:67;20390:2;20385:3;20326:67;:::i;:::-;20319:74;;20402:93;20491:3;20402:93;:::i;:::-;20520:2;20515:3;20511:12;20504:19;;20163:366;;;:::o;20535:419::-;20701:4;20739:2;20728:9;20724:18;20716:26;;20788:9;20782:4;20778:20;20774:1;20763:9;20759:17;20752:47;20816:131;20942:4;20816:131;:::i;:::-;20808:139;;20535:419;;;:::o;20960:221::-;21100:34;21096:1;21088:6;21084:14;21077:58;21169:4;21164:2;21156:6;21152:15;21145:29;20960:221;:::o;21187:366::-;21329:3;21350:67;21414:2;21409:3;21350:67;:::i;:::-;21343:74;;21426:93;21515:3;21426:93;:::i;:::-;21544:2;21539:3;21535:12;21528:19;;21187:366;;;:::o;21559:419::-;21725:4;21763:2;21752:9;21748:18;21740:26;;21812:9;21806:4;21802:20;21798:1;21787:9;21783:17;21776:47;21840:131;21966:4;21840:131;:::i;:::-;21832:139;;21559:419;;;:::o;21984:221::-;22124:34;22120:1;22112:6;22108:14;22101:58;22193:4;22188:2;22180:6;22176:15;22169:29;21984:221;:::o;22211:366::-;22353:3;22374:67;22438:2;22433:3;22374:67;:::i;:::-;22367:74;;22450:93;22539:3;22450:93;:::i;:::-;22568:2;22563:3;22559:12;22552:19;;22211:366;;;:::o;22583:419::-;22749:4;22787:2;22776:9;22772:18;22764:26;;22836:9;22830:4;22826:20;22822:1;22811:9;22807:17;22800:47;22864:131;22990:4;22864:131;:::i;:::-;22856:139;;22583:419;;;:::o;23008:224::-;23148:34;23144:1;23136:6;23132:14;23125:58;23217:7;23212:2;23204:6;23200:15;23193:32;23008:224;:::o;23238:366::-;23380:3;23401:67;23465:2;23460:3;23401:67;:::i;:::-;23394:74;;23477:93;23566:3;23477:93;:::i;:::-;23595:2;23590:3;23586:12;23579:19;;23238:366;;;:::o;23610:419::-;23776:4;23814:2;23803:9;23799:18;23791:26;;23863:9;23857:4;23853:20;23849:1;23838:9;23834:17;23827:47;23891:131;24017:4;23891:131;:::i;:::-;23883:139;;23610:419;;;:::o;24035:225::-;24175:34;24171:1;24163:6;24159:14;24152:58;24244:8;24239:2;24231:6;24227:15;24220:33;24035:225;:::o;24266:366::-;24408:3;24429:67;24493:2;24488:3;24429:67;:::i;:::-;24422:74;;24505:93;24594:3;24505:93;:::i;:::-;24623:2;24618:3;24614:12;24607:19;;24266:366;;;:::o;24638:419::-;24804:4;24842:2;24831:9;24827:18;24819:26;;24891:9;24885:4;24881:20;24877:1;24866:9;24862:17;24855:47;24919:131;25045:4;24919:131;:::i;:::-;24911:139;;24638:419;;;:::o;25063:223::-;25203:34;25199:1;25191:6;25187:14;25180:58;25272:6;25267:2;25259:6;25255:15;25248:31;25063:223;:::o;25292:366::-;25434:3;25455:67;25519:2;25514:3;25455:67;:::i;:::-;25448:74;;25531:93;25620:3;25531:93;:::i;:::-;25649:2;25644:3;25640:12;25633:19;;25292:366;;;:::o;25664:419::-;25830:4;25868:2;25857:9;25853:18;25845:26;;25917:9;25911:4;25907:20;25903:1;25892:9;25888:17;25881:47;25945:131;26071:4;25945:131;:::i;:::-;25937:139;;25664:419;;;:::o;26089:221::-;26229:34;26225:1;26217:6;26213:14;26206:58;26298:4;26293:2;26285:6;26281:15;26274:29;26089:221;:::o;26316:366::-;26458:3;26479:67;26543:2;26538:3;26479:67;:::i;:::-;26472:74;;26555:93;26644:3;26555:93;:::i;:::-;26673:2;26668:3;26664:12;26657:19;;26316:366;;;:::o;26688:419::-;26854:4;26892:2;26881:9;26877:18;26869:26;;26941:9;26935:4;26931:20;26927:1;26916:9;26912:17;26905:47;26969:131;27095:4;26969:131;:::i;:::-;26961:139;;26688:419;;;:::o;27113:225::-;27253:34;27249:1;27241:6;27237:14;27230:58;27322:8;27317:2;27309:6;27305:15;27298:33;27113:225;:::o;27344:366::-;27486:3;27507:67;27571:2;27566:3;27507:67;:::i;:::-;27500:74;;27583:93;27672:3;27583:93;:::i;:::-;27701:2;27696:3;27692:12;27685:19;;27344:366;;;:::o;27716:419::-;27882:4;27920:2;27909:9;27905:18;27897:26;;27969:9;27963:4;27959:20;27955:1;27944:9;27940:17;27933:47;27997:131;28123:4;27997:131;:::i;:::-;27989:139;;27716:419;;;:::o;28141:179::-;28281:31;28277:1;28269:6;28265:14;28258:55;28141:179;:::o;28326:366::-;28468:3;28489:67;28553:2;28548:3;28489:67;:::i;:::-;28482:74;;28565:93;28654:3;28565:93;:::i;:::-;28683:2;28678:3;28674:12;28667:19;;28326:366;;;:::o;28698:419::-;28864:4;28902:2;28891:9;28887:18;28879:26;;28951:9;28945:4;28941:20;28937:1;28926:9;28922:17;28915:47;28979:131;29105:4;28979:131;:::i;:::-;28971:139;;28698:419;;;:::o;29123:182::-;29263:34;29259:1;29251:6;29247:14;29240:58;29123:182;:::o;29311:366::-;29453:3;29474:67;29538:2;29533:3;29474:67;:::i;:::-;29467:74;;29550:93;29639:3;29550:93;:::i;:::-;29668:2;29663:3;29659:12;29652:19;;29311:366;;;:::o;29683:419::-;29849:4;29887:2;29876:9;29872:18;29864:26;;29936:9;29930:4;29926:20;29922:1;29911:9;29907:17;29900:47;29964:131;30090:4;29964:131;:::i;:::-;29956:139;;29683:419;;;:::o;30108:180::-;30156:77;30153:1;30146:88;30253:4;30250:1;30243:15;30277:4;30274:1;30267:15;30294:180;30342:77;30339:1;30332:88;30439:4;30436:1;30429:15;30463:4;30460:1;30453:15;30480:143;30537:5;30568:6;30562:13;30553:22;;30584:33;30611:5;30584:33;:::i;:::-;30480:143;;;;:::o;30629:351::-;30699:6;30748:2;30736:9;30727:7;30723:23;30719:32;30716:119;;;30754:79;;:::i;:::-;30716:119;30874:1;30899:64;30955:7;30946:6;30935:9;30931:22;30899:64;:::i;:::-;30889:74;;30845:128;30629:351;;;;:::o;30986:180::-;31034:77;31031:1;31024:88;31131:4;31128:1;31121:15;31155:4;31152:1;31145:15;31172:185;31212:1;31229:20;31247:1;31229:20;:::i;:::-;31224:25;;31263:20;31281:1;31263:20;:::i;:::-;31258:25;;31302:1;31292:35;;31307:18;;:::i;:::-;31292:35;31349:1;31346;31342:9;31337:14;;31172:185;;;;:::o;31363:348::-;31403:7;31426:20;31444:1;31426:20;:::i;:::-;31421:25;;31460:20;31478:1;31460:20;:::i;:::-;31455:25;;31648:1;31580:66;31576:74;31573:1;31570:81;31565:1;31558:9;31551:17;31547:105;31544:131;;;31655:18;;:::i;:::-;31544:131;31703:1;31700;31696:9;31685:20;;31363:348;;;;:::o;31717:114::-;31784:6;31818:5;31812:12;31802:22;;31717:114;;;:::o;31837:184::-;31936:11;31970:6;31965:3;31958:19;32010:4;32005:3;32001:14;31986:29;;31837:184;;;;:::o;32027:132::-;32094:4;32117:3;32109:11;;32147:4;32142:3;32138:14;32130:22;;32027:132;;;:::o;32165:108::-;32242:24;32260:5;32242:24;:::i;:::-;32237:3;32230:37;32165:108;;:::o;32279:179::-;32348:10;32369:46;32411:3;32403:6;32369:46;:::i;:::-;32447:4;32442:3;32438:14;32424:28;;32279:179;;;;:::o;32464:113::-;32534:4;32566;32561:3;32557:14;32549:22;;32464:113;;;:::o;32613:732::-;32732:3;32761:54;32809:5;32761:54;:::i;:::-;32831:86;32910:6;32905:3;32831:86;:::i;:::-;32824:93;;32941:56;32991:5;32941:56;:::i;:::-;33020:7;33051:1;33036:284;33061:6;33058:1;33055:13;33036:284;;;33137:6;33131:13;33164:63;33223:3;33208:13;33164:63;:::i;:::-;33157:70;;33250:60;33303:6;33250:60;:::i;:::-;33240:70;;33096:224;33083:1;33080;33076:9;33071:14;;33036:284;;;33040:14;33336:3;33329:10;;32737:608;;;32613:732;;;;:::o;33351:483::-;33522:4;33560:2;33549:9;33545:18;33537:26;;33573:71;33641:1;33630:9;33626:17;33617:6;33573:71;:::i;:::-;33691:9;33685:4;33681:20;33676:2;33665:9;33661:18;33654:48;33719:108;33822:4;33813:6;33719:108;:::i;:::-;33711:116;;33351:483;;;;;:::o;33840:117::-;33949:1;33946;33939:12;33963:281;34046:27;34068:4;34046:27;:::i;:::-;34038:6;34034:40;34176:6;34164:10;34161:22;34140:18;34128:10;34125:34;34122:62;34119:88;;;34187:18;;:::i;:::-;34119:88;34227:10;34223:2;34216:22;34006:238;33963:281;;:::o;34250:129::-;34284:6;34311:20;;:::i;:::-;34301:30;;34340:33;34368:4;34360:6;34340:33;:::i;:::-;34250:129;;;:::o;34385:311::-;34462:4;34552:18;34544:6;34541:30;34538:56;;;34574:18;;:::i;:::-;34538:56;34624:4;34616:6;34612:17;34604:25;;34684:4;34678;34674:15;34666:23;;34385:311;;;:::o;34702:117::-;34811:1;34808;34801:12;34825:143;34882:5;34913:6;34907:13;34898:22;;34929:33;34956:5;34929:33;:::i;:::-;34825:143;;;;:::o;34991:732::-;35098:5;35123:81;35139:64;35196:6;35139:64;:::i;:::-;35123:81;:::i;:::-;35114:90;;35224:5;35253:6;35246:5;35239:21;35287:4;35280:5;35276:16;35269:23;;35340:4;35332:6;35328:17;35320:6;35316:30;35369:3;35361:6;35358:15;35355:122;;;35388:79;;:::i;:::-;35355:122;35503:6;35486:231;35520:6;35515:3;35512:15;35486:231;;;35595:3;35624:48;35668:3;35656:10;35624:48;:::i;:::-;35619:3;35612:61;35702:4;35697:3;35693:14;35686:21;;35562:155;35546:4;35541:3;35537:14;35530:21;;35486:231;;;35490:21;35104:619;;34991:732;;;;;:::o;35746:385::-;35828:5;35877:3;35870:4;35862:6;35858:17;35854:27;35844:122;;35885:79;;:::i;:::-;35844:122;35995:6;35989:13;36020:105;36121:3;36113:6;36106:4;36098:6;36094:17;36020:105;:::i;:::-;36011:114;;35834:297;35746:385;;;;:::o;36137:554::-;36232:6;36281:2;36269:9;36260:7;36256:23;36252:32;36249:119;;;36287:79;;:::i;:::-;36249:119;36428:1;36417:9;36413:17;36407:24;36458:18;36450:6;36447:30;36444:117;;;36480:79;;:::i;:::-;36444:117;36585:89;36666:7;36657:6;36646:9;36642:22;36585:89;:::i;:::-;36575:99;;36378:306;36137:554;;;;:::o;36697:85::-;36742:7;36771:5;36760:16;;36697:85;;;:::o;36788:60::-;36816:3;36837:5;36830:12;;36788:60;;;:::o;36854:158::-;36912:9;36945:61;36963:42;36972:32;36998:5;36972:32;:::i;:::-;36963:42;:::i;:::-;36945:61;:::i;:::-;36932:74;;36854:158;;;:::o;37018:147::-;37113:45;37152:5;37113:45;:::i;:::-;37108:3;37101:58;37018:147;;:::o;37171:831::-;37434:4;37472:3;37461:9;37457:19;37449:27;;37486:71;37554:1;37543:9;37539:17;37530:6;37486:71;:::i;:::-;37567:80;37643:2;37632:9;37628:18;37619:6;37567:80;:::i;:::-;37694:9;37688:4;37684:20;37679:2;37668:9;37664:18;37657:48;37722:108;37825:4;37816:6;37722:108;:::i;:::-;37714:116;;37840:72;37908:2;37897:9;37893:18;37884:6;37840:72;:::i;:::-;37922:73;37990:3;37979:9;37975:19;37966:6;37922:73;:::i;:::-;37171:831;;;;;;;;:::o;38008:191::-;38048:4;38068:20;38086:1;38068:20;:::i;:::-;38063:25;;38102:20;38120:1;38102:20;:::i;:::-;38097:25;;38141:1;38138;38135:8;38132:34;;;38146:18;;:::i;:::-;38132:34;38191:1;38188;38184:9;38176:17;;38008:191;;;;:::o;38205:807::-;38454:4;38492:3;38481:9;38477:19;38469:27;;38506:71;38574:1;38563:9;38559:17;38550:6;38506:71;:::i;:::-;38587:72;38655:2;38644:9;38640:18;38631:6;38587:72;:::i;:::-;38669:80;38745:2;38734:9;38730:18;38721:6;38669:80;:::i;:::-;38759;38835:2;38824:9;38820:18;38811:6;38759:80;:::i;:::-;38849:73;38917:3;38906:9;38902:19;38893:6;38849:73;:::i;:::-;38932;39000:3;38989:9;38985:19;38976:6;38932:73;:::i;:::-;38205:807;;;;;;;;;:::o;39018:663::-;39106:6;39114;39122;39171:2;39159:9;39150:7;39146:23;39142:32;39139:119;;;39177:79;;:::i;:::-;39139:119;39297:1;39322:64;39378:7;39369:6;39358:9;39354:22;39322:64;:::i;:::-;39312:74;;39268:128;39435:2;39461:64;39517:7;39508:6;39497:9;39493:22;39461:64;:::i;:::-;39451:74;;39406:129;39574:2;39600:64;39656:7;39647:6;39636:9;39632:22;39600:64;:::i;:::-;39590:74;;39545:129;39018:663;;;;;:::o;39687:147::-;39788:11;39825:3;39810:18;;39687:147;;;;:::o;39840:114::-;;:::o;39960:398::-;40119:3;40140:83;40221:1;40216:3;40140:83;:::i;:::-;40133:90;;40232:93;40321:3;40232:93;:::i;:::-;40350:1;40345:3;40341:11;40334:18;;39960:398;;;:::o;40364:379::-;40548:3;40570:147;40713:3;40570:147;:::i;:::-;40563:154;;40734:3;40727:10;;40364:379;;;:::o;40749:170::-;40889:22;40885:1;40877:6;40873:14;40866:46;40749:170;:::o;40925:366::-;41067:3;41088:67;41152:2;41147:3;41088:67;:::i;:::-;41081:74;;41164:93;41253:3;41164:93;:::i;:::-;41282:2;41277:3;41273:12;41266:19;;40925:366;;;:::o;41297:419::-;41463:4;41501:2;41490:9;41486:18;41478:26;;41550:9;41544:4;41540:20;41536:1;41525:9;41521:17;41514:47;41578:131;41704:4;41578:131;:::i;:::-;41570:139;;41297:419;;;:::o;41722:220::-;41862:34;41858:1;41850:6;41846:14;41839:58;41931:3;41926:2;41918:6;41914:15;41907:28;41722:220;:::o;41948:366::-;42090:3;42111:67;42175:2;42170:3;42111:67;:::i;:::-;42104:74;;42187:93;42276:3;42187:93;:::i;:::-;42305:2;42300:3;42296:12;42289:19;;41948:366;;;:::o;42320:419::-;42486:4;42524:2;42513:9;42509:18;42501:26;;42573:9;42567:4;42563:20;42559:1;42548:9;42544:17;42537:47;42601:131;42727:4;42601:131;:::i;:::-;42593:139;;42320:419;;;:::o;42745:221::-;42885:34;42881:1;42873:6;42869:14;42862:58;42954:4;42949:2;42941:6;42937:15;42930:29;42745:221;:::o;42972:366::-;43114:3;43135:67;43199:2;43194:3;43135:67;:::i;:::-;43128:74;;43211:93;43300:3;43211:93;:::i;:::-;43329:2;43324:3;43320:12;43313:19;;42972:366;;;:::o;43344:419::-;43510:4;43548:2;43537:9;43533:18;43525:26;;43597:9;43591:4;43587:20;43583:1;43572:9;43568:17;43561:47;43625:131;43751:4;43625:131;:::i;:::-;43617:139;;43344:419;;;:::o;43769:166::-;43909:18;43905:1;43897:6;43893:14;43886:42;43769:166;:::o;43941:366::-;44083:3;44104:67;44168:2;44163:3;44104:67;:::i;:::-;44097:74;;44180:93;44269:3;44180:93;:::i;:::-;44298:2;44293:3;44289:12;44282:19;;43941:366;;;:::o;44313:419::-;44479:4;44517:2;44506:9;44502:18;44494:26;;44566:9;44560:4;44556:20;44552:1;44541:9;44537:17;44530:47;44594:131;44720:4;44594:131;:::i;:::-;44586:139;;44313:419;;;:::o;44738:224::-;44878:34;44874:1;44866:6;44862:14;44855:58;44947:7;44942:2;44934:6;44930:15;44923:32;44738:224;:::o;44968:366::-;45110:3;45131:67;45195:2;45190:3;45131:67;:::i;:::-;45124:74;;45207:93;45296:3;45207:93;:::i;:::-;45325:2;45320:3;45316:12;45309:19;;44968:366;;;:::o;45340:419::-;45506:4;45544:2;45533:9;45529:18;45521:26;;45593:9;45587:4;45583:20;45579:1;45568:9;45564:17;45557:47;45621:131;45747:4;45621:131;:::i;:::-;45613:139;;45340:419;;;:::o;45765:222::-;45905:34;45901:1;45893:6;45889:14;45882:58;45974:5;45969:2;45961:6;45957:15;45950:30;45765:222;:::o;45993:366::-;46135:3;46156:67;46220:2;46215:3;46156:67;:::i;:::-;46149:74;;46232:93;46321:3;46232:93;:::i;:::-;46350:2;46345:3;46341:12;46334:19;;45993:366;;;:::o;46365:419::-;46531:4;46569:2;46558:9;46554:18;46546:26;;46618:9;46612:4;46608:20;46604:1;46593:9;46589:17;46582:47;46646:131;46772:4;46646:131;:::i;:::-;46638:139;;46365:419;;;:::o;46790:225::-;46930:34;46926:1;46918:6;46914:14;46907:58;46999:8;46994:2;46986:6;46982:15;46975:33;46790:225;:::o;47021:366::-;47163:3;47184:67;47248:2;47243:3;47184:67;:::i;:::-;47177:74;;47260:93;47349:3;47260:93;:::i;:::-;47378:2;47373:3;47369:12;47362:19;;47021:366;;;:::o;47393:419::-;47559:4;47597:2;47586:9;47582:18;47574:26;;47646:9;47640:4;47636:20;47632:1;47621:9;47617:17;47610:47;47674:131;47800:4;47674:131;:::i;:::-;47666:139;;47393:419;;;:::o

Swarm Source

ipfs://00eb0a5946e87878c105a635a8c0cf02d80ccfae1047a843d1242c264303cd76
Loading