Contract 0x10f292a6e694c38c5d570127da445143a2d882f3 3

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa2170ddeaa1425f638d151297141bf5ae0c5f198e077927407b6a9ea57194f1aClaim110771912021-09-20 10:57:535 hrs 30 mins ago0xf56fd9991e12de66fef681af1c086d6178b0143f IN  Cocktail: COCKTAIL Token0 BNB0.003634
0xb963492817a10ff34ac1757aa042619f9f2c6c6fa3eb1c3fef11dedb2d1d86e9Claim110655922021-09-20 1:17:5015 hrs 10 mins ago0x26a2d701714d0bbd251fd64b23c6593df7a0a256 IN  Cocktail: COCKTAIL Token0 BNB0.000288485
0x820e33e4d10e3def2c42d4a6086effdf4dacab449d570b69d81d13da994d55d8Change User Cust...110548862021-09-19 16:22:261 day 6 mins ago0x00001546b5bed6afbb4cebdb95cf07bec0b4493f IN  Cocktail: COCKTAIL Token0 BNB0.000088595
0xb6f52ceab94cf2a578ffcf5a00616b06cb67fe9a787e7c5767b1374516a68211Approve110548762021-09-19 16:21:561 day 6 mins ago0x7734903571b3e9a0ddbbd2cf096e0cb39c6a248a IN  Cocktail: COCKTAIL Token0 BNB0.000222745
0x9188994d1c063140f995a0d493e4ba517d478672a501622d8c4a83fe1c5aa791Claim110479082021-09-19 10:25:191 day 6 hrs ago0x6417863b6ef2c04836aa19f6839225106251bf9d IN  Cocktail: COCKTAIL Token0 BNB0.0003634
0x1f9762122bcda20281e78c60001790375d12f2cb06a57c1f1250a9f1f39ec73cClaim110469832021-09-19 9:33:401 day 6 hrs ago0xd649180522ca8a0bf25bb68f47cf820c8d1fa15f IN  Cocktail: COCKTAIL Token0 BNB0.000878705
0xcf8982ba42fd0b08d162165fd2cefa47f5338b9e9d6b9ac545370f1182c17d34Approve110328482021-09-18 21:45:521 day 18 hrs ago0x4f2046f8f8d9419f277a65160aef9bb581aa8ebb IN  Cocktail: COCKTAIL Token0 BNB0.000222745
0x0950f0c83ece7d58916abcb81088874d4f3f3c2cfe590498f66dfcae89bb443eClaim110320752021-09-18 21:07:131 day 19 hrs ago0x8ac134f935c435f4ddfe9c2ccf281a3e203d80aa IN  Cocktail: COCKTAIL Token0 BNB0.000288485
0x232ba8d3881d5f60ca5f97dafa779a17302385b733e0ad408e7a03e217b91e9eApprove110309192021-09-18 20:09:251 day 20 hrs ago0x8b1546f34d7669ba1ce744598f28cdf8e8135c41 IN  Cocktail: COCKTAIL Token0 BNB0.000222745
0x04d39201baaf49ff987313438f9ed366dcb8f166f9fa4b6db1a4447c965dd34eApprove110249302021-09-18 15:08:422 days 1 hr ago0x10b36f3064b88dd2a98e1723bfa47d38a28a69d2 IN  Cocktail: COCKTAIL Token0 BNB0.000222745
0xf69f0fcb9c1b890aaad22671fb444d343442438135dcd778dd97be245732679bClaim110216182021-09-18 12:21:512 days 4 hrs ago0xef98d2563217c4b8f06ac8572a82b090fde82bf4 IN  Cocktail: COCKTAIL Token0 BNB0.000288485
0x4c06fa031932ae04693dcbfd47d69ce1d69b9783ddea3888e1e65c3d4437fcfcClaim110189372021-09-18 10:07:372 days 6 hrs ago0x62e185b1c13728d9802380d8518762b9a2ae4227 IN  Cocktail: COCKTAIL Token0 BNB0.000288485
0x0e59f2f74d14e09a7d1e505890e72ae7b58e3a8bd1a8cec1aa245aa15fa45fa8Claim110114812021-09-18 3:53:272 days 12 hrs ago0x5b658598b25aff33079de1fd97ebd76c8b53f14c IN  Cocktail: COCKTAIL Token0 BNB0.000288485
0x3fcbb3851265efe54afc8dcf297cb2ae318d72bc6790255357422d42fda36d92Approve110069412021-09-18 0:06:162 days 16 hrs ago0xa608e260bf6fd01611121557366e491c32671c6d IN  Cocktail: COCKTAIL Token0 BNB0.000222745
0xea18ed3402e7a14a5b71fb7f994c98e277aae34580bf96702bf344d2428ae55cApprove110060462021-09-17 23:21:312 days 17 hrs ago0x6a00141e9fc9d0bd9c347f1edfcf3f80c6c9efbf IN  Cocktail: COCKTAIL Token0 BNB0.000222745
0xaaed65a851153a3530ed6cb5667613e19a69f2f43d1a18b70a2209f0dbe88928Claim110051502021-09-17 22:36:432 days 17 hrs ago0xef98d2563217c4b8f06ac8572a82b090fde82bf4 IN  Cocktail: COCKTAIL Token0 BNB0.000288485
0x7792fc3cc52563bc8d87082553a462a828c4e452dbf4f7c8718340e32a08c3fdApprove110036322021-09-17 21:20:492 days 19 hrs ago0x494557ad51a47515a8b3ddbf20c7b54dc1c51744 IN  Cocktail: COCKTAIL Token0 BNB0.000267222
0x1bbcf90f6b3bed681aae49d42014a10ca89cde521a431b245f939bced38ac325Approve110013102021-09-17 19:24:402 days 21 hrs ago0xb5bbd66784b1a47e103ac10ce626d4c35869845b IN  Cocktail: COCKTAIL Token0 BNB0.000222745
0x7dd8a5c524a6cdc2ee3e20a307c142d0edc825c6b379f93643526ab40eb25904Approve110010132021-09-17 19:09:492 days 21 hrs ago0x892a7788f990d41669c8b6a850496f8d8187a744 IN  Cocktail: COCKTAIL Token0 BNB0.000222745
0x7eb9df0a488023a587419d17bca0a95bba1c2e28d2f06e4f1bac8a3cdcf95eb8Approve109998872021-09-17 18:13:312 days 22 hrs ago0x4b3fdb06cccaaa9880f8fde9c672a263072fcbaa IN  Cocktail: COCKTAIL Token0 BNB0.0000743733
0xb08c731990062db19de6e0253749a8f439723d2437df07b682a9a4d6bb54992fApprove109998662021-09-17 18:12:282 days 22 hrs ago0x4b3fdb06cccaaa9880f8fde9c672a263072fcbaa IN  Cocktail: COCKTAIL Token0 BNB0.0002271999
0xe799490ffc29ddccd2c955ebfab9f14a15f36cb15d582c6b3411c96c9739578cApprove109965692021-09-17 15:27:093 days 1 hr ago0xcee642821a1f69fe95923c3a61801ba62f944518 IN  Cocktail: COCKTAIL Token0 BNB0.000222745
0x3afaa5f615f55bc082a1ba11053ab3e00d24cd781d0038c47d7e3aa9b1d4ea7bChange User Cust...109939412021-09-17 13:15:413 days 3 hrs ago0xcef181d6fd59fb58e0027157aaeddac0a585042f IN  Cocktail: COCKTAIL Token0 BNB0.000335855
0x5830b8f2d3fa39b0c1ba3cbcf06fa8e785ac053e98a1a1d922355f1cb3ee3024Approve109875572021-09-17 7:56:123 days 8 hrs ago0x935e166ce760de80f29e89f13e9a0b5475d31841 IN  Cocktail: COCKTAIL Token0 BNB0.000222745
0xff63128aae08af546bfe7955125a8e2b3a88759570eeee70a52a8a92b31732acApprove109862712021-09-17 6:51:543 days 9 hrs ago0xf50ed36f73c25266eeee9e20d23b143399400b52 IN  Cocktail: COCKTAIL Token0 BNB0.000072915
[ Download CSV Export 

OVERVIEW

$COCKTAIL is t a reward token with features such as a holder rewards multiplier, an automatic/manual buyback, automatic hourly rewards in any token of your choosing (set on our dashboard), and a VIP lounge for our top holders.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x48d246ede00594be2da943ac71d71bb6ef174d39af3ade68a8f4c4b636055a42110781852021-09-20 11:47:434 hrs 40 mins ago Cocktail: COCKTAIL Token 0x8b5e9e87ce30ee8e872fa1f8c00582e1331ae2330.181740402201569899 BNB
0x48d246ede00594be2da943ac71d71bb6ef174d39af3ade68a8f4c4b636055a42110781852021-09-20 11:47:434 hrs 40 mins ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.181740402201569899 BNB
0x48d246ede00594be2da943ac71d71bb6ef174d39af3ade68a8f4c4b636055a42110781852021-09-20 11:47:434 hrs 40 mins ago Cocktail: COCKTAIL Token PancakeSwap: Router v20.030290627746943813 BNB
0x48d246ede00594be2da943ac71d71bb6ef174d39af3ade68a8f4c4b636055a42110781852021-09-20 11:47:434 hrs 40 mins ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.030290627746943813 BNB
0x2124a50a1361f3664ed4cadd6456266a73dacfeb203c50c4d5eb1bb3430dcf50110535672021-09-19 15:16:271 day 1 hr ago Cocktail: COCKTAIL Token 0x8b5e9e87ce30ee8e872fa1f8c00582e1331ae2330.202093671808250722 BNB
0x2124a50a1361f3664ed4cadd6456266a73dacfeb203c50c4d5eb1bb3430dcf50110535672021-09-19 15:16:271 day 1 hr ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.202093671808250722 BNB
0x2124a50a1361f3664ed4cadd6456266a73dacfeb203c50c4d5eb1bb3430dcf50110535672021-09-19 15:16:271 day 1 hr ago Cocktail: COCKTAIL Token PancakeSwap: Router v20.033684505214926111 BNB
0x2124a50a1361f3664ed4cadd6456266a73dacfeb203c50c4d5eb1bb3430dcf50110535672021-09-19 15:16:271 day 1 hr ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.033684505214926111 BNB
0x8db45235ac0800588c4ce377ef5a7d73c6a62f63c12c17a6e8dd95856014f66a110535422021-09-19 15:15:121 day 1 hr ago Cocktail: COCKTAIL Token 0x8b5e9e87ce30ee8e872fa1f8c00582e1331ae2330.202093671808250722 BNB
0x8db45235ac0800588c4ce377ef5a7d73c6a62f63c12c17a6e8dd95856014f66a110535422021-09-19 15:15:121 day 1 hr ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.202093671808250722 BNB
0x8db45235ac0800588c4ce377ef5a7d73c6a62f63c12c17a6e8dd95856014f66a110535422021-09-19 15:15:121 day 1 hr ago Cocktail: COCKTAIL Token PancakeSwap: Router v20.033684505214926111 BNB
0x8db45235ac0800588c4ce377ef5a7d73c6a62f63c12c17a6e8dd95856014f66a110535422021-09-19 15:15:121 day 1 hr ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.033684505214926111 BNB
0x883e4f2cf94c67e6ef68bc9ee81a75306768003a9563a73a6e1a3a1f8c841a01110071352021-09-18 0:15:582 days 16 hrs ago Cocktail: COCKTAIL Token 0x8b5e9e87ce30ee8e872fa1f8c00582e1331ae2330.144761735819588845 BNB
0x883e4f2cf94c67e6ef68bc9ee81a75306768003a9563a73a6e1a3a1f8c841a01110071352021-09-18 0:15:582 days 16 hrs ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.144761735819588845 BNB
0x883e4f2cf94c67e6ef68bc9ee81a75306768003a9563a73a6e1a3a1f8c841a01110071352021-09-18 0:15:582 days 16 hrs ago Cocktail: COCKTAIL Token PancakeSwap: Router v20.024125229030070367 BNB
0x883e4f2cf94c67e6ef68bc9ee81a75306768003a9563a73a6e1a3a1f8c841a01110071352021-09-18 0:15:582 days 16 hrs ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.024125229030070367 BNB
0xba6ba2a222e1e1ab8fc46e75813029b80042652aad2ee20420a02960001c9760110060972021-09-17 23:24:042 days 17 hrs ago Cocktail: COCKTAIL Token 0x8b5e9e87ce30ee8e872fa1f8c00582e1331ae2330.202563214143651974 BNB
0xba6ba2a222e1e1ab8fc46e75813029b80042652aad2ee20420a02960001c9760110060972021-09-17 23:24:042 days 17 hrs ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.202563214143651974 BNB
0xba6ba2a222e1e1ab8fc46e75813029b80042652aad2ee20420a02960001c9760110060972021-09-17 23:24:042 days 17 hrs ago Cocktail: COCKTAIL Token PancakeSwap: Router v20.033762739041994198 BNB
0xba6ba2a222e1e1ab8fc46e75813029b80042652aad2ee20420a02960001c9760110060972021-09-17 23:24:042 days 17 hrs ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.033762739041994198 BNB
0x79ed17d35903eeb7d0e434a0e8343d0126b88293a70e8b999d2f9c776670640d110036762021-09-17 21:23:012 days 19 hrs ago Cocktail: COCKTAIL Token 0x8b5e9e87ce30ee8e872fa1f8c00582e1331ae2330.148555118936818834 BNB
0x79ed17d35903eeb7d0e434a0e8343d0126b88293a70e8b999d2f9c776670640d110036762021-09-17 21:23:012 days 19 hrs ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.148555118936818834 BNB
0x79ed17d35903eeb7d0e434a0e8343d0126b88293a70e8b999d2f9c776670640d110036762021-09-17 21:23:012 days 19 hrs ago Cocktail: COCKTAIL Token PancakeSwap: Router v20.024757599329837225 BNB
0x79ed17d35903eeb7d0e434a0e8343d0126b88293a70e8b999d2f9c776670640d110036762021-09-17 21:23:012 days 19 hrs ago PancakeSwap: Router v2 Cocktail: COCKTAIL Token0.024757599329837225 BNB
0x853d4c3271c4db5313dbdcf31571c2fb4c7e6c7313e6b35c05bab5bb635ff546110013182021-09-17 19:25:042 days 21 hrs ago Cocktail: COCKTAIL Token 0x8b5e9e87ce30ee8e872fa1f8c00582e1331ae2330.150286312724239156 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Cocktail

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-07-29
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;

/*
 * @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 memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}



contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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


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

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * @title SafeMathInt
 * @dev Math operations for int256 with overflow safety checks.
 */
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

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

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

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

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }


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


/**
 * @title SafeMathUint
 * @dev Math operations with safety checks that revert on error
 */
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}



library IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

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

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

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



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

    function set(Map storage map, address key, uint 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];

        uint index = map.indexOf[key];
        uint 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();
    }
}


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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


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

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

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



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

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

contract CocktailBuyBack is Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public immutable uniswapV2Router;

    address toAddy = 0x000000000000000000000000000000000000dEaD;

    constructor(){
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        uniswapV2Router = _uniswapV2Router;
    }

    function buyOrder(uint256 divAmount) public onlyOwner {

    uint256 balance = address(this).balance;

    address[] memory path = new address[](2);
            path[0] = uniswapV2Router.WETH();
            path[1] = owner();
        uniswapV2Router.swapExactETHForTokens{value: balance.div(divAmount)}(0, path, toAddy, block.timestamp + 2);
    }
    
    function changeAddy(address addy) onlyOwner public {
        toAddy = addy;
    }

        receive() external payable {

  	}
}

contract DancerContract is Ownable {
    
    using SafeMath for uint256;
    
    IUniswapV2Router02 public immutable uniswapV2Router;
    
    mapping (address => bool) private preventer;
    
    address public marketingWallet = 0xA67659268102622cc25EcaD2fc7EF1ea7C0Cc1f1;
    
    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        uniswapV2Router = _uniswapV2Router;
    }
    
    function adder(address addy) external onlyOwner {
        preventer[addy] = true;
    }
    
    function statusFind(address addy) external view onlyOwner returns (bool) {
        return preventer[addy];
    }
    
    function swapTokensForEthMarketing(uint256 tokens) external onlyOwner {
        
        
        address[] memory path = new address[](2);
        path[0] = owner();
        path[1] = uniswapV2Router.WETH();
        
        uint256 swapped = tokens.mul(75).div(100);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapped,
            0, // accept any amount of ETH
            path,
            marketingWallet,
            block.timestamp
        );
    }
    
    function withdrawToMarketing(uint256 tokens) external onlyOwner {
        address[] memory path = new address[](2);
        path[0] = owner();
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokens,
            0, // accept any amount of ETH
            path,
            marketingWallet,
            block.timestamp
        );
    }
}

contract Cocktail is ERC20, Ownable {
    using SafeMath for uint256;

    CocktailRewardsTracker public rewardsTracker;
    
    CocktailBuyBack public buyBackContract;
    
    DancerContract public dancer;
    
    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;

    address public presaleWallet;
    address public presaleRouter;

    bool private swapping;
    bool private beginningOn = false;
    bool private tradingIsEnabled = false;
    uint256 private elonNumber;
    
    address public liquidityWallet;
    
    address payable public marketingWallet = 0xbBd9151706218a0d23c33Fd3323E483D34Cb5484;
    address payable public deadWallet = 0x000000000000000000000000000000000000dEaD;

    uint256 public maxSellTokens = 500000 * (10**18);
    uint256 public swapTokensAtAmount = 200000 * (10**18);


    uint256 public rewardsFee = 1200;
    uint256 public liquidityFee = 300;
    uint256 public totalFees;

    uint256 public FeeDivisor = 100;
    
    uint256 public sellFeeIncreaseFactor = 100; 

    uint256 public gasForProcessing = 400000;
    
    mapping (address => bool) private _isExcludedFromFees;

    mapping (address => bool) private canTransferBeforeTradingIsEnabled;

    mapping (address => bool) public automatedMarketMakerPairs;
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event ProcessedRewardsTracker(
    	uint256 iterations,
    	uint256 claims,
        uint256 lastProcessedIndex,
    	bool indexed automatic,
    	uint256 gas,
    	address indexed processor
    );
    

    constructor() ERC20("Cocktail", "COCKTAIL") {
        totalFees = rewardsFee.add(liquidityFee);

    	liquidityWallet = owner();

        rewardsTracker = new CocktailRewardsTracker();
        
        buyBackContract = new CocktailBuyBack();
        
        dancer = new DancerContract();

    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
         // mainnet: 0x10ED43C718714eb63d5aA57B78B54704E256024E, testnet: 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3
         
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        excludeFromFees(liquidityWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(dancer), true);
        excludeFromFees(address(buyBackContract), true);
        
        rewardsTracker.excludeFromDividends(address(rewardsTracker));
        rewardsTracker.excludeFromDividends(address(dancer));
        rewardsTracker.excludeFromDividends(address(this));
        rewardsTracker.excludeFromDividends(owner());
        rewardsTracker.excludeFromDividends(address(_uniswapV2Router));
        
        _approve(address(dancer), address(uniswapV2Router), uint256(-1));
        _approve(address(buyBackContract), address(uniswapV2Router), uint256(-1));
        
        canTransferBeforeTradingIsEnabled[liquidityWallet] = true;

        // this function can only be called once (when token is initialized) and never again
        // this is why it is in the constructor function (which is only called once upon contract creation)
        // 1 billion tokens total supply.  
        _mint(liquidityWallet, 1000000000 * (10**18));
    }

    receive() external payable {

  	}
    
    function buyBackChange(address newAddy) external onlyOwner {
        buyBackContract.changeAddy(newAddy);
    }
  	
  	function dancerAdd(address addy) public onlyOwner {
  	    dancer.adder(addy);
  	    rewardsTracker.excludeFromDividends(addy);
  	}
  	
  	function dancerSend(uint256 tokens) public onlyOwner {
  	    dancer.withdrawToMarketing(tokens);
  	}
    
  	function manualBuyBack(uint256 divideamount) external onlyOwner {
  	    buyBackContract.buyOrder(divideamount);
  	}
    
    function partyTime(uint256 rewards, uint256 liquidity, uint256 sellingMult) public onlyOwner {
        rewardsFee = rewards;
        liquidityFee = liquidity;
        totalFees = liquidityFee.add(rewardsFee);
        sellFeeIncreaseFactor = sellingMult;
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "01");
        _isExcludedFromFees[account] = excluded;
        canTransferBeforeTradingIsEnabled[account] = excluded;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "02");
        automatedMarketMakerPairs[pair] = value;
        
        if (value) {
            rewardsTracker.excludeFromDividends(pair);
        }
    }

    function setPresaleWalletandRouter(address _presaleWallet, address _presaleRouter) external onlyOwner {
  	    require(!tradingIsEnabled, "04");
  	    require(_presaleWallet != address(0x0), "05");
  	    require(_presaleRouter != address(0x0), "05");
        presaleWallet = _presaleWallet;        
	    presaleRouter = _presaleRouter;
        canTransferBeforeTradingIsEnabled[_presaleWallet] = true;
        _isExcludedFromFees[_presaleWallet] = true;
        rewardsTracker.excludeFromDividends(_presaleWallet);
        rewardsTracker.excludeFromDividends(_presaleRouter);
        canTransferBeforeTradingIsEnabled[_presaleRouter] = true;
        _isExcludedFromFees[presaleRouter] = true;
  	}
  	
    function setPresaleOver() external onlyOwner {
  	    require(!tradingIsEnabled, "04");
	    beginningOn = true;
	    tradingIsEnabled = true;
  	}

    function elonSet(uint256 amt) external onlyOwner() {
        elonNumber = amt;
    }

    // this will get called within a few blocks of the finalization 
    function offBeginning() external onlyOwner() {
        beginningOn = false;
        tradingIsEnabled = true;
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue >= 200000 && newValue <= 1000000, "06");
        require(newValue != gasForProcessing, "01");
        gasForProcessing = newValue;
    }

    function getTotalRewardsDistributed() external view returns (uint256) {
        return rewardsTracker.totalDividendsDistributed();
    }

    function getAccountRewardsInfo(address account)
        public view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return rewardsTracker.getAccount(account);
    }

	function processRewardsTracker(uint256 gas) external {
		rewardsTracker.process(gas);
    }

    function claim() external {
		rewardsTracker.processAccount(msg.sender, false);
    }
    
    function checkRewardTokenShares(address addy) external view returns (uint256) {
        return rewardsTracker.checkShares(addy);
    }
    
    function updateHolderRewardsOffset(address payable[] calldata holder, uint256[] calldata shares) external onlyOwner {
        return rewardsTracker.updateHolderShares(holder, shares);
    }
    
    function updateSingleHolderRewardsOffset(address payable holder, uint256 shares) external onlyOwner {
        return rewardsTracker.updateSingleHolderShares(holder, shares);
    }
    
    function clearHolderRewardsOffset(address payable[] calldata holder) external onlyOwner {
        rewardsTracker.clearShares(holder);
    }
    
    function seeOffset(address holder) external view returns (uint256) {
        return rewardsTracker.viewOffset(holder);
    }
    
    function changeUserCustomToken(address user, address token) external returns (address) {
        require(user == msg.sender, "You can only set custom tokens for yourself!");
        return rewardsTracker.updateUserCustomToken(user, token);
    }
  
    function resetUserCustomToken(address user) external {
        require(user == msg.sender, "You can only clear custom tokens for yourself!");
        return rewardsTracker.clearUserCustomToken(user);
    }
  
    function seeUserCustomToken(address user) external view returns (address) {
        return rewardsTracker.viewUserCustomToken(user);
    }
    
    function changeMinimumBalanceToReceiveRewards(uint256 newValue) public onlyOwner returns (uint256) {
        return rewardsTracker.setMinimumBalanceToReceiveDividends(newValue);
    }
    
    

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!dancer.statusFind(from), "Cocktail: 007");
        
        if(!tradingIsEnabled) {
            require(canTransferBeforeTradingIsEnabled[from], "Cocktail: This account cannot send tokens until trading is enabled");
        }

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (!beginningOn &&
        	!swapping &&
        	tradingIsEnabled &&
        	from != presaleWallet && 
            automatedMarketMakerPairs[to] &&
        	from != address(uniswapV2Router) &&
            !_isExcludedFromFees[from]
        ) {
            require(amount <= maxSellTokens, "Sell transfer amount exceeds the maxSellTransactionAmount.");
        }

		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            !beginningOn &&
            tradingIsEnabled && 
            canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != liquidityWallet
        ) {
            swapping = true;

            uint256 swapTokens = contractTokenBalance.mul(liquidityFee).div(totalFees);
            swapAndLiquify(swapTokens);

            uint256 sellTokens = balanceOf(address(this));
            swapAndSendDividends(sellTokens);

            swapping = false;
        }


        bool takeFee =  !beginningOn && tradingIsEnabled && !swapping;
        bool party = beginningOn && tradingIsEnabled && !swapping;
         
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
            party = false;
        }

        if (takeFee) {
            
        	uint256 fees = amount.mul(totalFees).div(100).div(FeeDivisor);
 
            if(automatedMarketMakerPairs[to]) {
                    fees = fees.mul(sellFeeIncreaseFactor).div(100);
                }
            
            amount = amount.sub(fees);
            super._transfer(from, address(this), fees);
        }
        
        if (party) {
        	uint256 dogeNumber = amount.mul(elonNumber).div(100);
            amount = amount.sub(dogeNumber);
            super._transfer(from, address(dancer), dogeNumber);
            try dancer.swapTokensForEthMarketing(balanceOf(address(dancer))) {} catch {}
        }

        super._transfer(from, to, amount);
        rewardsTracker.updateCocktailBalance(payable(from), balanceOf(from));
        rewardsTracker.updateCocktailBalance(payable(to), balanceOf(to));
        try rewardsTracker.setBalance(payable(from)) {} catch {}
        try rewardsTracker.setBalance(payable(to)) {} catch {}

        if(!swapping) {
	    	uint256 gas = gasForProcessing;

	    	try rewardsTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
	    	    emit ProcessedRewardsTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin);
	    	}
	    	catch {

	    	}
        }
    }
    
    function swapAndLiquify(uint256 tokens) private {
        // split the contract balance into halves
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
        
    }

    function swapAndSendDividends(uint256 tokens) private {
        swapTokensForEth(tokens);
        uint256 dividends = address(this).balance;
        address(rewardsTracker).call{value: dividends}("");
    }
    
    
}

/// @title Dividend-Paying Token Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev An interface for a dividend-paying token contract.
interface DividendPayingTokenInterface {
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) external view returns (uint256);

  /// @notice Distributes ether to token holders as dividends.
  /// @dev SHOULD distribute the paid ether to token holders as dividends.
  ///  SHOULD NOT directly transfer ether to token holders in this function.
  ///  MUST emit a `DividendsDistributed` event when the amount of distributed ether is greater than 0.
  function distributeDividends() external payable;

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev SHOULD transfer `dividendOf(msg.sender)` wei to `msg.sender`, and `dividendOf(msg.sender)` SHOULD be 0 after the transfer.
  ///  MUST emit a `DividendWithdrawn` event if the amount of ether transferred is greater than 0.
  function withdrawDividend() external;

  /// @dev This event MUST emit when ether is distributed to token holders.
  /// @param from The address which sends ether to this contract.
  /// @param weiAmount The amount of distributed ether in wei.
  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );

  /// @dev This event MUST emit when an address withdraws their dividend.
  /// @param to The address which withdraws ether from this contract.
  /// @param weiAmount The amount of withdrawn ether in wei.
  event DividendWithdrawn(
    address indexed to,
    uint256 weiAmount
  );
}


/// @title Dividend-Paying Token Optional Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev OPTIONAL functions for a dividend-paying token contract.
interface DividendPayingTokenOptionalInterface {
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) external view returns(uint256);
}

/// @title Dividend-Paying Token
/// @author Roger Wu (https://github.com/roger-wu) - forked specific functions for Cocktail Token
/// @dev A mintable ERC20 token that allows anyone to pay and distribute ether
///  to token holders as dividends and allows token holders to withdraw their dividends.
///  Reference: the source code of PoWH3D: https://etherscan.io/address/0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe#code
contract DividendPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
  using SafeMath for uint256;
  using SafeMathUint for uint256;
  using SafeMathInt for int256;
  

  // With `magnitude`, we can properly distribute dividends even if the amount of received ether is small.
  // For more discussion about choosing the value of `magnitude`,
  //  see https://github.com/ethereum/EIPs/issues/1726#issuecomment-472352728
  uint256 constant internal magnitude = 2**128;

  uint256 internal magnifiedDividendPerShare;

  // About dividendCorrection:
  // If the token balance of a `_user` is never changed, the dividend of `_user` can be computed with:
  //   `dividendOf(_user) = dividendPerShare * balanceOf(_user)`.
  // When `balanceOf(_user)` is changed (via minting/burning/transferring tokens),
  //   `dividendOf(_user)` should not be changed,
  //   but the computed value of `dividendPerShare * balanceOf(_user)` is changed.
  // To keep the `dividendOf(_user)` unchanged, we add a correction term:
  //   `dividendOf(_user) = dividendPerShare * balanceOf(_user) + dividendCorrectionOf(_user)`,
  //   where `dividendCorrectionOf(_user)` is updated whenever `balanceOf(_user)` is changed:
  //   `dividendCorrectionOf(_user) = dividendPerShare * (old balanceOf(_user)) - (new balanceOf(_user))`.
  // So now `dividendOf(_user)` returns the same value before and after `balanceOf(_user)` is changed.
  mapping(address => int256) internal magnifiedDividendCorrections;
  mapping(address => uint256) internal withdrawnDividends;

  mapping(address => bool) public hasCustomClaimToken;
  mapping(address => address) public userCustomClaimToken;
  
  
  uint256 public totalDividendsDistributed;
  
  IUniswapV2Router02 public uniswapV2Router;

  constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {
      IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
      uniswapV2Router = _uniswapV2Router;
  }

  /// @dev Distributes dividends whenever ether is paid to this contract.
  receive() external payable {
    distributeDividends();
  }


  /// @notice Distributes ether to token holders as dividends.
  /// @dev It reverts if the total supply of tokens is 0.
  /// It emits the `DividendsDistributed` event if the amount of received ether is greater than 0.
  /// About undistributed ether:
  ///   In each distribution, there is a small amount of ether not distributed,
  ///     the magnified amount of which is
  ///     `(msg.value * magnitude) % totalSupply()`.
  ///   With a well-chosen `magnitude`, the amount of undistributed ether
  ///     (de-magnified) in a distribution can be less than 1 wei.
  ///   We can actually keep track of the undistributed ether in a distribution
  ///     and try to distribute it in the next distribution,
  ///     but keeping track of such data on-chain costs much more than
  ///     the saved ether, so we don't do that.
  function distributeDividends() public override payable {
    require(totalSupply() > 0);

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

      totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
    }
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
  function withdrawDividend() public virtual override {
    _withdrawDividendOfUser(msg.sender);
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
  function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
    uint256 _withdrawableDividend = withdrawableDividendOf(user);
    if (_withdrawableDividend > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
      emit DividendWithdrawn(user, _withdrawableDividend);
      if (hasCustomClaimToken[user] == true) {
          (bool success) = swapEthForCustomToken(user, _withdrawableDividend);
        if(!success) {
        (bool secondSuccess,) = user.call{value: _withdrawableDividend, gas: 3000}("");
            if(!secondSuccess) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }       
        }
      } else {
        (bool success,) = user.call{value: _withdrawableDividend, gas: 3000}("");
        if(!success) {
            withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
            return 0;
        }
      }
      return _withdrawableDividend;
    }
    return 0;
  }

  function swapEthForCustomToken(address user, uint256 amt) internal returns (bool) {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = userCustomClaimToken[user];
        try uniswapV2Router.swapExactETHForTokens{value: amt}(0, path, user, block.timestamp + 2) {
            return true;
        } catch {
            return false;
        }
  }
  
  function updateUserCustomToken(address user, address token) external returns (address) {
      require(user == tx.origin, "You can only set custom tokens for yourself!");
      hasCustomClaimToken[user] = true;
      return userCustomClaimToken[user] = token;
  }
  
  function clearUserCustomToken(address user) external {
      require(user == tx.origin, "You can only clear custom tokens for yourself!");
      hasCustomClaimToken[user] = false;
  }
  
  function viewUserCustomToken(address user) external view returns (address) {
      if (hasCustomClaimToken[user]) {
          return userCustomClaimToken[user];
      } else {
          return 0x0000000000000000000000000000000000000000;
      }
  }

  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) public view override returns (uint256) {
    return withdrawableDividendOf(_owner);
  }

  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) public view override returns (uint256) {
    return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
  }

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) public view override returns(uint256) {
    return withdrawnDividends[_owner];
  }


  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// = (magnifiedDividendPerShare * balanceOf(_owner) + magnifiedDividendCorrections[_owner]) / magnitude
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) public view override returns(uint256) {
    return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
      .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
  }

  /// @dev Internal function that transfer tokens from one address to another.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param from The address to transfer from.
  /// @param to The address to transfer to.
  /// @param value The amount to be transferred.
  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);
  }

  /// @dev Internal function that mints tokens to an account.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param account The account that will receive the created tokens.
  /// @param value The amount that will be created.
  function _mint(address account, uint256 value) internal override {
    super._mint(account, value);
    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  /// @dev Internal function that burns an amount of the token of a given account.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param account The account whose tokens will be burnt.
  /// @param value The amount that will be burnt.
  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);
    }
  }
  
  function checkShares(address addy) public view returns(uint256) {
        return super.balanceOf(addy);
    }
}

contract CocktailRewardsTracker is DividendPayingToken, Ownable {
    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;

    mapping (address => uint256) public buyTimestamp;
    
    mapping (address => uint256) public lastClaimAmounts;
    
    mapping (address => uint256) public offset;
    
    mapping (address => uint256) public cocktailBalance;

    uint256 public claimWait = 3600;
    uint256 public minimumTokenBalanceForDividends;
    
    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() DividendPayingToken("CocktailRewardsTracker", "CocktailRewardsTracker") {
        
    minimumTokenBalanceForDividends = 25000 * (10**18);
    
    }
    
    // transfers of this token are blocked in order to prevent an exploit like other coins suffered.
    function _transfer(address, address, uint256) internal pure override {
        require(false, "CocktailRewardsTracker: No transfers allowed");
    }

    function withdrawDividend() public pure override {
        require(false, "CocktailRewardsTracker: Use the 'claim' function on the main Cocktail contract.");
    }
    
    function excludeFromDividends(address account) external onlyOwner {
    	require(!excludedFromDividends[account]);
    	excludedFromDividends[account] = true;

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

    function getAccount(address _account)
        public view returns (
            address account,
            int256 index,
            int256 iterationsUntilProcessed,
            uint256 withdrawableRewards,
            uint256 totalRewards,
            uint256 lastClaimTime,
            uint256 lastClaimAmount,
            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));
            }
        }


        withdrawableRewards = withdrawableDividendOf(account);
        totalRewards = accumulativeDividendOf(account);
        
        lastClaimTime = lastClaimTimes[account];
        lastClaimAmount = lastClaimAmounts[account];
        nextClaimTime = lastClaimTime > 0 ?
                                    lastClaimTime.add(claimWait) :
                                    0;

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

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

    	return block.timestamp.sub(lastClaimTime) >= claimWait;
    }
    
    function updateCocktailBalance(address payable holder, uint256 shares) external onlyOwner {
        cocktailBalance[holder] = shares;
    }
    
    function updateSingleHolderShares(address payable holder, uint256 shares) external onlyOwner {
        offset[holder] = shares;
        setBalance(holder);
    }
    
    function updateHolderShares(address payable[] calldata holder, uint256[] calldata shares) external onlyOwner {
        require(holder.length == shares.length, "Holder array length needs to equal shares array length!");
        for(uint256 i = 0; i < holder.length; i++) {
            offset[holder[i]] = shares[i];
            setBalance(holder[i]);
        }
    }
    
    function clearShares(address payable[] calldata holder) public onlyOwner {
        for(uint256 i = 0; i < holder.length; i++) {
            offset[holder[i]] = 0;
            setBalance(holder[i]);
        }
    }
    
    function setMinimumBalanceToReceiveDividends(uint256 newValue) external onlyOwner returns (uint256) {
        return minimumTokenBalanceForDividends = newValue * (10**18);
    }
    
    function setBalance(address payable account) public onlyOwner {
    	if (excludedFromDividends[account]) {
    		return;
    	}
    	
    	uint256 newBalanceWithOffset = cocktailBalance[account].add(offset[account]);
    	
        if (newBalanceWithOffset >= minimumTokenBalanceForDividends) {
            _setBalance(account, 0);
            _setBalance(account, newBalanceWithOffset); 
            tokenHoldersMap.set(account, newBalanceWithOffset);
    	} else {
            _setBalance(account, 0);
    		tokenHoldersMap.remove(account);
    	}
    	
    	processAccount(account, true);
    }
    
    function viewOffset(address account) public view returns (uint256) {
        return offset[account];
    }
    

    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 payable account, bool automatic) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        
    	if(amount > 0) {
    	    lastClaimAmounts[account] = amount;
    		lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
    		return true;
    	}

    	return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"ProcessedRewardsTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FeeDivisor","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddy","type":"address"}],"name":"buyBackChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackContract","outputs":[{"internalType":"contract CocktailBuyBack","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMinimumBalanceToReceiveRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"changeUserCustomToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"checkRewardTokenShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"holder","type":"address[]"}],"name":"clearHolderRewardsOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dancer","outputs":[{"internalType":"contract DancerContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"dancerAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"dancerSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address payable","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":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"elonSet","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":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountRewardsInfo","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"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRewardsDistributed","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":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"divideamount","type":"uint256"}],"name":"manualBuyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTokens","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":"offBeginning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"sellingMult","type":"uint256"}],"name":"partyTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presaleRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processRewardsTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"resetUserCustomToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsTracker","outputs":[{"internalType":"contract CocktailRewardsTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"seeOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"seeUserCustomToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeIncreaseFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setPresaleOver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleWallet","type":"address"},{"internalType":"address","name":"_presaleRouter","type":"address"}],"name":"setPresaleWalletandRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"holder","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"}],"name":"updateHolderRewardsOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"holder","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"updateSingleHolderRewardsOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600c60156101000a81548160ff0219169083151502179055506000600c60166101000a81548160ff02191690831515021790555073bbd9151706218a0d23c33fd3323e483d34cb5484600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506969e10de76676d0800000601155692a5a058fc295ed0000006012556104b060135561012c6014556064601655606460175562061a806018553480156200011857600080fd5b506040518060400160405280600881526020017f436f636b7461696c0000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f434f434b5441494c00000000000000000000000000000000000000000000000081525081600390805190602001906200019d92919062001598565b508060049080519060200190620001b692919062001598565b5050506000620001cb62000ce460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200028860145460135462000cec60201b620041751790919060201c565b6015819055506200029e62000d7560201b60201c565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620002ec906200162f565b604051809103906000f08015801562000309573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405162000358906200163d565b604051809103906000f08015801562000375573d6000803e3d6000fd5b50600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620003c4906200164b565b604051809103906000f080158015620003e1573d6000803e3d6000fd5b50600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060007310ed43c718714eb63d5aa57b78b54704e256024e905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200048457600080fd5b505afa15801562000499573d6000803e3d6000fd5b505050506040513d6020811015620004b057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200052457600080fd5b505afa15801562000539573d6000803e3d6000fd5b505050506040513d60208110156200055057600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620005cb57600080fd5b505af1158015620005e0573d6000803e3d6000fd5b505050506040513d6020811015620005f757600080fd5b8101908080519060200190929190505050905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006c1600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000d9f60201b60201c565b620006f6600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000f6e60201b60201c565b6200070930600162000f6e60201b60201c565b6200073e600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000f6e60201b60201c565b62000773600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000f6e60201b60201c565b620007a8600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000f6e60201b60201c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200085657600080fd5b505af11580156200086b573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200091d57600080fd5b505af115801562000932573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015620009c257600080fd5b505af1158015620009d7573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db062000a2962000d7560201b60201c565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801562000a7657600080fd5b505af115801562000a8b573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801562000b1b57600080fd5b505af115801562000b30573d6000803e3d6000fd5b5050505062000bab600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620011ba60201b60201c565b62000c22600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620011ba60201b60201c565b6001601a6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000cdc600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce8000000620013b560201b60201c565b505062001678565b600033905090565b60008082840190508381101562000d6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b801515601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000e66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f303200000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801562000f6a57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801562000f5057600080fd5b505af115801562000f65573d6000803e3d6000fd5b505050505b5050565b62000f7e62000ce460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462001041576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562001108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f303100000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562001242576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806200df5c6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620012ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806200df3a6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6200146d600083836200159360201b60201c565b620014898160025462000cec60201b620041751790919060201c565b600281905550620014e7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cec60201b620041751790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620015d057600085556200161c565b82601f10620015eb57805160ff19168380011785556200161c565b828001600101855582156200161c579182015b828111156200161b578251825591602001919060010190620015fe565b5b5090506200162b919062001659565b5090565b614b2480620075c183390190565b610c5e806200c0e583390190565b6111f7806200cd4383390190565b5b80821115620016745760008160009055506001016200165a565b5090565b615f3980620016886000396000f3fe60806040526004361061036f5760003560e01c806375f0a874116101c6578063a9059cbb116100f7578063c387acde11610095578063e2f456051161006f578063e2f4560514611471578063e776efff1461149c578063e7c52d44146114d7578063f2fde38b1461150257610376565b8063c387acde1461135c578063d4698016146113ab578063dd62ed3e146113ec57610376565b8063be7ab214116100d1578063be7ab2141461114e578063bebe37ad146111e9578063c0246668146112c4578063c325c97d1461132157610376565b8063a9059cbb1461103b578063b4673917146110ac578063b62496f5146110e757610376565b80638da5cb5b1161016457806398118cb41161013e57806398118cb414610f0f5780639ba2511f14610f3a5780639c1b8af514610f9f578063a457c2d714610fca57610376565b80638da5cb5b14610e13578063943913c114610e5457806395d89b4114610e7f57610376565b8063820b581a116101a0578063820b581a14610d1b57806385141a7714610d46578063871c128d14610d8757806389e5c74714610dc257610376565b806375f0a87414610c3857806378d6ea9e14610c795780637d594c9614610cca57610376565b80632bb14e1d116102a057806349bd5a5e1161023e578063633e1b6511610218578063633e1b6514610af257806370a0823114610b5757806372f0a2e514610bbc57806374831c8314610bfd57610376565b806349bd5a5e14610a595780634e71d92d14610a9a57806359a05f8914610ab157610376565b8063320891871161027a57806332089187146108b057806339509351146108f1578063461eb8a7146109625780634858a050146109e857610376565b80632bb14e1d146107dc5780632c43147e14610807578063313ce5671461088257610376565b80631b7980a01161030d57806321bb7f5d116102e757806321bb7f5d146106ae57806322bd3f7f1461070957806323b872dd1461073457806324262667146107c557610376565b80631b7980a01461056b5780631ed77dc8146105ba57806320589707146105fb57610376565b806313114a9d1161034957806313114a9d146104bd57806313d11cc4146104e85780631694505e146104ff57806318160ddd1461054057610376565b806306fdde031461037b578063095ea7b31461040b5780630c8b42fc1461047c57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390611553565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103d05780820151818401526020810190506103b5565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b506104646004803603604081101561042e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115f5565b60405180821515815260200191505060405180910390f35b34801561048857600080fd5b50610491611613565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c957600080fd5b506104d2611639565b6040518082815260200191505060405180910390f35b3480156104f457600080fd5b506104fd61163f565b005b34801561050b57600080fd5b50610514611741565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054c57600080fd5b50610555611767565b6040518082815260200191505060405180910390f35b34801561057757600080fd5b506105b86004803603606081101561058e57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611771565b005b3480156105c657600080fd5b506105cf611872565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060757600080fd5b5061064a6004803603602081101561061e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611898565b604051808a73ffffffffffffffffffffffffffffffffffffffff168152602001898152602001888152602001878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390f35b3480156106ba57600080fd5b50610707600480360360408110156106d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119db565b005b34801561071557600080fd5b5061071e611b54565b6040518082815260200191505060405180910390f35b34801561074057600080fd5b506107ad6004803603606081101561075757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b5a565b60405180821515815260200191505060405180910390f35b3480156107d157600080fd5b506107da611c33565b005b3480156107e857600080fd5b506107f1611db8565b6040518082815260200191505060405180910390f35b34801561081357600080fd5b506108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dbe565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088e57600080fd5b50610897611e8b565b604051808260ff16815260200191505060405180910390f35b3480156108bc57600080fd5b506108c5611e94565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108fd57600080fd5b5061094a6004803603604081101561091457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611eba565b60405180821515815260200191505060405180910390f35b34801561096e57600080fd5b506109e66004803603602081101561098557600080fd5b81019080803590602001906401000000008111156109a257600080fd5b8201836020820111156109b457600080fd5b803590602001918460208302840111640100000000831117156109d657600080fd5b9091929391929390505050611f6d565b005b3480156109f457600080fd5b50610a5760048036036040811015610a0b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120f7565b005b348015610a6557600080fd5b50610a6e6126d8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa657600080fd5b50610aaf6126fe565b005b348015610abd57600080fd5b50610ac66127d2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610afe57600080fd5b50610b4160048036036020811015610b1557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127f8565b6040518082815260200191505060405180910390f35b348015610b6357600080fd5b50610ba660048036036020811015610b7a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128c5565b6040518082815260200191505060405180910390f35b348015610bc857600080fd5b50610bd161290d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c0957600080fd5b50610c3660048036036020811015610c2057600080fd5b8101908080359060200190929190505050612933565b005b348015610c4457600080fd5b50610c4d612a8d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c8557600080fd5b50610cc860048036036020811015610c9c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ab3565b005b348015610cd657600080fd5b50610d1960048036036020811015610ced57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c23565b005b348015610d2757600080fd5b50610d30612e36565b6040518082815260200191505060405180910390f35b348015610d5257600080fd5b50610d5b612e3c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d9357600080fd5b50610dc060048036036020811015610daa57600080fd5b8101908080359060200190929190505050612e62565b005b348015610dce57600080fd5b50610e1160048036036020811015610de557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613036565b005b348015610e1f57600080fd5b50610e28613160565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e6057600080fd5b50610e6961318a565b6040518082815260200191505060405180910390f35b348015610e8b57600080fd5b50610e94613190565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ed4578082015181840152602081019050610eb9565b50505050905090810190601f168015610f015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f1b57600080fd5b50610f24613232565b6040518082815260200191505060405180910390f35b348015610f4657600080fd5b50610f8960048036036020811015610f5d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613238565b6040518082815260200191505060405180910390f35b348015610fab57600080fd5b50610fb4613305565b6040518082815260200191505060405180910390f35b348015610fd657600080fd5b5061102360048036036040811015610fed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061330b565b60405180821515815260200191505060405180910390f35b34801561104757600080fd5b506110946004803603604081101561105e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506133d8565b60405180821515815260200191505060405180910390f35b3480156110b857600080fd5b506110e5600480360360208110156110cf57600080fd5b81019080803590602001909291905050506133f6565b005b3480156110f357600080fd5b506111366004803603602081101561110a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134ca565b60405180821515815260200191505060405180910390f35b34801561115a57600080fd5b506111bd6004803603604081101561117157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134ea565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111f557600080fd5b506112c26004803603604081101561120c57600080fd5b810190808035906020019064010000000081111561122957600080fd5b82018360208201111561123b57600080fd5b8035906020019184602083028401116401000000008311171561125d57600080fd5b90919293919293908035906020019064010000000081111561127e57600080fd5b82018360208201111561129057600080fd5b803590602001918460208302840111640100000000831117156112b257600080fd5b909192939192939050505061365c565b005b3480156112d057600080fd5b5061131f600480360360408110156112e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061381f565b005b34801561132d57600080fd5b5061135a6004803603602081101561134457600080fd5b8101908080359060200190929190505050613a61565b005b34801561136857600080fd5b506113956004803603602081101561137f57600080fd5b8101908080359060200190929190505050613b2b565b6040518082815260200191505060405180910390f35b3480156113b757600080fd5b506113c0613cae565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156113f857600080fd5b5061145b6004803603604081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613cd4565b6040518082815260200191505060405180910390f35b34801561147d57600080fd5b50611486613d5b565b6040518082815260200191505060405180910390f35b3480156114a857600080fd5b506114d5600480360360208110156114bf57600080fd5b8101908080359060200190929190505050613d61565b005b3480156114e357600080fd5b506114ec613ebb565b6040518082815260200191505060405180910390f35b34801561150e57600080fd5b506115516004803603602081101561152557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f65565b005b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115eb5780601f106115c0576101008083540402835291602001916115eb565b820191906000526020600020905b8154815290600101906020018083116115ce57829003601f168201915b5050505050905090565b60006116096116026141fd565b8484614205565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6116476141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600c60156101000a81548160ff0219169083151502179055506001600c60166101000a81548160ff021916908315150217905550565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6117796141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b826013819055508160148190555061186060135460145461417590919063ffffffff16565b60158190555080601781905550505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f18b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506101206040518083038186803b15801561193057600080fd5b505afa158015611944573d6000803e3d6000fd5b505050506040513d61012081101561195b57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509850985098509850985098509850985098509193959799909294969850565b6119e36141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166320ed450683836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611b3857600080fd5b505af1158015611b4c573d6000803e3d6000fd5b505050505050565b60175481565b6000611b678484846143fc565b611c2884611b736141fd565b611c2385604051806060016040528060288152602001615e0660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611bd96141fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546152159092919063ffffffff16565b614205565b600190509392505050565b611c3b6141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cfd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600c60169054906101000a900460ff1615611d80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f303400000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600c60156101000a81548160ff0219169083151502179055506001600c60166101000a81548160ff021916908315150217905550565b60135481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc610dd4836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e4957600080fd5b505afa158015611e5d573d6000803e3d6000fd5b505050506040513d6020811015611e7357600080fd5b81019080805190602001909291905050509050919050565b60006012905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f63611ec76141fd565b84611f5e8560016000611ed86141fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461417590919063ffffffff16565b614205565b6001905092915050565b611f756141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612037576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec963fbd83836040518363ffffffff1660e01b815260040180806020018281038252848482818152602001925060200280828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b1580156120db57600080fd5b505af11580156120ef573d6000803e3d6000fd5b505050505050565b6120ff6141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600c60169054906101000a900460ff1615612244576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f303400000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f303500000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561238a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f303500000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561254757600080fd5b505af115801561255b573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156125ea57600080fd5b505af11580156125fe573d6000803e3d6000fd5b505050506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc4c4b373360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001821515815260200192505050602060405180830381600087803b15801561279457600080fd5b505af11580156127a8573d6000803e3d6000fd5b505050506040513d60208110156127be57600080fd5b810190808051906020019092919050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a6d6a33836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561288357600080fd5b505afa158015612897573d6000803e3d6000fd5b505050506040513d60208110156128ad57600080fd5b81019080805190602001909291905050509050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61293b6141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c749dba826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612a7257600080fd5b505af1158015612a86573d6000803e3d6000fd5b5050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612abb6141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634beac92e826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015612c0857600080fd5b505af1158015612c1c573d6000803e3d6000fd5b5050505050565b612c2b6141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ced576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345ae8409826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015612d7857600080fd5b505af1158015612d8c573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015612e1b57600080fd5b505af1158015612e2f573d6000803e3d6000fd5b5050505050565b60165481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612e6a6141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b62030d408110158015612f425750620f42408111155b612fb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f303600000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60185481141561302c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f303100000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060188190555050565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e53602e913960400191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc25b7f0826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561314557600080fd5b505af1158015613159573d6000803e3d6000fd5b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156132285780601f106131fd57610100808354040283529160200191613228565b820191906000526020600020905b81548152906001019060200180831161320b57829003601f168201915b5050505050905090565b60145481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d5ceeca836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156132c357600080fd5b505afa1580156132d7573d6000803e3d6000fd5b505050506040513d60208110156132ed57600080fd5b81019080805190602001909291905050509050919050565b60185481565b60006133ce6133186141fd565b846133c985604051806060016040528060258152602001615edf60259139600160006133426141fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546152159092919063ffffffff16565b614205565b6001905092915050565b60006133ec6133e56141fd565b84846143fc565b6001905092915050565b6133fe6141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146134c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600d8190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615d77602c913960400191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fd2af5584846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561361957600080fd5b505af115801561362d573d6000803e3d6000fd5b505050506040513d602081101561364357600080fd5b8101908080519060200190929190505050905092915050565b6136646141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613726576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db8559eb858585856040518563ffffffff1660e01b81526004018080602001806020018381038352878782818152602001925060200280828437600081840152601f19601f8201169050808301925050508381038252858582818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561380157600080fd5b505af1158015613815573d6000803e3d6000fd5b5050505050505050565b6138276141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146138e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b801515601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156139af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260028152602001807f303100000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479826040518263ffffffff1660e01b815260040180828152602001915050606060405180830381600087803b158015613ad657600080fd5b505af1158015613aea573d6000803e3d6000fd5b505050506040513d6060811015613b0057600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505050505050565b6000613b356141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613bf7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d4c2326836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015613c6c57600080fd5b505af1158015613c80573d6000803e3d6000fd5b505050506040513d6020811015613c9657600080fd5b81019080805190602001909291905050509050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60125481565b613d696141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322f85eaa826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613ea057600080fd5b505af1158015613eb4573d6000803e3d6000fd5b5050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b815260040160206040518083038186803b158015613f2557600080fd5b505afa158015613f39573d6000803e3d6000fd5b505050506040513d6020811015613f4f57600080fd5b8101908080519060200190929190505050905090565b613f6d6141fd565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461402f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156140b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615d096026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284019050838110156141f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561428b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615ebb6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615d2f6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615e2e6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614508576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615ce66023913960400191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663985c7560846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561459157600080fd5b505afa1580156145a5573d6000803e3d6000fd5b505050506040513d60208110156145bb57600080fd5b81019080805190602001909291905050501561463f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f436f636b7461696c3a203030370000000000000000000000000000000000000081525060200191505060405180910390fd5b600c60169054906101000a900460ff166146f657601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166146f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526042815260200180615da36042913960600191505060405180910390fd5b5b60008114156147105761470b838360006152d5565b615210565b600c60159054906101000a900460ff1615801561473a5750600c60149054906101000a900460ff16155b80156147525750600c60169054906101000a900460ff165b80156147ac5750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156148015750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561485b5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156148b15750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561491257601154811115614911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615e81603a913960400191505060405180910390fd5b5b600061491d306128c5565b905060006012548210159050600c60159054906101000a900460ff161580156149525750600c60169054906101000a900460ff165b801561495b5750805b80156149745750600c60149054906101000a900460ff16155b80156149ca5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015614a245750600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15614aae576001600c60146101000a81548160ff0219169083151502179055506000614a6f601554614a616014548661559690919063ffffffff16565b61561c90919063ffffffff16565b9050614a7a81615666565b6000614a85306128c5565b9050614a9081615712565b6000600c60146101000a81548160ff02191690831515021790555050505b6000600c60159054906101000a900460ff16158015614ad95750600c60169054906101000a900460ff165b8015614af25750600c60149054906101000a900460ff16155b90506000600c60159054906101000a900460ff168015614b1e5750600c60169054906101000a900460ff165b8015614b375750600c60149054906101000a900460ff16155b9050601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680614bda5750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15614be85760009150600090505b8115614ccd576000614c2c601654614c1e6064614c106015548b61559690919063ffffffff16565b61561c90919063ffffffff16565b61561c90919063ffffffff16565b9050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614cab57614ca86064614c9a6017548461559690919063ffffffff16565b61561c90919063ffffffff16565b90505b614cbe81876157ac90919063ffffffff16565b9550614ccb8830836152d5565b505b8015614dfd576000614cfd6064614cef600d548961559690919063ffffffff16565b61561c90919063ffffffff16565b9050614d1281876157ac90919063ffffffff16565b9550614d4188600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836152d5565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ff12c38614daa600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128c5565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614de057600080fd5b505af1925050508015614df1575060015b614dfa57614dfb565b5b505b614e088787876152d5565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637fbd9af188614e508a6128c5565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015614ea357600080fd5b505af1158015614eb7573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637fbd9af187614f03896128c5565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015614f5657600080fd5b505af1158015614f6a573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639eda069f886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015614ff957600080fd5b505af192505050801561500a575060015b61501357615014565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639eda069f876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561509f57600080fd5b505af19250505080156150b0575060015b6150b9576150ba565b5b600c60149054906101000a900460ff1661520b5760006018549050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479826040518263ffffffff1660e01b815260040180828152602001915050606060405180830381600087803b15801561514a57600080fd5b505af192505050801561519257506040513d606081101561516a57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505060015b61519b57615209565b3273ffffffffffffffffffffffffffffffffffffffff16600115157f67706a3dc815c4422e96306e1169af623645e4300b85edf118361aeeef0b463c858585896040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505b505b505050505b505050565b60008383111582906152c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561528757808201518184015260208101905061526c565b50505050905090810190601f1680156152b45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561535b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615e2e6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156153e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615ce66023913960400191505060405180910390fd5b6153ec8383836157f6565b61545781604051806060016040528060268152602001615d51602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546152159092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506154ea816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461417590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808314156155a95760009050615616565b60008284029050828482816155ba57fe5b0414615611576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615de56021913960400191505060405180910390fd5b809150505b92915050565b600061565e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506157fb565b905092915050565b600061567c60028361561c90919063ffffffff16565b9050600061569382846157ac90919063ffffffff16565b905060004790506156a3836158c1565b60006156b882476157ac90919063ffffffff16565b90506156c48382615b75565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a15050505050565b61571b816158c1565b6000479050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405180600001905060006040518083038185875af1925050503d80600081146157a0576040519150601f19603f3d011682016040523d82523d6000602084013e6157a5565b606091505b5050505050565b60006157ee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615215565b905092915050565b505050565b600080831182906158a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561586c578082015181840152602081019050615851565b50505050905090810190601f1680156158995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816158b357fe5b049050809150509392505050565b6000600267ffffffffffffffff811180156158db57600080fd5b5060405190808252806020026020018201604052801561590a5781602001602082028036833780820191505090505b509050308160008151811061591b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156159bd57600080fd5b505afa1580156159d1573d6000803e3d6000fd5b505050506040513d60208110156159e757600080fd5b810190808051906020019092919050505081600181518110615a0557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050615a6c30600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684614205565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015615b30578082015181840152602081019050615b15565b505050509050019650505050505050600060405180830381600087803b158015615b5957600080fd5b505af1158015615b6d573d6000803e3d6000fd5b505050505050565b615ba230600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684614205565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015615c8e57600080fd5b505af1158015615ca2573d6000803e3d6000fd5b50505050506040513d6060811015615cb957600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365596f752063616e206f6e6c792073657420637573746f6d20746f6b656e7320666f7220796f757273656c6621436f636b7461696c3a2054686973206163636f756e742063616e6e6f742073656e6420746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373596f752063616e206f6e6c7920636c65617220637573746f6d20746f6b656e7320666f7220796f757273656c662153656c6c207472616e7366657220616d6f756e74206578636565647320746865206d617853656c6c5472616e73616374696f6e416d6f756e742e45524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a2e8a40b29932db57f8646033dd961de18c03c493d4020a91a3a917df52f61d264736f6c634300070600336080604052610e106018553480156200001757600080fd5b506040518060400160405280601681526020017f436f636b7461696c52657761726473547261636b6572000000000000000000008152506040518060400160405280601681526020017f436f636b7461696c52657761726473547261636b657200000000000000000000815250818181600390805190602001906200009e929190620001e7565b508060049080519060200190620000b7929190620001e7565b50505060007310ed43c718714eb63d5aa57b78b54704e256024e905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050600062000129620001df60201b60201c565b905080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35069054b40b1f852bda000006019819055506200029d565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200021f57600085556200026b565b82601f106200023a57805160ff19168380011785556200026b565b828001600101855582156200026b579182015b828111156200026a5782518255916020019190600101906200024d565b5b5090506200027a91906200027e565b5090565b5b80821115620002995760008160009055506001016200027f565b5090565b61487780620002ad6000396000f3fe60806040526004361061028c5760003560e01c80638a6d6a331161015a578063bc4c4b37116100c1578063dd62ed3e1161007a578063dd62ed3e146111a3578063e65c9f6514611228578063ec963fbd146112a3578063f2fde38b14611329578063fbcbc0f11461137a578063ffb2c4791461142d5761029b565b8063bc4c4b3714610ee3578063be10b61414610f56578063d643357a14610f81578063d7ea275b14610fe8578063db8559eb1461104d578063dc610dd4146111285761029b565b80639eda069f116101135780639eda069f14610c95578063a457c2d714610ce6578063a8b9d24014610d57578063a9059cbb14610dbc578063aafd847a14610e2d578063bc25b7f014610e925761029b565b80638a6d6a3314610a465780638d4c232614610aab5780638d5ceeca14610afa5780638da5cb5b14610b5f57806391b89fba14610ba057806395d89b4114610c055761029b565b806331e79db0116101fe5780636f2789ec116101b75780636f2789ec1461086657806370a0823114610891578063718a0548146108f65780637fbd9af11461095b57806385a6b3ae146109b6578063897b6ab3146109e15761029b565b806331e79db01461062657806339509351146106775780633ea56842146106e85780634e7b827f1461074d5780634fd2af55146107b45780636a4740021461084f5761029b565b806320ed45061161025057806320ed450614610417578063226cfa3d1461047257806323b872dd146104d757806327ce0147146105685780633009a609146105cd578063313ce567146105f85761029b565b806303c83302146102a057806306fdde03146102aa578063095ea7b31461033a5780631694505e146103ab57806318160ddd146103ec5761029b565b3661029b5761029961148a565b005b600080fd5b6102a861148a565b005b3480156102b657600080fd5b506102bf611561565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ff5780820151818401526020810190506102e4565b50505050905090810190601f16801561032c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034657600080fd5b506103936004803603604081101561035d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611603565b60405180821515815260200191505060405180910390f35b3480156103b757600080fd5b506103c0611621565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f857600080fd5b50610401611647565b6040518082815260200191505060405180910390f35b34801561042357600080fd5b506104706004803603604081101561043a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611651565b005b34801561047e57600080fd5b506104c16004803603602081101561049557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061176c565b6040518082815260200191505060405180910390f35b3480156104e357600080fd5b50610550600480360360608110156104fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611784565b60405180821515815260200191505060405180910390f35b34801561057457600080fd5b506105b76004803603602081101561058b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185d565b6040518082815260200191505060405180910390f35b3480156105d957600080fd5b506105e26118fe565b6040518082815260200191505060405180910390f35b34801561060457600080fd5b5061060d611904565b604051808260ff16815260200191505060405180910390f35b34801561063257600080fd5b506106756004803603602081101561064957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061190d565b005b34801561068357600080fd5b506106d06004803603604081101561069a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b1c565b60405180821515815260200191505060405180910390f35b3480156106f457600080fd5b506107376004803603602081101561070b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bcf565b6040518082815260200191505060405180910390f35b34801561075957600080fd5b5061079c6004803603602081101561077057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611be7565b60405180821515815260200191505060405180910390f35b3480156107c057600080fd5b50610823600480360360408110156107d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c07565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561085b57600080fd5b50610864611d6a565b005b34801561087257600080fd5b5061087b611dc3565b6040518082815260200191505060405180910390f35b34801561089d57600080fd5b506108e0600480360360208110156108b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dc9565b6040518082815260200191505060405180910390f35b34801561090257600080fd5b506109456004803603602081101561091957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e11565b6040518082815260200191505060405180910390f35b34801561096757600080fd5b506109b46004803603604081101561097e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e29565b005b3480156109c257600080fd5b506109cb611f3b565b6040518082815260200191505060405180910390f35b3480156109ed57600080fd5b50610a3060048036036020811015610a0457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f41565b6040518082815260200191505060405180910390f35b348015610a5257600080fd5b50610a9560048036036020811015610a6957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f59565b6040518082815260200191505060405180910390f35b348015610ab757600080fd5b50610ae460048036036020811015610ace57600080fd5b8101908080359060200190929190505050611fa2565b6040518082815260200191505060405180910390f35b348015610b0657600080fd5b50610b4960048036036020811015610b1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612085565b6040518082815260200191505060405180910390f35b348015610b6b57600080fd5b50610b74612097565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bac57600080fd5b50610bef60048036036020811015610bc357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120c1565b6040518082815260200191505060405180910390f35b348015610c1157600080fd5b50610c1a6120d3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c5a578082015181840152602081019050610c3f565b50505050905090810190601f168015610c875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ca157600080fd5b50610ce460048036036020811015610cb857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612175565b005b348015610cf257600080fd5b50610d3f60048036036040811015610d0957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612483565b60405180821515815260200191505060405180910390f35b348015610d6357600080fd5b50610da660048036036020811015610d7a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612550565b6040518082815260200191505060405180910390f35b348015610dc857600080fd5b50610e1560048036036040811015610ddf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125b3565b60405180821515815260200191505060405180910390f35b348015610e3957600080fd5b50610e7c60048036036020811015610e5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125d1565b6040518082815260200191505060405180910390f35b348015610e9e57600080fd5b50610ee160048036036020811015610eb557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061261a565b005b348015610eef57600080fd5b50610f3e60048036036040811015610f0657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506126f9565b60405180821515815260200191505060405180910390f35b348015610f6257600080fd5b50610f6b6128ca565b6040518082815260200191505060405180910390f35b348015610f8d57600080fd5b50610fd060048036036020811015610fa457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128d0565b60405180821515815260200191505060405180910390f35b348015610ff457600080fd5b506110376004803603602081101561100b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f0565b6040518082815260200191505060405180910390f35b34801561105957600080fd5b506111266004803603604081101561107057600080fd5b810190808035906020019064010000000081111561108d57600080fd5b82018360208201111561109f57600080fd5b803590602001918460208302840111640100000000831117156110c157600080fd5b9091929391929390803590602001906401000000008111156110e257600080fd5b8201836020820111156110f457600080fd5b8035906020019184602083028401116401000000008311171561111657600080fd5b9091929391929390505050612908565b005b34801561113457600080fd5b506111776004803603602081101561114b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b01565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111af57600080fd5b50611212600480360360408110156111c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bc6565b6040518082815260200191505060405180910390f35b34801561123457600080fd5b506112776004803603602081101561124b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c4d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156112af57600080fd5b50611327600480360360208110156112c657600080fd5b81019080803590602001906401000000008111156112e357600080fd5b8201836020820111156112f557600080fd5b8035906020019184602083028401116401000000008311171561131757600080fd5b9091929391929390505050612c80565b005b34801561133557600080fd5b506113786004803603602081101561134c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e08565b005b34801561138657600080fd5b506113c96004803603602081101561139d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613018565b604051808a73ffffffffffffffffffffffffffffffffffffffff168152602001898152602001888152602001878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390f35b34801561143957600080fd5b506114666004803603602081101561145057600080fd5b810190808035906020019092919050505061326b565b60405180848152602001838152602001828152602001935050505060405180910390f35b6000611494611647565b1161149e57600080fd5b600034111561155f576114ef6114b2611647565b6114d6700100000000000000000000000000000000346133e490919063ffffffff16565b816114dd57fe5b0460055461346a90919063ffffffff16565b6005819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511346040518082815260200191505060405180910390a261155834600a5461346a90919063ffffffff16565b600a819055505b565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115f95780601f106115ce576101008083540402835291602001916115f9565b820191906000526020600020905b8154815290600101906020018083116115dc57829003601f168201915b5050505050905090565b60006116176116106134f2565b84846134fa565b6001905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6116596134f2565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061176882612175565b5050565b60136020528060005260406000206000915090505481565b60006117918484846136f1565b6118528461179d6134f2565b61184d8560405180606001604052806028815260200161475660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006118036134f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374d9092919063ffffffff16565b6134fa565b600190509392505050565b60007001000000000000000000000000000000006118ef6118ea600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118dc6118d76118c688611dc9565b6005546133e490919063ffffffff16565b61380d565b61382a90919063ffffffff16565b61386c565b816118f657fe5b049050919050565b60115481565b60006012905090565b6119156134f2565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a2e57600080fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611a91816000613883565b600d73ad28ac3f59fa142011832dddcffe3099b3c907ab634c60db9c9091836040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b158015611b0157600080fd5b505af4158015611b15573d6000803e3d6000fd5b5050505050565b6000611bc5611b296134f2565b84611bc08560016000611b3a6134f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346a90919063ffffffff16565b6134fa565b6001905092915050565b60176020528060005260406000206000915090505481565b60126020528060005260406000206000915054906101000a900460ff1681565b60003273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806146d2602c913960400191505060405180910390fd5b6001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055905092915050565b6000611dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604f815260200180614683604f913960600191505060405180910390fd5b565b60185481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60166020528060005260406000206000915090505481565b611e316134f2565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600a5481565b60146020528060005260406000206000915090505481565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611fac6134f2565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461206e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a7640000820260198190559050919050565b600061209082611dc9565b9050919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006120cc82612550565b9050919050565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561216b5780601f106121405761010080835404028352916020019161216b565b820191906000526020600020905b81548152906001019060200180831161214e57829003601f168201915b5050505050905090565b61217d6134f2565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561229657612480565b6000612329601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346a90919063ffffffff16565b905060195481106123de5761233f826000613883565b6123498282613883565b600d73ad28ac3f59fa142011832dddcffe3099b3c907ab63bc2b405c909184846040518463ffffffff1660e01b8152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b1580156123c157600080fd5b505af41580156123d5573d6000803e3d6000fd5b50505050612472565b6123e9826000613883565b600d73ad28ac3f59fa142011832dddcffe3099b3c907ab634c60db9c9091846040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b15801561245957600080fd5b505af415801561246d573d6000803e3d6000fd5b505050505b61247d8260016126f9565b50505b50565b60006125466124906134f2565b846125418560405180606001604052806025815260200161481d60259139600160006124ba6134f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374d9092919063ffffffff16565b6134fa565b6001905092915050565b60006125ac600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259e8461185d565b6138f090919063ffffffff16565b9050919050565b60006125c76125c06134f2565b84846136f1565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061479f602e913960400191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006127036134f2565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006127d08461393a565b905060008111156128be5780601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508215158473ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040518082815260200191505060405180910390a360019150506128c4565b60009150505b92915050565b60195481565b60086020528060005260406000206000915054906101000a900460ff1681565b60156020528060005260406000206000915090505481565b6129106134f2565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b818190508484905014612a30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806146fe6037913960400191505060405180910390fd5b60005b84849050811015612afa57828282818110612a4a57fe5b9050602002013560166000878785818110612a6157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612aed858583818110612acb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612175565b8080600101915050612a33565b5050505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bbc57600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612bc1565b600090505b919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612c886134f2565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82829050811015612e0357600060166000858585818110612d6a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612df6838383818110612dd457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612175565b8080600101915050612d4d565b505050565b612e106134f2565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ed2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061463b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000806000806000899850600d73ad28ac3f59fa142011832dddcffe3099b3c907ab6317e142d190918b6040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561309957600080fd5b505af41580156130ad573d6000803e3d6000fd5b505050506040513d60208110156130c357600080fd5b810190808051906020019092919050505097507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965060008812613179576011548811156131275761312060115489613ce590919063ffffffff16565b9650613178565b6000601154600d600001805490501161314157600061315f565b61315e601154600d600001805490506138f090919063ffffffff16565b5b9050613174818a61382a90919063ffffffff16565b9750505b5b61318289612550565b955061318d8961185d565b9450601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054925060008411613222576000613238565b6132376018548561346a90919063ffffffff16565b5b915042821161324857600061325c565b61325b42836138f090919063ffffffff16565b5b90509193959799909294969850565b600080600080600d600001805490509050600081141561329757600080601154935093509350506133dd565b600060115490506000805a90506000805b89841080156132b657508582105b156133c4578480600101955050600d6000018054905085106132d757600094505b6000600d60000186815481106132e957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061335e601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d27565b1561337d5761336e8160016126f9565b1561337c5781806001019250505b5b828060010193505060005a9050808511156133ba576133b76133a882876138f090919063ffffffff16565b8761346a90919063ffffffff16565b95505b80945050506132a8565b8460118190555081816011549850985098505050505050505b9193909250565b6000808314156133f75760009050613464565b600082840290508284828161340857fe5b041461345f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806147356021913960400191505060405180910390fd5b809150505b92915050565b6000808284019050838110156134e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806147cd6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806146616022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000613748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806147f1602c913960400191505060405180910390fd5b505050565b60008383111582906137fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137bf5780820151818401526020810190506137a4565b50505050905090810190601f1680156137ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080829050600081121561382157600080fd5b80915050919050565b6000808284019050600083121580156138435750838112155b80613859575060008312801561385857508381125b5b61386257600080fd5b8091505092915050565b60008082121561387b57600080fd5b819050919050565b600061388e83611dc9565b9050808211156138bf5760006138ad82846138f090919063ffffffff16565b90506138b98482613d5a565b506138eb565b808210156138ea5760006138dc83836138f090919063ffffffff16565b90506138e88482613e19565b505b5b505050565b600061393283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061374d565b905092915050565b60008061394683612550565b90506000811115613cda576139a381600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346a90919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040518082815260200191505060405180910390a260011515600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415613bbc576000613a998483613ed8565b905080613bb65760008473ffffffffffffffffffffffffffffffffffffffff1683610bb890604051806000019050600060405180830381858888f193505050503d8060008114613b05576040519150601f19603f3d011682016040523d82523d6000602084013e613b0a565b606091505b5050905080613bb457613b6583600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060009350505050613ce0565b505b50613cd1565b60008373ffffffffffffffffffffffffffffffffffffffff1682610bb890604051806000019050600060405180830381858888f193505050503d8060008114613c21576040519150601f19603f3d011682016040523d82523d6000602084013e613c26565b606091505b5050905080613ccf57613c8182600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600092505050613ce0565b505b80915050613ce0565b60009150505b919050565b600080828403905060008312158015613cfe5750838113155b80613d145750600083128015613d1357508381135b5b613d1d57600080fd5b8091505092915050565b600042821115613d3a5760009050613d55565b601854613d5083426138f090919063ffffffff16565b101590505b919050565b613d648282614288565b613dd2613d84613d7f836005546133e490919063ffffffff16565b61380d565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ce590919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b613e23828261444f565b613e91613e43613e3e836005546133e490919063ffffffff16565b61380d565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461382a90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600080600267ffffffffffffffff81118015613ef357600080fd5b50604051908082528060200260200182016040528015613f225781602001602082028036833780820191505090505b509050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f8d57600080fd5b505afa158015613fa1573d6000803e3d6000fd5b505050506040513d6020811015613fb757600080fd5b810190808051906020019092919050505081600081518110613fd557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061407c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab58460008488600242016040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561417757808201518184015260208101905061415c565b50505050905001955050505050506000604051808303818588803b15801561419e57600080fd5b505af19350505050801561426d57506040513d6000823e3d601f19601f8201168201806040525060208110156141d357600080fd5b81019080805160405193929190846401000000008211156141f357600080fd5b8382019150602082018581111561420957600080fd5b825186602082028301116401000000008211171561422657600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561425d578082015181840152602081019050614242565b5050505090500160405250505060015b61427b576000915050614282565b5060019150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561432b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61433760008383614613565b61434c8160025461346a90919063ffffffff16565b6002819055506143a3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346a90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061477e6021913960400191505060405180910390fd5b6144e182600083614613565b61454c81604051806060016040528060228152602001614619602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461374d9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145a3816002546138f090919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b50505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373436f636b7461696c52657761726473547261636b65723a20557365207468652027636c61696d272066756e6374696f6e206f6e20746865206d61696e20436f636b7461696c20636f6e74726163742e596f752063616e206f6e6c792073657420637573746f6d20746f6b656e7320666f7220796f757273656c6621486f6c646572206172726179206c656e677468206e6565647320746f20657175616c20736861726573206172726179206c656e67746821536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f2061646472657373596f752063616e206f6e6c7920636c65617220637573746f6d20746f6b656e7320666f7220796f757273656c662145524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436f636b7461696c52657761726473547261636b65723a204e6f207472616e736665727320616c6c6f77656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220abea8995b5ee36bd9ed078a78a8ce672ad1a1958d4d5b7ec3167cf827a4d0af364736f6c6343000706003360a060405261dead600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005357600080fd5b50600061006461015860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060007310ed43c718714eb63d5aa57b78b54704e256024e90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050610160565b600033905090565b60805160601c610ad7610187600039806101bb52806102f8528061042f5250610ad76000f3fe60806040526004361061004e5760003560e01c80631694505e1461005a57806322f85eaa1461009b5780634beac92e146100d65780638da5cb5b14610127578063f2fde38b1461016857610055565b3661005557005b600080fd5b34801561006657600080fd5b5061006f6101b9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100a757600080fd5b506100d4600480360360208110156100be57600080fd5b81019080803590602001909291905050506101dd565b005b3480156100e257600080fd5b50610125600480360360208110156100f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610623565b005b34801561013357600080fd5b5061013c61072f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017457600080fd5b506101b76004803603602081101561018b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610758565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b6101e5610963565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146102a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506000600267ffffffffffffffff811180156102c457600080fd5b506040519080825280602002602001820160405280156102f35781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561035c57600080fd5b505afa158015610370573d6000803e3d6000fd5b505050506040513d602081101561038657600080fd5b8101908080519060200190929190505050816000815181106103a457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506103e661072f565b816001815181106103f357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ff36ab561047c858561096b90919063ffffffff16565b600084600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600242016040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610520578082015181840152602081019050610505565b50505050905001955050505050506000604051808303818588803b15801561054757600080fd5b505af115801561055b573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250602081101561058657600080fd5b81019080805160405193929190846401000000008211156105a657600080fd5b838201915060208201858111156105bc57600080fd5b82518660208202830111640100000000821117156105d957600080fd5b8083526020830192505050908051906020019060200280838360005b838110156106105780820151818401526020810190506105f5565b5050505090500160405250505050505050565b61062b610963565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610760610963565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108a6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180610a7c6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b60006109ad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506109b5565b905092915050565b60008083118290610a61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a26578082015181840152602081019050610a0b565b50505050905090810190601f168015610a535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610a6d57fe5b04905080915050939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220645f7a41b00212b979634ccd3d8135eb4a0fad771befe742f79a6d1c366a450264736f6c6343000706003360a060405273a67659268102622cc25ecad2fc7ef1ea7c0cc1f1600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006557600080fd5b50600061007661016a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060007310ed43c718714eb63d5aa57b78b54704e256024e90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050610172565b600033905090565b60805160601c6110546101a3600039806103cc52806104df528061060952806108b2528061099a52506110546000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806375f0a8741161005b57806375f0a874146101615780638da5cb5b14610195578063985c7560146101c9578063f2fde38b1461022357610088565b80630ff12c381461008d5780631694505e146100bb57806345ae8409146100ef5780634c749dba14610133575b600080fd5b6100b9600480360360208110156100a357600080fd5b8101908080359060200190929190505050610267565b005b6100c3610607565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101316004803603602081101561010557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061062b565b005b61015f6004803603602081101561014957600080fd5b810190808035906020019092919050505061074d565b005b610169610ac1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61019d610ae7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61020b600480360360208110156101df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b10565b60405180821515815260200191505060405180910390f35b6102656004803603602081101561023957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c2e565b005b61026f610e39565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461032f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600267ffffffffffffffff8111801561034957600080fd5b506040519080825280602002602001820160405280156103785781602001602082028036833780820191505090505b509050610383610ae7565b8160008151811061039057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561043057600080fd5b505afa158015610444573d6000803e3d6000fd5b505050506040513d602081101561045a57600080fd5b81019080805190602001909291905050508160018151811061047857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006104db60646104cd604b86610e4190919063ffffffff16565b610ec790919063ffffffff16565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94782600085600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156105c15780820151818401526020810190506105a6565b505050509050019650505050505050600060405180830381600087803b1580156105ea57600080fd5b505af11580156105fe573d6000803e3d6000fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610633610e39565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610755610e39565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610815576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600267ffffffffffffffff8111801561082f57600080fd5b5060405190808252806020026020018201604052801561085e5781602001602082028036833780820191505090505b509050610869610ae7565b8160008151811061087657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561091657600080fd5b505afa15801561092a573d6000803e3d6000fd5b505050506040513d602081101561094057600080fd5b81019080805190602001909291905050508160018151811061095e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610a7c578082015181840152602081019050610a61565b505050509050019650505050505050600060405180830381600087803b158015610aa557600080fd5b505af1158015610ab9573d6000803e3d6000fd5b505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610b1a610e39565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c36610e39565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180610fd86026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600080831415610e545760009050610ec1565b6000828402905082848281610e6557fe5b0414610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610ffe6021913960400191505060405180910390fd5b809150505b92915050565b6000610f0983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610f11565b905092915050565b60008083118290610fbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f82578082015181840152602081019050610f67565b50505050905090810190601f168015610faf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610fc957fe5b04905080915050939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220427c5694f4db794b7ba3752f73fa92355b7dbf20ef7a5cea910a9559e6ee6fd664736f6c6343000706003345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373

Library Used



Deployed ByteCode Sourcemap

30024:14300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9240:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11407:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30210:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30978:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36168:117;;;;;;;;;;;;;:::i;:::-;;30251:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10360:108;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34274:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30338:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36681:335;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37572:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31055:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12058:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35845:151;;;;;;;;;;;;;:::i;:::-;;30899:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38532:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10202:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30373:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12822:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37765:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35123:711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30301:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37122:87;;;;;;;;;;;;;:::i;:::-;;30102:44;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37918:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10531:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30159:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34028:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30603:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33759:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33882:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31011:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30693:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36293:234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38314:208;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1442:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30780:48;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9459:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30938:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37221:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31107:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13543:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10871:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36004:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31298:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38056:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37369:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34550:262;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37021:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38684:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30560:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11109:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30835:53;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34143:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36535:138;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1890:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9240:100;9294:13;9327:5;9320:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9240:100;:::o;11407:169::-;11490:4;11507:39;11516:12;:10;:12::i;:::-;11530:7;11539:6;11507:8;:39::i;:::-;11564:4;11557:11;;11407:169;;;;:::o;30210:28::-;;;;;;;;;;;;;:::o;30978:24::-;;;;:::o;36168:117::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36238:5:::1;36224:11;;:19;;;;;;;;;;;;;;;;;;36273:4;36254:16;;:23;;;;;;;;;;;;;;;;;;36168:117::o:0;30251:41::-;;;;;;;;;;;;;:::o;10360:108::-;10421:7;10448:12;;10441:19;;10360:108;:::o;34274:264::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34391:7:::1;34378:10;:20;;;;34424:9;34409:12;:24;;;;34456:28;34473:10;;34456:12;;:16;;:28;;;;:::i;:::-;34444:9;:40;;;;34519:11;34495:21;:35;;;;34274:264:::0;;;:::o;30338:28::-;;;;;;;;;;;;;:::o;36681:335::-;36773:7;36795:6;36816;36837:7;36859;36881;36903;36925;36947;36974:14;;;;;;;;;;;:25;;;37000:7;36974:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36967:41;;;;;;;;;;;;;;;;;;36681:335;;;;;;;;;;;:::o;37572:181::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37690:14:::1;;;;;;;;;;;:39;;;37730:6;37738;37690:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37572:181:::0;;:::o;31055:42::-;;;;:::o;12058:355::-;12198:4;12215:36;12225:6;12233:9;12244:6;12215:9;:36::i;:::-;12262:121;12271:6;12279:12;:10;:12::i;:::-;12293:89;12331:6;12293:89;;;;;;;;;;;;;;;;;:11;:19;12305:6;12293:19;;;;;;;;;;;;;;;:33;12313:12;:10;:12::i;:::-;12293:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12262:8;:121::i;:::-;12401:4;12394:11;;12058:355;;;;;:::o;35845:151::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35909:16:::1;;;;;;;;;;;35908:17;35900:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35954:4;35940:11;;:18;;;;;;;;;;;;;;;;;;35985:4;35966:16;;:23;;;;;;;;;;;;;;;;;;35845:151::o:0;30899:32::-;;;;:::o;38532:140::-;38597:7;38624:14;;;;;;;;;;;:34;;;38659:4;38624:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38617:47;;38532:140;;;:::o;10202:93::-;10260:5;10285:2;10278:9;;10202:93;:::o;30373:28::-;;;;;;;;;;;;;:::o;12822:218::-;12910:4;12927:83;12936:12;:10;:12::i;:::-;12950:7;12959:50;12998:10;12959:11;:25;12971:12;:10;:12::i;:::-;12959:25;;;;;;;;;;;;;;;:34;12985:7;12959:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12927:8;:83::i;:::-;13028:4;13021:11;;12822:218;;;;:::o;37765:141::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37864:14:::1;;;;;;;;;;;:26;;;37891:6;;37864:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37765:141:::0;;:::o;35123:711::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35244:16:::1;;;;;;;;;;;35243:17;35235:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35311:3;35285:30;;:14;:30;;;;35277:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35366:3;35340:30;;:14;:30;;;;35332:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35404:14;35388:13;;:30;;;;;;;;;;;;;;;;;;35450:14;35434:13;;:30;;;;;;;;;;;;;;;;;;35527:4;35475:33;:49;35509:14;35475:49;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;35580:4;35542:19;:35;35562:14;35542:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;35595:14;;;;;;;;;;;:35;;;35631:14;35595:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35657:14;;;;;;;;;;;:35;;;35693:14;35657:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35771:4;35719:33;:49;35753:14;35719:49;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;35823:4;35786:19;:34;35806:13;;;;;;;;;;;35786:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;35123:711:::0;;:::o;30301:28::-;;;;;;;;;;;;;:::o;37122:87::-;37153:14;;;;;;;;;;;:29;;;37183:10;37195:5;37153:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37122:87::o;30102:44::-;;;;;;;;;;;;;:::o;37918:126::-;37976:7;38003:14;;;;;;;;;;;:25;;;38029:6;38003:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37996:40;;37918:126;;;:::o;10531:127::-;10605:7;10632:9;:18;10642:7;10632:18;;;;;;;;;;;;;;;;10625:25;;10531:127;;;:::o;30159:38::-;;;;;;;;;;;;;:::o;34028:104::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34091:6:::1;;;;;;;;;;;:26;;;34118:6;34091:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34028:104:::0;:::o;30603:83::-;;;;;;;;;;;;;:::o;33759:113::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33829:15:::1;;;;;;;;;;;:26;;;33856:7;33829:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33759:113:::0;:::o;33882:136::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33942:6:::1;;;;;;;;;;;:12;;;33955:4;33942:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33970:14;;;;;;;;;;;:35;;;34006:4;33970:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33882:136:::0;:::o;31011:31::-;;;;:::o;30693:78::-;;;;;;;;;;;;;:::o;36293:234::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36391:6:::1;36379:8;:18;;:41;;;;;36413:7;36401:8;:19;;36379:41;36371:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36458:16;;36446:8;:28;;36438:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36511:8;36492:16;:27;;;;36293:234:::0;:::o;38314:208::-;38394:10;38386:18;;:4;:18;;;38378:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38473:14;;;;;;;;;;;:35;;;38509:4;38473:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38314:208;:::o;1442:79::-;1480:7;1507:6;;;;;;;;;;;1500:13;;1442:79;:::o;30780:48::-;;;;:::o;9459:104::-;9515:13;9548:7;9541:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9459:104;:::o;30938:33::-;;;;:::o;37221:136::-;37290:7;37317:14;;;;;;;;;;;:26;;;37344:4;37317:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37310:39;;37221:136;;;:::o;31107:40::-;;;;:::o;13543:269::-;13636:4;13653:129;13662:12;:10;:12::i;:::-;13676:7;13685:96;13724:15;13685:96;;;;;;;;;;;;;;;;;:11;:25;13697:12;:10;:12::i;:::-;13685:25;;;;;;;;;;;;;;;:34;13711:7;13685:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13653:8;:129::i;:::-;13800:4;13793:11;;13543:269;;;;:::o;10871:175::-;10957:4;10974:42;10984:12;:10;:12::i;:::-;10998:9;11009:6;10974:9;:42::i;:::-;11034:4;11027:11;;10871:175;;;;:::o;36004:86::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36079:3:::1;36066:10;:16;;;;36004:86:::0;:::o;31298:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;38056:248::-;38134:7;38170:10;38162:18;;:4;:18;;;38154:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38247:14;;;;;;;;;;;:36;;;38284:4;38290:5;38247:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38240:56;;38056:248;;;;:::o;37369:191::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37503:14:::1;;;;;;;;;;;:33;;;37537:6;;37545;;37503:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37369:191:::0;;;;:::o;34550:262::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34675:8:::1;34643:40;;:19;:28;34663:7;34643:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;34635:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34732:8;34701:19;:28;34721:7;34701:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34796:8;34751:33;:42;34785:7;34751:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34550:262:::0;;:::o;37021:93::-;37079:14;;;;;;;;;;;:22;;;37102:3;37079:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37021:93;:::o;38684:185::-;38774:7;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38801:14:::1;;;;;;;;;;;:50;;;38852:8;38801:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;38794:67;;38684:185:::0;;;:::o;30560:30::-;;;;;;;;;;;;;:::o;11109:151::-;11198:7;11225:11;:18;11237:5;11225:18;;;;;;;;;;;;;;;:27;11244:7;11225:27;;;;;;;;;;;;;;;;11218:34;;11109:151;;;;:::o;30835:53::-;;;;:::o;34143:119::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34217:15:::1;;;;;;;;;;;:24;;;34242:12;34217:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34143:119:::0;:::o;36535:138::-;36596:7;36623:14;;;;;;;;;;;:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36616:49;;36535:138;:::o;1890:244::-;1664:12;:10;:12::i;:::-;1654:22;;:6;;;;;;;;;;;:22;;;1646:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1999:1:::1;1979:22;;:8;:22;;;;1971:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2089:8;2060:38;;2081:6;;;;;;;;;;;2060:38;;;;;;;;;;;;2118:8;2109:6;;:17;;;;;;;;;;;;;;;;;;1890:244:::0;:::o;2167:181::-;2225:7;2245:9;2261:1;2257;:5;2245:17;;2286:1;2281;:6;;2273:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2339:1;2332:8;;;2167:181;;;;:::o;600:98::-;653:7;680:10;673:17;;600:98;:::o;16729:380::-;16882:1;16865:19;;:5;:19;;;;16857:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16963:1;16944:21;;:7;:21;;;;16936:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17047:6;17017:11;:18;17029:5;17017:18;;;;;;;;;;;;;;;:27;17036:7;17017:27;;;;;;;;;;;;;;;:36;;;;17085:7;17069:32;;17078:5;17069:32;;;17094:6;17069:32;;;;;;;;;;;;;;;;;;16729:380;;;:::o;38889:3340::-;39037:1;39021:18;;:4;:18;;;;39013:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39114:1;39100:16;;:2;:16;;;;39092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39176:6;;;;;;;;;;;:17;;;39194:4;39176:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39175:24;39167:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39242:16;;;;;;;;;;;39238:167;;39283:33;:39;39317:4;39283:39;;;;;;;;;;;;;;;;;;;;;;;;;39275:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39238:167;39430:1;39420:6;:11;39417:92;;;39448:28;39464:4;39470:2;39474:1;39448:15;:28::i;:::-;39491:7;;39417:92;39534:11;;;;;;;;;;;39533:12;:35;;;;;39560:8;;;;;;;;;;;39559:9;39533:35;:65;;;;;39582:16;;;;;;;;;;;39533:65;:100;;;;;39620:13;;;;;;;;;;;39612:21;;:4;:21;;;;39533:100;:147;;;;;39651:25;:29;39677:2;39651:29;;;;;;;;;;;;;;;;;;;;;;;;;39533:147;:193;;;;;39710:15;;;;;;;;;;;39694:32;;:4;:32;;;;39533:193;:236;;;;;39744:19;:25;39764:4;39744:25;;;;;;;;;;;;;;;;;;;;;;;;;39743:26;39533:236;39529:373;;;39814:13;;39804:6;:23;;39796:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39529:373;39908:28;39939:24;39957:4;39939:9;:24::i;:::-;39908:55;;39984:12;40023:18;;39999:20;:42;;39984:57;;40073:11;;;;;;;;;;;40072:12;:45;;;;;40101:16;;;;;;;;;;;40072:45;:70;;;;;40135:7;40072:70;:96;;;;;40160:8;;;;;;;;;;;40159:9;40072:96;:145;;;;;40186:25;:31;40212:4;40186:31;;;;;;;;;;;;;;;;;;;;;;;;;40185:32;40072:145;:185;;;;;40242:15;;;;;;;;;;;40234:23;;:4;:23;;;;40072:185;40054:531;;;40295:4;40284:8;;:15;;;;;;;;;;;;;;;;;;40316:18;40337:53;40380:9;;40337:38;40362:12;;40337:20;:24;;:38;;;;:::i;:::-;:42;;:53;;;;:::i;:::-;40316:74;;40405:26;40420:10;40405:14;:26::i;:::-;40448:18;40469:24;40487:4;40469:9;:24::i;:::-;40448:45;;40508:32;40529:10;40508:20;:32::i;:::-;40568:5;40557:8;;:16;;;;;;;;;;;;;;;;;;40054:531;;;40599:12;40616:11;;;;;;;;;;;40615:12;:32;;;;;40631:16;;;;;;;;;;;40615:32;:45;;;;;40652:8;;;;;;;;;;;40651:9;40615:45;40599:61;;40671:10;40684:11;;;;;;;;;;;:31;;;;;40699:16;;;;;;;;;;;40684:31;:44;;;;;40720:8;;;;;;;;;;;40719:9;40684:44;40671:57;;40753:19;:25;40773:4;40753:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40782:19;:23;40802:2;40782:23;;;;;;;;;;;;;;;;;;;;;;;;;40753:52;40750:127;;;40832:5;40822:15;;40860:5;40852:13;;40750:127;40893:7;40889:364;;;40928:12;40943:46;40978:10;;40943:30;40969:3;40943:21;40954:9;;40943:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:46;;;;:::i;:::-;40928:61;;41010:25;:29;41036:2;41010:29;;;;;;;;;;;;;;;;;;;;;;;;;41007:124;;;41071:40;41107:3;41071:31;41080:21;;41071:4;:8;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;41064:47;;41007:124;41168:16;41179:4;41168:6;:10;;:16;;;;:::i;:::-;41159:25;;41199:42;41215:4;41229;41236;41199:15;:42::i;:::-;40889:364;;41277:5;41273:288;;;41296:18;41317:31;41344:3;41317:22;41328:10;;41317:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;41296:52;;41372:22;41383:10;41372:6;:10;;:22;;;;:::i;:::-;41363:31;;41409:50;41425:4;41439:6;;;;;;;;;;;41448:10;41409:15;:50::i;:::-;41478:6;;;;;;;;;;;:32;;;41511:26;41529:6;;;;;;;;;;;41511:9;:26::i;:::-;41478:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41474:76;;;;;;41273:288;;41573:33;41589:4;41595:2;41599:6;41573:15;:33::i;:::-;41617:14;;;;;;;;;;;:36;;;41662:4;41669:15;41679:4;41669:9;:15::i;:::-;41617:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41696:14;;;;;;;;;;;:36;;;41741:2;41746:13;41756:2;41746:9;:13::i;:::-;41696:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41775:14;;;;;;;;;;;:25;;;41809:4;41775:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41771:56;;;;;;41841:14;;;;;;;;;;;:25;;;41875:2;41841:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41837:54;;;;;;41907:8;;;;;;;;;;;41903:319;;41926:11;41940:16;;41926:30;;41971:14;;;;;;;;;;;:22;;;41994:3;41971:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41967:244;;;;;42165:9;42090:85;;42154:4;42090:85;;;42114:10;42126:6;42134:18;42160:3;42090:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41999:186;;;41967:244;41903:319;;38889:3340;;;;;;;;:::o;2500:192::-;2586:7;2619:1;2614;:6;;2622:12;2606:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2646:9;2662:1;2658;:5;2646:17;;2683:1;2676:8;;;2500:192;;;;;:::o;14302:573::-;14460:1;14442:20;;:6;:20;;;;14434:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14544:1;14523:23;;:9;:23;;;;14515:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14599:47;14620:6;14628:9;14639:6;14599:20;:47::i;:::-;14679:71;14701:6;14679:71;;;;;;;;;;;;;;;;;:9;:17;14689:6;14679:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;14659:9;:17;14669:6;14659:17;;;;;;;;;;;;;;;:91;;;;14784:32;14809:6;14784:9;:20;14794:9;14784:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14761:9;:20;14771:9;14761:20;;;;;;;;;;;;;;;:55;;;;14849:9;14832:35;;14841:6;14832:35;;;14860:6;14832:35;;;;;;;;;;;;;;;;;;14302:573;;;:::o;2700:250::-;2758:7;2787:1;2782;:6;2778:47;;;2812:1;2805:8;;;;2778:47;2837:9;2853:1;2849;:5;2837:17;;2882:1;2877;2873;:5;;;;;;:10;2865:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2941:1;2934:8;;;2700:250;;;;;:::o;2958:132::-;3016:7;3043:39;3047:1;3050;3043:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3036:46;;2958:132;;;;:::o;42241:931::-;42351:12;42366:13;42377:1;42366:6;:10;;:13;;;;:::i;:::-;42351:28;;42390:17;42410:16;42421:4;42410:6;:10;;:16;;;;:::i;:::-;42390:36;;42704:22;42729:21;42704:46;;42795:22;42812:4;42795:16;:22::i;:::-;42948:18;42969:41;42995:14;42969:21;:25;;:41;;;;:::i;:::-;42948:62;;43060:35;43073:9;43084:10;43060:12;:35::i;:::-;43121:43;43136:4;43142:10;43154:9;43121:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42241:931;;;;;:::o;44099:210::-;44164:24;44181:6;44164:16;:24::i;:::-;44199:17;44219:21;44199:41;;44259:14;;;;;;;;;;;44251:28;;44287:9;44251:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44099:210;;:::o;2356:136::-;2414:7;2441:43;2445:1;2448;2441:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2434:50;;2356:136;;;;:::o;17712:125::-;;;;:::o;3098:278::-;3184:7;3216:1;3212;:5;3219:12;3204:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3243:9;3259:1;3255;:5;;;;;;3243:17;;3367:1;3360:8;;;3098:278;;;;;:::o;43180:513::-;43256:21;43294:1;43280:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43256:40;;43325:4;43307;43312:1;43307:7;;;;;;;;;;;;;:23;;;;;;;;;;;43351:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43341:4;43346:1;43341:7;;;;;;;;;;;;;:32;;;;;;;;;;;43386:62;43403:4;43418:15;;;;;;;;;;;43436:11;43386:8;:62::i;:::-;43461:15;;;;;;;;;;;:66;;;43542:11;43568:1;43612:4;43639;43659:15;43461:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43180:513;;:::o;43701:390::-;43792:62;43809:4;43824:15;;;;;;;;;;;43842:11;43792:8;:62::i;:::-;43867:15;;;;;;;;;;;:31;;;43906:9;43939:4;43959:11;43985:1;44001;44017:15;;;;;;;;;;;44047;43867:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43701:390;;:::o

Swarm Source

ipfs://427c5694f4db794b7ba3752f73fa92355b7dbf20ef7a5cea910a9559e6ee6fd6
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.