ETH Price: $3,432.10 (-0.30%)
Gas: 2 Gwei

Token

Kangal Inu Cash (KANG)
 

Overview

Max Total Supply

100,000,000,000 KANG

Holders

42

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,873,296,302.753970470237922017 KANG

Value
$0.00
0xc144e0f6961ec09a482833e41d047b7991e5a4b0
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
KangalInuToken

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-20
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.16;



// Part: Context

// Part: OpenZeppelin/[email protected]/Context

/**
 * @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;
    }
}

// Part: DividendPayingTokenInterface

// Part: DividendPayingTokenInterface

interface DividendPayingTokenInterface {
    function dividendOf(address _owner) external view returns (uint256);

    function withdrawDividend() external;

    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);
}

// Part: DividendPayingTokenOptionalInterface

// Part: DividendPayingTokenOptionalInterface

interface DividendPayingTokenOptionalInterface {
    function withdrawableDividendOf(address _owner)
        external
        view
        returns (uint256);

    function withdrawnDividendOf(address _owner)
        external
        view
        returns (uint256);

    function accumulativeDividendOf(address _owner)
        external
        view
        returns (uint256);
}

// Part: IERC20

// Part: OpenZeppelin/[email protected]/IERC20

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// Part: IUniswapV2Factory

// Part: IUniswapV2Factory

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// Part: IUniswapV2Router01

// Part: IUniswapV2Router01

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// Part: IterableMapping

// Part: IterableMapping

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint256) values;
        mapping(address => uint256) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint256) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key)
        public
        view
        returns (int256)
    {
        if (!map.inserted[key]) {
            return -1;
        }
        return int256(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint256 index)
        public
        view
        returns (address)
    {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint256) {
        return map.keys.length;
    }

    function set(
        Map storage map,
        address key,
        uint256 val
    ) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint256 index = map.indexOf[key];
        uint256 lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

// Part: SafeMath

// Part: OpenZeppelin/[email protected]/SafeMath

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// Part: SafeMathInt

// Part: SafeMathInt

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

// Part: SafeMathUint

// Part: SafeMathUint

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

// Part: IERC20Metadata

// Part: OpenZeppelin/[email protected]/IERC20Metadata

/**
 * @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);
}

// Part: IUniswapV2Router02

// Part: IUniswapV2Router02

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

// Part: Ownable

// Part: OpenZeppelin/[email protected]/Ownable

/**
 * @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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// Part: ERC20

// Part: OpenZeppelin/[email protected]/ERC20

/**
 * @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 Contracts guidelines: functions revert
 * instead 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;

    /**
     * @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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}
}

// Part: DividendPayingToken

// Part: DividendPayingToken

contract DividendPayingToken is
    ERC20,
    Ownable,
    DividendPayingTokenInterface,
    DividendPayingTokenOptionalInterface
{
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 internal constant magnitude = 2**128;
    uint256 internal magnifiedDividendPerShare;
    uint256 public totalDividendsDistributed;

    address public immutable rewardToken;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    constructor(
        string memory _name,
        string memory _symbol,
        address _rewardToken
    ) ERC20(_name, _symbol) {
        rewardToken = _rewardToken;
    }

    function distributeDividends(uint256 amount) public onlyOwner {
        require(totalSupply() > 0);

        if (amount > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (amount).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, amount);

            totalDividendsDistributed = totalDividendsDistributed.add(amount);
        }
    }

    function withdrawDividend() public virtual override {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            emit DividendWithdrawn(user, _withdrawableDividend);
            bool success = IERC20(rewardToken).transfer(
                user,
                _withdrawableDividend
            );

            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(
                    _withdrawableDividend
                );
                return 0;
            }

            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view override returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return
            magnifiedDividendPerShare
                .mul(balanceOf(_owner))
                .toInt256Safe()
                .add(magnifiedDividendCorrections[_owner])
                .toUint256Safe() / magnitude;
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual override {
        require(false);

        int256 _magCorrection = magnifiedDividendPerShare
            .mul(value)
            .toInt256Safe();
        magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from]
            .add(_magCorrection);
        magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(
            _magCorrection
        );
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);

        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }
}

// Part: DividendTracker

// Part: DividendTracker

contract DividendTracker is Ownable, DividendPayingToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;
    uint256 public lastProcessedIndex;

    mapping(address => bool) public excludedFromDividends;
    mapping(address => uint256) public lastClaimTimes;

    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

    constructor(uint256 minBalance, address _rewardToken)
        DividendPayingToken(
            "Kangal Reward Tracker",
            "KANGAL_DividendTracker",
            _rewardToken
        )
    {
        claimWait = 3600;
        minimumTokenBalanceForDividends = minBalance;
    }

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "No transfers allowed");
    }

    function withdrawDividend() public pure override {
        require(
            false,
            "withdrawDividend disabled. Use the 'claim' function on the main contract."
        );
    }

    function updateMinimumTokenBalanceForDividends(uint256 _newMinimumBalance)
        external
        onlyOwner
    {
        require(
            _newMinimumBalance != minimumTokenBalanceForDividends,
            "New mimimum balance for dividend cannot be same as current minimum balance"
        );
        minimumTokenBalanceForDividends = _newMinimumBalance;
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;

        _setBalance(account, 0);
        tokenHoldersMap.remove(account);

        emit ExcludeFromDividends(account);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(
            newClaimWait >= 3600 && newClaimWait <= 86400,
            "claimWait must be updated to between 1 and 24 hours"
        );
        require(
            newClaimWait != claimWait,
            "Cannot update claimWait to same value"
        );
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function setLastProcessedIndex(uint256 index) external onlyOwner {
        lastProcessedIndex = index;
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.keys.length;
    }

    function getAccount(address _account)
        public
        view
        returns (
            address account,
            int256 index,
            int256 iterationsUntilProcessed,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 lastClaimTime,
            uint256 nextClaimTime,
            uint256 secondsUntilAutoClaimAvailable
        )
    {
        account = _account;

        index = tokenHoldersMap.getIndexOfKey(account);

        iterationsUntilProcessed = -1;

        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(
                    int256(lastProcessedIndex)
                );
            } else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length >
                    lastProcessedIndex
                    ? tokenHoldersMap.keys.length.sub(lastProcessedIndex)
                    : 0;

                iterationsUntilProcessed = index.add(
                    int256(processesUntilEndOfArray)
                );
            }
        }

        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);

        lastClaimTime = lastClaimTimes[account];

        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;

        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp
            ? nextClaimTime.sub(block.timestamp)
            : 0;
    }

    function getAccountAtIndex(uint256 index)
        public
        view
        returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        if (index >= tokenHoldersMap.size()) {
            return (
                0x0000000000000000000000000000000000000000,
                -1,
                -1,
                0,
                0,
                0,
                0,
                0
            );
        }

        address account = tokenHoldersMap.getKeyAtIndex(index);

        return getAccount(account);
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }

        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function setBalance(address account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }

        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        } else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }

        processAccount(account, true);
    }

    function process(uint256 gas)
        public
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }

        uint256 _lastProcessedIndex = lastProcessedIndex;

        uint256 gasUsed = 0;

        uint256 gasLeft = gasleft();

        uint256 iterations = 0;
        uint256 claims = 0;

        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;

            if (_lastProcessedIndex >= tokenHoldersMap.keys.length) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_lastProcessedIndex];

            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }

            iterations++;

            uint256 newGasLeft = gasleft();

            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }

            gasLeft = newGasLeft;
        }

        lastProcessedIndex = _lastProcessedIndex;

        return (iterations, claims, lastProcessedIndex);
    }

    function processAccount(address account, bool automatic)
        public
        onlyOwner
        returns (bool)
    {
        uint256 amount = _withdrawDividendOfUser(account);

        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }

        return false;
    }
}

// File: FlatTokenV7.sol

// File: KangalInu.sol

contract KangalInuToken is Ownable, ERC20 {
    uint256 public constant MAX_SUPPLY = 100_000_000_000 ether;
    uint256 public MAX_HOLD = 2_000_000_000 ether;
    // Fee Percentages
    uint256 public rewardFee;
    uint256 public marketingFee;
    uint256 public constant minSwap = 100_000 ether;
    // Global amounts held
    uint256 public rewardsAmount;
    uint256 public marketingAmount;
    // Global amounts sent
    uint256 public marketingEth;
    uint256 public kangalRewarded;
    // use by default 300,000 gas to process auto-claiming dividends
    uint256 public gasForProcessing = 300_000;
    // Constants
    uint256 public constant DIVISOR = 100;
    // Lock for swaps happening
    bool public swapping;
    address public marketingAddress;
    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;
    uint256 private lastSwapBlock;
    // Router
    IUniswapV2Router02 public uniswapV2Router;
    DividendTracker public dividendToken;

    mapping(address => bool) public maxWhitelist;
    mapping(address => bool) public feeExcluded;
    mapping(address => bool) public blacklist;
    mapping(address => bool) public pairs;

    event LogEvent(string data);
    event AddedPair(address indexed _pair);

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

    event GasForProcessingUpdated(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );

    event UpdatedFees(uint256 _reward, uint256 _marketing);
    event UpdateDividendTracker(
        address indexed newAddress,
        address indexed oldAddress
    );
    event UpdateMarketing(address _new, address _old);
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    event ProcessedDividendTracker(
        uint256 iterations,
        uint256 claims,
        uint256 lastProcessedIndex,
        bool indexed automatic,
        uint256 gas,
        address indexed processor
    );
    event UpdateMaxWhitelist(address indexed _contract, bool _val);

    constructor(address _marketing) ERC20("Kangal Inu Cash", "KANG") {
        // Works for CHAIN ID 1 && 4
        address _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        address _swapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

        rewardFee = 2;
        marketingFee = 6;

        marketingAddress = _marketing;
        pairs[_swapPair] = true;
        maxWhitelist[owner()] = true;
        maxWhitelist[address(this)] = true;
        maxWhitelist[_router] = true;
        maxWhitelist[_swapPair] = true;

        dividendToken = new DividendTracker(5_000_000 ether, address(this));
        dividendToken.excludeFromDividends(_swapPair);
        dividendToken.excludeFromDividends(address(dividendToken));
        dividendToken.excludeFromDividends(owner());
        dividendToken.excludeFromDividends(deadWallet);
        dividendToken.excludeFromDividends(address(this));
        dividendToken.excludeFromDividends(address(0));
        dividendToken.excludeFromDividends(_router);

        excludeFromFees(address(dividendToken), true);
        excludeFromFees(owner(), true);
        if (owner() != marketingAddress)
            excludeFromFees(marketingAddress, true);
        excludeFromFees(address(this), true);
        _mint(owner(), MAX_SUPPLY); // 100 BILLION TOKENS TO OWNER
    }

    receive() external payable {}

    function _beforeTokenTransfer_(
        address from,
        address to,
        uint256 amount
    ) internal {
        if (amount == 0) return;
        uint256 currentBalance = balanceOf(address(this));
        bool canSwap = currentBalance >= minSwap &&
            currentBalance >= marketingAmount;
        if (
            canSwap &&
            !swapping &&
            from != owner() &&
            to != owner() &&
            !pairs[from] &&
            from != address(uniswapV2Router) &&
            block.number > lastSwapBlock
        ) {
            swapping = true;
            swapMarketing();
            swapping = false;
        }
    }

    function _afterTokenTransfer_(
        address from,
        address to,
        uint256 amount
    ) internal {
        if (amount == 0) return;
        try dividendToken.setBalance(from, balanceOf(from)) {} catch {}
        try dividendToken.setBalance(to, balanceOf(to)) {} catch {}

        if (!swapping) {
            swapping = true;
            uint256 gas = gasForProcessing;

            try dividendToken.process(gas) returns (
                uint256 iterations,
                uint256 claims,
                uint256 lastProcessedIndex
            ) {
                emit ProcessedDividendTracker(
                    iterations,
                    claims,
                    lastProcessedIndex,
                    true,
                    gas,
                    msg.sender
                );
            } catch {}
            swapping = false;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(!blacklist[from] && !blacklist[to], "Blacklisted address");
        _beforeTokenTransfer_(from, to, amount);
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        // TRY TO TAX ONLY SELLS AND BUYS THIS ALSO TAXES ADDING LIQUIDITY UNFORTUNATELY.
        // THERE'S NO WAY AROUND THIS UNLESS LIQUIDITY IS ADDED MANUALLY (NOT RECOMMENDED)
        if (
            !feeExcluded[from] &&
            !swapping &&
            (pairs[from] || pairs[to]) &&
            !(pairs[from] && to == address(uniswapV2Router))
        ) {
            uint256 toReward;
            uint256 toMarketing;
            (amount, toReward, toMarketing) = taxAmount(amount);
            super._transfer(from, address(this), toReward + toMarketing);
            rewardsAmount += toReward;
            distributeRewards();
            marketingAmount += toMarketing;
        }
        if (from != address(dividendToken) && !maxWhitelist[to])
            require(
                balanceOf(to) + amount <= MAX_HOLD,
                "MAX amount held reached"
            );
        super._transfer(from, to, amount);
        _afterTokenTransfer_(from, to, amount);
    }

    function taxes() external view returns (uint256 _tax) {
        _tax = rewardFee + marketingFee;
    }

    function taxAmount(uint256 amount)
        public
        view
        returns (
            uint256 _newAmount,
            uint256 _reward,
            uint256 _marketing
        )
    {
        _reward = (rewardFee * amount) / DIVISOR;
        _marketing = (marketingFee * amount) / DIVISOR;
        uint256 totalFee = _reward + _marketing;
        _newAmount = amount - totalFee;
    }

    function distributeRewards() internal {
        swapping = true;
        if (rewardsAmount > 0 && balanceOf(address(this)) >= rewardsAmount) {
            super._transfer(
                address(this),
                address(dividendToken),
                rewardsAmount
            );
            kangalRewarded += rewardsAmount;
            rewardsAmount = 0;
            if (dividendToken.totalSupply() != 0) {
                uint256 tokensToDistribute = balanceOf(address(dividendToken));
                dividendToken.distributeDividends(tokensToDistribute);
            }
        }
        swapping = false;
    }

    function swapMarketing() internal {
        //sendToDividends( balances[0]);
        lastSwapBlock = block.number;
        bool txSuccess;
        swapForEth(marketingAmount);
        marketingAmount = 0;
        //SEND TO MKT WALLET
        uint256 ethBalance = address(this).balance;
        (txSuccess, ) = payable(marketingAddress).call{value: ethBalance}("");
        marketingEth += ethBalance;
        require(txSuccess, "Failed ETH Transfer");
    }

    function manualSwap() external {
        swapping = true;
        swapMarketing();
        swapping = false;
    }

    function swapForEth(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), amount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    //PLEASE CHANGE BACK TO PRIVATE#2
    function getPercentages(
        uint256[4] memory percentages,
        uint256 base,
        uint256 multiplier
    ) private pure returns (uint256[4] memory _finalValues) {
        for (uint8 i = 0; i < percentages.length; i++) {
            _finalValues[i] = (percentages[i] * multiplier) / base;
        }
    }

    function setFees(uint256 _reward, uint256 _marketing) external onlyOwner {
        require(_reward + _marketing <= 25, "High fees");
        rewardFee = _reward;
        marketingFee = _marketing;
        emit UpdatedFees(_reward, _marketing);
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != address(0), "use Marketing");
        emit UpdateMarketing(_marketingWallet, marketingAddress);
        marketingAddress = _marketingWallet;
    }

    function claim() external {
        dividendToken.processAccount(payable(msg.sender), false);
    }

    /// @notice Updates the dividend tracker's address
    /// @param newAddress New dividend tracker address
    function updateDividendTracker(address newAddress) public onlyOwner {
        require(
            newAddress != address(dividendToken),
            "KANGAL: The dividend tracker already has that address"
        );

        DividendTracker newDividendToken = DividendTracker(newAddress);

        require(
            newDividendToken.owner() == address(this),
            "KANGAL: The new dividend tracker must be owned by the deployer of the contract"
        );

        newDividendToken.excludeFromDividends(address(newDividendToken));
        newDividendToken.excludeFromDividends(address(this));
        newDividendToken.excludeFromDividends(owner());
        newDividendToken.excludeFromDividends(address(uniswapV2Router));

        emit UpdateDividendTracker(newAddress, address(dividendToken));

        dividendToken = newDividendToken;
    }

    /// @notice Updates the uniswapV2Router's address
    /// @param newAddress New uniswapV2Router's address
    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "KANGAL: The router already has that address"
        );
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
    }

    /// @notice Excludes address from fees
    /// @param account New uniswapV2Router's address
    /// @param excluded True if excluded
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            feeExcluded[account] != excluded,
            "KANGAL: Account is already the value of 'excluded'"
        );
        feeExcluded[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    /// @notice Excludes multiple accounts from fees
    /// @param accounts Array of accounts to be excluded
    /// @param excluded True if excluded
    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            feeExcluded[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    /// @notice Includes address in the blacklist
    /// @param account Array of accounts to be excluded
    /// @param value True if excluded
    function blacklistAddress(address account, bool value) external onlyOwner {
        blacklist[account] = value;
    }

    /// @notice Updates gas amount for processing
    /// @param newValue New gas value
    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(
            newValue >= 200000 && newValue <= 500000,
            "gasForProcessing must be between 200,000 and 500,000"
        );
        require(
            newValue != gasForProcessing,
            "Cannot update gasForProcessing to same value"
        );
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    /// @notice Allows owner to updates time to claim rewards
    /// @param claimWait New claim wait time
    function updateClaimWait(uint256 claimWait) external onlyOwner {
        dividendToken.updateClaimWait(claimWait);
    }

    /// @notice Checks the feeExcluded map to see if the account is excluded from fees
    /// @param account Address to check
    function isExcludedFromFees(address account) public view returns (bool) {
        return feeExcluded[account];
    }

    /// @notice Checks the withdrawable amount of dividends from account
    /// @param account Address to check
    function withdrawableDividendOf(address account)
        public
        view
        returns (uint256)
    {
        return dividendToken.withdrawableDividendOf(account);
    }

    // DIVIDEND SETTERS/GETTERS
    function dividendTokenBalanceOf(address account)
        public
        view
        returns (uint256)
    {
        return dividendToken.balanceOf(account);
    }

    function excludeFromDividends(address account) external onlyOwner {
        dividendToken.excludeFromDividends(account);
    }

    function processDividendTracker(uint256 gas) external {
        (
            uint256 iterations,
            uint256 claims,
            uint256 lastProcessedIndex
        ) = dividendToken.process(gas);
        emit ProcessedDividendTracker(
            iterations,
            claims,
            lastProcessedIndex,
            false,
            gas,
            msg.sender
        );
    }

    function getClaimWait() external view returns (uint256) {
        return dividendToken.claimWait();
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendToken.totalDividendsDistributed();
    }

    function getAccountDividendsInfo(address account)
        external
        view
        returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return dividendToken.getAccount(account);
    }

    function getAccountDividendsInfoAtIndex(uint256 index)
        external
        view
        returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return dividendToken.getAccountAtIndex(index);
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return dividendToken.getLastProcessedIndex();
    }

    function getNumberOfDividendTokenHolders() external view returns (uint256) {
        return dividendToken.getNumberOfTokenHolders();
    }

    function setMaxWhitelist(address _whitelister, bool _status)
        public
        onlyOwner
    {
        require(maxWhitelist[_whitelister] != _status, "redundant");
        maxWhitelist[_whitelister] = _status;
        emit UpdateMaxWhitelist(_whitelister, _status);
    }

    function setMultipleWhitelister(
        address[] calldata _addresses,
        bool[] calldata _values
    ) external {
        require(_addresses.length == _values.length); // dev: Wrong lengths
        for (uint8 i = 0; i < _addresses.length; i++) {
            setMaxWhitelist(_addresses[i], _values[i]);
        }
    }

    function setPair(address _pairAddress) external onlyOwner {
        require(!pairs[_pairAddress]); //dev: already set
        pairs[_pairAddress] = true;
        setMaxWhitelist(_pairAddress, true);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketing","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_pair","type":"address"}],"name":"AddedPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"data","type":"string"}],"name":"LogEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_new","type":"address"},{"indexed":false,"internalType":"address","name":"_old","type":"address"}],"name":"UpdateMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_contract","type":"address"},{"indexed":false,"internalType":"bool","name":"_val","type":"bool"}],"name":"UpdateMaxWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketing","type":"uint256"}],"name":"UpdatedFees","type":"event"},{"inputs":[],"name":"DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_HOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendToken","outputs":[{"internalType":"contract DividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feeExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kangalRewarded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reward","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelister","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMaxWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool[]","name":"_values","type":"bool[]"}],"name":"setMultipleWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pairAddress","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"taxAmount","outputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"},{"internalType":"uint256","name":"_reward","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526b06765c793fa10079d0000000600655620493e0600d553480156200002857600080fd5b506040516200b5443803806200b54483398181016040528101906200004e919062000f8d565b6040518060400160405280600f81526020017f4b616e67616c20496e75204361736800000000000000000000000000000000008152506040518060400160405280600481526020017f4b414e4700000000000000000000000000000000000000000000000000000000815250620000da620000ce62000ace60201b60201c565b62000ad660201b60201c565b8160049081620000eb919062001239565b508060059081620000fd919062001239565b5050506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000192919062000f8d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000220919062000f8d565b6040518363ffffffff1660e01b81526004016200023f92919062001331565b6020604051808303816000875af11580156200025f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000285919062000f8d565b905081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600781905550600660088190555083600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260006200038762000b9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506a0422ca8b0a00a42500000030604051620004fb9062000f15565b62000508929190620013a1565b604051809103906000f08015801562000525573d6000803e3d6000fd5b50601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b8152600401620005c39190620013ce565b600060405180830381600087803b158015620005de57600080fd5b505af1158015620005f3573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401620006769190620013ce565b600060405180830381600087803b1580156200069157600080fd5b505af1158015620006a6573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0620006f862000b9a60201b60201c565b6040518263ffffffff1660e01b8152600401620007169190620013ce565b600060405180830381600087803b1580156200073157600080fd5b505af115801562000746573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db061dead6040518263ffffffff1660e01b8152600401620007a99190620013ce565b600060405180830381600087803b158015620007c457600080fd5b505af1158015620007d9573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0306040518263ffffffff1660e01b81526004016200083a9190620013ce565b600060405180830381600087803b1580156200085557600080fd5b505af11580156200086a573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db060006040518263ffffffff1660e01b8152600401620008cc9190620013ce565b600060405180830381600087803b158015620008e757600080fd5b505af1158015620008fc573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0846040518263ffffffff1660e01b81526004016200095d9190620013ce565b600060405180830381600087803b1580156200097857600080fd5b505af11580156200098d573d6000803e3d6000fd5b50505050620009c6601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000bc360201b60201c565b620009e8620009da62000b9a60201b60201c565b600162000bc360201b60201c565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000a3162000b9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a835762000a82600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000bc360201b60201c565b5b62000a9630600162000bc360201b60201c565b62000ac462000aaa62000b9a60201b60201c565b6c01431e0fae6d7217caa000000062000d9260201b60201c565b505050506200164a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000bd362000ace60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000bf962000b9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c49906200144c565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cde90620014e4565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000d86919062001523565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dfb9062001590565b60405180910390fd5b62000e186000838362000f0b60201b60201c565b806003600082825462000e2c9190620015e1565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000e849190620015e1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000eeb91906200162d565b60405180910390a362000f076000838362000f1060201b60201c565b5050565b505050565b505050565b61404780620074fd83390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f558262000f28565b9050919050565b62000f678162000f48565b811462000f7357600080fd5b50565b60008151905062000f878162000f5c565b92915050565b60006020828403121562000fa65762000fa562000f23565b5b600062000fb68482850162000f76565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200104157607f821691505b60208210810362001057576200105662000ff9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620010c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001082565b620010cd868362001082565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200111a620011146200110e84620010e5565b620010ef565b620010e5565b9050919050565b6000819050919050565b6200113683620010f9565b6200114e620011458262001121565b8484546200108f565b825550505050565b600090565b6200116562001156565b620011728184846200112b565b505050565b5b818110156200119a576200118e6000826200115b565b60018101905062001178565b5050565b601f821115620011e957620011b3816200105d565b620011be8462001072565b81016020851015620011ce578190505b620011e6620011dd8562001072565b83018262001177565b50505b505050565b600082821c905092915050565b60006200120e60001984600802620011ee565b1980831691505092915050565b6000620012298383620011fb565b9150826002028217905092915050565b620012448262000fbf565b67ffffffffffffffff81111562001260576200125f62000fca565b5b6200126c825462001028565b620012798282856200119e565b600060209050601f831160018114620012b157600084156200129c578287015190505b620012a885826200121b565b86555062001318565b601f198416620012c1866200105d565b60005b82811015620012eb57848901518255600182019150602085019450602081019050620012c4565b868310156200130b578489015162001307601f891682620011fb565b8355505b6001600288020188555050505b505050505050565b6200132b8162000f48565b82525050565b600060408201905062001348600083018562001320565b62001357602083018462001320565b9392505050565b6000819050919050565b600062001389620013836200137d846200135e565b620010ef565b620010e5565b9050919050565b6200139b8162001368565b82525050565b6000604082019050620013b8600083018562001390565b620013c7602083018462001320565b9392505050565b6000602082019050620013e5600083018462001320565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001434602083620013eb565b91506200144182620013fc565b602082019050919050565b60006020820190508181036000830152620014678162001425565b9050919050565b7f4b414e47414c3a204163636f756e7420697320616c726561647920746865207660008201527f616c7565206f6620276578636c75646564270000000000000000000000000000602082015250565b6000620014cc603283620013eb565b9150620014d9826200146e565b604082019050919050565b60006020820190508181036000830152620014ff81620014bd565b9050919050565b60008115159050919050565b6200151d8162001506565b82525050565b60006020820190506200153a600083018462001512565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001578601f83620013eb565b9150620015858262001540565b602082019050919050565b60006020820190508181036000830152620015ab8162001569565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620015ee82620010e5565b9150620015fb83620010e5565b9250828201905080821115620016165762001615620015b2565b5b92915050565b6200162781620010e5565b82525050565b60006020820190506200164460008301846200161c565b92915050565b615ea3806200165a6000396000f3fe6080604052600436106103a65760003560e01c8063700bb191116101e7578063a5ece9411161010d578063d40a9c4f116100a0578063f27fd2541161006f578063f27fd25414610df2578063f2fde38b14610e36578063f9f92be414610e5f578063fe33b30214610e9c576103ad565b8063d40a9c4f14610d36578063dd62ed3e14610d61578063e7841ec014610d9e578063e98030c714610dc9576103ad565b8063c0246668116100dc578063c024666814610c7a578063c13d995c14610ca3578063c492f04614610cce578063d19a550914610cf7576103ad565b8063a5ece94114610b91578063a8b9d24014610bbc578063a9059cbb14610bf9578063ad56c13c14610c36576103ad565b806388bdd9be116101855780639c1b8af5116101545780639c1b8af514610ad5578063a07dbdf514610b00578063a26579ad14610b29578063a457c2d714610b54576103ad565b806388bdd9be14610a2b5780638b42426714610a545780638da5cb5b14610a7f57806395d89b4114610aaa576103ad565b8063728f8eea116101c1578063728f8eea146109835780638187f516146109ae57806385141a77146109d7578063871c128d14610a02576103ad565b8063700bb1911461090657806370a082311461092f578063715018a61461096c576103ad565b8063360bfd54116102cc578063566c40d51161026a57806365b8dbc01161023957806365b8dbc01461084a5780636843cd84146108735780636ae688a9146108b05780636b67c4df146108db576103ad565b8063566c40d51461078e57806359cd9031146107cb5780635d098b38146107f657806364b0f6531461081f576103ad565b80634e71d92d116102a65780634e71d92d146106f85780634ed569341461070f5780634fbee1931461073a57806351bc3c8514610777576103ad565b8063360bfd54146106675780633950935114610692578063455a4396146106cf576103ad565b80631732cded11610344578063313ce56711610313578063313ce567146105bd57806331e79db0146105e857806332cb6b0c146106115780633410fe6e1461063c576103ad565b80631732cded146104ff57806318160ddd1461052a57806323b872dd1461055557806330bb4cff14610592576103ad565b80630b78f9c0116103805780630b78f9c014610457578063112d08fe146104805780631582358e146104a95780631694505e146104d4576103ad565b8063035f09f1146103b257806306fdde03146103ef578063095ea7b31461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d491906144d3565b610ed9565b6040516103e6919061451b565b60405180910390f35b3480156103fb57600080fd5b50610404610ef9565b60405161041191906145c6565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c919061461e565b610f8b565b60405161044e919061451b565b60405180910390f35b34801561046357600080fd5b5061047e6004803603810190610479919061465e565b610fae565b005b34801561048c57600080fd5b506104a760048036038101906104a29190614759565b6110c4565b005b3480156104b557600080fd5b506104be61115f565b6040516104cb9190614839565b60405180910390f35b3480156104e057600080fd5b506104e9611185565b6040516104f69190614875565b60405180910390f35b34801561050b57600080fd5b506105146111ab565b604051610521919061451b565b60405180910390f35b34801561053657600080fd5b5061053f6111be565b60405161054c919061489f565b60405180910390f35b34801561056157600080fd5b5061057c600480360381019061057791906148ba565b6111c8565b604051610589919061451b565b60405180910390f35b34801561059e57600080fd5b506105a76111f7565b6040516105b4919061489f565b60405180910390f35b3480156105c957600080fd5b506105d261128f565b6040516105df9190614929565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a91906144d3565b611298565b005b34801561061d57600080fd5b506106266113a4565b604051610633919061489f565b60405180910390f35b34801561064857600080fd5b506106516113b5565b60405161065e919061489f565b60405180910390f35b34801561067357600080fd5b5061067c6113ba565b604051610689919061489f565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b4919061461e565b6113c0565b6040516106c6919061451b565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f19190614970565b6113f7565b005b34801561070457600080fd5b5061070d6114ce565b005b34801561071b57600080fd5b50610724611572565b604051610731919061489f565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c91906144d3565b611578565b60405161076e919061451b565b60405180910390f35b34801561078357600080fd5b5061078c6115ce565b005b34801561079a57600080fd5b506107b560048036038101906107b091906144d3565b61160e565b6040516107c2919061451b565b60405180910390f35b3480156107d757600080fd5b506107e061162e565b6040516107ed919061489f565b60405180910390f35b34801561080257600080fd5b5061081d600480360381019061081891906144d3565b61163c565b005b34801561082b57600080fd5b506108346117c6565b604051610841919061489f565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c91906144d3565b61185e565b005b34801561087f57600080fd5b5061089a600480360381019061089591906144d3565b611a2a565b6040516108a7919061489f565b60405180910390f35b3480156108bc57600080fd5b506108c5611acf565b6040516108d2919061489f565b60405180910390f35b3480156108e757600080fd5b506108f0611ad5565b6040516108fd919061489f565b60405180910390f35b34801561091257600080fd5b5061092d600480360381019061092891906149b0565b611adb565b005b34801561093b57600080fd5b50610956600480360381019061095191906144d3565b611be2565b604051610963919061489f565b60405180910390f35b34801561097857600080fd5b50610981611c2b565b005b34801561098f57600080fd5b50610998611cb3565b6040516109a5919061489f565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d091906144d3565b611cca565b005b3480156109e357600080fd5b506109ec611e03565b6040516109f991906149ec565b60405180910390f35b348015610a0e57600080fd5b50610a296004803603810190610a2491906149b0565b611e09565b005b348015610a3757600080fd5b50610a526004803603810190610a4d91906144d3565b611f58565b005b348015610a6057600080fd5b50610a696123db565b604051610a76919061489f565b60405180910390f35b348015610a8b57600080fd5b50610a946123e1565b604051610aa191906149ec565b60405180910390f35b348015610ab657600080fd5b50610abf61240a565b604051610acc91906145c6565b60405180910390f35b348015610ae157600080fd5b50610aea61249c565b604051610af7919061489f565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b229190614970565b6124a2565b005b348015610b3557600080fd5b50610b3e612659565b604051610b4b919061489f565b60405180910390f35b348015610b6057600080fd5b50610b7b6004803603810190610b76919061461e565b6126f1565b604051610b88919061451b565b60405180910390f35b348015610b9d57600080fd5b50610ba6612768565b604051610bb391906149ec565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde91906144d3565b61278e565b604051610bf0919061489f565b60405180910390f35b348015610c0557600080fd5b50610c206004803603810190610c1b919061461e565b612833565b604051610c2d919061451b565b60405180910390f35b348015610c4257600080fd5b50610c5d6004803603810190610c5891906144d3565b612856565b604051610c71989796959493929190614a20565b60405180910390f35b348015610c8657600080fd5b50610ca16004803603810190610c9c9190614970565b61291a565b005b348015610caf57600080fd5b50610cb8612ad1565b604051610cc5919061489f565b60405180910390f35b348015610cda57600080fd5b50610cf56004803603810190610cf09190614a9e565b612ad7565b005b348015610d0357600080fd5b50610d1e6004803603810190610d1991906149b0565b612c33565b604051610d2d93929190614afe565b60405180910390f35b348015610d4257600080fd5b50610d4b612c96565b604051610d58919061489f565b60405180910390f35b348015610d6d57600080fd5b50610d886004803603810190610d839190614b35565b612c9c565b604051610d95919061489f565b60405180910390f35b348015610daa57600080fd5b50610db3612d23565b604051610dc0919061489f565b60405180910390f35b348015610dd557600080fd5b50610df06004803603810190610deb91906149b0565b612dbb565b005b348015610dfe57600080fd5b50610e196004803603810190610e1491906149b0565b612ec7565b604051610e2d989796959493929190614a20565b60405180910390f35b348015610e4257600080fd5b50610e5d6004803603810190610e5891906144d3565b612f8b565b005b348015610e6b57600080fd5b50610e866004803603810190610e8191906144d3565b613082565b604051610e93919061451b565b60405180910390f35b348015610ea857600080fd5b50610ec36004803603810190610ebe91906144d3565b6130a2565b604051610ed0919061451b565b60405180910390f35b60126020528060005260406000206000915054906101000a900460ff1681565b606060048054610f0890614ba4565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3490614ba4565b8015610f815780601f10610f5657610100808354040283529160200191610f81565b820191906000526020600020905b815481529060010190602001808311610f6457829003601f168201915b5050505050905090565b600080610f966130c2565b9050610fa38185856130ca565b600191505092915050565b610fb66130c2565b73ffffffffffffffffffffffffffffffffffffffff16610fd46123e1565b73ffffffffffffffffffffffffffffffffffffffff161461102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190614c21565b60405180910390fd5b601981836110389190614c70565b1115611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090614cf0565b60405180910390fd5b81600781905550806008819055507f4d32f38862d5eb71edfefb7955873bd55920dc98159b6f53f8be62fbf0bebb4b82826040516110b8929190614d10565b60405180910390a15050565b8181905084849050146110d657600080fd5b60005b848490508160ff1610156111585761114585858360ff16818110611100576110ff614d39565b5b905060200201602081019061111591906144d3565b84848460ff1681811061112b5761112a614d39565b5b90506020020160208101906111409190614d68565b6124a2565b808061115090614d95565b9150506110d9565b5050505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900460ff1681565b6000600354905090565b6000806111d36130c2565b90506111e0858285613293565b6111eb85858561331f565b60019150509392505050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190614dd3565b905090565b60006012905090565b6112a06130c2565b73ffffffffffffffffffffffffffffffffffffffff166112be6123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90614c21565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b815260040161136f91906149ec565b600060405180830381600087803b15801561138957600080fd5b505af115801561139d573d6000803e3d6000fd5b5050505050565b6c01431e0fae6d7217caa000000081565b606481565b600a5481565b6000806113cb6130c2565b90506113ec8185856113dd8589612c9c565b6113e79190614c70565b6130ca565b600191505092915050565b6113ff6130c2565b73ffffffffffffffffffffffffffffffffffffffff1661141d6123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90614c21565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc4c4b373360006040518363ffffffff1660e01b815260040161152c929190614e21565b6020604051808303816000875af115801561154b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156f9190614e5f565b50565b600b5481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6001600e60006101000a81548160ff0219169083151502179055506115f1613777565b6000600e60006101000a81548160ff021916908315150217905550565b60136020528060005260406000206000915054906101000a900460ff1681565b69152d02c7e14af680000081565b6116446130c2565b73ffffffffffffffffffffffffffffffffffffffff166116626123e1565b73ffffffffffffffffffffffffffffffffffffffff16146116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af90614c21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90614ed8565b60405180910390fd5b7f747f0121a55c3cbfd440ca2324ff63f5c282ceb804ada2dc7b81efdfba9788c581600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161177a929190614ef8565b60405180910390a180600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166309bbedde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611835573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118599190614dd3565b905090565b6118666130c2565b73ffffffffffffffffffffffffffffffffffffffff166118846123e1565b73ffffffffffffffffffffffffffffffffffffffff16146118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d190614c21565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190614f93565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401611a8791906149ec565b602060405180830381865afa158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190614dd3565b9050919050565b600c5481565b60085481565b6000806000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479856040518263ffffffff1660e01b8152600401611b3b919061489f565b6060604051808303816000875af1158015611b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7e9190614fb3565b9250925092503373ffffffffffffffffffffffffffffffffffffffff16600015157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a9885858589604051611bd49493929190615006565b60405180910390a350505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c336130c2565b73ffffffffffffffffffffffffffffffffffffffff16611c516123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9e90614c21565b60405180910390fd5b611cb16000613883565b565b6000600854600754611cc59190614c70565b905090565b611cd26130c2565b73ffffffffffffffffffffffffffffffffffffffff16611cf06123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90614c21565b60405180910390fd5b601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d9d57600080fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e008160016124a2565b50565b61dead81565b611e116130c2565b73ffffffffffffffffffffffffffffffffffffffff16611e2f6123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c90614c21565b60405180910390fd5b62030d408110158015611e9b57506207a1208111155b611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed1906150bd565b60405180910390fd5b600d548103611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f159061514f565b60405180910390fd5b600d54817f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db760405160405180910390a380600d8190555050565b611f606130c2565b73ffffffffffffffffffffffffffffffffffffffff16611f7e6123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcb90614c21565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b906151e1565b60405180910390fd5b60008190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ef9190615216565b73ffffffffffffffffffffffffffffffffffffffff1614612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c906152db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b815260040161217e91906149ec565b600060405180830381600087803b15801561219857600080fd5b505af11580156121ac573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166331e79db0306040518263ffffffff1660e01b81526004016121e991906149ec565b600060405180830381600087803b15801561220357600080fd5b505af1158015612217573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166331e79db061223f6123e1565b6040518263ffffffff1660e01b815260040161225b91906149ec565b600060405180830381600087803b15801561227557600080fd5b505af1158015612289573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166331e79db0601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016122e891906149ec565b600060405180830381600087803b15801561230257600080fd5b505af1158015612316573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a860405160405180910390a380601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461241990614ba4565b80601f016020809104026020016040519081016040528092919081815260200182805461244590614ba4565b80156124925780601f1061246757610100808354040283529160200191612492565b820191906000526020600020905b81548152906001019060200180831161247557829003601f168201915b5050505050905090565b600d5481565b6124aa6130c2565b73ffffffffffffffffffffffffffffffffffffffff166124c86123e1565b73ffffffffffffffffffffffffffffffffffffffff161461251e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251590614c21565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a790615347565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa256182c37c34ad81def7e7101e3433459c1837891f974dcf03b7375b8fba2f08260405161264d919061451b565b60405180910390a25050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f2789ec6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ec9190614dd3565b905090565b6000806126fc6130c2565b9050600061270a8286612c9c565b90508381101561274f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612746906153d9565b60405180910390fd5b61275c82868684036130ca565b60019250505092915050565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b81526004016127eb91906149ec565b602060405180830381865afa158015612808573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282c9190614dd3565b9050919050565b60008061283e6130c2565b905061284b81858561331f565b600191505092915050565b600080600080600080600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f18a6040518263ffffffff1660e01b81526004016128bd91906149ec565b61010060405180830381865afa1580156128db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ff9190615425565b97509750975097509750975097509750919395975091939597565b6129226130c2565b73ffffffffffffffffffffffffffffffffffffffff166129406123e1565b73ffffffffffffffffffffffffffffffffffffffff1614612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614c21565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f9061554d565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612ac5919061451b565b60405180910390a25050565b60095481565b612adf6130c2565b73ffffffffffffffffffffffffffffffffffffffff16612afd6123e1565b73ffffffffffffffffffffffffffffffffffffffff1614612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a90614c21565b60405180910390fd5b60005b83839050811015612bf2578160136000868685818110612b7957612b78614d39565b5b9050602002016020810190612b8e91906144d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612bea9061556d565b915050612b56565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051612c2693929190615678565b60405180910390a1505050565b6000806000606484600754612c4891906156aa565b612c529190615733565b9150606484600854612c6491906156aa565b612c6e9190615733565b905060008183612c7e9190614c70565b90508085612c8c9190615764565b9350509193909250565b60065481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7841ec06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190614dd3565b905090565b612dc36130c2565b73ffffffffffffffffffffffffffffffffffffffff16612de16123e1565b73ffffffffffffffffffffffffffffffffffffffff1614612e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2e90614c21565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e98030c7826040518263ffffffff1660e01b8152600401612e92919061489f565b600060405180830381600087803b158015612eac57600080fd5b505af1158015612ec0573d6000803e3d6000fd5b5050505050565b600080600080600080600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635183d6fd8a6040518263ffffffff1660e01b8152600401612f2e919061489f565b61010060405180830381865afa158015612f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f709190615425565b97509750975097509750975097509750919395975091939597565b612f936130c2565b73ffffffffffffffffffffffffffffffffffffffff16612fb16123e1565b73ffffffffffffffffffffffffffffffffffffffff1614613007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffe90614c21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306d9061580a565b60405180910390fd5b61307f81613883565b50565b60146020528060005260406000206000915054906101000a900460ff1681565b60156020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131309061589c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319f9061592e565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051613286919061489f565b60405180910390a3505050565b600061329f8484612c9c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114613319578181101561330b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133029061599a565b60405180910390fd5b61331884848484036130ca565b5b50505050565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133c35750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f990615a06565b60405180910390fd5b61340d838383613947565b600081036134265761342183836000613b1e565b613772565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561348d5750600e60009054906101000a900460ff16155b80156135365750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135355750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b80156135e55750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135e35750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b155b15613655576000806135f683612c33565b809350819450829550505050613618853083856136139190614c70565b613b1e565b816009600082825461362a9190614c70565b92505081905550613639613da0565b80600a600082825461364b9190614c70565b9250508190555050505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156136fd5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561375b576006548161370f84611be2565b6137199190614c70565b111561375a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375190615a72565b60405180910390fd5b5b613766838383613b1e565b613771838383613fa2565b5b505050565b43600f81905550600061378b600a5461421e565b6000600a819055506000479050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516137de90615ac3565b60006040518083038185875af1925050503d806000811461381b576040519150601f19603f3d011682016040523d82523d6000602084013e613820565b606091505b50508092505080600b60008282546138389190614c70565b925050819055508161387f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387690615b24565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000810315613b1957600061395b30611be2565b9050600069152d02c7e14af6800000821015801561397b5750600a548210155b90508080156139975750600e60009054906101000a900460ff16155b80156139d657506139a66123e1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613a1557506139e56123e1565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015613a6b5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613ac55750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613ad25750600f5443115b15613b16576001600e60006101000a81548160ff021916908315150217905550613afa613777565b6000600e60006101000a81548160ff0219169083151502179055505b50505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b8490615bb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf390615c48565b60405180910390fd5b613c07838383614461565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8590615cda565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d239190614c70565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d87919061489f565b60405180910390a3613d9a848484614466565b50505050565b6001600e60006101000a81548160ff0219169083151502179055506000600954118015613dd75750600954613dd430611be2565b10155b15613f8557613e0b30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954613b1e565b600954600c6000828254613e1f9190614c70565b9250508190555060006009819055506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec19190614dd3565b14613f84576000613ef3601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611be2565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633243c791826040518263ffffffff1660e01b8152600401613f50919061489f565b600060405180830381600087803b158015613f6a57600080fd5b505af1158015613f7e573d6000803e3d6000fd5b50505050505b5b6000600e60006101000a81548160ff021916908315150217905550565b600081031561421957601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc84613ff386611be2565b6040518363ffffffff1660e01b8152600401614010929190615cfa565b600060405180830381600087803b15801561402a57600080fd5b505af192505050801561403b575060015b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc8361408485611be2565b6040518363ffffffff1660e01b81526004016140a1929190615cfa565b600060405180830381600087803b1580156140bb57600080fd5b505af19250505080156140cc575060015b50600e60009054906101000a900460ff16614218576001600e60006101000a81548160ff0219169083151502179055506000600d549050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479826040518263ffffffff1660e01b815260040161415e919061489f565b6060604051808303816000875af192505050801561419a57506040513d601f19601f820116820180604052508101906141979190614fb3565b60015b156141fb573373ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585896040516141ef9493929190615006565b60405180910390a35050505b6000600e60006101000a81548160ff021916908315150217905550505b5b505050565b6000600267ffffffffffffffff81111561423b5761423a615d23565b5b6040519080825280602002602001820160405280156142695781602001602082028036833780820191505090505b509050308160008151811061428157614280614d39565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061434c9190615216565b816001815181106143605761435f614d39565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143c730601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846130ca565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161442b959493929190615e13565b600060405180830381600087803b15801561444557600080fd5b505af1158015614459573d6000803e3d6000fd5b505050505050565b505050565b505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144a082614475565b9050919050565b6144b081614495565b81146144bb57600080fd5b50565b6000813590506144cd816144a7565b92915050565b6000602082840312156144e9576144e861446b565b5b60006144f7848285016144be565b91505092915050565b60008115159050919050565b61451581614500565b82525050565b6000602082019050614530600083018461450c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614570578082015181840152602081019050614555565b60008484015250505050565b6000601f19601f8301169050919050565b600061459882614536565b6145a28185614541565b93506145b2818560208601614552565b6145bb8161457c565b840191505092915050565b600060208201905081810360008301526145e0818461458d565b905092915050565b6000819050919050565b6145fb816145e8565b811461460657600080fd5b50565b600081359050614618816145f2565b92915050565b600080604083850312156146355761463461446b565b5b6000614643858286016144be565b925050602061465485828601614609565b9150509250929050565b600080604083850312156146755761467461446b565b5b600061468385828601614609565b925050602061469485828601614609565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126146c3576146c261469e565b5b8235905067ffffffffffffffff8111156146e0576146df6146a3565b5b6020830191508360208202830111156146fc576146fb6146a8565b5b9250929050565b60008083601f8401126147195761471861469e565b5b8235905067ffffffffffffffff811115614736576147356146a3565b5b602083019150836020820283011115614752576147516146a8565b5b9250929050565b600080600080604085870312156147735761477261446b565b5b600085013567ffffffffffffffff81111561479157614790614470565b5b61479d878288016146ad565b9450945050602085013567ffffffffffffffff8111156147c0576147bf614470565b5b6147cc87828801614703565b925092505092959194509250565b6000819050919050565b60006147ff6147fa6147f584614475565b6147da565b614475565b9050919050565b6000614811826147e4565b9050919050565b600061482382614806565b9050919050565b61483381614818565b82525050565b600060208201905061484e600083018461482a565b92915050565b600061485f82614806565b9050919050565b61486f81614854565b82525050565b600060208201905061488a6000830184614866565b92915050565b614899816145e8565b82525050565b60006020820190506148b46000830184614890565b92915050565b6000806000606084860312156148d3576148d261446b565b5b60006148e1868287016144be565b93505060206148f2868287016144be565b925050604061490386828701614609565b9150509250925092565b600060ff82169050919050565b6149238161490d565b82525050565b600060208201905061493e600083018461491a565b92915050565b61494d81614500565b811461495857600080fd5b50565b60008135905061496a81614944565b92915050565b600080604083850312156149875761498661446b565b5b6000614995858286016144be565b92505060206149a68582860161495b565b9150509250929050565b6000602082840312156149c6576149c561446b565b5b60006149d484828501614609565b91505092915050565b6149e681614495565b82525050565b6000602082019050614a0160008301846149dd565b92915050565b6000819050919050565b614a1a81614a07565b82525050565b600061010082019050614a36600083018b6149dd565b614a43602083018a614a11565b614a506040830189614a11565b614a5d6060830188614890565b614a6a6080830187614890565b614a7760a0830186614890565b614a8460c0830185614890565b614a9160e0830184614890565b9998505050505050505050565b600080600060408486031215614ab757614ab661446b565b5b600084013567ffffffffffffffff811115614ad557614ad4614470565b5b614ae1868287016146ad565b93509350506020614af48682870161495b565b9150509250925092565b6000606082019050614b136000830186614890565b614b206020830185614890565b614b2d6040830184614890565b949350505050565b60008060408385031215614b4c57614b4b61446b565b5b6000614b5a858286016144be565b9250506020614b6b858286016144be565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bbc57607f821691505b602082108103614bcf57614bce614b75565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c0b602083614541565b9150614c1682614bd5565b602082019050919050565b60006020820190508181036000830152614c3a81614bfe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c7b826145e8565b9150614c86836145e8565b9250828201905080821115614c9e57614c9d614c41565b5b92915050565b7f4869676820666565730000000000000000000000000000000000000000000000600082015250565b6000614cda600983614541565b9150614ce582614ca4565b602082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b6000604082019050614d256000830185614890565b614d326020830184614890565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614d7e57614d7d61446b565b5b6000614d8c8482850161495b565b91505092915050565b6000614da08261490d565b915060ff8203614db357614db2614c41565b5b600182019050919050565b600081519050614dcd816145f2565b92915050565b600060208284031215614de957614de861446b565b5b6000614df784828501614dbe565b91505092915050565b6000614e0b82614806565b9050919050565b614e1b81614e00565b82525050565b6000604082019050614e366000830185614e12565b614e43602083018461450c565b9392505050565b600081519050614e5981614944565b92915050565b600060208284031215614e7557614e7461446b565b5b6000614e8384828501614e4a565b91505092915050565b7f757365204d61726b6574696e6700000000000000000000000000000000000000600082015250565b6000614ec2600d83614541565b9150614ecd82614e8c565b602082019050919050565b60006020820190508181036000830152614ef181614eb5565b9050919050565b6000604082019050614f0d60008301856149dd565b614f1a60208301846149dd565b9392505050565b7f4b414e47414c3a2054686520726f7574657220616c726561647920686173207460008201527f6861742061646472657373000000000000000000000000000000000000000000602082015250565b6000614f7d602b83614541565b9150614f8882614f21565b604082019050919050565b60006020820190508181036000830152614fac81614f70565b9050919050565b600080600060608486031215614fcc57614fcb61446b565b5b6000614fda86828701614dbe565b9350506020614feb86828701614dbe565b9250506040614ffc86828701614dbe565b9150509250925092565b600060808201905061501b6000830187614890565b6150286020830186614890565b6150356040830185614890565b6150426060830184614890565b95945050505050565b7f676173466f7250726f63657373696e67206d757374206265206265747765656e60008201527f203230302c30303020616e64203530302c303030000000000000000000000000602082015250565b60006150a7603483614541565b91506150b28261504b565b604082019050919050565b600060208201905081810360008301526150d68161509a565b9050919050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000615139602c83614541565b9150615144826150dd565b604082019050919050565b600060208201905081810360008301526151688161512c565b9050919050565b7f4b414e47414c3a20546865206469766964656e6420747261636b657220616c7260008201527f6561647920686173207468617420616464726573730000000000000000000000602082015250565b60006151cb603583614541565b91506151d68261516f565b604082019050919050565b600060208201905081810360008301526151fa816151be565b9050919050565b600081519050615210816144a7565b92915050565b60006020828403121561522c5761522b61446b565b5b600061523a84828501615201565b91505092915050565b7f4b414e47414c3a20546865206e6577206469766964656e6420747261636b657260008201527f206d757374206265206f776e656420627920746865206465706c6f796572206f60208201527f662074686520636f6e7472616374000000000000000000000000000000000000604082015250565b60006152c5604e83614541565b91506152d082615243565b606082019050919050565b600060208201905081810360008301526152f4816152b8565b9050919050565b7f726564756e64616e740000000000000000000000000000000000000000000000600082015250565b6000615331600983614541565b915061533c826152fb565b602082019050919050565b6000602082019050818103600083015261536081615324565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006153c3602583614541565b91506153ce82615367565b604082019050919050565b600060208201905081810360008301526153f2816153b6565b9050919050565b61540281614a07565b811461540d57600080fd5b50565b60008151905061541f816153f9565b92915050565b600080600080600080600080610100898b0312156154465761544561446b565b5b60006154548b828c01615201565b98505060206154658b828c01615410565b97505060406154768b828c01615410565b96505060606154878b828c01614dbe565b95505060806154988b828c01614dbe565b94505060a06154a98b828c01614dbe565b93505060c06154ba8b828c01614dbe565b92505060e06154cb8b828c01614dbe565b9150509295985092959890939650565b7f4b414e47414c3a204163636f756e7420697320616c726561647920746865207660008201527f616c7565206f6620276578636c75646564270000000000000000000000000000602082015250565b6000615537603283614541565b9150615542826154db565b604082019050919050565b600060208201905081810360008301526155668161552a565b9050919050565b6000615578826145e8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155aa576155a9614c41565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b6155d981614495565b82525050565b60006155eb83836155d0565b60208301905092915050565b600061560660208401846144be565b905092915050565b6000602082019050919050565b600061562783856155b5565b9350615632826155c6565b8060005b8581101561566b5761564882846155f7565b61565288826155df565b975061565d8361560e565b925050600181019050615636565b5085925050509392505050565b6000604082019050818103600083015261569381858761561b565b90506156a2602083018461450c565b949350505050565b60006156b5826145e8565b91506156c0836145e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156f9576156f8614c41565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061573e826145e8565b9150615749836145e8565b92508261575957615758615704565b5b828204905092915050565b600061576f826145e8565b915061577a836145e8565b925082820390508181111561579257615791614c41565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006157f4602683614541565b91506157ff82615798565b604082019050919050565b60006020820190508181036000830152615823816157e7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615886602483614541565b91506158918261582a565b604082019050919050565b600060208201905081810360008301526158b581615879565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615918602283614541565b9150615923826158bc565b604082019050919050565b600060208201905081810360008301526159478161590b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000615984601d83614541565b915061598f8261594e565b602082019050919050565b600060208201905081810360008301526159b381615977565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006159f0601383614541565b91506159fb826159ba565b602082019050919050565b60006020820190508181036000830152615a1f816159e3565b9050919050565b7f4d415820616d6f756e742068656c642072656163686564000000000000000000600082015250565b6000615a5c601783614541565b9150615a6782615a26565b602082019050919050565b60006020820190508181036000830152615a8b81615a4f565b9050919050565b600081905092915050565b50565b6000615aad600083615a92565b9150615ab882615a9d565b600082019050919050565b6000615ace82615aa0565b9150819050919050565b7f4661696c656420455448205472616e7366657200000000000000000000000000600082015250565b6000615b0e601383614541565b9150615b1982615ad8565b602082019050919050565b60006020820190508181036000830152615b3d81615b01565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615ba0602583614541565b9150615bab82615b44565b604082019050919050565b60006020820190508181036000830152615bcf81615b93565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615c32602383614541565b9150615c3d82615bd6565b604082019050919050565b60006020820190508181036000830152615c6181615c25565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615cc4602683614541565b9150615ccf82615c68565b604082019050919050565b60006020820190508181036000830152615cf381615cb7565b9050919050565b6000604082019050615d0f60008301856149dd565b615d1c6020830184614890565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000615d77615d72615d6d84615d52565b6147da565b6145e8565b9050919050565b615d8781615d5c565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b6000615dc082615d8d565b615dca81856155b5565b9350615dd583615d98565b8060005b83811015615e06578151615ded88826155df565b9750615df883615da8565b925050600181019050615dd9565b5085935050505092915050565b600060a082019050615e286000830188614890565b615e356020830187615d7e565b8181036040830152615e478186615db5565b9050615e5660608301856149dd565b615e636080830184614890565b969550505050505056fea264697066735822122029f650d03507d7d4d228a93088ca9130cb013d115ac9bd9c6997dd373bf6885e64736f6c6343000810003360a06040523480156200001157600080fd5b5060405162004047380380620040478339818101604052810190620000379190620002ae565b6040518060400160405280601581526020017f4b616e67616c2052657761726420547261636b657200000000000000000000008152506040518060400160405280601681526020017f4b414e47414c5f4469766964656e64547261636b6572000000000000000000008152508282828160039081620000b7919062000565565b508060049081620000c9919062000565565b505050620000ec620000e06200013b60201b60201c565b6200014360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505050610e106011819055508160128190555050506200064c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b6000819050919050565b62000223816200020e565b81146200022f57600080fd5b50565b600081519050620002438162000218565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002768262000249565b9050919050565b620002888162000269565b81146200029457600080fd5b50565b600081519050620002a8816200027d565b92915050565b60008060408385031215620002c857620002c762000209565b5b6000620002d88582860162000232565b9250506020620002eb8582860162000297565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200037757607f821691505b6020821081036200038d576200038c6200032f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003b8565b620004038683620003b8565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000446620004406200043a846200020e565b6200041b565b6200020e565b9050919050565b6000819050919050565b620004628362000425565b6200047a62000471826200044d565b848454620003c5565b825550505050565b600090565b6200049162000482565b6200049e81848462000457565b505050565b5b81811015620004c657620004ba60008262000487565b600181019050620004a4565b5050565b601f8211156200051557620004df8162000393565b620004ea84620003a8565b81016020851015620004fa578190505b620005126200050985620003a8565b830182620004a3565b50505b505050565b600082821c905092915050565b60006200053a600019846008026200051a565b1980831691505092915050565b600062000555838362000527565b9150826002028217905092915050565b6200057082620002f5565b67ffffffffffffffff8111156200058c576200058b62000300565b5b6200059882546200035e565b620005a5828285620004ca565b600060209050601f831160018114620005dd5760008415620005c8578287015190505b620005d4858262000547565b86555062000644565b601f198416620005ed8662000393565b60005b828110156200061757848901518255600182019150602085019450602081019050620005f0565b8683101562000637578489015162000633601f89168262000527565b8355505b6001600288020188555050505b505050505050565b6080516139d86200066f60003960008181611905015261222c01526139d86000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063715018a611610130578063bc4c4b37116100b8578063e98030c71161007c578063e98030c7146106f8578063f2fde38b14610714578063f7c618c114610730578063fbcbc0f11461074e578063ffb2c4791461078557610232565b8063bc4c4b3714610640578063be10b61414610670578063dd62ed3e1461068e578063e30443bc146106be578063e7841ec0146106da57610232565b806395d89b41116100ff57806395d89b4114610562578063a457c2d714610580578063a8b9d240146105b0578063a9059cbb146105e0578063aafd847a1461061057610232565b8063715018a6146104ec57806385a6b3ae146104f65780638da5cb5b1461051457806391b89fba1461053257610232565b80633009a609116101be5780634e7b827f116101825780634e7b827f1461042d5780635183d6fd1461045d5780636a474002146104945780636f2789ec1461049e57806370a08231146104bc57610232565b80633009a60914610389578063313ce567146103a757806331e79db0146103c55780633243c791146103e157806339509351146103fd57610232565b806318160ddd1161020557806318160ddd146102bf578063226cfa3d146102dd57806323b872dd1461030d57806327ce01471461033d578063286b3aa01461036d57610232565b806306fdde0314610237578063095ea7b31461025557806309bbedde146102855780630dcb2e89146102a3575b600080fd5b61023f6107b7565b60405161024c919061294f565b60405180910390f35b61026f600480360381019061026a9190612a0a565b610849565b60405161027c9190612a65565b60405180910390f35b61028d61086c565b60405161029a9190612a8f565b60405180910390f35b6102bd60048036038101906102b89190612aaa565b61087c565b005b6102c7610946565b6040516102d49190612a8f565b60405180910390f35b6102f760048036038101906102f29190612ad7565b610950565b6040516103049190612a8f565b60405180910390f35b61032760048036038101906103229190612b04565b610968565b6040516103349190612a65565b60405180910390f35b61035760048036038101906103529190612ad7565b610997565b6040516103649190612a8f565b60405180910390f35b61038760048036038101906103829190612aaa565b610a3a565b005b610391610ac0565b60405161039e9190612a8f565b60405180910390f35b6103af610ac6565b6040516103bc9190612b73565b60405180910390f35b6103df60048036038101906103da9190612ad7565b610acf565b005b6103fb60048036038101906103f69190612aaa565b610cb7565b005b61041760048036038101906104129190612a0a565b610e0d565b6040516104249190612a65565b60405180910390f35b61044760048036038101906104429190612ad7565b610e44565b6040516104549190612a65565b60405180910390f35b61047760048036038101906104729190612aaa565b610e64565b60405161048b989796959493929190612bb6565b60405180910390f35b61049c610fd9565b005b6104a661101c565b6040516104b39190612a8f565b60405180910390f35b6104d660048036038101906104d19190612ad7565b611022565b6040516104e39190612a8f565b60405180910390f35b6104f461106a565b005b6104fe6110f2565b60405161050b9190612a8f565b60405180910390f35b61051c6110f8565b6040516105299190612c34565b60405180910390f35b61054c60048036038101906105479190612ad7565b611122565b6040516105599190612a8f565b60405180910390f35b61056a611134565b604051610577919061294f565b60405180910390f35b61059a60048036038101906105959190612a0a565b6111c6565b6040516105a79190612a65565b60405180910390f35b6105ca60048036038101906105c59190612ad7565b61123d565b6040516105d79190612a8f565b60405180910390f35b6105fa60048036038101906105f59190612a0a565b6112a0565b6040516106079190612a65565b60405180910390f35b61062a60048036038101906106259190612ad7565b6112c3565b6040516106379190612a8f565b60405180910390f35b61065a60048036038101906106559190612c7b565b61130c565b6040516106679190612a65565b60405180910390f35b61067861144b565b6040516106859190612a8f565b60405180910390f35b6106a860048036038101906106a39190612cbb565b611451565b6040516106b59190612a8f565b60405180910390f35b6106d860048036038101906106d39190612a0a565b6114d8565b005b6106e26116b4565b6040516106ef9190612a8f565b60405180910390f35b610712600480360381019061070d9190612aaa565b6116be565b005b61072e60048036038101906107299190612ad7565b61180c565b005b610738611903565b6040516107459190612c34565b60405180910390f35b61076860048036038101906107639190612ad7565b611927565b60405161077c989796959493929190612bb6565b60405180910390f35b61079f600480360381019061079a9190612aaa565b611b06565b6040516107ae93929190612cfb565b60405180910390f35b6060600380546107c690612d61565b80601f01602080910402602001604051908101604052809291908181526020018280546107f290612d61565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050905090565b600080610854611c97565b9050610861818585611c9f565b600191505092915050565b6000600a60000180549050905090565b610884611c97565b73ffffffffffffffffffffffffffffffffffffffff166108a26110f8565b73ffffffffffffffffffffffffffffffffffffffff16146108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ef90612dde565b60405180910390fd5b601254810361093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390612e96565b60405180910390fd5b8060128190555050565b6000600254905090565b60106020528060005260406000206000915090505481565b600080610973611c97565b9050610980858285611e68565b61098b858585611ef4565b60019150509392505050565b6000700100000000000000000000000000000000610a29610a24600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a16610a11610a0088611022565b600654611f3a90919063ffffffff16565b611f50565b611f6d90919063ffffffff16565b611fb8565b610a339190612f14565b9050919050565b610a42611c97565b73ffffffffffffffffffffffffffffffffffffffff16610a606110f8565b73ffffffffffffffffffffffffffffffffffffffff1614610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad90612dde565b60405180910390fd5b80600e8190555050565b600e5481565b60006012905090565b610ad7611c97565b73ffffffffffffffffffffffffffffffffffffffff16610af56110f8565b73ffffffffffffffffffffffffffffffffffffffff1614610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290612dde565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ba257600080fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610c05816000611fcf565b600a7300fe6a248349b7dc63f632cff30d9202d2389647634c60db9c9091836040518363ffffffff1660e01b8152600401610c41929190612f5b565b60006040518083038186803b158015610c5957600080fd5b505af4158015610c6d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b610cbf611c97565b73ffffffffffffffffffffffffffffffffffffffff16610cdd6110f8565b73ffffffffffffffffffffffffffffffffffffffff1614610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90612dde565b60405180910390fd5b6000610d3d610946565b11610d4757600080fd5b6000811115610e0a57610d9a610d5b610946565b610d7f70010000000000000000000000000000000084611f3a90919063ffffffff16565b610d899190612f14565b60065461203c90919063ffffffff16565b6006819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651182604051610de69190612a8f565b60405180910390a2610e038160075461203c90919063ffffffff16565b6007819055505b50565b600080610e18611c97565b9050610e39818585610e2a8589611451565b610e349190612f84565b611c9f565b600191505092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600080600080600080600080600a7300fe6a248349b7dc63f632cff30d9202d238964763deb3d89690916040518263ffffffff1660e01b8152600401610eaa9190612fb8565b602060405180830381865af4158015610ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eeb9190612fe8565b8910610f325760007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600080600080600097509750975097509750975097509750610fce565b6000600a7300fe6a248349b7dc63f632cff30d9202d238964763d1aa9e7e90918c6040518363ffffffff1660e01b8152600401610f70929190613024565b602060405180830381865af4158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb19190613062565b9050610fbc81611927565b98509850985098509850985098509850505b919395975091939597565b600061101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190613127565b60405180910390fd5b565b60115481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611072611c97565b73ffffffffffffffffffffffffffffffffffffffff166110906110f8565b73ffffffffffffffffffffffffffffffffffffffff16146110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90612dde565b60405180910390fd5b6110f06000612052565b565b60075481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061112d8261123d565b9050919050565b60606004805461114390612d61565b80601f016020809104026020016040519081016040528092919081815260200182805461116f90612d61565b80156111bc5780601f10611191576101008083540402835291602001916111bc565b820191906000526020600020905b81548152906001019060200180831161119f57829003601f168201915b5050505050905090565b6000806111d1611c97565b905060006111df8286611451565b905083811015611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b906131b9565b60405180910390fd5b6112318286868403611c9f565b60019250505092915050565b6000611299600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461128b84610997565b61211890919063ffffffff16565b9050919050565b6000806112ab611c97565b90506112b8818585611ef4565b600191505092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611316611c97565b73ffffffffffffffffffffffffffffffffffffffff166113346110f8565b73ffffffffffffffffffffffffffffffffffffffff161461138a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138190612dde565b60405180910390fd5b60006113958461212e565b9050600081111561143f5742601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508215158473ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf0928360405161142d9190612a8f565b60405180910390a36001915050611445565b60009150505b92915050565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6114e0611c97565b73ffffffffffffffffffffffffffffffffffffffff166114fe6110f8565b73ffffffffffffffffffffffffffffffffffffffff1614611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90612dde565b60405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116b057601254811061162b576115b88282611fcf565b600a7300fe6a248349b7dc63f632cff30d9202d238964763bc2b405c909184846040518463ffffffff1660e01b81526004016115f6939291906131d9565b60006040518083038186803b15801561160e57600080fd5b505af4158015611622573d6000803e3d6000fd5b505050506116a3565b611636826000611fcf565b600a7300fe6a248349b7dc63f632cff30d9202d2389647634c60db9c9091846040518363ffffffff1660e01b8152600401611672929190612f5b565b60006040518083038186803b15801561168a57600080fd5b505af415801561169e573d6000803e3d6000fd5b505050505b6116ae82600161130c565b505b5050565b6000600e54905090565b6116c6611c97565b73ffffffffffffffffffffffffffffffffffffffff166116e46110f8565b73ffffffffffffffffffffffffffffffffffffffff161461173a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173190612dde565b60405180910390fd5b610e10811015801561174f5750620151808111155b61178e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178590613282565b60405180910390fd5b60115481036117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990613314565b60405180910390fd5b601154817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060118190555050565b611814611c97565b73ffffffffffffffffffffffffffffffffffffffff166118326110f8565b73ffffffffffffffffffffffffffffffffffffffff1614611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90612dde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee906133a6565b60405180910390fd5b61190081612052565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080600080600080889750600a7300fe6a248349b7dc63f632cff30d9202d23896476317e142d190918a6040518363ffffffff1660e01b8152600401611972929190612f5b565b602060405180830381865af415801561198f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b391906133f2565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff955060008712611a5857600e54871115611a06576119ff600e548861238490919063ffffffff16565b9550611a57565b6000600e54600a6000018054905011611a20576000611a3e565b611a3d600e54600a6000018054905061211890919063ffffffff16565b5b9050611a538189611f6d90919063ffffffff16565b9650505b5b611a618861123d565b9450611a6c88610997565b9350601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054925060008311611abf576000611ad5565b611ad46011548461203c90919063ffffffff16565b5b9150428211611ae5576000611af9565b611af8428361211890919063ffffffff16565b5b9050919395975091939597565b600080600080600a60000180549050905060008103611b3157600080600e5493509350935050611c90565b6000600e5490506000805a90506000805b8984108015611b5057508582105b15611c77578480611b609061341f565b955050600a600001805490508510611b7757600094505b6000600a6000018681548110611b9057611b8f613467565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611c05601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123cf565b15611c2a57611c1581600161130c565b15611c29578180611c259061341f565b9250505b5b8280611c359061341f565b93505060005a905080851115611c6d57611c6a611c5b828761211890919063ffffffff16565b8761203c90919063ffffffff16565b95505b8094505050611b42565b84600e819055508181600e549850985098505050505050505b9193909250565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0590613508565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d749061359a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e5b9190612a8f565b60405180910390a3505050565b6000611e748484611451565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611eee5781811015611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed790613606565b60405180910390fd5b611eed8484848403611c9f565b5b50505050565b6000611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90613672565b60405180910390fd5b505050565b60008183611f489190613692565b905092915050565b6000808290506000811215611f6457600080fd5b80915050919050565b6000808284611f7c91906136ec565b905060008312158015611f8f5750838112155b80611fa55750600083128015611fa457508381125b5b611fae57600080fd5b8091505092915050565b600080821215611fc757600080fd5b819050919050565b6000611fda83611022565b90508082111561200b576000611ff9828461211890919063ffffffff16565b90506120058482612402565b50612037565b80821015612036576000612028838361211890919063ffffffff16565b905061203484826124c1565b505b5b505050565b6000818361204a9190612f84565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836121269190613730565b905092915050565b60008061213a8361123d565b905060008111156123795761219781600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461203c90919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040516122209190612a8f565b60405180910390a260007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401612285929190613764565b6020604051808303816000875af11580156122a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c891906137a2565b90508061236f5761232182600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461211890919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060009250505061237f565b819250505061237f565b60009150505b919050565b600080828461239391906137cf565b9050600083121580156123a65750838113155b806123bc57506000831280156123bb57508381135b5b6123c557600080fd5b8091505092915050565b6000428211156123e257600090506123fd565b6011546123f8834261211890919063ffffffff16565b101590505b919050565b61240c8282612580565b61247a61242c61242783600654611f3a90919063ffffffff16565b611f50565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461238490919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6124cb82826126df565b6125396124eb6124e683600654611f3a90919063ffffffff16565b611f50565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f6d90919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e69061385e565b60405180910390fd5b6125fb600083836128b5565b806002600082825461260d9190612f84565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126629190612f84565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126c79190612a8f565b60405180910390a36126db600083836128ba565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361274e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612745906138f0565b60405180910390fd5b61275a826000836128b5565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d790613982565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546128379190613730565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161289c9190612a8f565b60405180910390a36128b0836000846128ba565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128f95780820151818401526020810190506128de565b60008484015250505050565b6000601f19601f8301169050919050565b6000612921826128bf565b61292b81856128ca565b935061293b8185602086016128db565b61294481612905565b840191505092915050565b600060208201905081810360008301526129698184612916565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129a182612976565b9050919050565b6129b181612996565b81146129bc57600080fd5b50565b6000813590506129ce816129a8565b92915050565b6000819050919050565b6129e7816129d4565b81146129f257600080fd5b50565b600081359050612a04816129de565b92915050565b60008060408385031215612a2157612a20612971565b5b6000612a2f858286016129bf565b9250506020612a40858286016129f5565b9150509250929050565b60008115159050919050565b612a5f81612a4a565b82525050565b6000602082019050612a7a6000830184612a56565b92915050565b612a89816129d4565b82525050565b6000602082019050612aa46000830184612a80565b92915050565b600060208284031215612ac057612abf612971565b5b6000612ace848285016129f5565b91505092915050565b600060208284031215612aed57612aec612971565b5b6000612afb848285016129bf565b91505092915050565b600080600060608486031215612b1d57612b1c612971565b5b6000612b2b868287016129bf565b9350506020612b3c868287016129bf565b9250506040612b4d868287016129f5565b9150509250925092565b600060ff82169050919050565b612b6d81612b57565b82525050565b6000602082019050612b886000830184612b64565b92915050565b612b9781612996565b82525050565b6000819050919050565b612bb081612b9d565b82525050565b600061010082019050612bcc600083018b612b8e565b612bd9602083018a612ba7565b612be66040830189612ba7565b612bf36060830188612a80565b612c006080830187612a80565b612c0d60a0830186612a80565b612c1a60c0830185612a80565b612c2760e0830184612a80565b9998505050505050505050565b6000602082019050612c496000830184612b8e565b92915050565b612c5881612a4a565b8114612c6357600080fd5b50565b600081359050612c7581612c4f565b92915050565b60008060408385031215612c9257612c91612971565b5b6000612ca0858286016129bf565b9250506020612cb185828601612c66565b9150509250929050565b60008060408385031215612cd257612cd1612971565b5b6000612ce0858286016129bf565b9250506020612cf1858286016129bf565b9150509250929050565b6000606082019050612d106000830186612a80565b612d1d6020830185612a80565b612d2a6040830184612a80565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d7957607f821691505b602082108103612d8c57612d8b612d32565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612dc86020836128ca565b9150612dd382612d92565b602082019050919050565b60006020820190508181036000830152612df781612dbb565b9050919050565b7f4e6577206d696d696d756d2062616c616e636520666f72206469766964656e6460008201527f2063616e6e6f742062652073616d652061732063757272656e74206d696e696d60208201527f756d2062616c616e636500000000000000000000000000000000000000000000604082015250565b6000612e80604a836128ca565b9150612e8b82612dfe565b606082019050919050565b60006020820190508181036000830152612eaf81612e73565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f1f826129d4565b9150612f2a836129d4565b925082612f3a57612f39612eb6565b5b828204905092915050565b8082525050565b612f5581612996565b82525050565b6000604082019050612f706000830185612f45565b612f7d6020830184612f4c565b9392505050565b6000612f8f826129d4565b9150612f9a836129d4565b9250828201905080821115612fb257612fb1612ee5565b5b92915050565b6000602082019050612fcd6000830184612f45565b92915050565b600081519050612fe2816129de565b92915050565b600060208284031215612ffe57612ffd612971565b5b600061300c84828501612fd3565b91505092915050565b61301e816129d4565b82525050565b60006040820190506130396000830185612f45565b6130466020830184613015565b9392505050565b60008151905061305c816129a8565b92915050565b60006020828403121561307857613077612971565b5b60006130868482850161304d565b91505092915050565b7f77697468647261774469766964656e642064697361626c65642e20557365207460008201527f68652027636c61696d272066756e6374696f6e206f6e20746865206d61696e2060208201527f636f6e74726163742e0000000000000000000000000000000000000000000000604082015250565b60006131116049836128ca565b915061311c8261308f565b606082019050919050565b6000602082019050818103600083015261314081613104565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131a36025836128ca565b91506131ae82613147565b604082019050919050565b600060208201905081810360008301526131d281613196565b9050919050565b60006060820190506131ee6000830186612f45565b6131fb6020830185612f4c565b6132086040830184613015565b949350505050565b7f636c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b600061326c6033836128ca565b915061327782613210565b604082019050919050565b6000602082019050818103600083015261329b8161325f565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b60006132fe6025836128ca565b9150613309826132a2565b604082019050919050565b6000602082019050818103600083015261332d816132f1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133906026836128ca565b915061339b82613334565b604082019050919050565b600060208201905081810360008301526133bf81613383565b9050919050565b6133cf81612b9d565b81146133da57600080fd5b50565b6000815190506133ec816133c6565b92915050565b60006020828403121561340857613407612971565b5b6000613416848285016133dd565b91505092915050565b600061342a826129d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361345c5761345b612ee5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134f26024836128ca565b91506134fd82613496565b604082019050919050565b60006020820190508181036000830152613521816134e5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135846022836128ca565b915061358f82613528565b604082019050919050565b600060208201905081810360008301526135b381613577565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006135f0601d836128ca565b91506135fb826135ba565b602082019050919050565b6000602082019050818103600083015261361f816135e3565b9050919050565b7f4e6f207472616e736665727320616c6c6f776564000000000000000000000000600082015250565b600061365c6014836128ca565b915061366782613626565b602082019050919050565b6000602082019050818103600083015261368b8161364f565b9050919050565b600061369d826129d4565b91506136a8836129d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136e1576136e0612ee5565b5b828202905092915050565b60006136f782612b9d565b915061370283612b9d565b92508282019050828112156000831216838212600084121516171561372a57613729612ee5565b5b92915050565b600061373b826129d4565b9150613746836129d4565b925082820390508181111561375e5761375d612ee5565b5b92915050565b60006040820190506137796000830185612b8e565b6137866020830184612a80565b9392505050565b60008151905061379c81612c4f565b92915050565b6000602082840312156137b8576137b7612971565b5b60006137c68482850161378d565b91505092915050565b60006137da82612b9d565b91506137e583612b9d565b925082820390508181126000841216828213600085121516171561380c5761380b612ee5565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613848601f836128ca565b915061385382613812565b602082019050919050565b600060208201905081810360008301526138778161383b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006138da6021836128ca565b91506138e58261387e565b604082019050919050565b60006020820190508181036000830152613909816138cd565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061396c6022836128ca565b915061397782613910565b604082019050919050565b6000602082019050818103600083015261399b8161395f565b905091905056fea2646970667358221220f9f6feab88370046c402beacf2af47b377deb74817e898fa3beb15d8a36b776f64736f6c63430008100033000000000000000000000000cc416144ec0f6dfe12509410e610cda7deb21b37

Deployed Bytecode

0x6080604052600436106103a65760003560e01c8063700bb191116101e7578063a5ece9411161010d578063d40a9c4f116100a0578063f27fd2541161006f578063f27fd25414610df2578063f2fde38b14610e36578063f9f92be414610e5f578063fe33b30214610e9c576103ad565b8063d40a9c4f14610d36578063dd62ed3e14610d61578063e7841ec014610d9e578063e98030c714610dc9576103ad565b8063c0246668116100dc578063c024666814610c7a578063c13d995c14610ca3578063c492f04614610cce578063d19a550914610cf7576103ad565b8063a5ece94114610b91578063a8b9d24014610bbc578063a9059cbb14610bf9578063ad56c13c14610c36576103ad565b806388bdd9be116101855780639c1b8af5116101545780639c1b8af514610ad5578063a07dbdf514610b00578063a26579ad14610b29578063a457c2d714610b54576103ad565b806388bdd9be14610a2b5780638b42426714610a545780638da5cb5b14610a7f57806395d89b4114610aaa576103ad565b8063728f8eea116101c1578063728f8eea146109835780638187f516146109ae57806385141a77146109d7578063871c128d14610a02576103ad565b8063700bb1911461090657806370a082311461092f578063715018a61461096c576103ad565b8063360bfd54116102cc578063566c40d51161026a57806365b8dbc01161023957806365b8dbc01461084a5780636843cd84146108735780636ae688a9146108b05780636b67c4df146108db576103ad565b8063566c40d51461078e57806359cd9031146107cb5780635d098b38146107f657806364b0f6531461081f576103ad565b80634e71d92d116102a65780634e71d92d146106f85780634ed569341461070f5780634fbee1931461073a57806351bc3c8514610777576103ad565b8063360bfd54146106675780633950935114610692578063455a4396146106cf576103ad565b80631732cded11610344578063313ce56711610313578063313ce567146105bd57806331e79db0146105e857806332cb6b0c146106115780633410fe6e1461063c576103ad565b80631732cded146104ff57806318160ddd1461052a57806323b872dd1461055557806330bb4cff14610592576103ad565b80630b78f9c0116103805780630b78f9c014610457578063112d08fe146104805780631582358e146104a95780631694505e146104d4576103ad565b8063035f09f1146103b257806306fdde03146103ef578063095ea7b31461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d491906144d3565b610ed9565b6040516103e6919061451b565b60405180910390f35b3480156103fb57600080fd5b50610404610ef9565b60405161041191906145c6565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c919061461e565b610f8b565b60405161044e919061451b565b60405180910390f35b34801561046357600080fd5b5061047e6004803603810190610479919061465e565b610fae565b005b34801561048c57600080fd5b506104a760048036038101906104a29190614759565b6110c4565b005b3480156104b557600080fd5b506104be61115f565b6040516104cb9190614839565b60405180910390f35b3480156104e057600080fd5b506104e9611185565b6040516104f69190614875565b60405180910390f35b34801561050b57600080fd5b506105146111ab565b604051610521919061451b565b60405180910390f35b34801561053657600080fd5b5061053f6111be565b60405161054c919061489f565b60405180910390f35b34801561056157600080fd5b5061057c600480360381019061057791906148ba565b6111c8565b604051610589919061451b565b60405180910390f35b34801561059e57600080fd5b506105a76111f7565b6040516105b4919061489f565b60405180910390f35b3480156105c957600080fd5b506105d261128f565b6040516105df9190614929565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a91906144d3565b611298565b005b34801561061d57600080fd5b506106266113a4565b604051610633919061489f565b60405180910390f35b34801561064857600080fd5b506106516113b5565b60405161065e919061489f565b60405180910390f35b34801561067357600080fd5b5061067c6113ba565b604051610689919061489f565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b4919061461e565b6113c0565b6040516106c6919061451b565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f19190614970565b6113f7565b005b34801561070457600080fd5b5061070d6114ce565b005b34801561071b57600080fd5b50610724611572565b604051610731919061489f565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c91906144d3565b611578565b60405161076e919061451b565b60405180910390f35b34801561078357600080fd5b5061078c6115ce565b005b34801561079a57600080fd5b506107b560048036038101906107b091906144d3565b61160e565b6040516107c2919061451b565b60405180910390f35b3480156107d757600080fd5b506107e061162e565b6040516107ed919061489f565b60405180910390f35b34801561080257600080fd5b5061081d600480360381019061081891906144d3565b61163c565b005b34801561082b57600080fd5b506108346117c6565b604051610841919061489f565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c91906144d3565b61185e565b005b34801561087f57600080fd5b5061089a600480360381019061089591906144d3565b611a2a565b6040516108a7919061489f565b60405180910390f35b3480156108bc57600080fd5b506108c5611acf565b6040516108d2919061489f565b60405180910390f35b3480156108e757600080fd5b506108f0611ad5565b6040516108fd919061489f565b60405180910390f35b34801561091257600080fd5b5061092d600480360381019061092891906149b0565b611adb565b005b34801561093b57600080fd5b50610956600480360381019061095191906144d3565b611be2565b604051610963919061489f565b60405180910390f35b34801561097857600080fd5b50610981611c2b565b005b34801561098f57600080fd5b50610998611cb3565b6040516109a5919061489f565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d091906144d3565b611cca565b005b3480156109e357600080fd5b506109ec611e03565b6040516109f991906149ec565b60405180910390f35b348015610a0e57600080fd5b50610a296004803603810190610a2491906149b0565b611e09565b005b348015610a3757600080fd5b50610a526004803603810190610a4d91906144d3565b611f58565b005b348015610a6057600080fd5b50610a696123db565b604051610a76919061489f565b60405180910390f35b348015610a8b57600080fd5b50610a946123e1565b604051610aa191906149ec565b60405180910390f35b348015610ab657600080fd5b50610abf61240a565b604051610acc91906145c6565b60405180910390f35b348015610ae157600080fd5b50610aea61249c565b604051610af7919061489f565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b229190614970565b6124a2565b005b348015610b3557600080fd5b50610b3e612659565b604051610b4b919061489f565b60405180910390f35b348015610b6057600080fd5b50610b7b6004803603810190610b76919061461e565b6126f1565b604051610b88919061451b565b60405180910390f35b348015610b9d57600080fd5b50610ba6612768565b604051610bb391906149ec565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde91906144d3565b61278e565b604051610bf0919061489f565b60405180910390f35b348015610c0557600080fd5b50610c206004803603810190610c1b919061461e565b612833565b604051610c2d919061451b565b60405180910390f35b348015610c4257600080fd5b50610c5d6004803603810190610c5891906144d3565b612856565b604051610c71989796959493929190614a20565b60405180910390f35b348015610c8657600080fd5b50610ca16004803603810190610c9c9190614970565b61291a565b005b348015610caf57600080fd5b50610cb8612ad1565b604051610cc5919061489f565b60405180910390f35b348015610cda57600080fd5b50610cf56004803603810190610cf09190614a9e565b612ad7565b005b348015610d0357600080fd5b50610d1e6004803603810190610d1991906149b0565b612c33565b604051610d2d93929190614afe565b60405180910390f35b348015610d4257600080fd5b50610d4b612c96565b604051610d58919061489f565b60405180910390f35b348015610d6d57600080fd5b50610d886004803603810190610d839190614b35565b612c9c565b604051610d95919061489f565b60405180910390f35b348015610daa57600080fd5b50610db3612d23565b604051610dc0919061489f565b60405180910390f35b348015610dd557600080fd5b50610df06004803603810190610deb91906149b0565b612dbb565b005b348015610dfe57600080fd5b50610e196004803603810190610e1491906149b0565b612ec7565b604051610e2d989796959493929190614a20565b60405180910390f35b348015610e4257600080fd5b50610e5d6004803603810190610e5891906144d3565b612f8b565b005b348015610e6b57600080fd5b50610e866004803603810190610e8191906144d3565b613082565b604051610e93919061451b565b60405180910390f35b348015610ea857600080fd5b50610ec36004803603810190610ebe91906144d3565b6130a2565b604051610ed0919061451b565b60405180910390f35b60126020528060005260406000206000915054906101000a900460ff1681565b606060048054610f0890614ba4565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3490614ba4565b8015610f815780601f10610f5657610100808354040283529160200191610f81565b820191906000526020600020905b815481529060010190602001808311610f6457829003601f168201915b5050505050905090565b600080610f966130c2565b9050610fa38185856130ca565b600191505092915050565b610fb66130c2565b73ffffffffffffffffffffffffffffffffffffffff16610fd46123e1565b73ffffffffffffffffffffffffffffffffffffffff161461102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190614c21565b60405180910390fd5b601981836110389190614c70565b1115611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090614cf0565b60405180910390fd5b81600781905550806008819055507f4d32f38862d5eb71edfefb7955873bd55920dc98159b6f53f8be62fbf0bebb4b82826040516110b8929190614d10565b60405180910390a15050565b8181905084849050146110d657600080fd5b60005b848490508160ff1610156111585761114585858360ff16818110611100576110ff614d39565b5b905060200201602081019061111591906144d3565b84848460ff1681811061112b5761112a614d39565b5b90506020020160208101906111409190614d68565b6124a2565b808061115090614d95565b9150506110d9565b5050505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900460ff1681565b6000600354905090565b6000806111d36130c2565b90506111e0858285613293565b6111eb85858561331f565b60019150509392505050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190614dd3565b905090565b60006012905090565b6112a06130c2565b73ffffffffffffffffffffffffffffffffffffffff166112be6123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90614c21565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b815260040161136f91906149ec565b600060405180830381600087803b15801561138957600080fd5b505af115801561139d573d6000803e3d6000fd5b5050505050565b6c01431e0fae6d7217caa000000081565b606481565b600a5481565b6000806113cb6130c2565b90506113ec8185856113dd8589612c9c565b6113e79190614c70565b6130ca565b600191505092915050565b6113ff6130c2565b73ffffffffffffffffffffffffffffffffffffffff1661141d6123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90614c21565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc4c4b373360006040518363ffffffff1660e01b815260040161152c929190614e21565b6020604051808303816000875af115801561154b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156f9190614e5f565b50565b600b5481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6001600e60006101000a81548160ff0219169083151502179055506115f1613777565b6000600e60006101000a81548160ff021916908315150217905550565b60136020528060005260406000206000915054906101000a900460ff1681565b69152d02c7e14af680000081565b6116446130c2565b73ffffffffffffffffffffffffffffffffffffffff166116626123e1565b73ffffffffffffffffffffffffffffffffffffffff16146116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af90614c21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90614ed8565b60405180910390fd5b7f747f0121a55c3cbfd440ca2324ff63f5c282ceb804ada2dc7b81efdfba9788c581600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161177a929190614ef8565b60405180910390a180600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166309bbedde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611835573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118599190614dd3565b905090565b6118666130c2565b73ffffffffffffffffffffffffffffffffffffffff166118846123e1565b73ffffffffffffffffffffffffffffffffffffffff16146118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d190614c21565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190614f93565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401611a8791906149ec565b602060405180830381865afa158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190614dd3565b9050919050565b600c5481565b60085481565b6000806000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479856040518263ffffffff1660e01b8152600401611b3b919061489f565b6060604051808303816000875af1158015611b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7e9190614fb3565b9250925092503373ffffffffffffffffffffffffffffffffffffffff16600015157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a9885858589604051611bd49493929190615006565b60405180910390a350505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c336130c2565b73ffffffffffffffffffffffffffffffffffffffff16611c516123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9e90614c21565b60405180910390fd5b611cb16000613883565b565b6000600854600754611cc59190614c70565b905090565b611cd26130c2565b73ffffffffffffffffffffffffffffffffffffffff16611cf06123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90614c21565b60405180910390fd5b601560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d9d57600080fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e008160016124a2565b50565b61dead81565b611e116130c2565b73ffffffffffffffffffffffffffffffffffffffff16611e2f6123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c90614c21565b60405180910390fd5b62030d408110158015611e9b57506207a1208111155b611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed1906150bd565b60405180910390fd5b600d548103611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f159061514f565b60405180910390fd5b600d54817f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db760405160405180910390a380600d8190555050565b611f606130c2565b73ffffffffffffffffffffffffffffffffffffffff16611f7e6123e1565b73ffffffffffffffffffffffffffffffffffffffff1614611fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcb90614c21565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b906151e1565b60405180910390fd5b60008190503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ef9190615216565b73ffffffffffffffffffffffffffffffffffffffff1614612145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213c906152db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b815260040161217e91906149ec565b600060405180830381600087803b15801561219857600080fd5b505af11580156121ac573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166331e79db0306040518263ffffffff1660e01b81526004016121e991906149ec565b600060405180830381600087803b15801561220357600080fd5b505af1158015612217573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166331e79db061223f6123e1565b6040518263ffffffff1660e01b815260040161225b91906149ec565b600060405180830381600087803b15801561227557600080fd5b505af1158015612289573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166331e79db0601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016122e891906149ec565b600060405180830381600087803b15801561230257600080fd5b505af1158015612316573d6000803e3d6000fd5b50505050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a860405160405180910390a380601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461241990614ba4565b80601f016020809104026020016040519081016040528092919081815260200182805461244590614ba4565b80156124925780601f1061246757610100808354040283529160200191612492565b820191906000526020600020905b81548152906001019060200180831161247557829003601f168201915b5050505050905090565b600d5481565b6124aa6130c2565b73ffffffffffffffffffffffffffffffffffffffff166124c86123e1565b73ffffffffffffffffffffffffffffffffffffffff161461251e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251590614c21565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a790615347565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fa256182c37c34ad81def7e7101e3433459c1837891f974dcf03b7375b8fba2f08260405161264d919061451b565b60405180910390a25050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f2789ec6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ec9190614dd3565b905090565b6000806126fc6130c2565b9050600061270a8286612c9c565b90508381101561274f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612746906153d9565b60405180910390fd5b61275c82868684036130ca565b60019250505092915050565b600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b81526004016127eb91906149ec565b602060405180830381865afa158015612808573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282c9190614dd3565b9050919050565b60008061283e6130c2565b905061284b81858561331f565b600191505092915050565b600080600080600080600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f18a6040518263ffffffff1660e01b81526004016128bd91906149ec565b61010060405180830381865afa1580156128db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ff9190615425565b97509750975097509750975097509750919395975091939597565b6129226130c2565b73ffffffffffffffffffffffffffffffffffffffff166129406123e1565b73ffffffffffffffffffffffffffffffffffffffff1614612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614c21565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f9061554d565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612ac5919061451b565b60405180910390a25050565b60095481565b612adf6130c2565b73ffffffffffffffffffffffffffffffffffffffff16612afd6123e1565b73ffffffffffffffffffffffffffffffffffffffff1614612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a90614c21565b60405180910390fd5b60005b83839050811015612bf2578160136000868685818110612b7957612b78614d39565b5b9050602002016020810190612b8e91906144d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612bea9061556d565b915050612b56565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051612c2693929190615678565b60405180910390a1505050565b6000806000606484600754612c4891906156aa565b612c529190615733565b9150606484600854612c6491906156aa565b612c6e9190615733565b905060008183612c7e9190614c70565b90508085612c8c9190615764565b9350509193909250565b60065481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7841ec06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db69190614dd3565b905090565b612dc36130c2565b73ffffffffffffffffffffffffffffffffffffffff16612de16123e1565b73ffffffffffffffffffffffffffffffffffffffff1614612e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2e90614c21565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e98030c7826040518263ffffffff1660e01b8152600401612e92919061489f565b600060405180830381600087803b158015612eac57600080fd5b505af1158015612ec0573d6000803e3d6000fd5b5050505050565b600080600080600080600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635183d6fd8a6040518263ffffffff1660e01b8152600401612f2e919061489f565b61010060405180830381865afa158015612f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f709190615425565b97509750975097509750975097509750919395975091939597565b612f936130c2565b73ffffffffffffffffffffffffffffffffffffffff16612fb16123e1565b73ffffffffffffffffffffffffffffffffffffffff1614613007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffe90614c21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306d9061580a565b60405180910390fd5b61307f81613883565b50565b60146020528060005260406000206000915054906101000a900460ff1681565b60156020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131309061589c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319f9061592e565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051613286919061489f565b60405180910390a3505050565b600061329f8484612c9c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114613319578181101561330b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133029061599a565b60405180910390fd5b61331884848484036130ca565b5b50505050565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133c35750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f990615a06565b60405180910390fd5b61340d838383613947565b600081036134265761342183836000613b1e565b613772565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561348d5750600e60009054906101000a900460ff16155b80156135365750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135355750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b80156135e55750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135e35750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b155b15613655576000806135f683612c33565b809350819450829550505050613618853083856136139190614c70565b613b1e565b816009600082825461362a9190614c70565b92505081905550613639613da0565b80600a600082825461364b9190614c70565b9250508190555050505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156136fd5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561375b576006548161370f84611be2565b6137199190614c70565b111561375a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375190615a72565b60405180910390fd5b5b613766838383613b1e565b613771838383613fa2565b5b505050565b43600f81905550600061378b600a5461421e565b6000600a819055506000479050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516137de90615ac3565b60006040518083038185875af1925050503d806000811461381b576040519150601f19603f3d011682016040523d82523d6000602084013e613820565b606091505b50508092505080600b60008282546138389190614c70565b925050819055508161387f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387690615b24565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000810315613b1957600061395b30611be2565b9050600069152d02c7e14af6800000821015801561397b5750600a548210155b90508080156139975750600e60009054906101000a900460ff16155b80156139d657506139a66123e1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613a1557506139e56123e1565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015613a6b5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613ac55750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613ad25750600f5443115b15613b16576001600e60006101000a81548160ff021916908315150217905550613afa613777565b6000600e60006101000a81548160ff0219169083151502179055505b50505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b8490615bb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf390615c48565b60405180910390fd5b613c07838383614461565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8590615cda565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d239190614c70565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d87919061489f565b60405180910390a3613d9a848484614466565b50505050565b6001600e60006101000a81548160ff0219169083151502179055506000600954118015613dd75750600954613dd430611be2565b10155b15613f8557613e0b30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954613b1e565b600954600c6000828254613e1f9190614c70565b9250508190555060006009819055506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec19190614dd3565b14613f84576000613ef3601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611be2565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633243c791826040518263ffffffff1660e01b8152600401613f50919061489f565b600060405180830381600087803b158015613f6a57600080fd5b505af1158015613f7e573d6000803e3d6000fd5b50505050505b5b6000600e60006101000a81548160ff021916908315150217905550565b600081031561421957601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc84613ff386611be2565b6040518363ffffffff1660e01b8152600401614010929190615cfa565b600060405180830381600087803b15801561402a57600080fd5b505af192505050801561403b575060015b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc8361408485611be2565b6040518363ffffffff1660e01b81526004016140a1929190615cfa565b600060405180830381600087803b1580156140bb57600080fd5b505af19250505080156140cc575060015b50600e60009054906101000a900460ff16614218576001600e60006101000a81548160ff0219169083151502179055506000600d549050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479826040518263ffffffff1660e01b815260040161415e919061489f565b6060604051808303816000875af192505050801561419a57506040513d601f19601f820116820180604052508101906141979190614fb3565b60015b156141fb573373ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585896040516141ef9493929190615006565b60405180910390a35050505b6000600e60006101000a81548160ff021916908315150217905550505b5b505050565b6000600267ffffffffffffffff81111561423b5761423a615d23565b5b6040519080825280602002602001820160405280156142695781602001602082028036833780820191505090505b509050308160008151811061428157614280614d39565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061434c9190615216565b816001815181106143605761435f614d39565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143c730601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846130ca565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161442b959493929190615e13565b600060405180830381600087803b15801561444557600080fd5b505af1158015614459573d6000803e3d6000fd5b505050505050565b505050565b505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144a082614475565b9050919050565b6144b081614495565b81146144bb57600080fd5b50565b6000813590506144cd816144a7565b92915050565b6000602082840312156144e9576144e861446b565b5b60006144f7848285016144be565b91505092915050565b60008115159050919050565b61451581614500565b82525050565b6000602082019050614530600083018461450c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614570578082015181840152602081019050614555565b60008484015250505050565b6000601f19601f8301169050919050565b600061459882614536565b6145a28185614541565b93506145b2818560208601614552565b6145bb8161457c565b840191505092915050565b600060208201905081810360008301526145e0818461458d565b905092915050565b6000819050919050565b6145fb816145e8565b811461460657600080fd5b50565b600081359050614618816145f2565b92915050565b600080604083850312156146355761463461446b565b5b6000614643858286016144be565b925050602061465485828601614609565b9150509250929050565b600080604083850312156146755761467461446b565b5b600061468385828601614609565b925050602061469485828601614609565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126146c3576146c261469e565b5b8235905067ffffffffffffffff8111156146e0576146df6146a3565b5b6020830191508360208202830111156146fc576146fb6146a8565b5b9250929050565b60008083601f8401126147195761471861469e565b5b8235905067ffffffffffffffff811115614736576147356146a3565b5b602083019150836020820283011115614752576147516146a8565b5b9250929050565b600080600080604085870312156147735761477261446b565b5b600085013567ffffffffffffffff81111561479157614790614470565b5b61479d878288016146ad565b9450945050602085013567ffffffffffffffff8111156147c0576147bf614470565b5b6147cc87828801614703565b925092505092959194509250565b6000819050919050565b60006147ff6147fa6147f584614475565b6147da565b614475565b9050919050565b6000614811826147e4565b9050919050565b600061482382614806565b9050919050565b61483381614818565b82525050565b600060208201905061484e600083018461482a565b92915050565b600061485f82614806565b9050919050565b61486f81614854565b82525050565b600060208201905061488a6000830184614866565b92915050565b614899816145e8565b82525050565b60006020820190506148b46000830184614890565b92915050565b6000806000606084860312156148d3576148d261446b565b5b60006148e1868287016144be565b93505060206148f2868287016144be565b925050604061490386828701614609565b9150509250925092565b600060ff82169050919050565b6149238161490d565b82525050565b600060208201905061493e600083018461491a565b92915050565b61494d81614500565b811461495857600080fd5b50565b60008135905061496a81614944565b92915050565b600080604083850312156149875761498661446b565b5b6000614995858286016144be565b92505060206149a68582860161495b565b9150509250929050565b6000602082840312156149c6576149c561446b565b5b60006149d484828501614609565b91505092915050565b6149e681614495565b82525050565b6000602082019050614a0160008301846149dd565b92915050565b6000819050919050565b614a1a81614a07565b82525050565b600061010082019050614a36600083018b6149dd565b614a43602083018a614a11565b614a506040830189614a11565b614a5d6060830188614890565b614a6a6080830187614890565b614a7760a0830186614890565b614a8460c0830185614890565b614a9160e0830184614890565b9998505050505050505050565b600080600060408486031215614ab757614ab661446b565b5b600084013567ffffffffffffffff811115614ad557614ad4614470565b5b614ae1868287016146ad565b93509350506020614af48682870161495b565b9150509250925092565b6000606082019050614b136000830186614890565b614b206020830185614890565b614b2d6040830184614890565b949350505050565b60008060408385031215614b4c57614b4b61446b565b5b6000614b5a858286016144be565b9250506020614b6b858286016144be565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bbc57607f821691505b602082108103614bcf57614bce614b75565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c0b602083614541565b9150614c1682614bd5565b602082019050919050565b60006020820190508181036000830152614c3a81614bfe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c7b826145e8565b9150614c86836145e8565b9250828201905080821115614c9e57614c9d614c41565b5b92915050565b7f4869676820666565730000000000000000000000000000000000000000000000600082015250565b6000614cda600983614541565b9150614ce582614ca4565b602082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b6000604082019050614d256000830185614890565b614d326020830184614890565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614d7e57614d7d61446b565b5b6000614d8c8482850161495b565b91505092915050565b6000614da08261490d565b915060ff8203614db357614db2614c41565b5b600182019050919050565b600081519050614dcd816145f2565b92915050565b600060208284031215614de957614de861446b565b5b6000614df784828501614dbe565b91505092915050565b6000614e0b82614806565b9050919050565b614e1b81614e00565b82525050565b6000604082019050614e366000830185614e12565b614e43602083018461450c565b9392505050565b600081519050614e5981614944565b92915050565b600060208284031215614e7557614e7461446b565b5b6000614e8384828501614e4a565b91505092915050565b7f757365204d61726b6574696e6700000000000000000000000000000000000000600082015250565b6000614ec2600d83614541565b9150614ecd82614e8c565b602082019050919050565b60006020820190508181036000830152614ef181614eb5565b9050919050565b6000604082019050614f0d60008301856149dd565b614f1a60208301846149dd565b9392505050565b7f4b414e47414c3a2054686520726f7574657220616c726561647920686173207460008201527f6861742061646472657373000000000000000000000000000000000000000000602082015250565b6000614f7d602b83614541565b9150614f8882614f21565b604082019050919050565b60006020820190508181036000830152614fac81614f70565b9050919050565b600080600060608486031215614fcc57614fcb61446b565b5b6000614fda86828701614dbe565b9350506020614feb86828701614dbe565b9250506040614ffc86828701614dbe565b9150509250925092565b600060808201905061501b6000830187614890565b6150286020830186614890565b6150356040830185614890565b6150426060830184614890565b95945050505050565b7f676173466f7250726f63657373696e67206d757374206265206265747765656e60008201527f203230302c30303020616e64203530302c303030000000000000000000000000602082015250565b60006150a7603483614541565b91506150b28261504b565b604082019050919050565b600060208201905081810360008301526150d68161509a565b9050919050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000615139602c83614541565b9150615144826150dd565b604082019050919050565b600060208201905081810360008301526151688161512c565b9050919050565b7f4b414e47414c3a20546865206469766964656e6420747261636b657220616c7260008201527f6561647920686173207468617420616464726573730000000000000000000000602082015250565b60006151cb603583614541565b91506151d68261516f565b604082019050919050565b600060208201905081810360008301526151fa816151be565b9050919050565b600081519050615210816144a7565b92915050565b60006020828403121561522c5761522b61446b565b5b600061523a84828501615201565b91505092915050565b7f4b414e47414c3a20546865206e6577206469766964656e6420747261636b657260008201527f206d757374206265206f776e656420627920746865206465706c6f796572206f60208201527f662074686520636f6e7472616374000000000000000000000000000000000000604082015250565b60006152c5604e83614541565b91506152d082615243565b606082019050919050565b600060208201905081810360008301526152f4816152b8565b9050919050565b7f726564756e64616e740000000000000000000000000000000000000000000000600082015250565b6000615331600983614541565b915061533c826152fb565b602082019050919050565b6000602082019050818103600083015261536081615324565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006153c3602583614541565b91506153ce82615367565b604082019050919050565b600060208201905081810360008301526153f2816153b6565b9050919050565b61540281614a07565b811461540d57600080fd5b50565b60008151905061541f816153f9565b92915050565b600080600080600080600080610100898b0312156154465761544561446b565b5b60006154548b828c01615201565b98505060206154658b828c01615410565b97505060406154768b828c01615410565b96505060606154878b828c01614dbe565b95505060806154988b828c01614dbe565b94505060a06154a98b828c01614dbe565b93505060c06154ba8b828c01614dbe565b92505060e06154cb8b828c01614dbe565b9150509295985092959890939650565b7f4b414e47414c3a204163636f756e7420697320616c726561647920746865207660008201527f616c7565206f6620276578636c75646564270000000000000000000000000000602082015250565b6000615537603283614541565b9150615542826154db565b604082019050919050565b600060208201905081810360008301526155668161552a565b9050919050565b6000615578826145e8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155aa576155a9614c41565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b6155d981614495565b82525050565b60006155eb83836155d0565b60208301905092915050565b600061560660208401846144be565b905092915050565b6000602082019050919050565b600061562783856155b5565b9350615632826155c6565b8060005b8581101561566b5761564882846155f7565b61565288826155df565b975061565d8361560e565b925050600181019050615636565b5085925050509392505050565b6000604082019050818103600083015261569381858761561b565b90506156a2602083018461450c565b949350505050565b60006156b5826145e8565b91506156c0836145e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156f9576156f8614c41565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061573e826145e8565b9150615749836145e8565b92508261575957615758615704565b5b828204905092915050565b600061576f826145e8565b915061577a836145e8565b925082820390508181111561579257615791614c41565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006157f4602683614541565b91506157ff82615798565b604082019050919050565b60006020820190508181036000830152615823816157e7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615886602483614541565b91506158918261582a565b604082019050919050565b600060208201905081810360008301526158b581615879565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615918602283614541565b9150615923826158bc565b604082019050919050565b600060208201905081810360008301526159478161590b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000615984601d83614541565b915061598f8261594e565b602082019050919050565b600060208201905081810360008301526159b381615977565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006159f0601383614541565b91506159fb826159ba565b602082019050919050565b60006020820190508181036000830152615a1f816159e3565b9050919050565b7f4d415820616d6f756e742068656c642072656163686564000000000000000000600082015250565b6000615a5c601783614541565b9150615a6782615a26565b602082019050919050565b60006020820190508181036000830152615a8b81615a4f565b9050919050565b600081905092915050565b50565b6000615aad600083615a92565b9150615ab882615a9d565b600082019050919050565b6000615ace82615aa0565b9150819050919050565b7f4661696c656420455448205472616e7366657200000000000000000000000000600082015250565b6000615b0e601383614541565b9150615b1982615ad8565b602082019050919050565b60006020820190508181036000830152615b3d81615b01565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615ba0602583614541565b9150615bab82615b44565b604082019050919050565b60006020820190508181036000830152615bcf81615b93565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615c32602383614541565b9150615c3d82615bd6565b604082019050919050565b60006020820190508181036000830152615c6181615c25565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615cc4602683614541565b9150615ccf82615c68565b604082019050919050565b60006020820190508181036000830152615cf381615cb7565b9050919050565b6000604082019050615d0f60008301856149dd565b615d1c6020830184614890565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000615d77615d72615d6d84615d52565b6147da565b6145e8565b9050919050565b615d8781615d5c565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b6000615dc082615d8d565b615dca81856155b5565b9350615dd583615d98565b8060005b83811015615e06578151615ded88826155df565b9750615df883615da8565b925050600181019050615dd9565b5085935050505092915050565b600060a082019050615e286000830188614890565b615e356020830187615d7e565b8181036040830152615e478186615db5565b9050615e5660608301856149dd565b615e636080830184614890565b969550505050505056fea264697066735822122029f650d03507d7d4d228a93088ca9130cb013d115ac9bd9c6997dd373bf6885e64736f6c63430008100033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000cc416144ec0f6dfe12509410e610cda7deb21b37

-----Decoded View---------------
Arg [0] : _marketing (address): 0xcc416144eC0f6Dfe12509410e610cDa7dEB21b37

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cc416144ec0f6dfe12509410e610cda7deb21b37


Libraries Used


Deployed Bytecode Sourcemap

50727:16987:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51751:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27018:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29510:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60145:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;67163:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51706:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51658:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51447:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28138:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30332:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65717:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27980:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65049:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50776:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51370:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51099:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31036:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63349:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60676:101;;;;;;;;;;;;;:::i;:::-;;51164:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64408:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59133;;;;;;;;;;;;;:::i;:::-;;51802:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50982:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60407:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66724:140;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61891:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;64872:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51198:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50948:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65185:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28309:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24108:103;;;;;;;;;;;;;:::i;:::-;;57489:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;67503:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51512:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63566:466;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60897:874;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50917:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23457:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27237:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51304:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66872:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;65602:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31809:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51474:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64649:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28692:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65864:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;62391:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51064:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62872:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57601:402;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;50841:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28989:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66588:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64149:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66221:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;24366:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51852:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51900:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51751:44;;;;;;;;;;;;;;;;;;;;;;:::o;27018:100::-;27072:13;27105:5;27098:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27018:100;:::o;29510:242::-;29629:4;29651:13;29667:12;:10;:12::i;:::-;29651:28;;29690:32;29699:5;29706:7;29715:6;29690:8;:32::i;:::-;29740:4;29733:11;;;29510:242;;;;:::o;60145:254::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60261:2:::1;60247:10;60237:7;:20;;;;:::i;:::-;:26;;60229:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;60300:7;60288:9;:19;;;;60333:10;60318:12;:25;;;;60359:32;60371:7;60380:10;60359:32;;;;;;;:::i;:::-;;;;;;;;60145:254:::0;;:::o;67163:332::-;67325:7;;:14;;67304:10;;:17;;:35;67296:44;;;;;;67378:7;67373:115;67395:10;;:17;;67391:1;:21;;;67373:115;;;67434:42;67450:10;;67461:1;67450:13;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;67465:7;;67473:1;67465:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;67434:15;:42::i;:::-;67414:3;;;;;:::i;:::-;;;;67373:115;;;;67163:332;;;;:::o;51706:36::-;;;;;;;;;;;;;:::o;51658:41::-;;;;;;;;;;;;;:::o;51447:20::-;;;;;;;;;;;;;:::o;28138:108::-;28199:7;28226:12;;28219:19;;28138:108;:::o;30332:295::-;30463:4;30480:15;30498:12;:10;:12::i;:::-;30480:30;;30521:38;30537:4;30543:7;30552:6;30521:15;:38::i;:::-;30570:27;30580:4;30586:2;30590:6;30570:9;:27::i;:::-;30615:4;30608:11;;;30332:295;;;;;:::o;65717:139::-;65780:7;65807:13;;;;;;;;;;;:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65800:48;;65717:139;:::o;27980:93::-;28038:5;28063:2;28056:9;;27980:93;:::o;65049:128::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;65126:13:::1;;;;;;;;;;;:34;;;65161:7;65126:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;65049:128:::0;:::o;50776:58::-;50813:21;50776:58;:::o;51370:37::-;51404:3;51370:37;:::o;51099:30::-;;;;:::o;31036:270::-;31151:4;31173:13;31189:12;:10;:12::i;:::-;31173:28;;31212:64;31221:5;31228:7;31265:10;31237:25;31247:5;31254:7;31237:9;:25::i;:::-;:38;;;;:::i;:::-;31212:8;:64::i;:::-;31294:4;31287:11;;;31036:270;;;;:::o;63349:119::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63455:5:::1;63434:9;:18;63444:7;63434:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;63349:119:::0;;:::o;60676:101::-;60713:13;;;;;;;;;;;:28;;;60750:10;60763:5;60713:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;60676:101::o;51164:27::-;;;;:::o;64408:118::-;64474:4;64498:11;:20;64510:7;64498:20;;;;;;;;;;;;;;;;;;;;;;;;;64491:27;;64408:118;;;:::o;59133:::-;59186:4;59175:8;;:15;;;;;;;;;;;;;;;;;;59201;:13;:15::i;:::-;59238:5;59227:8;;:16;;;;;;;;;;;;;;;;;;59133:118::o;51802:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;50982:47::-;51016:13;50982:47;:::o;60407:261::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60527:1:::1;60499:30;;:16;:30;;::::0;60491:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;60563:51;60579:16;60597;;;;;;;;;;;60563:51;;;;;;;:::i;:::-;;;;;;;;60644:16;60625;;:35;;;;;;;;;;;;;;;;;;60407:261:::0;:::o;66724:140::-;66790:7;66817:13;;;;;;;;;;;:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66810:46;;66724:140;:::o;61891:352::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62014:15:::1;;;;;;;;;;;61992:38;;:10;:38;;::::0;61970:131:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;62159:15;;;;;;;;;;;62117:59;;62139:10;62117:59;;;;;;;;;;;;62224:10;62187:15;;:48;;;;;;;;;;;;;;;;;;61891:352:::0;:::o;64872:169::-;64969:7;65001:13;;;;;;;;;;;:23;;;65025:7;65001:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64994:39;;64872:169;;;:::o;51198:29::-;;;;:::o;50948:27::-;;;;:::o;65185:409::-;65265:18;65298:14;65327:26;65367:13;;;;;;;;;;;:21;;;65389:3;65367:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65250:143;;;;;;65565:10;65409:177;;65527:5;65409:177;;;65448:10;65473:6;65494:18;65547:3;65409:177;;;;;;;;;:::i;:::-;;;;;;;;65239:355;;;65185:409;:::o;28309:177::-;28428:7;28460:9;:18;28470:7;28460:18;;;;;;;;;;;;;;;;28453:25;;28309:177;;;:::o;24108:103::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24173:30:::1;24200:1;24173:18;:30::i;:::-;24108:103::o:0;57489:104::-;57529:12;57573;;57561:9;;:24;;;;:::i;:::-;57554:31;;57489:104;:::o;67503:208::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;67581:5:::1;:19;67587:12;67581:19;;;;;;;;;;;;;;;;;;;;;;;;;67580:20;67572:29;;;::::0;::::1;;67653:4;67631:5;:19;67637:12;67631:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;67668:35;67684:12;67698:4;67668:15;:35::i;:::-;67503:208:::0;:::o;51512:88::-;51558:42;51512:88;:::o;63566:466::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63678:6:::1;63666:8;:18;;:40;;;;;63700:6;63688:8;:18;;63666:40;63644:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;63831:16;;63819:8;:28:::0;63797:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;63969:16;;63959:8;63935:51;;;;;;;;;;64016:8;63997:16;:27;;;;63566:466:::0;:::o;60897:874::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61020:13:::1;;;;;;;;;;;60998:36;;:10;:36;;::::0;60976:139:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;61128:32;61179:10;61128:62;;61261:4;61225:41;;:16;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;61203:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;61385:16;:37;;;61431:16;61385:64;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;61460:16;:37;;;61506:4;61460:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;61523:16;:37;;;61561:7;:5;:7::i;:::-;61523:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;61580:16;:37;;;61626:15;;;;;;;;;;;61580:63;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;61703:13;;;;;;;;;;;61661:57;;61683:10;61661:57;;;;;;;;;;;;61747:16;61731:13;;:32;;;;;;;;;;;;;;;;;;60965:806;60897:874:::0;:::o;50917:24::-;;;;:::o;23457:87::-;23503:7;23530:6;;;;;;;;;;;23523:13;;23457:87;:::o;27237:104::-;27293:13;27326:7;27319:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27237:104;:::o;51304:41::-;;;;:::o;66872:283::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;67022:7:::1;66992:37;;:12;:26;67005:12;66992:26;;;;;;;;;;;;;;;;;;;;;;;;;:37;;::::0;66984:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;67083:7;67054:12;:26;67067:12;67054:26;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;67125:12;67106:41;;;67139:7;67106:41;;;;;;:::i;:::-;;;;;;;;66872:283:::0;;:::o;65602:107::-;65649:7;65676:13;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65669:32;;65602:107;:::o;31809:505::-;31929:4;31951:13;31967:12;:10;:12::i;:::-;31951:28;;31990:24;32017:25;32027:5;32034:7;32017:9;:25::i;:::-;31990:52;;32095:15;32075:16;:35;;32053:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;32211:60;32220:5;32227:7;32255:15;32236:16;:34;32211:8;:60::i;:::-;32302:4;32295:11;;;;31809:505;;;;:::o;51474:31::-;;;;;;;;;;;;;:::o;64649:182::-;64746:7;64778:13;;;;;;;;;;;:36;;;64815:7;64778:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64771:52;;64649:182;;;:::o;28692:234::-;28807:4;28829:13;28845:12;:10;:12::i;:::-;28829:28;;28868;28878:5;28885:2;28889:6;28868:9;:28::i;:::-;28914:4;28907:11;;;28692:234;;;;:::o;65864:349::-;65978:7;66000:6;66021;66042:7;66064;66086;66108;66130;66172:13;;;;;;;;;;;:24;;;66197:7;66172:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66165:40;;;;;;;;;;;;;;;;65864:349;;;;;;;;;:::o;62391:319::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62522:8:::1;62498:32;;:11;:20;62510:7;62498:20;;;;;;;;;;;;;;;;;;;;;;;;;:32;;::::0;62476:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;62642:8;62619:11;:20;62631:7;62619:20;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;62684:7;62668:34;;;62693:8;62668:34;;;;;;:::i;:::-;;;;;;;;62391:319:::0;;:::o;51064:28::-;;;;:::o;62872:322::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63015:9:::1;63010:108;63034:8;;:15;;63030:1;:19;63010:108;;;63098:8;63071:11;:24;63083:8;;63092:1;63083:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;63071:24;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;63051:3;;;;;:::i;:::-;;;;63010:108;;;;63135:51;63167:8;;63177;63135:51;;;;;;;;:::i;:::-;;;;;;;;62872:322:::0;;;:::o;57601:402::-;57698:18;57731:15;57761:18;51404:3;57830:6;57818:9;;:18;;;;:::i;:::-;57817:30;;;;:::i;:::-;57807:40;;51404:3;57887:6;57872:12;;:21;;;;:::i;:::-;57871:33;;;;:::i;:::-;57858:46;;57915:16;57944:10;57934:7;:20;;;;:::i;:::-;57915:39;;57987:8;57978:6;:17;;;;:::i;:::-;57965:30;;57796:207;57601:402;;;;;:::o;50841:45::-;;;;:::o;28989:201::-;29123:7;29155:11;:18;29167:5;29155:18;;;;;;;;;;;;;;;:27;29174:7;29155:27;;;;;;;;;;;;;;;;29148:34;;28989:201;;;;:::o;66588:128::-;66644:7;66671:13;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66664:44;;66588:128;:::o;64149:122::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;64223:13:::1;;;;;;;;;;;:29;;;64253:9;64223:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;64149:122:::0;:::o;66221:359::-;66340:7;66362:6;66383;66404:7;66426;66448;66470;66492;66534:13;;;;;;;;;;;:31;;;66566:5;66534:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66527:45;;;;;;;;;;;;;;;;66221:359;;;;;;;;;:::o;24366:238::-;23688:12;:10;:12::i;:::-;23677:23;;:7;:5;:7::i;:::-;:23;;;23669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24489:1:::1;24469:22;;:8;:22;;::::0;24447:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24568:28;24587:8;24568:18;:28::i;:::-;24366:238:::0;:::o;51852:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;51900:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;688:98::-;741:7;768:10;761:17;;688:98;:::o;35549:380::-;35702:1;35685:19;;:5;:19;;;35677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35783:1;35764:21;;:7;:21;;;35756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35867:6;35837:11;:18;35849:5;35837:18;;;;;;;;;;;;;;;:27;35856:7;35837:27;;;;;;;;;;;;;;;:36;;;;35905:7;35889:32;;35898:5;35889:32;;;35914:6;35889:32;;;;;;:::i;:::-;;;;;;;;35549:380;;;:::o;36220:502::-;36355:24;36382:25;36392:5;36399:7;36382:9;:25::i;:::-;36355:52;;36442:17;36422:16;:37;36418:297;;36522:6;36502:16;:26;;36476:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;36637:51;36646:5;36653:7;36681:6;36662:16;:25;36637:8;:51::i;:::-;36418:297;36344:378;36220:502;;;:::o;56125:1356::-;56258:9;:15;56268:4;56258:15;;;;;;;;;;;;;;;;;;;;;;;;;56257:16;:34;;;;;56278:9;:13;56288:2;56278:13;;;;;;;;;;;;;;;;;;;;;;;;;56277:14;56257:34;56249:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;56326:39;56348:4;56354:2;56358:6;56326:21;:39::i;:::-;56390:1;56380:6;:11;56376:93;;56408:28;56424:4;56430:2;56434:1;56408:15;:28::i;:::-;56451:7;;56376:93;56681:11;:17;56693:4;56681:17;;;;;;;;;;;;;;;;;;;;;;;;;56680:18;:44;;;;;56716:8;;;;;;;;;;;56715:9;56680:44;:87;;;;;56742:5;:11;56748:4;56742:11;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;;56757:5;:9;56763:2;56757:9;;;;;;;;;;;;;;;;;;;;;;;;;56742:24;56680:87;:152;;;;;56786:5;:11;56792:4;56786:11;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;56815:15;;;;;;;;;;;56801:30;;:2;:30;;;56786:45;56784:48;56680:152;56662:519;;;56859:16;56890:19;56958:17;56968:6;56958:9;:17::i;:::-;56924:51;;;;;;;;;;;;56990:60;57006:4;57020;57038:11;57027:8;:22;;;;:::i;:::-;56990:15;:60::i;:::-;57082:8;57065:13;;:25;;;;;;;:::i;:::-;;;;;;;;57105:19;:17;:19::i;:::-;57158:11;57139:15;;:30;;;;;;;:::i;:::-;;;;;;;;56844:337;;56662:519;57211:13;;;;;;;;;;;57195:30;;:4;:30;;;;:51;;;;;57230:12;:16;57243:2;57230:16;;;;;;;;;;;;;;;;;;;;;;;;;57229:17;57195:51;57191:189;;;57313:8;;57303:6;57287:13;57297:2;57287:9;:13::i;:::-;:22;;;;:::i;:::-;:34;;57261:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;57191:189;57391:33;57407:4;57413:2;57417:6;57391:15;:33::i;:::-;57435:38;57456:4;57462:2;57466:6;57435:20;:38::i;:::-;56125:1356;;;;:::o;58657:468::-;58760:12;58744:13;:28;;;;58783:14;58808:27;58819:15;;58808:10;:27::i;:::-;58864:1;58846:15;:19;;;;58906:18;58927:21;58906:42;;58983:16;;;;;;;;;;;58975:30;;59013:10;58975:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58959:69;;;;;59055:10;59039:12;;:26;;;;;;;:::i;:::-;;;;;;;;59084:9;59076:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;58691:434;;58657:468::o;24764:191::-;24838:16;24857:6;;;;;;;;;;;24838:25;;24883:8;24874:6;;:17;;;;;;;;;;;;;;;;;;24938:8;24907:40;;24928:8;24907:40;;;;;;;;;;;;24827:128;24764:191;:::o;54518:680::-;54659:1;54649:6;:11;54645:24;54662:7;54645:24;54679:22;54704:24;54722:4;54704:9;:24::i;:::-;54679:49;;54739:12;51016:13;54754:14;:25;;:75;;;;;54814:15;;54796:14;:33;;54754:75;54739:90;;54858:7;:33;;;;;54883:8;;;;;;;;;;;54882:9;54858:33;:65;;;;;54916:7;:5;:7::i;:::-;54908:15;;:4;:15;;;;54858:65;:95;;;;;54946:7;:5;:7::i;:::-;54940:13;;:2;:13;;;;54858:95;:124;;;;;54971:5;:11;54977:4;54971:11;;;;;;;;;;;;;;;;;;;;;;;;;54970:12;54858:124;:173;;;;;55015:15;;;;;;;;;;;54999:32;;:4;:32;;;;54858:173;:218;;;;;55063:13;;55048:12;:28;54858:218;54840:351;;;55114:4;55103:8;;:15;;;;;;;;;;;;;;;;;;55133;:13;:15::i;:::-;55174:5;55163:8;;:16;;;;;;;;;;;;;;;;;;54840:351;54634:564;;54518:680;;;;:::o;32793:708::-;32940:1;32924:18;;:4;:18;;;32916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33017:1;33003:16;;:2;:16;;;32995:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33072:38;33093:4;33099:2;33103:6;33072:20;:38::i;:::-;33123:19;33145:9;:15;33155:4;33145:15;;;;;;;;;;;;;;;;33123:37;;33208:6;33193:11;:21;;33171:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;33348:6;33334:11;:20;33316:9;:15;33326:4;33316:15;;;;;;;;;;;;;;;:38;;;;33393:6;33376:9;:13;33386:2;33376:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;33432:2;33417:26;;33426:4;33417:26;;;33436:6;33417:26;;;;;;:::i;:::-;;;;;;;;33456:37;33476:4;33482:2;33486:6;33456:19;:37::i;:::-;32905:596;32793:708;;;:::o;58011:638::-;58071:4;58060:8;;:15;;;;;;;;;;;;;;;;;;58106:1;58090:13;;:17;:62;;;;;58139:13;;58111:24;58129:4;58111:9;:24::i;:::-;:41;;58090:62;58086:529;;;58169:135;58211:4;58243:13;;;;;;;;;;;58276;;58169:15;:135::i;:::-;58337:13;;58319:14;;:31;;;;;;;:::i;:::-;;;;;;;;58381:1;58365:13;:17;;;;58432:1;58401:13;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;58397:207;;58454:26;58483:33;58501:13;;;;;;;;;;;58483:9;:33::i;:::-;58454:62;;58535:13;;;;;;;;;;;:33;;;58569:18;58535:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58435:169;58397:207;58086:529;58636:5;58625:8;;:16;;;;;;;;;;;;;;;;;;58011:638::o;55206:911::-;55346:1;55336:6;:11;55332:24;55349:7;55332:24;55370:13;;;;;;;;;;;:24;;;55395:4;55401:15;55411:4;55401:9;:15::i;:::-;55370:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55366:63;55443:13;;;;;;;;;;;:24;;;55468:2;55472:13;55482:2;55472:9;:13::i;:::-;55443:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55439:59;55515:8;;;;;;;;;;;55510:600;;55551:4;55540:8;;:15;;;;;;;;;;;;;;;;;;55570:11;55584:16;;55570:30;;55621:13;;;;;;;;;;;:21;;;55643:3;55621:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;55617:451;;;56014:10;55811:232;;55961:4;55811:232;;;55858:10;55891:6;55920:18;55988:3;55811:232;;;;;;;;;:::i;:::-;;;;;;;;55648:411;;;55617:451;56093:5;56082:8;;:16;;;;;;;;;;;;;;;;;;55525:585;55510:600;55206:911;;;;:::o;59259:508::-;59314:21;59352:1;59338:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59314:40;;59383:4;59365;59370:1;59365:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;59409:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59399:4;59404:1;59399:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;59444:57;59461:4;59476:15;;;;;;;;;;;59494:6;59444:8;:57::i;:::-;59540:15;;;;;;;;;;;:66;;;59621:6;59642:1;59686:4;59713;59733:15;59540:219;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59303:464;59259:508;:::o;37322:125::-;;;;:::o;38051:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:99::-;1655:6;1689:5;1683:12;1673:22;;1603:99;;;:::o;1708:169::-;1792:11;1826:6;1821:3;1814:19;1866:4;1861:3;1857:14;1842:29;;1708:169;;;;:::o;1883:246::-;1964:1;1974:113;1988:6;1985:1;1982:13;1974:113;;;2073:1;2068:3;2064:11;2058:18;2054:1;2049:3;2045:11;2038:39;2010:2;2007:1;2003:10;1998:15;;1974:113;;;2121:1;2112:6;2107:3;2103:16;2096:27;1945:184;1883:246;;;:::o;2135:102::-;2176:6;2227:2;2223:7;2218:2;2211:5;2207:14;2203:28;2193:38;;2135:102;;;:::o;2243:377::-;2331:3;2359:39;2392:5;2359:39;:::i;:::-;2414:71;2478:6;2473:3;2414:71;:::i;:::-;2407:78;;2494:65;2552:6;2547:3;2540:4;2533:5;2529:16;2494:65;:::i;:::-;2584:29;2606:6;2584:29;:::i;:::-;2579:3;2575:39;2568:46;;2335:285;2243:377;;;;:::o;2626:313::-;2739:4;2777:2;2766:9;2762:18;2754:26;;2826:9;2820:4;2816:20;2812:1;2801:9;2797:17;2790:47;2854:78;2927:4;2918:6;2854:78;:::i;:::-;2846:86;;2626:313;;;;:::o;2945:77::-;2982:7;3011:5;3000:16;;2945:77;;;:::o;3028:122::-;3101:24;3119:5;3101:24;:::i;:::-;3094:5;3091:35;3081:63;;3140:1;3137;3130:12;3081:63;3028:122;:::o;3156:139::-;3202:5;3240:6;3227:20;3218:29;;3256:33;3283:5;3256:33;:::i;:::-;3156:139;;;;:::o;3301:474::-;3369:6;3377;3426:2;3414:9;3405:7;3401:23;3397:32;3394:119;;;3432:79;;:::i;:::-;3394:119;3552:1;3577:53;3622:7;3613:6;3602:9;3598:22;3577:53;:::i;:::-;3567:63;;3523:117;3679:2;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3650:118;3301:474;;;;;:::o;3781:::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:117::-;4370:1;4367;4360:12;4384:117;4493:1;4490;4483:12;4507:117;4616:1;4613;4606:12;4647:568;4720:8;4730:6;4780:3;4773:4;4765:6;4761:17;4757:27;4747:122;;4788:79;;:::i;:::-;4747:122;4901:6;4888:20;4878:30;;4931:18;4923:6;4920:30;4917:117;;;4953:79;;:::i;:::-;4917:117;5067:4;5059:6;5055:17;5043:29;;5121:3;5113:4;5105:6;5101:17;5091:8;5087:32;5084:41;5081:128;;;5128:79;;:::i;:::-;5081:128;4647:568;;;;;:::o;5235:565::-;5305:8;5315:6;5365:3;5358:4;5350:6;5346:17;5342:27;5332:122;;5373:79;;:::i;:::-;5332:122;5486:6;5473:20;5463:30;;5516:18;5508:6;5505:30;5502:117;;;5538:79;;:::i;:::-;5502:117;5652:4;5644:6;5640:17;5628:29;;5706:3;5698:4;5690:6;5686:17;5676:8;5672:32;5669:41;5666:128;;;5713:79;;:::i;:::-;5666:128;5235:565;;;;;:::o;5806:928::-;5925:6;5933;5941;5949;5998:2;5986:9;5977:7;5973:23;5969:32;5966:119;;;6004:79;;:::i;:::-;5966:119;6152:1;6141:9;6137:17;6124:31;6182:18;6174:6;6171:30;6168:117;;;6204:79;;:::i;:::-;6168:117;6317:80;6389:7;6380:6;6369:9;6365:22;6317:80;:::i;:::-;6299:98;;;;6095:312;6474:2;6463:9;6459:18;6446:32;6505:18;6497:6;6494:30;6491:117;;;6527:79;;:::i;:::-;6491:117;6640:77;6709:7;6700:6;6689:9;6685:22;6640:77;:::i;:::-;6622:95;;;;6417:310;5806:928;;;;;;;:::o;6740:60::-;6768:3;6789:5;6782:12;;6740:60;;;:::o;6806:142::-;6856:9;6889:53;6907:34;6916:24;6934:5;6916:24;:::i;:::-;6907:34;:::i;:::-;6889:53;:::i;:::-;6876:66;;6806:142;;;:::o;6954:126::-;7004:9;7037:37;7068:5;7037:37;:::i;:::-;7024:50;;6954:126;;;:::o;7086:150::-;7160:9;7193:37;7224:5;7193:37;:::i;:::-;7180:50;;7086:150;;;:::o;7242:179::-;7353:61;7408:5;7353:61;:::i;:::-;7348:3;7341:74;7242:179;;:::o;7427:270::-;7544:4;7582:2;7571:9;7567:18;7559:26;;7595:95;7687:1;7676:9;7672:17;7663:6;7595:95;:::i;:::-;7427:270;;;;:::o;7703:153::-;7780:9;7813:37;7844:5;7813:37;:::i;:::-;7800:50;;7703:153;;;:::o;7862:185::-;7976:64;8034:5;7976:64;:::i;:::-;7971:3;7964:77;7862:185;;:::o;8053:276::-;8173:4;8211:2;8200:9;8196:18;8188:26;;8224:98;8319:1;8308:9;8304:17;8295:6;8224:98;:::i;:::-;8053:276;;;;:::o;8335:118::-;8422:24;8440:5;8422:24;:::i;:::-;8417:3;8410:37;8335:118;;:::o;8459:222::-;8552:4;8590:2;8579:9;8575:18;8567:26;;8603:71;8671:1;8660:9;8656:17;8647:6;8603:71;:::i;:::-;8459:222;;;;:::o;8687:619::-;8764:6;8772;8780;8829:2;8817:9;8808:7;8804:23;8800:32;8797:119;;;8835:79;;:::i;:::-;8797:119;8955:1;8980:53;9025:7;9016:6;9005:9;9001:22;8980:53;:::i;:::-;8970:63;;8926:117;9082:2;9108:53;9153:7;9144:6;9133:9;9129:22;9108:53;:::i;:::-;9098:63;;9053:118;9210:2;9236:53;9281:7;9272:6;9261:9;9257:22;9236:53;:::i;:::-;9226:63;;9181:118;8687:619;;;;;:::o;9312:86::-;9347:7;9387:4;9380:5;9376:16;9365:27;;9312:86;;;:::o;9404:112::-;9487:22;9503:5;9487:22;:::i;:::-;9482:3;9475:35;9404:112;;:::o;9522:214::-;9611:4;9649:2;9638:9;9634:18;9626:26;;9662:67;9726:1;9715:9;9711:17;9702:6;9662:67;:::i;:::-;9522:214;;;;:::o;9742:116::-;9812:21;9827:5;9812:21;:::i;:::-;9805:5;9802:32;9792:60;;9848:1;9845;9838:12;9792:60;9742:116;:::o;9864:133::-;9907:5;9945:6;9932:20;9923:29;;9961:30;9985:5;9961:30;:::i;:::-;9864:133;;;;:::o;10003:468::-;10068:6;10076;10125:2;10113:9;10104:7;10100:23;10096:32;10093:119;;;10131:79;;:::i;:::-;10093:119;10251:1;10276:53;10321:7;10312:6;10301:9;10297:22;10276:53;:::i;:::-;10266:63;;10222:117;10378:2;10404:50;10446:7;10437:6;10426:9;10422:22;10404:50;:::i;:::-;10394:60;;10349:115;10003:468;;;;;:::o;10477:329::-;10536:6;10585:2;10573:9;10564:7;10560:23;10556:32;10553:119;;;10591:79;;:::i;:::-;10553:119;10711:1;10736:53;10781:7;10772:6;10761:9;10757:22;10736:53;:::i;:::-;10726:63;;10682:117;10477:329;;;;:::o;10812:118::-;10899:24;10917:5;10899:24;:::i;:::-;10894:3;10887:37;10812:118;;:::o;10936:222::-;11029:4;11067:2;11056:9;11052:18;11044:26;;11080:71;11148:1;11137:9;11133:17;11124:6;11080:71;:::i;:::-;10936:222;;;;:::o;11164:76::-;11200:7;11229:5;11218:16;;11164:76;;;:::o;11246:115::-;11331:23;11348:5;11331:23;:::i;:::-;11326:3;11319:36;11246:115;;:::o;11367:989::-;11652:4;11690:3;11679:9;11675:19;11667:27;;11704:71;11772:1;11761:9;11757:17;11748:6;11704:71;:::i;:::-;11785:70;11851:2;11840:9;11836:18;11827:6;11785:70;:::i;:::-;11865;11931:2;11920:9;11916:18;11907:6;11865:70;:::i;:::-;11945:72;12013:2;12002:9;11998:18;11989:6;11945:72;:::i;:::-;12027:73;12095:3;12084:9;12080:19;12071:6;12027:73;:::i;:::-;12110;12178:3;12167:9;12163:19;12154:6;12110:73;:::i;:::-;12193;12261:3;12250:9;12246:19;12237:6;12193:73;:::i;:::-;12276;12344:3;12333:9;12329:19;12320:6;12276:73;:::i;:::-;11367:989;;;;;;;;;;;:::o;12362:698::-;12454:6;12462;12470;12519:2;12507:9;12498:7;12494:23;12490:32;12487:119;;;12525:79;;:::i;:::-;12487:119;12673:1;12662:9;12658:17;12645:31;12703:18;12695:6;12692:30;12689:117;;;12725:79;;:::i;:::-;12689:117;12838:80;12910:7;12901:6;12890:9;12886:22;12838:80;:::i;:::-;12820:98;;;;12616:312;12967:2;12993:50;13035:7;13026:6;13015:9;13011:22;12993:50;:::i;:::-;12983:60;;12938:115;12362:698;;;;;:::o;13066:442::-;13215:4;13253:2;13242:9;13238:18;13230:26;;13266:71;13334:1;13323:9;13319:17;13310:6;13266:71;:::i;:::-;13347:72;13415:2;13404:9;13400:18;13391:6;13347:72;:::i;:::-;13429;13497:2;13486:9;13482:18;13473:6;13429:72;:::i;:::-;13066:442;;;;;;:::o;13514:474::-;13582:6;13590;13639:2;13627:9;13618:7;13614:23;13610:32;13607:119;;;13645:79;;:::i;:::-;13607:119;13765:1;13790:53;13835:7;13826:6;13815:9;13811:22;13790:53;:::i;:::-;13780:63;;13736:117;13892:2;13918:53;13963:7;13954:6;13943:9;13939:22;13918:53;:::i;:::-;13908:63;;13863:118;13514:474;;;;;:::o;13994:180::-;14042:77;14039:1;14032:88;14139:4;14136:1;14129:15;14163:4;14160:1;14153:15;14180:320;14224:6;14261:1;14255:4;14251:12;14241:22;;14308:1;14302:4;14298:12;14329:18;14319:81;;14385:4;14377:6;14373:17;14363:27;;14319:81;14447:2;14439:6;14436:14;14416:18;14413:38;14410:84;;14466:18;;:::i;:::-;14410:84;14231:269;14180:320;;;:::o;14506:182::-;14646:34;14642:1;14634:6;14630:14;14623:58;14506:182;:::o;14694:366::-;14836:3;14857:67;14921:2;14916:3;14857:67;:::i;:::-;14850:74;;14933:93;15022:3;14933:93;:::i;:::-;15051:2;15046:3;15042:12;15035:19;;14694:366;;;:::o;15066:419::-;15232:4;15270:2;15259:9;15255:18;15247:26;;15319:9;15313:4;15309:20;15305:1;15294:9;15290:17;15283:47;15347:131;15473:4;15347:131;:::i;:::-;15339:139;;15066:419;;;:::o;15491:180::-;15539:77;15536:1;15529:88;15636:4;15633:1;15626:15;15660:4;15657:1;15650:15;15677:191;15717:3;15736:20;15754:1;15736:20;:::i;:::-;15731:25;;15770:20;15788:1;15770:20;:::i;:::-;15765:25;;15813:1;15810;15806:9;15799:16;;15834:3;15831:1;15828:10;15825:36;;;15841:18;;:::i;:::-;15825:36;15677:191;;;;:::o;15874:159::-;16014:11;16010:1;16002:6;15998:14;15991:35;15874:159;:::o;16039:365::-;16181:3;16202:66;16266:1;16261:3;16202:66;:::i;:::-;16195:73;;16277:93;16366:3;16277:93;:::i;:::-;16395:2;16390:3;16386:12;16379:19;;16039:365;;;:::o;16410:419::-;16576:4;16614:2;16603:9;16599:18;16591:26;;16663:9;16657:4;16653:20;16649:1;16638:9;16634:17;16627:47;16691:131;16817:4;16691:131;:::i;:::-;16683:139;;16410:419;;;:::o;16835:332::-;16956:4;16994:2;16983:9;16979:18;16971:26;;17007:71;17075:1;17064:9;17060:17;17051:6;17007:71;:::i;:::-;17088:72;17156:2;17145:9;17141:18;17132:6;17088:72;:::i;:::-;16835:332;;;;;:::o;17173:180::-;17221:77;17218:1;17211:88;17318:4;17315:1;17308:15;17342:4;17339:1;17332:15;17359:323;17415:6;17464:2;17452:9;17443:7;17439:23;17435:32;17432:119;;;17470:79;;:::i;:::-;17432:119;17590:1;17615:50;17657:7;17648:6;17637:9;17633:22;17615:50;:::i;:::-;17605:60;;17561:114;17359:323;;;;:::o;17688:167::-;17725:3;17748:22;17764:5;17748:22;:::i;:::-;17739:31;;17792:4;17785:5;17782:15;17779:41;;17800:18;;:::i;:::-;17779:41;17847:1;17840:5;17836:13;17829:20;;17688:167;;;:::o;17861:143::-;17918:5;17949:6;17943:13;17934:22;;17965:33;17992:5;17965:33;:::i;:::-;17861:143;;;;:::o;18010:351::-;18080:6;18129:2;18117:9;18108:7;18104:23;18100:32;18097:119;;;18135:79;;:::i;:::-;18097:119;18255:1;18280:64;18336:7;18327:6;18316:9;18312:22;18280:64;:::i;:::-;18270:74;;18226:128;18010:351;;;;:::o;18367:134::-;18425:9;18458:37;18489:5;18458:37;:::i;:::-;18445:50;;18367:134;;;:::o;18507:147::-;18602:45;18641:5;18602:45;:::i;:::-;18597:3;18590:58;18507:147;;:::o;18660:336::-;18783:4;18821:2;18810:9;18806:18;18798:26;;18834:79;18910:1;18899:9;18895:17;18886:6;18834:79;:::i;:::-;18923:66;18985:2;18974:9;18970:18;18961:6;18923:66;:::i;:::-;18660:336;;;;;:::o;19002:137::-;19056:5;19087:6;19081:13;19072:22;;19103:30;19127:5;19103:30;:::i;:::-;19002:137;;;;:::o;19145:345::-;19212:6;19261:2;19249:9;19240:7;19236:23;19232:32;19229:119;;;19267:79;;:::i;:::-;19229:119;19387:1;19412:61;19465:7;19456:6;19445:9;19441:22;19412:61;:::i;:::-;19402:71;;19358:125;19145:345;;;;:::o;19496:163::-;19636:15;19632:1;19624:6;19620:14;19613:39;19496:163;:::o;19665:366::-;19807:3;19828:67;19892:2;19887:3;19828:67;:::i;:::-;19821:74;;19904:93;19993:3;19904:93;:::i;:::-;20022:2;20017:3;20013:12;20006:19;;19665:366;;;:::o;20037:419::-;20203:4;20241:2;20230:9;20226:18;20218:26;;20290:9;20284:4;20280:20;20276:1;20265:9;20261:17;20254:47;20318:131;20444:4;20318:131;:::i;:::-;20310:139;;20037:419;;;:::o;20462:332::-;20583:4;20621:2;20610:9;20606:18;20598:26;;20634:71;20702:1;20691:9;20687:17;20678:6;20634:71;:::i;:::-;20715:72;20783:2;20772:9;20768:18;20759:6;20715:72;:::i;:::-;20462:332;;;;;:::o;20800:230::-;20940:34;20936:1;20928:6;20924:14;20917:58;21009:13;21004:2;20996:6;20992:15;20985:38;20800:230;:::o;21036:366::-;21178:3;21199:67;21263:2;21258:3;21199:67;:::i;:::-;21192:74;;21275:93;21364:3;21275:93;:::i;:::-;21393:2;21388:3;21384:12;21377:19;;21036:366;;;:::o;21408:419::-;21574:4;21612:2;21601:9;21597:18;21589:26;;21661:9;21655:4;21651:20;21647:1;21636:9;21632:17;21625:47;21689:131;21815:4;21689:131;:::i;:::-;21681:139;;21408:419;;;:::o;21833:663::-;21921:6;21929;21937;21986:2;21974:9;21965:7;21961:23;21957:32;21954:119;;;21992:79;;:::i;:::-;21954:119;22112:1;22137:64;22193:7;22184:6;22173:9;22169:22;22137:64;:::i;:::-;22127:74;;22083:128;22250:2;22276:64;22332:7;22323:6;22312:9;22308:22;22276:64;:::i;:::-;22266:74;;22221:129;22389:2;22415:64;22471:7;22462:6;22451:9;22447:22;22415:64;:::i;:::-;22405:74;;22360:129;21833:663;;;;;:::o;22502:553::-;22679:4;22717:3;22706:9;22702:19;22694:27;;22731:71;22799:1;22788:9;22784:17;22775:6;22731:71;:::i;:::-;22812:72;22880:2;22869:9;22865:18;22856:6;22812:72;:::i;:::-;22894;22962:2;22951:9;22947:18;22938:6;22894:72;:::i;:::-;22976;23044:2;23033:9;23029:18;23020:6;22976:72;:::i;:::-;22502:553;;;;;;;:::o;23061:239::-;23201:34;23197:1;23189:6;23185:14;23178:58;23270:22;23265:2;23257:6;23253:15;23246:47;23061:239;:::o;23306:366::-;23448:3;23469:67;23533:2;23528:3;23469:67;:::i;:::-;23462:74;;23545:93;23634:3;23545:93;:::i;:::-;23663:2;23658:3;23654:12;23647:19;;23306:366;;;:::o;23678:419::-;23844:4;23882:2;23871:9;23867:18;23859:26;;23931:9;23925:4;23921:20;23917:1;23906:9;23902:17;23895:47;23959:131;24085:4;23959:131;:::i;:::-;23951:139;;23678:419;;;:::o;24103:231::-;24243:34;24239:1;24231:6;24227:14;24220:58;24312:14;24307:2;24299:6;24295:15;24288:39;24103:231;:::o;24340:366::-;24482:3;24503:67;24567:2;24562:3;24503:67;:::i;:::-;24496:74;;24579:93;24668:3;24579:93;:::i;:::-;24697:2;24692:3;24688:12;24681:19;;24340:366;;;:::o;24712:419::-;24878:4;24916:2;24905:9;24901:18;24893:26;;24965:9;24959:4;24955:20;24951:1;24940:9;24936:17;24929:47;24993:131;25119:4;24993:131;:::i;:::-;24985:139;;24712:419;;;:::o;25137:240::-;25277:34;25273:1;25265:6;25261:14;25254:58;25346:23;25341:2;25333:6;25329:15;25322:48;25137:240;:::o;25383:366::-;25525:3;25546:67;25610:2;25605:3;25546:67;:::i;:::-;25539:74;;25622:93;25711:3;25622:93;:::i;:::-;25740:2;25735:3;25731:12;25724:19;;25383:366;;;:::o;25755:419::-;25921:4;25959:2;25948:9;25944:18;25936:26;;26008:9;26002:4;25998:20;25994:1;25983:9;25979:17;25972:47;26036:131;26162:4;26036:131;:::i;:::-;26028:139;;25755:419;;;:::o;26180:143::-;26237:5;26268:6;26262:13;26253:22;;26284:33;26311:5;26284:33;:::i;:::-;26180:143;;;;:::o;26329:351::-;26399:6;26448:2;26436:9;26427:7;26423:23;26419:32;26416:119;;;26454:79;;:::i;:::-;26416:119;26574:1;26599:64;26655:7;26646:6;26635:9;26631:22;26599:64;:::i;:::-;26589:74;;26545:128;26329:351;;;;:::o;26686:302::-;26826:34;26822:1;26814:6;26810:14;26803:58;26895:34;26890:2;26882:6;26878:15;26871:59;26964:16;26959:2;26951:6;26947:15;26940:41;26686:302;:::o;26994:366::-;27136:3;27157:67;27221:2;27216:3;27157:67;:::i;:::-;27150:74;;27233:93;27322:3;27233:93;:::i;:::-;27351:2;27346:3;27342:12;27335:19;;26994:366;;;:::o;27366:419::-;27532:4;27570:2;27559:9;27555:18;27547:26;;27619:9;27613:4;27609:20;27605:1;27594:9;27590:17;27583:47;27647:131;27773:4;27647:131;:::i;:::-;27639:139;;27366:419;;;:::o;27791:159::-;27931:11;27927:1;27919:6;27915:14;27908:35;27791:159;:::o;27956:365::-;28098:3;28119:66;28183:1;28178:3;28119:66;:::i;:::-;28112:73;;28194:93;28283:3;28194:93;:::i;:::-;28312:2;28307:3;28303:12;28296:19;;27956:365;;;:::o;28327:419::-;28493:4;28531:2;28520:9;28516:18;28508:26;;28580:9;28574:4;28570:20;28566:1;28555:9;28551:17;28544:47;28608:131;28734:4;28608:131;:::i;:::-;28600:139;;28327:419;;;:::o;28752:224::-;28892:34;28888:1;28880:6;28876:14;28869:58;28961:7;28956:2;28948:6;28944:15;28937:32;28752:224;:::o;28982:366::-;29124:3;29145:67;29209:2;29204:3;29145:67;:::i;:::-;29138:74;;29221:93;29310:3;29221:93;:::i;:::-;29339:2;29334:3;29330:12;29323:19;;28982:366;;;:::o;29354:419::-;29520:4;29558:2;29547:9;29543:18;29535:26;;29607:9;29601:4;29597:20;29593:1;29582:9;29578:17;29571:47;29635:131;29761:4;29635:131;:::i;:::-;29627:139;;29354:419;;;:::o;29779:120::-;29851:23;29868:5;29851:23;:::i;:::-;29844:5;29841:34;29831:62;;29889:1;29886;29879:12;29831:62;29779:120;:::o;29905:141::-;29961:5;29992:6;29986:13;29977:22;;30008:32;30034:5;30008:32;:::i;:::-;29905:141;;;;:::o;30052:1444::-;30183:6;30191;30199;30207;30215;30223;30231;30239;30288:3;30276:9;30267:7;30263:23;30259:33;30256:120;;;30295:79;;:::i;:::-;30256:120;30415:1;30440:64;30496:7;30487:6;30476:9;30472:22;30440:64;:::i;:::-;30430:74;;30386:128;30553:2;30579:63;30634:7;30625:6;30614:9;30610:22;30579:63;:::i;:::-;30569:73;;30524:128;30691:2;30717:63;30772:7;30763:6;30752:9;30748:22;30717:63;:::i;:::-;30707:73;;30662:128;30829:2;30855:64;30911:7;30902:6;30891:9;30887:22;30855:64;:::i;:::-;30845:74;;30800:129;30968:3;30995:64;31051:7;31042:6;31031:9;31027:22;30995:64;:::i;:::-;30985:74;;30939:130;31108:3;31135:64;31191:7;31182:6;31171:9;31167:22;31135:64;:::i;:::-;31125:74;;31079:130;31248:3;31275:64;31331:7;31322:6;31311:9;31307:22;31275:64;:::i;:::-;31265:74;;31219:130;31388:3;31415:64;31471:7;31462:6;31451:9;31447:22;31415:64;:::i;:::-;31405:74;;31359:130;30052:1444;;;;;;;;;;;:::o;31502:237::-;31642:34;31638:1;31630:6;31626:14;31619:58;31711:20;31706:2;31698:6;31694:15;31687:45;31502:237;:::o;31745:366::-;31887:3;31908:67;31972:2;31967:3;31908:67;:::i;:::-;31901:74;;31984:93;32073:3;31984:93;:::i;:::-;32102:2;32097:3;32093:12;32086:19;;31745:366;;;:::o;32117:419::-;32283:4;32321:2;32310:9;32306:18;32298:26;;32370:9;32364:4;32360:20;32356:1;32345:9;32341:17;32334:47;32398:131;32524:4;32398:131;:::i;:::-;32390:139;;32117:419;;;:::o;32542:233::-;32581:3;32604:24;32622:5;32604:24;:::i;:::-;32595:33;;32650:66;32643:5;32640:77;32637:103;;32720:18;;:::i;:::-;32637:103;32767:1;32760:5;32756:13;32749:20;;32542:233;;;:::o;32781:184::-;32880:11;32914:6;32909:3;32902:19;32954:4;32949:3;32945:14;32930:29;;32781:184;;;;:::o;32971:102::-;33040:4;33063:3;33055:11;;32971:102;;;:::o;33079:108::-;33156:24;33174:5;33156:24;:::i;:::-;33151:3;33144:37;33079:108;;:::o;33193:179::-;33262:10;33283:46;33325:3;33317:6;33283:46;:::i;:::-;33361:4;33356:3;33352:14;33338:28;;33193:179;;;;:::o;33378:122::-;33430:5;33455:39;33490:2;33485:3;33481:12;33476:3;33455:39;:::i;:::-;33446:48;;33378:122;;;;:::o;33506:115::-;33578:4;33610;33605:3;33601:14;33593:22;;33506:115;;;:::o;33657:699::-;33786:3;33809:86;33888:6;33883:3;33809:86;:::i;:::-;33802:93;;33919:58;33971:5;33919:58;:::i;:::-;34000:7;34031:1;34016:315;34041:6;34038:1;34035:13;34016:315;;;34111:42;34146:6;34137:7;34111:42;:::i;:::-;34173:63;34232:3;34217:13;34173:63;:::i;:::-;34166:70;;34259:62;34314:6;34259:62;:::i;:::-;34249:72;;34076:255;34063:1;34060;34056:9;34051:14;;34016:315;;;34020:14;34347:3;34340:10;;33791:565;;33657:699;;;;;:::o;34362:491::-;34537:4;34575:2;34564:9;34560:18;34552:26;;34624:9;34618:4;34614:20;34610:1;34599:9;34595:17;34588:47;34652:118;34765:4;34756:6;34748;34652:118;:::i;:::-;34644:126;;34780:66;34842:2;34831:9;34827:18;34818:6;34780:66;:::i;:::-;34362:491;;;;;;:::o;34859:348::-;34899:7;34922:20;34940:1;34922:20;:::i;:::-;34917:25;;34956:20;34974:1;34956:20;:::i;:::-;34951:25;;35144:1;35076:66;35072:74;35069:1;35066:81;35061:1;35054:9;35047:17;35043:105;35040:131;;;35151:18;;:::i;:::-;35040:131;35199:1;35196;35192:9;35181:20;;34859:348;;;;:::o;35213:180::-;35261:77;35258:1;35251:88;35358:4;35355:1;35348:15;35382:4;35379:1;35372:15;35399:185;35439:1;35456:20;35474:1;35456:20;:::i;:::-;35451:25;;35490:20;35508:1;35490:20;:::i;:::-;35485:25;;35529:1;35519:35;;35534:18;;:::i;:::-;35519:35;35576:1;35573;35569:9;35564:14;;35399:185;;;;:::o;35590:194::-;35630:4;35650:20;35668:1;35650:20;:::i;:::-;35645:25;;35684:20;35702:1;35684:20;:::i;:::-;35679:25;;35728:1;35725;35721:9;35713:17;;35752:1;35746:4;35743:11;35740:37;;;35757:18;;:::i;:::-;35740:37;35590:194;;;;:::o;35790:225::-;35930:34;35926:1;35918:6;35914:14;35907:58;35999:8;35994:2;35986:6;35982:15;35975:33;35790:225;:::o;36021:366::-;36163:3;36184:67;36248:2;36243:3;36184:67;:::i;:::-;36177:74;;36260:93;36349:3;36260:93;:::i;:::-;36378:2;36373:3;36369:12;36362:19;;36021:366;;;:::o;36393:419::-;36559:4;36597:2;36586:9;36582:18;36574:26;;36646:9;36640:4;36636:20;36632:1;36621:9;36617:17;36610:47;36674:131;36800:4;36674:131;:::i;:::-;36666:139;;36393:419;;;:::o;36818:223::-;36958:34;36954:1;36946:6;36942:14;36935:58;37027:6;37022:2;37014:6;37010:15;37003:31;36818:223;:::o;37047:366::-;37189:3;37210:67;37274:2;37269:3;37210:67;:::i;:::-;37203:74;;37286:93;37375:3;37286:93;:::i;:::-;37404:2;37399:3;37395:12;37388:19;;37047:366;;;:::o;37419:419::-;37585:4;37623:2;37612:9;37608:18;37600:26;;37672:9;37666:4;37662:20;37658:1;37647:9;37643:17;37636:47;37700:131;37826:4;37700:131;:::i;:::-;37692:139;;37419:419;;;:::o;37844:221::-;37984:34;37980:1;37972:6;37968:14;37961:58;38053:4;38048:2;38040:6;38036:15;38029:29;37844:221;:::o;38071:366::-;38213:3;38234:67;38298:2;38293:3;38234:67;:::i;:::-;38227:74;;38310:93;38399:3;38310:93;:::i;:::-;38428:2;38423:3;38419:12;38412:19;;38071:366;;;:::o;38443:419::-;38609:4;38647:2;38636:9;38632:18;38624:26;;38696:9;38690:4;38686:20;38682:1;38671:9;38667:17;38660:47;38724:131;38850:4;38724:131;:::i;:::-;38716:139;;38443:419;;;:::o;38868:179::-;39008:31;39004:1;38996:6;38992:14;38985:55;38868:179;:::o;39053:366::-;39195:3;39216:67;39280:2;39275:3;39216:67;:::i;:::-;39209:74;;39292:93;39381:3;39292:93;:::i;:::-;39410:2;39405:3;39401:12;39394:19;;39053:366;;;:::o;39425:419::-;39591:4;39629:2;39618:9;39614:18;39606:26;;39678:9;39672:4;39668:20;39664:1;39653:9;39649:17;39642:47;39706:131;39832:4;39706:131;:::i;:::-;39698:139;;39425:419;;;:::o;39850:169::-;39990:21;39986:1;39978:6;39974:14;39967:45;39850:169;:::o;40025:366::-;40167:3;40188:67;40252:2;40247:3;40188:67;:::i;:::-;40181:74;;40264:93;40353:3;40264:93;:::i;:::-;40382:2;40377:3;40373:12;40366:19;;40025:366;;;:::o;40397:419::-;40563:4;40601:2;40590:9;40586:18;40578:26;;40650:9;40644:4;40640:20;40636:1;40625:9;40621:17;40614:47;40678:131;40804:4;40678:131;:::i;:::-;40670:139;;40397:419;;;:::o;40822:173::-;40962:25;40958:1;40950:6;40946:14;40939:49;40822:173;:::o;41001:366::-;41143:3;41164:67;41228:2;41223:3;41164:67;:::i;:::-;41157:74;;41240:93;41329:3;41240:93;:::i;:::-;41358:2;41353:3;41349:12;41342:19;;41001:366;;;:::o;41373:419::-;41539:4;41577:2;41566:9;41562:18;41554:26;;41626:9;41620:4;41616:20;41612:1;41601:9;41597:17;41590:47;41654:131;41780:4;41654:131;:::i;:::-;41646:139;;41373:419;;;:::o;41798:147::-;41899:11;41936:3;41921:18;;41798:147;;;;:::o;41951:114::-;;:::o;42071:398::-;42230:3;42251:83;42332:1;42327:3;42251:83;:::i;:::-;42244:90;;42343:93;42432:3;42343:93;:::i;:::-;42461:1;42456:3;42452:11;42445:18;;42071:398;;;:::o;42475:379::-;42659:3;42681:147;42824:3;42681:147;:::i;:::-;42674:154;;42845:3;42838:10;;42475:379;;;:::o;42860:169::-;43000:21;42996:1;42988:6;42984:14;42977:45;42860:169;:::o;43035:366::-;43177:3;43198:67;43262:2;43257:3;43198:67;:::i;:::-;43191:74;;43274:93;43363:3;43274:93;:::i;:::-;43392:2;43387:3;43383:12;43376:19;;43035:366;;;:::o;43407:419::-;43573:4;43611:2;43600:9;43596:18;43588:26;;43660:9;43654:4;43650:20;43646:1;43635:9;43631:17;43624:47;43688:131;43814:4;43688:131;:::i;:::-;43680:139;;43407:419;;;:::o;43832:224::-;43972:34;43968:1;43960:6;43956:14;43949:58;44041:7;44036:2;44028:6;44024:15;44017:32;43832:224;:::o;44062:366::-;44204:3;44225:67;44289:2;44284:3;44225:67;:::i;:::-;44218:74;;44301:93;44390:3;44301:93;:::i;:::-;44419:2;44414:3;44410:12;44403:19;;44062:366;;;:::o;44434:419::-;44600:4;44638:2;44627:9;44623:18;44615:26;;44687:9;44681:4;44677:20;44673:1;44662:9;44658:17;44651:47;44715:131;44841:4;44715:131;:::i;:::-;44707:139;;44434:419;;;:::o;44859:222::-;44999:34;44995:1;44987:6;44983:14;44976:58;45068:5;45063:2;45055:6;45051:15;45044:30;44859:222;:::o;45087:366::-;45229:3;45250:67;45314:2;45309:3;45250:67;:::i;:::-;45243:74;;45326:93;45415:3;45326:93;:::i;:::-;45444:2;45439:3;45435:12;45428:19;;45087:366;;;:::o;45459:419::-;45625:4;45663:2;45652:9;45648:18;45640:26;;45712:9;45706:4;45702:20;45698:1;45687:9;45683:17;45676:47;45740:131;45866:4;45740:131;:::i;:::-;45732:139;;45459:419;;;:::o;45884:225::-;46024:34;46020:1;46012:6;46008:14;46001:58;46093:8;46088:2;46080:6;46076:15;46069:33;45884:225;:::o;46115:366::-;46257:3;46278:67;46342:2;46337:3;46278:67;:::i;:::-;46271:74;;46354:93;46443:3;46354:93;:::i;:::-;46472:2;46467:3;46463:12;46456:19;;46115:366;;;:::o;46487:419::-;46653:4;46691:2;46680:9;46676:18;46668:26;;46740:9;46734:4;46730:20;46726:1;46715:9;46711:17;46704:47;46768:131;46894:4;46768:131;:::i;:::-;46760:139;;46487:419;;;:::o;46912:332::-;47033:4;47071:2;47060:9;47056:18;47048:26;;47084:71;47152:1;47141:9;47137:17;47128:6;47084:71;:::i;:::-;47165:72;47233:2;47222:9;47218:18;47209:6;47165:72;:::i;:::-;46912:332;;;;;:::o;47250:180::-;47298:77;47295:1;47288:88;47395:4;47392:1;47385:15;47419:4;47416:1;47409:15;47436:85;47481:7;47510:5;47499:16;;47436:85;;;:::o;47527:158::-;47585:9;47618:61;47636:42;47645:32;47671:5;47645:32;:::i;:::-;47636:42;:::i;:::-;47618:61;:::i;:::-;47605:74;;47527:158;;;:::o;47691:147::-;47786:45;47825:5;47786:45;:::i;:::-;47781:3;47774:58;47691:147;;:::o;47844:114::-;47911:6;47945:5;47939:12;47929:22;;47844:114;;;:::o;47964:132::-;48031:4;48054:3;48046:11;;48084:4;48079:3;48075:14;48067:22;;47964:132;;;:::o;48102:113::-;48172:4;48204;48199:3;48195:14;48187:22;;48102:113;;;:::o;48251:732::-;48370:3;48399:54;48447:5;48399:54;:::i;:::-;48469:86;48548:6;48543:3;48469:86;:::i;:::-;48462:93;;48579:56;48629:5;48579:56;:::i;:::-;48658:7;48689:1;48674:284;48699:6;48696:1;48693:13;48674:284;;;48775:6;48769:13;48802:63;48861:3;48846:13;48802:63;:::i;:::-;48795:70;;48888:60;48941:6;48888:60;:::i;:::-;48878:70;;48734:224;48721:1;48718;48714:9;48709:14;;48674:284;;;48678:14;48974:3;48967:10;;48375:608;;;48251:732;;;;:::o;48989:831::-;49252:4;49290:3;49279:9;49275:19;49267:27;;49304:71;49372:1;49361:9;49357:17;49348:6;49304:71;:::i;:::-;49385:80;49461:2;49450:9;49446:18;49437:6;49385:80;:::i;:::-;49512:9;49506:4;49502:20;49497:2;49486:9;49482:18;49475:48;49540:108;49643:4;49634:6;49540:108;:::i;:::-;49532:116;;49658:72;49726:2;49715:9;49711:18;49702:6;49658:72;:::i;:::-;49740:73;49808:3;49797:9;49793:19;49784:6;49740:73;:::i;:::-;48989:831;;;;;;;;:::o

Swarm Source

ipfs://f9f6feab88370046c402beacf2af47b377deb74817e898fa3beb15d8a36b776f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.