Contract 0xca91e2a577eba456db7ab0a847d731c77b6a65c7 3

Contract Overview

Balance:
1 wei

HT Value:
Less Than $0.01 (@ $9.57/HT)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8a0be3c872ef9ce197522bb6e0464f214dc90ba4a970c2af0a0783a62e104d6cCall Ex Proxy36928572021-04-09 12:43:56232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005803161
0x4162ea5a1f126cf18a3429fff78dea869ddbcebe66c341145e4316c9dd28a719Call Ex Proxy36928482021-04-09 12:43:29232 days 17 hrs ago0x21e5af4d00c7290f9eaaf325c5e2a85d57cd32d6 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005397981
0xafde232962231319b257621b30845106e2ffe3805faa03ed0a655fe9436eb282Call Ex Proxy36928382021-04-09 12:42:59232 days 17 hrs ago0x21e5af4d00c7290f9eaaf325c5e2a85d57cd32d6 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005304891
0x08aebb9ce3631c68d32cb7c3baf3990512f8a0bbb0b46e12a1169915b3d93eeaCall Ex Proxy36928362021-04-09 12:42:53232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005591741
0x6805aa77ea0c4e2d7bc92fb9d2a01aa1ded92d9d6ef8a4020cf5d18f6625adefCall Ex Proxy36928192021-04-09 12:42:02232 days 17 hrs ago0x21e5af4d00c7290f9eaaf325c5e2a85d57cd32d6 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005919611
0xcc5b48a73c6585cb6f805fd805fb31f32831eb177b8a60797687475cc7ffddb6Call Ex Proxy36928102021-04-09 12:41:35232 days 17 hrs ago0x3720adfc831142a15fd310ca4a37ced177b50447 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0002598021
0x14605023fc93b1217eb3ddd21479c79f7ceabbbc508b21f576cb23234ab23cdeCall Ex Proxy36927992021-04-09 12:41:02232 days 17 hrs ago0x3720adfc831142a15fd310ca4a37ced177b50447 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c779 HT0.0002586121
0x5c4afaab67ac3a6fb1bac207ce014cca5bcd4aca407ad53e60063b5327bd89eeCall Ex Proxy36927892021-04-09 12:40:32232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005803161
0x2adcf7edb4d531fc08ec1aa9cc9d5672f5ede8084402dc83e0191c8a8bd7b7d1Call Ex Proxy36927792021-04-09 12:40:02232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005773681
0xdd7b24c2f5f3eed53a201243b6dbfb9737b6e8e4b945e1c00d348e09fa271d81Call Ex Proxy36927732021-04-09 12:39:44232 days 17 hrs ago0x3720adfc831142a15fd310ca4a37ced177b50447 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0000355221
0x90cbae87dfdbf794e3028e47e084cb8c6ecd5895c6b923454ad6d00bc91c76e4Call Ex Proxy36927652021-04-09 12:39:20232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005807711
0x1eba20a21cd5ff62c244df71316f03711d178291d691c4b2873101c9d8899ebbCall Ex Proxy36927572021-04-09 12:38:56232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005769131
0xd2b5bda4b38b084885d393b52574d9c9c957b37f9f90ef84266de6d2cc8750f3Call Ex Proxy36927532021-04-09 12:38:44232 days 17 hrs ago0x3720adfc831142a15fd310ca4a37ced177b50447 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0003188491
0xda45a30f6f66e7f1125c19af5215ca2dcc36be5a67f48462489c54b1b3fa00b4Call Ex Proxy36927522021-04-09 12:38:41232 days 17 hrs ago0x14d332ea36056001d416fee6768df036326ec3c4 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.000559951
0x54864b0e26c74dc8ce9f2e27497e5aa95c569477d6da67a3876fc0c493e8867fCall Ex Proxy36927472021-04-09 12:38:26232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005807711
0x535681976c8e8316e204ab516e174a1a9fbef3d12c732a451eae8d00005511f5Call Ex Proxy36927442021-04-09 12:38:17232 days 17 hrs ago0x66d33ac4a3e909311377f6722c5f9d935b7c48bf IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0001918631
0x332de764d534907565d456a409c3d2d2a72d4b43608c1267a974dad4a6735cebCall Ex Proxy36927402021-04-09 12:38:05232 days 17 hrs ago0x14d332ea36056001d416fee6768df036326ec3c4 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005592221
0xb2b173e324df7e5e7c58473a2a3caa56f2a12d4a976a7b519fbc6bf51e912a6dCall Ex Proxy36927362021-04-09 12:37:53232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005769131
0xe0fb94a3e0e5999a179fd90c82944c41a9b4766b4e451831945e3d914de0a442Call Ex Proxy36927302021-04-09 12:37:35232 days 17 hrs ago0x14d332ea36056001d416fee6768df036326ec3c4 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005594951
0x90f1ba166dcfc90073a8b5184f76d78490dcddcecd58fa29b4e18d2d97fd50dfCall Ex Proxy36927192021-04-09 12:37:02232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005807711
0x455a7861cdbe12926080545fb50e554b50ca18aea1ba463113205675df202708Call Ex Proxy36927132021-04-09 12:36:44232 days 17 hrs ago0x14d332ea36056001d416fee6768df036326ec3c4 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005742221
0x40eebb1004e6d782acce0405481c819057aa21e0628e00db427d98c1dec8ba62Call Ex Proxy36927112021-04-09 12:36:38232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.000527051
0x7f30d2658887a8a4991e07551d0daf5c822c4c326a2a3268481e66bf9544c87cCall Ex Proxy36927012021-04-09 12:36:08232 days 17 hrs ago0x3720adfc831142a15fd310ca4a37ced177b50447 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c780 HT0.0002586121
0xf8d11badea47ff6ea2847c70f500cd97762089c5cb1c2ff46ef03ea0298069e7Call Ex Proxy36927012021-04-09 12:36:08232 days 17 hrs ago0x0be42e7b1dd6fdf1befb33372bbda3838233b421 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0005418761
0x3e0a1528d22e2ca43318af69cba65a3411b6de348ccd85230d19b3ab3d699f09Call Ex Proxy36926892021-04-09 12:35:32232 days 17 hrs ago0x3720adfc831142a15fd310ca4a37ced177b50447 IN  0xca91e2a577eba456db7ab0a847d731c77b6a65c70 HT0.0002604691
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcc5b48a73c6585cb6f805fd805fb31f32831eb177b8a60797687475cc7ffddb636928102021-04-09 12:41:35232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70xf18463bd447597a3b7c4035ea1e7bcdc5d99f3300.078439796155577939 HT
0xcc5b48a73c6585cb6f805fd805fb31f32831eb177b8a60797687475cc7ffddb636928102021-04-09 12:41:35232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70x3720adfc831142a15fd310ca4a37ced177b5044778.361356359422361762 HT
0xcc5b48a73c6585cb6f805fd805fb31f32831eb177b8a60797687475cc7ffddb636928102021-04-09 12:41:35232 days 17 hrs ago Mdex: Router 0xca91e2a577eba456db7ab0a847d731c77b6a65c778.439796155577939702 HT
0x14605023fc93b1217eb3ddd21479c79f7ceabbbc508b21f576cb23234ab23cde36927992021-04-09 12:41:02232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70x3720adfc831142a15fd310ca4a37ced177b504471 wei
0x14605023fc93b1217eb3ddd21479c79f7ceabbbc508b21f576cb23234ab23cde36927992021-04-09 12:41:02232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c7 Mdex: Router79 HT
0xd2b5bda4b38b084885d393b52574d9c9c957b37f9f90ef84266de6d2cc8750f336927532021-04-09 12:38:44232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70xf18463bd447597a3b7c4035ea1e7bcdc5d99f3300.07938127966080397 HT
0xd2b5bda4b38b084885d393b52574d9c9c957b37f9f90ef84266de6d2cc8750f336927532021-04-09 12:38:44232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70x3720adfc831142a15fd310ca4a37ced177b5044779.30189838114316692 HT
0xd2b5bda4b38b084885d393b52574d9c9c957b37f9f90ef84266de6d2cc8750f336927532021-04-09 12:38:44232 days 17 hrs ago Mdex: Router 0xca91e2a577eba456db7ab0a847d731c77b6a65c779.38127966080397089 HT
0x535681976c8e8316e204ab516e174a1a9fbef3d12c732a451eae8d00005511f536927442021-04-09 12:38:17232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70xf18463bd447597a3b7c4035ea1e7bcdc5d99f3300.005981971446496906 HT
0x535681976c8e8316e204ab516e174a1a9fbef3d12c732a451eae8d00005511f536927442021-04-09 12:38:17232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70x66d33ac4a3e909311377f6722c5f9d935b7c48bf5.975989475050409796 HT
0x535681976c8e8316e204ab516e174a1a9fbef3d12c732a451eae8d00005511f536927442021-04-09 12:38:17232 days 17 hrs ago 0x00efb96dbfe641246e961b472c0c3fc472f6a694 0xca91e2a577eba456db7ab0a847d731c77b6a65c75.981971446496906703 HT
0x7f30d2658887a8a4991e07551d0daf5c822c4c326a2a3268481e66bf9544c87c36927012021-04-09 12:36:08232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70x3720adfc831142a15fd310ca4a37ced177b504471 wei
0x7f30d2658887a8a4991e07551d0daf5c822c4c326a2a3268481e66bf9544c87c36927012021-04-09 12:36:08232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c7 Mdex: Router80 HT
0x3e0a1528d22e2ca43318af69cba65a3411b6de348ccd85230d19b3ab3d699f0936926892021-04-09 12:35:32232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70xf18463bd447597a3b7c4035ea1e7bcdc5d99f3300.079396546140235922 HT
0x3e0a1528d22e2ca43318af69cba65a3411b6de348ccd85230d19b3ab3d699f0936926892021-04-09 12:35:32232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70x3720adfc831142a15fd310ca4a37ced177b5044779.317149594095686245 HT
0x3e0a1528d22e2ca43318af69cba65a3411b6de348ccd85230d19b3ab3d699f0936926892021-04-09 12:35:32232 days 17 hrs ago Mdex: Router 0xca91e2a577eba456db7ab0a847d731c77b6a65c779.396546140235922168 HT
0x2ecc287b1d5aafa94b0f735f0f8c3f1e80efa64676f9a2a11e0dad8b3b2f96bd36926772021-04-09 12:34:56232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70x3720adfc831142a15fd310ca4a37ced177b504471 wei
0x2ecc287b1d5aafa94b0f735f0f8c3f1e80efa64676f9a2a11e0dad8b3b2f96bd36926772021-04-09 12:34:56232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c7 Mdex: Router80 HT
0x653574754eaf87898ec274cd657a56dede4c9a8acc5f6269a08911061438323036926662021-04-09 12:34:23232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70xf18463bd447597a3b7c4035ea1e7bcdc5d99f3300.079426425479485239 HT
0x653574754eaf87898ec274cd657a56dede4c9a8acc5f6269a08911061438323036926662021-04-09 12:34:23232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70x3720adfc831142a15fd310ca4a37ced177b5044779.34699905400575436 HT
0x653574754eaf87898ec274cd657a56dede4c9a8acc5f6269a08911061438323036926662021-04-09 12:34:23232 days 17 hrs ago Mdex: Router 0xca91e2a577eba456db7ab0a847d731c77b6a65c779.4264254794852396 HT
0x9b7866a83829942aeecbe9ee86dbc074fd57b20959a33e2b7e75af9757b264a636925612021-04-09 12:29:08232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70x3720adfc831142a15fd310ca4a37ced177b504471 wei
0x9b7866a83829942aeecbe9ee86dbc074fd57b20959a33e2b7e75af9757b264a636925612021-04-09 12:29:08232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c7 Mdex: Router80 HT
0x96ff667a4b270134f69c6214395a37b4045c0db0b84797738cf5d72a7023841336925482021-04-09 12:28:29232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70xf18463bd447597a3b7c4035ea1e7bcdc5d99f3300.079476656749547786 HT
0x96ff667a4b270134f69c6214395a37b4045c0db0b84797738cf5d72a7023841336925482021-04-09 12:28:29232 days 17 hrs ago 0xca91e2a577eba456db7ab0a847d731c77b6a65c70x3720adfc831142a15fd310ca4a37ced177b5044779.397180092798238815 HT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
swapV1

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-03-15
*/

pragma solidity ^0.5.10;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
interface IERC20 {

    /**
     * @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.
     *
     * > 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 Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * > It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != 0x0 && codehash != accountHash);
    }

}

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }


    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) {// Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract IWETH is IERC20 {

    function balanceOf(address account) external view returns (uint256);

    function deposit() external payable;

    function transfer(address to, uint value) external returns (bool);

    function withdraw(uint) external;
}

library UniswapV2Library {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB, bytes memory initCode) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                initCode // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB, bytes memory initCode) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB, initCode)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, uint fee) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(fee);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(10000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint fee) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(10000);
        uint denominator = reserveOut.sub(amountOut).mul(fee);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path, bytes memory initCode, uint fee) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1], initCode);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut, fee);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path, bytes memory initCode, uint fee) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i], initCode);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut, fee);
        }
    }
}

interface IUniswapV2Pair {
    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

contract swapV1 {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    event EVTCallExProxy (address indexed _in, address indexed _out, address indexed _trader, address _ex, uint256 _outAmount);
    event EVTSwapExactTokensForTokens(address indexed _in, address indexed _out, address indexed _trader, address _ex, uint256 _outAmount);
    event EVTSwapTokensForExactTokens(address indexed _in, address indexed _out, address indexed _trader, address _ex, uint256 _outAmount);
    event SwapToolCreated(address indexed router);


    function safeTransfer(address token, address to, uint256 value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }


    //TODO
    uint256  feeFlag;
    address  payable private feeAddr = 0xF18463BD447597a3b7c4035EA1E7BcDc5d99F330;
    address public constant  WETH = 0x5545153CCFcA01fbd7Dd11C0b23ba694D9509A6F;
    uint256 feeRate = 1;
    uint256 feePercent1000 = 1000;
    uint256 userFundsRate = feePercent1000 - feeRate;
    //TODO
    address private _owner;
    address emptyAddr = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    mapping(address => bool) routerMap;
    mapping(address => bytes) factoryMap;
    mapping(address => uint256) factoryFeeMap;
    IWETH wethToken;


    constructor() public {
        wethToken = IWETH(WETH);
        _owner = msg.sender;
        feeFlag = 1;
        emit SwapToolCreated(address(this));

        factoryMap[0xb0b670fc1F7724119963018DB0BfA86aDb22d941] = hex'2ad889f82040abccb2649ea6a874796c1601fb67f91a747a80e08860c73ddf24';
        factoryMap[0x1EA26C17d061E8a7Cc33B20d8d8Dad131d7fb392] = hex'7ebbf425b07b211d8da43bdc833a9b8f2c7eaad2c0d696a4ff7a6c6b6a369c1f';
        factoryMap[0xfaD5cfeA51efECaa69749Cb8D89C2812d4D1ee97] = hex'eb23ddc3c69b89cf449a5964057abd885c43bebd5d6e422b5548f5274e3584f9';
        factoryMap[0x2c809515dbeFE359BE587DBE0894339e2947D0FD] = hex'65132eb6f61e6ef0e8e05980bc92152c53d4176e7ec3a54f867be8adf9d8173a';
        factoryMap[0xB49f19289857f4499781AaB9afd4A428C4BE9CA8] = hex'e7418267b22a1affb433ac6e8a6eae3a15890c6e6155eb347f72cd973625dcb6';
        factoryMap[0x32CE36F6eA8d97f9fC19Aab83b9c6D2F52D74470] = hex'7b9686f044376bf1a04de2e9f1dbb6c9a4fe516f7cbd89b68be801982b62f913';

        //
        factoryFeeMap[0xb0b670fc1F7724119963018DB0BfA86aDb22d941] = 9970;
        factoryFeeMap[0x1EA26C17d061E8a7Cc33B20d8d8Dad131d7fb392] = 9970;
        factoryFeeMap[0xfaD5cfeA51efECaa69749Cb8D89C2812d4D1ee97] = 9970;
        factoryFeeMap[0x2c809515dbeFE359BE587DBE0894339e2947D0FD] = 9970;
        factoryFeeMap[0xB49f19289857f4499781AaB9afd4A428C4BE9CA8] = 9965;
        factoryFeeMap[0x32CE36F6eA8d97f9fC19Aab83b9c6D2F52D74470] = 9970;

    }


    function pairFor(address factory, address tokenA, address tokenB, bytes memory initCode) public pure returns (address pair) {
        return UniswapV2Library.pairFor(factory, tokenA, tokenB, initCode);
    }

    modifier onlyOwner() {
        require(tx.origin == _owner, "Ownable: caller is not the owner");
        _;
    }

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'UniswapV2Router: EXPIRED');
        _;
    }

    function addRouter(address router) public onlyOwner {
        routerMap[router] = true;

    }

    function isRouter(address router) public view returns (bool){
        return routerMap[router];
    }

    function addFactory(address _factory, uint256 fee, bytes memory initCode) public onlyOwner {
        factoryMap[_factory] = initCode;
        factoryFeeMap[_factory] = fee;
    }

    function setFeeFlag(uint256 f) public onlyOwner {
        feeFlag = f;
    }

    function setFeeRate(uint256 fee) public onlyOwner {
        require(fee > 0 && fee <= 10, "1-10");
        feeRate = fee;
    }

    function _needFee() internal view returns (bool){
        return feeFlag == 1;
    }


    function callExProxy(address router, IERC20 inToken, IERC20 outToken, uint256 amountIn, uint256 amountOutMin, bytes memory data) public payable {
        require(router != address(this), "Illegal");
        require(amountOutMin > 0, 'Limit Amount must be set');
        require(isRouter(router), "Illegal router address");

        if (address(inToken) != emptyAddr) {
            require(msg.value == 0, "eth 0");
            transferFromUser(inToken, msg.sender, amountIn);
        }

        approve(inToken, router);
        //swap
        (bool success,) = router.call.value(msg.value)(data);
        require(success, "call ex fail");

        uint256 tradeReturn = viewBalance(outToken, address(this));
        require(tradeReturn >= amountOutMin, 'Trade returned less than the minimum amount');

        // return any unspent funds
        uint256 leftover = viewBalance(inToken, address(this));
        if (leftover > 0) {
            sendFunds(inToken, msg.sender, leftover);
        }

        if (_needFee()) {
            sendFunds(outToken, msg.sender, tradeReturn.mul(userFundsRate).div(feePercent1000));
            sendFunds(outToken, feeAddr, tradeReturn.mul(feeRate).div(feePercent1000));
        } else {
            sendFunds(outToken, msg.sender, tradeReturn);
        }
        emit EVTCallExProxy(address(inToken), address(outToken), msg.sender, router, tradeReturn);
    }

    function swapExactTokensForTokens(address factory, IERC20 inToken, IERC20 outToken, uint256 amountIn, uint256 amountOutMin, uint deadline, address[] memory path) public payable ensure(deadline) {
        require(factory != address(this), "Illegal");
        require(amountOutMin > 0, 'Limit Amount must be set');
        require(factoryMap[factory].length > 0, "add factory before");
        bytes memory initCode = factoryMap[factory];
        uint[] memory amounts = new uint[](path.length);
        {
            uint fee = factoryFeeMap[factory];
            amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path, initCode, fee);
        }
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');

        address firstPair = UniswapV2Library.pairFor(factory, path[0], path[1], initCode);
        if (address(inToken) != emptyAddr) {
            require(msg.value == 0, "eth 0");
            safeTransferFrom(address(inToken), msg.sender, firstPair, amountIn);
        } else {
            inToken = IERC20(WETH);
            wethToken.deposit.value(msg.value)();
            inToken.safeTransfer(firstPair, msg.value);
        }
        if (_needFee()) {
            {
                _swap(factory, amounts, path, address(this), initCode);
            }

            if (address(outToken) == emptyAddr) {
                wethToken.withdraw(wethToken.balanceOf(address(this)));
            }

            uint256 tradeReturn = viewBalance(outToken, address(this));
            require(tradeReturn >= amountOutMin, 'Trade returned less than the minimum amount');

            uint256 leftover = viewBalance(inToken, address(this));
            if (leftover > 0) {
                sendFunds(inToken, msg.sender, leftover);
            }
            sendFunds(outToken, msg.sender, tradeReturn.mul(userFundsRate).div(feePercent1000));
            sendFunds(outToken, feeAddr, tradeReturn.mul(feeRate).div(feePercent1000));
        } else {

            if (address(outToken) == emptyAddr) {
                _swap(factory, amounts, path, address(this), initCode);
                uint256 tradeReturn = wethToken.balanceOf(address(this));
                wethToken.withdraw(tradeReturn);
                sendFunds(outToken, msg.sender, tradeReturn);
            } else {
                _swap(factory, amounts, path, msg.sender, initCode);
            }

        }
        emit EVTSwapExactTokensForTokens(address(inToken), address(outToken), msg.sender, factory, amounts[amounts.length - 1]);
    }


    function swapTokensForExactTokens(address factory, IERC20 inToken, IERC20 outToken, uint256 amountInMax, uint256 amountOut, uint deadline, address[] memory path) public payable ensure(deadline) {
        require(factory != address(this), "Illegal");
        require(factoryMap[factory].length > 0, "add factory before");
        bytes memory initCode = factoryMap[factory];
        uint[] memory amounts = new uint[](path.length);
        {
            uint fee = factoryFeeMap[factory];
            amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path, initCode, fee);
        }
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');

        address firstPair = UniswapV2Library.pairFor(factory, path[0], path[1], initCode);
        if (address(inToken) != emptyAddr) {
            require(msg.value == 0, "eth 0");
            safeTransferFrom(address(inToken), msg.sender, firstPair, amounts[0]);
        } else {
            require(amounts[0] <= msg.value, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
            inToken = IERC20(WETH);
            wethToken.deposit.value(amounts[0])();
            inToken.safeTransfer(firstPair, amounts[0]);
        }
        if (_needFee()) {
            {
                _swap(factory, amounts, path, address(this), initCode);
            }

            if (address(outToken) == emptyAddr) {
                wethToken.withdraw(wethToken.balanceOf(address(this)));
            }

            sendFunds(outToken, msg.sender, amountOut.mul(userFundsRate).div(feePercent1000));
            sendFunds(outToken, feeAddr, amountOut.mul(feeRate).div(feePercent1000));
        } else {

            if (address(outToken) == emptyAddr) {
                _swap(factory, amounts, path, address(this), initCode);
                uint256 tradeReturn = wethToken.balanceOf(address(this));
                wethToken.withdraw(tradeReturn);
                sendFunds(outToken, msg.sender, tradeReturn);
            } else {
                _swap(factory, amounts, path, msg.sender, initCode);
            }

        }
        if (msg.value > amounts[0]) {
            //eth
            msg.sender.transfer(msg.value.sub(amounts[0]));
        }

        emit EVTSwapTokensForExactTokens(address(inToken), address(outToken), msg.sender, factory, amountOut);
    }


    function transferFromUser(IERC20 erc, address _from, uint256 _inAmount) internal {
        if (
            address(erc) != emptyAddr &&
        erc.allowance(_from, address(this)) >= _inAmount
        ) {
            safeTransferFrom(address(erc), _from, address(this), _inAmount);
        }
    }

    function approve(IERC20 erc, address approvee) internal {
        if (
            address(erc) != emptyAddr &&
            erc.allowance(address(this), approvee) == 0
        ) {
            erc.safeApprove(approvee, uint256(- 1));
        }
    }

    function viewBalance(IERC20 erc, address owner) internal view returns (uint256) {
        if (address(erc) == emptyAddr) {
            return owner.balance;
        } else {
            return erc.balanceOf(owner);
        }
    }

    function sendFunds(IERC20 erc, address payable receiver, uint256 funds) internal {
        if (address(erc) == emptyAddr) {
            receiver.transfer(funds);
        } else {
            safeTransfer(address(erc), receiver, funds);
        }
    }


    function _swap(address factory, uint[] memory amounts, address[] memory path, address _to, bytes memory initCode) internal {
        //
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = UniswapV2Library.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2], initCode) : _to;
            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output, initCode)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }

    function withdrawEth() external onlyOwner {
        msg.sender.transfer(address(this).balance);
    }

    function withdrawAnyToken(IERC20 erc) external onlyOwner {
        safeTransfer(address(erc), msg.sender, erc.balanceOf(address(this)));
    }


    function exitContract() public onlyOwner {
        selfdestruct(msg.sender);
    }

    function() external payable {
        require(msg.sender != tx.origin, "233333");
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bytes","name":"initCode","type":"bytes"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"contract IERC20","name":"inToken","type":"address"},{"internalType":"contract IERC20","name":"outToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"swapExactTokensForTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"f","type":"uint256"}],"name":"setFeeFlag","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"addRouter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setFeeRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"contract IERC20","name":"inToken","type":"address"},{"internalType":"contract IERC20","name":"outToken","type":"address"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"swapTokensForExactTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"}],"name":"addFactory","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"erc","type":"address"}],"name":"withdrawAnyToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawEth","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"contract IERC20","name":"inToken","type":"address"},{"internalType":"contract IERC20","name":"outToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callExProxy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exitContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_in","type":"address"},{"indexed":true,"internalType":"address","name":"_out","type":"address"},{"indexed":true,"internalType":"address","name":"_trader","type":"address"},{"indexed":false,"internalType":"address","name":"_ex","type":"address"},{"indexed":false,"internalType":"uint256","name":"_outAmount","type":"uint256"}],"name":"EVTCallExProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_in","type":"address"},{"indexed":true,"internalType":"address","name":"_out","type":"address"},{"indexed":true,"internalType":"address","name":"_trader","type":"address"},{"indexed":false,"internalType":"address","name":"_ex","type":"address"},{"indexed":false,"internalType":"uint256","name":"_outAmount","type":"uint256"}],"name":"EVTSwapExactTokensForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_in","type":"address"},{"indexed":true,"internalType":"address","name":"_out","type":"address"},{"indexed":true,"internalType":"address","name":"_trader","type":"address"},{"indexed":false,"internalType":"address","name":"_ex","type":"address"},{"indexed":false,"internalType":"uint256","name":"_outAmount","type":"uint256"}],"name":"EVTSwapTokensForExactTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"}],"name":"SwapToolCreated","type":"event"}]

6080604052600180546001600160a01b031990811673f18463bd447597a3b7c4035ea1e7bcdc5d99f3301782556002919091556103e86003556103e76004556006805490911673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1790553480156200006a57600080fd5b50600a80546001600160a01b0319908116735545153ccfca01fbd7dd11c0b23ba694d9509a6f1790915560058054909116331790556001600090815560405130917f5b32edf5e0b2257b08a068877c107da81b417325ac04b89a1a5db97723830a7391a26040805180820190915260208082527f2ad889f82040abccb2649ea6a874796c1601fb67f91a747a80e08860c73ddf2481830190815273b0b670fc1f7724119963018db0bfa86adb22d9416000526008909152905162000150917f3477635bd63a20e61339bce8956844e08d2e84242eff1051c5d7e702488fcb5c91620004dd565b506040805180820190915260208082527f7ebbf425b07b211d8da43bdc833a9b8f2c7eaad2c0d696a4ff7a6c6b6a369c1f818301908152731ea26c17d061e8a7cc33b20d8d8dad131d7fb39260005260089091529051620001d3917fa5abcf3760d65dd385e79d2d989ea850fe90dd770e2dcc52b7c9e04421c27b9791620004dd565b506040805180820190915260208082527feb23ddc3c69b89cf449a5964057abd885c43bebd5d6e422b5548f5274e3584f981830190815273fad5cfea51efecaa69749cb8d89c2812d4d1ee976000526008909152905162000256917fc3d6e66dd7ea9865c0711f472fbf6989c2de23b3b3636d79e01996e8c4de044591620004dd565b506040805180820190915260208082527f65132eb6f61e6ef0e8e05980bc92152c53d4176e7ec3a54f867be8adf9d8173a818301908152732c809515dbefe359be587dbe0894339e2947d0fd60005260089091529051620002d9917f4be0bbaa4693fe8400cfa316a3140f97120e5eea8c8aeafd75b0940b51e8c15e91620004dd565b506040805180820190915260208082527fe7418267b22a1affb433ac6e8a6eae3a15890c6e6155eb347f72cd973625dcb681830190815273b49f19289857f4499781aab9afd4a428c4be9ca8600052600890915290516200035c917fa73f20709f4b22babee4b227a26590ba91e8fd5b7e638af4ec47d66396bb787291620004dd565b506040805180820190915260208082527f7b9686f044376bf1a04de2e9f1dbb6c9a4fe516f7cbd89b68be801982b62f9138183019081527332ce36f6ea8d97f9fc19aab83b9c6d2f52d7447060005260089091529051620003df917f0946f39084d640faa39ef10410437a6b85d95f075b21f66c71f0a3553729471591620004dd565b5060096020526126f27fc34793358e5d30cb85bbb7c31093f31ed517d9ddfcec5720ff65482f1e10bc088190557f2d0d1b21c4674c4af234565172b8008c27d9d249a8ebff4959a3df0eb5263c468190557f6b542c1f09e5c93c54685219624bcd1392853323aa9dec9cbb42e01fec73898a8190557f6f404e3d8fbf499d768fee6e5fdb8203628d7ce16993577a1b17df53c225d3b18190556126ed7f3dd322d4326346cc676f461a5cc2618bdb8c031312f781d632bf2f77c265766d557332ce36f6ea8d97f9fc19aab83b9c6d2f52d744706000527fd901673e1af1e1a652699762fdbf0aa5a59b41da790bbbd0b7e9ec0229babda55562000582565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200052057805160ff191683800117855562000550565b8280016001018555821562000550579182015b828111156200055057825182559160200191906001019062000533565b506200055e92915062000562565b5090565b6200057f91905b808211156200055e576000815560010162000569565b90565b61325380620005926000396000f3fe6080604052600436106100c25760003560e01c80636b5ba0491161007f578063a9e6d4ed11610059578063a9e6d4ed1461052f578063ad5c464814610600578063d5a227c614610615578063f3d7d2821461062a576100c2565b80636b5ba049146104215780637892766c146104e7578063a0ef91df1461051a576100c2565b806304ede7b6146101025780631c1b0e19146101f05780632200aad9146102c557806324ca984e146102ef57806345596e2e146103225780634b08db681461034c575b33321415610100576040805162461bcd60e51b815260206004820152600660248201526532333333333360d01b604482015290519081900360640190fd5b005b34801561010e57600080fd5b506101d46004803603608081101561012557600080fd5b6001600160a01b0382358116926020810135821692604082013590921691810190608081016060820135600160201b81111561016057600080fd5b82018360208201111561017257600080fd5b803590602001918460018302840111600160201b8311171561019357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610671945050505050565b604080516001600160a01b039092168252519081900360200190f35b610100600480360360e081101561020657600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a0820135919081019060e0810160c0820135600160201b81111561025457600080fd5b82018360208201111561026657600080fd5b803590602001918460208302840111600160201b8311171561028757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610688945050505050565b3480156102d157600080fd5b50610100600480360360208110156102e857600080fd5b5035610deb565b3480156102fb57600080fd5b506101006004803603602081101561031257600080fd5b50356001600160a01b0316610e3d565b34801561032e57600080fd5b506101006004803603602081101561034557600080fd5b5035610eae565b610100600480360360e081101561036257600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359160a0820135919081019060e0810160c0820135600160201b8111156103b057600080fd5b8201836020820111156103c257600080fd5b803590602001918460208302840111600160201b831117156103e357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610f4b945050505050565b34801561042d57600080fd5b506101006004803603606081101561044457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561047357600080fd5b82018360208201111561048557600080fd5b803590602001918460018302840111600160201b831117156104a657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611690945050505050565b3480156104f357600080fd5b506101006004803603602081101561050a57600080fd5b50356001600160a01b0316611724565b34801561052657600080fd5b50610100611800565b610100600480360360c081101561054557600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a0820135600160201b81111561058c57600080fd5b82018360208201111561059e57600080fd5b803590602001918460018302840111600160201b831117156105bf57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061187a945050505050565b34801561060c57600080fd5b506101d4611be7565b34801561062157600080fd5b50610100611bff565b34801561063657600080fd5b5061065d6004803603602081101561064d57600080fd5b50356001600160a01b0316611c4f565b604080519115158252519081900360200190f35b600061067f85858585611c6d565b95945050505050565b81428110156106d9576040805162461bcd60e51b8152602060048201526018602482015277155b9a5cddd85c158c949bdd5d195c8e881156141254915160421b604482015290519081900360640190fd5b6001600160a01b038816301415610721576040805162461bcd60e51b8152602060048201526007602482015266125b1b1959d85b60ca1b604482015290519081900360640190fd5b60008411610771576040805162461bcd60e51b8152602060048201526018602482015277131a5b5a5d08105b5bdd5b9d081b5d5cdd081899481cd95d60421b604482015290519081900360640190fd5b6001600160a01b038816600090815260086020526040902054600260001961010060018416150201909116046107e3576040805162461bcd60e51b815260206004820152601260248201527161646420666163746f7279206265666f726560701b604482015290519081900360640190fd5b6001600160a01b03881660009081526008602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156108825780601f1061085757610100808354040283529160200191610882565b820191906000526020600020905b81548152906001019060200180831161086557829003601f168201915b50505050509050606083516040519080825280602002602001820160405280156108b6578160200160208202803883390190505b506001600160a01b038b166000908152600960205260409020549091506108e08b89878685611d8a565b91505085816001835103815181106108f457fe5b602002602001015110156109395760405162461bcd60e51b815260040180806020018281038252602b815260200180613145602b913960400191505060405180910390fd5b600061096f8b8660008151811061094c57fe5b60200260200101518760018151811061096157fe5b602002602001015186611c6d565b6006549091506001600160a01b038b81169116146109d35734156109c2576040805162461bcd60e51b8152602060048201526005602482015264065746820360dc1b604482015290519081900360640190fd5b6109ce8a33838b611ec3565b610a69565b735545153ccfca01fbd7dd11c0b23ba694d9509a6f9950600a60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a3a57600080fd5b505af1158015610a4e573d6000803e3d6000fd5b50610a69935050506001600160a01b038c1690508234612020565b610a71612077565b15610c4457610a838b83873087612081565b6006546001600160a01b038a811691161415610b6f57600a54604080516370a0823160e01b815230600482015290516001600160a01b0390921691632e1a7d4d9183916370a0823191602480820192602092909190829003018186803b158015610aec57600080fd5b505afa158015610b00573d6000803e3d6000fd5b505050506040513d6020811015610b1657600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b158015610b5657600080fd5b505af1158015610b6a573d6000803e3d6000fd5b505050505b6000610b7b8a30612283565b905087811015610bbc5760405162461bcd60e51b815260040180806020018281038252602b815260200180613039602b913960400191505060405180910390fd5b6000610bc88c30612283565b90508015610bdb57610bdb8c3383612338565b610c0c8b33610c07600354610bfb6004548861239590919063ffffffff16565b9063ffffffff6123f516565b612338565b600154600354600254610c3d928e926001600160a01b0390911691610c079190610bfb90889063ffffffff61239516565b5050610d64565b6006546001600160a01b038a811691161415610d5757610c678b83873087612081565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610cb257600080fd5b505afa158015610cc6573d6000803e3d6000fd5b505050506040513d6020811015610cdc57600080fd5b5051600a5460408051632e1a7d4d60e01b81526004810184905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b158015610d2e57600080fd5b505af1158015610d42573d6000803e3d6000fd5b50505050610d518a3383612338565b50610d64565b610d648b83873387612081565b336001600160a01b0316896001600160a01b03168b6001600160a01b03167fb5fe54d9d3d76c54a75a26f4d692877e4d2fc8562c4eb200c2969810388a33188e86600188510381518110610db457fe5b602090810291909101810151604080516001600160a01b039094168452918301528051918290030190a45050505050505050505050565b6005546001600160a01b03163214610e38576040805162461bcd60e51b815260206004820181905260248201526000805160206130fe833981519152604482015290519081900360640190fd5b600055565b6005546001600160a01b03163214610e8a576040805162461bcd60e51b815260206004820181905260248201526000805160206130fe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6005546001600160a01b03163214610efb576040805162461bcd60e51b815260206004820181905260248201526000805160206130fe833981519152604482015290519081900360640190fd5b600081118015610f0c5750600a8111155b610f46576040805162461bcd60e51b815260206004808301919091526024820152630312d31360e41b604482015290519081900360640190fd5b600255565b8142811015610f9c576040805162461bcd60e51b8152602060048201526018602482015277155b9a5cddd85c158c949bdd5d195c8e881156141254915160421b604482015290519081900360640190fd5b6001600160a01b038816301415610fe4576040805162461bcd60e51b8152602060048201526007602482015266125b1b1959d85b60ca1b604482015290519081900360640190fd5b6001600160a01b03881660009081526008602052604090205460026000196101006001841615020190911604611056576040805162461bcd60e51b815260206004820152601260248201527161646420666163746f7279206265666f726560701b604482015290519081900360640190fd5b6001600160a01b03881660009081526008602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156110f55780601f106110ca576101008083540402835291602001916110f5565b820191906000526020600020905b8154815290600101906020018083116110d857829003601f168201915b5050505050905060608351604051908082528060200260200182016040528015611129578160200160208202803883390190505b506001600160a01b038b166000908152600960205260409020549091506111538b8887868561245f565b915050868160008151811061116457fe5b602002602001015111156111a95760405162461bcd60e51b815260040180806020018281038252602781526020018061311e6027913960400191505060405180910390fd5b60006111bc8b8660008151811061094c57fe5b6006549091506001600160a01b038b811691161461123457341561120f576040805162461bcd60e51b8152602060048201526005602482015264065746820360dc1b604482015290519081900360640190fd5b61122f8a33838560008151811061122257fe5b6020026020010151611ec3565b61133e565b348260008151811061124257fe5b602002602001015111156112875760405162461bcd60e51b815260040180806020018281038252602781526020018061311e6027913960400191505060405180910390fd5b600a548251735545153ccfca01fbd7dd11c0b23ba694d9509a6f9b506001600160a01b039091169063d0e30db09084906000906112c057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156112f357600080fd5b505af1158015611307573d6000803e3d6000fd5b505050505061133e818360008151811061131d57fe5b60200260200101518c6001600160a01b03166120209092919063ffffffff16565b611346612077565b1561149a576113588b83873087612081565b6006546001600160a01b038a81169116141561144457600a54604080516370a0823160e01b815230600482015290516001600160a01b0390921691632e1a7d4d9183916370a0823191602480820192602092909190829003018186803b1580156113c157600080fd5b505afa1580156113d5573d6000803e3d6000fd5b505050506040513d60208110156113eb57600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b505050505b6114648933610c07600354610bfb6004548d61239590919063ffffffff16565b600154600354600254611495928c926001600160a01b0390911691610c079190610bfb908d9063ffffffff61239516565b6115ba565b6006546001600160a01b038a8116911614156115ad576114bd8b83873087612081565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561150857600080fd5b505afa15801561151c573d6000803e3d6000fd5b505050506040513d602081101561153257600080fd5b5051600a5460408051632e1a7d4d60e01b81526004810184905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b15801561158457600080fd5b505af1158015611598573d6000803e3d6000fd5b505050506115a78a3383612338565b506115ba565b6115ba8b83873387612081565b816000815181106115c757fe5b602002602001015134111561163457336001600160a01b03166108fc61160a846000815181106115f357fe5b60200260200101513461258190919063ffffffff16565b6040518115909202916000818181858888f19350505050158015611632573d6000803e3d6000fd5b505b604080516001600160a01b038d81168252602082018a9052825133938d831693928f16927f571a6dc94731a6842d1cbf05f308d1859ab291c73709f65d7d30bc45432a13b2929081900390910190a45050505050505050505050565b6005546001600160a01b031632146116dd576040805162461bcd60e51b815260206004820181905260248201526000805160206130fe833981519152604482015290519081900360640190fd5b6001600160a01b0383166000908152600860209081526040909120825161170692840190612fa0565b50506001600160a01b03909116600090815260096020526040902055565b6005546001600160a01b03163214611771576040805162461bcd60e51b815260206004820181905260248201526000805160206130fe833981519152604482015290519081900360640190fd5b6117fd8133836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156117cc57600080fd5b505afa1580156117e0573d6000803e3d6000fd5b505050506040513d60208110156117f657600080fd5b50516125de565b50565b6005546001600160a01b0316321461184d576040805162461bcd60e51b815260206004820181905260248201526000805160206130fe833981519152604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f193505050501580156117fd573d6000803e3d6000fd5b6001600160a01b0386163014156118c2576040805162461bcd60e51b8152602060048201526007602482015266125b1b1959d85b60ca1b604482015290519081900360640190fd5b60008211611912576040805162461bcd60e51b8152602060048201526018602482015277131a5b5a5d08105b5bdd5b9d081b5d5cdd081899481cd95d60421b604482015290519081900360640190fd5b61191b86611c4f565b611965576040805162461bcd60e51b8152602060048201526016602482015275496c6c6567616c20726f75746572206164647265737360501b604482015290519081900360640190fd5b6006546001600160a01b038681169116146119c05734156119b5576040805162461bcd60e51b8152602060048201526005602482015264065746820360dc1b604482015290519081900360640190fd5b6119c0853385612748565b6119ca85876127f1565b6000866001600160a01b031634836040518082805190602001908083835b60208310611a075780518252601f1990920191602091820191016119e8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611a69576040519150601f19603f3d011682016040523d82523d6000602084013e611a6e565b606091505b5050905080611ab3576040805162461bcd60e51b815260206004820152600c60248201526b18d85b1b08195e0819985a5b60a21b604482015290519081900360640190fd5b6000611abf8630612283565b905083811015611b005760405162461bcd60e51b815260040180806020018281038252602b815260200180613039602b913960400191505060405180910390fd5b6000611b0c8830612283565b90508015611b1f57611b1f883383612338565b611b27612077565b15611b8257611b4c8733610c07600354610bfb6004548861239590919063ffffffff16565b600154600354600254611b7d928a926001600160a01b0390911691610c079190610bfb90889063ffffffff61239516565b611b8d565b611b8d873384612338565b604080516001600160a01b038b8116825260208201859052825133938b831693928d16927fe04eda62df1f25208f4bce446a4cd6684f3e80876d019759249a4a248d2886c3929081900390910190a4505050505050505050565b735545153ccfca01fbd7dd11c0b23ba694d9509a6f81565b6005546001600160a01b03163214611c4c576040805162461bcd60e51b815260206004820181905260248201526000805160206130fe833981519152604482015290519081900360640190fd5b33ff5b6001600160a01b031660009081526007602052604090205460ff1690565b6000806000611c7c86866128ad565b9150915086828260405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001208560405160200180806001600160f81b0319815250600101846001600160a01b03166001600160a01b031660601b815260140183815260200182805190602001908083835b60208310611d3e5780518252601f199092019160209182019101611d1f565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040528051906020012060001c92505050949350505050565b6060600284511015611de3576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b8351604051908082528060200260200182016040528015611e0e578160200160208202803883390190505b5090508481600081518110611e1f57fe5b60200260200101818152505060005b6001855103811015611eb957600080611e7289888581518110611e4d57fe5b6020026020010151898660010181518110611e6457fe5b60200260200101518961298b565b91509150611e95848481518110611e8557fe5b6020026020010151838388612a5b565b848460010181518110611ea457fe5b60209081029190910101525050600101611e2e565b5095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310611f485780518252601f199092019160209182019101611f29565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611faa576040519150601f19603f3d011682016040523d82523d6000602084013e611faf565b606091505b5091509150818015611fdd575080511580611fdd5750808060200190516020811015611fda57600080fd5b50515b6120185760405162461bcd60e51b815260040180806020018281038252602481526020018061319a6024913960400191505060405180910390fd5b505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612072908490612b4a565b505050565b6000546001145b90565b60005b60018451038110156120185760008085838151811061209f57fe5b60200260200101518684600101815181106120b657fe5b60200260200101519150915060006120ce83836128ad565b50905060008885600101815181106120e257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461211057826000612114565b6000835b91509150600060028b5103881061212b578961214d565b61214d8d878d8b6002018151811061213f57fe5b60200260200101518c611c6d565b905061215b8d88888c611c6d565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015612198576020820181803883390190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122095781810151838201526020016121f1565b50505050905090810190601f1680156122365780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561225857600080fd5b505af115801561226c573d6000803e3d6000fd5b505060019099019850612084975050505050505050565b6006546000906001600160a01b03848116911614156122ad57506001600160a01b03811631612332565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561230357600080fd5b505afa158015612317573d6000803e3d6000fd5b505050506040513d602081101561232d57600080fd5b505190505b92915050565b6006546001600160a01b038481169116141561238a576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612384573d6000803e3d6000fd5b50612072565b6120728383836125de565b6000826123a457506000612332565b828202828482816123b157fe5b04146123ee5760405162461bcd60e51b81526004018080602001828103825260218152602001806130dd6021913960400191505060405180910390fd5b9392505050565b600080821161244b576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161245657fe5b04949350505050565b60606002845110156124b8576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b83516040519080825280602002602001820160405280156124e3578160200160208202803883390190505b50905084816001835103815181106124f757fe5b60209081029190910101528351600019015b8015611eb9576000806125398988600186038151811061252557fe5b6020026020010151898681518110611e6457fe5b9150915061255c84848151811061254c57fe5b6020026020010151838388612d08565b84600185038151811061256b57fe5b6020908102919091010152505060001901612509565b6000828211156125d8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061265b5780518252601f19909201916020918201910161263c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146126bd576040519150601f19603f3d011682016040523d82523d6000602084013e6126c2565b606091505b50915091508180156126f05750805115806126f057508080602001905160208110156126ed57600080fd5b50515b612741576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6006546001600160a01b038481169116148015906127e0575060408051636eb1769f60e11b81526001600160a01b0384811660048301523060248301529151839286169163dd62ed3e916044808301926020929190829003018186803b1580156127b157600080fd5b505afa1580156127c5573d6000803e3d6000fd5b505050506040513d60208110156127db57600080fd5b505110155b156120725761207283833084611ec3565b6006546001600160a01b03838116911614801590612888575060408051636eb1769f60e11b81523060048201526001600160a01b03838116602483015291519184169163dd62ed3e91604480820192602092909190829003018186803b15801561285a57600080fd5b505afa15801561286e573d6000803e3d6000fd5b505050506040513d602081101561288457600080fd5b5051155b156128a9576128a96001600160a01b0383168260001963ffffffff612df716565b5050565b600080826001600160a01b0316846001600160a01b031614156129015760405162461bcd60e51b81526004018080602001828103825260258152602001806130906025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610612921578284612924565b83835b90925090506001600160a01b038216612984576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b600080600061299a86866128ad565b5090506000806129ac89898989611c6d565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156129e457600080fd5b505afa1580156129f8573d6000803e3d6000fd5b505050506040513d6060811015612a0e57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0388811690841614612a48578082612a4b565b81815b909a909950975050505050505050565b6000808511612a9b5760405162461bcd60e51b815260040180806020018281038252602b8152602001806131be602b913960400191505060405180910390fd5b600084118015612aab5750600083115b612ae65760405162461bcd60e51b81526004018080602001828103825260288152602001806130b56028913960400191505060405180910390fd5b6000612af8868463ffffffff61239516565b90506000612b0c828663ffffffff61239516565b90506000612b3283612b268961271063ffffffff61239516565b9063ffffffff612f0a16565b9050808281612b3d57fe5b0498975050505050505050565b612b5c826001600160a01b0316612f64565b612bad576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310612beb5780518252601f199092019160209182019101612bcc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612c4d576040519150601f19603f3d011682016040523d82523d6000602084013e612c52565b606091505b509150915081612ca9576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115612d0257808060200190516020811015612cc557600080fd5b5051612d025760405162461bcd60e51b815260040180806020018281038252602a815260200180613170602a913960400191505060405180910390fd5b50505050565b6000808511612d485760405162461bcd60e51b815260040180806020018281038252602c815260200180613064602c913960400191505060405180910390fd5b600084118015612d585750600083115b612d935760405162461bcd60e51b81526004018080602001828103825260288152602001806130b56028913960400191505060405180910390fd5b6000612db7612710612dab878963ffffffff61239516565b9063ffffffff61239516565b90506000612dcf84612dab878a63ffffffff61258116565b9050612dec6001828481612ddf57fe5b049063ffffffff612f0a16565b979650505050505050565b801580612e7d575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612e4f57600080fd5b505afa158015612e63573d6000803e3d6000fd5b505050506040513d6020811015612e7957600080fd5b5051155b612eb85760405162461bcd60e51b81526004018080602001828103825260368152602001806131e96036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612072908490612b4a565b6000828201838110156123ee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590612f985750808214155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612fe157805160ff191683800117855561300e565b8280016001018555821561300e579182015b8281111561300e578251825591602001919060010190612ff3565b5061301a92915061301e565b5090565b61207e91905b8082111561301a576000815560010161302456fe54726164652072657475726e6564206c657373207468616e20746865206d696e696d756d20616d6f756e74556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a72315820fe3b1f2b193a606582aadc9d7e1d6744ef5f0bd9117e5d5977a29238527c8d1f64736f6c634300050b0032

Deployed ByteCode Sourcemap

14950:13237:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28142:10;28156:9;28142:23;;28134:42;;;;;-1:-1:-1;;;28134:42:0;;;;;;;;;;;;-1:-1:-1;;;28134:42:0;;;;;;;;;;;;;;;14950:13237;18192:209;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18192:209:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;18192:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;18192:209:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18192:209:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18192:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18192:209:0;;-1:-1:-1;18192:209:0;;-1:-1:-1;;;;;18192:209:0:i;:::-;;;;-1:-1:-1;;;;;18192:209:0;;;;;;;;;;;;;;20827:2614;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;20827:2614:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;20827:2614:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20827:2614:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;20827:2614:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;20827:2614:0;;-1:-1:-1;20827:2614:0;;-1:-1:-1;;;;;20827:2614:0:i;19072:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19072:78:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19072:78:0;;:::i;18667:97::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18667:97:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18667:97:0;-1:-1:-1;;;;;18667:97:0;;:::i;19158:130::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19158:130:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19158:130:0;;:::i;23451:2383::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;23451:2383:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;23451:2383:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23451:2383:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23451:2383:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;23451:2383:0;;-1:-1:-1;23451:2383:0;;-1:-1:-1;;;;;23451:2383:0:i;18883:181::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18883:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;18883:181:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;18883:181:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18883:181:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18883:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18883:181:0;;-1:-1:-1;18883:181:0;;-1:-1:-1;;;;;18883:181:0:i;27849:144::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27849:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27849:144:0;-1:-1:-1;;;;;27849:144:0;;:::i;27738:103::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27738:103:0;;;:::i;19392:1427::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;19392:1427:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;19392:1427:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19392:1427:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;19392:1427:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19392:1427:0;;-1:-1:-1;19392:1427:0;;-1:-1:-1;;;;;19392:1427:0:i;16265:74::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16265:74:0;;;:::i;28003:84::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28003:84:0;;;:::i;18772:103::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18772:103:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18772:103:0;-1:-1:-1;;;;;18772:103:0;;:::i;:::-;;;;;;;;;;;;;;;;;;18192:209;18302:12;18334:59;18359:7;18368:6;18376;18384:8;18334:24;:59::i;:::-;18327:66;18192:209;-1:-1:-1;;;;;18192:209:0:o;20827:2614::-;21011:8;18595:15;18583:8;:27;;18575:64;;;;;-1:-1:-1;;;18575:64:0;;;;;;;;;;;;-1:-1:-1;;;18575:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21040:24:0;;21059:4;21040:24;;21032:44;;;;;-1:-1:-1;;;21032:44:0;;;;;;;;;;;;-1:-1:-1;;;21032:44:0;;;;;;;;;;;;;;;21110:1;21095:12;:16;21087:53;;;;;-1:-1:-1;;;21087:53:0;;;;;;;;;;;;-1:-1:-1;;;21087:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21159:19:0;;21188:1;21159:19;;;:10;:19;;;;;:26;;-1:-1:-1;;21159:26:0;;;;;;;;;;;21151:61;;;;;-1:-1:-1;;;21151:61:0;;;;;;;;;;;;-1:-1:-1;;;21151:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21247:19:0;;;;;;:10;:19;;;;;;;;;21223:43;;;;;;-1:-1:-1;;21223:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;:43;;;21247:19;21223:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21277:21;21312:4;:11;21301:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;21301:23:0;-1:-1:-1;;;;;;21361:22:0;;21350:8;21361:22;;;:13;:22;;;;;;21277:47;;-1:-1:-1;21408:70:0;21375:7;21448:8;21458:4;21464:8;21361:22;21408:30;:70::i;:::-;21398:80;;18650:1;21539:12;21508:7;21533:1;21516:7;:14;:18;21508:27;;;;;;;;;;;;;;:43;;21500:99;;;;-1:-1:-1;;;21500:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21612:17;21632:61;21657:7;21666:4;21671:1;21666:7;;;;;;;;;;;;;;21675:4;21680:1;21675:7;;;;;;;;;;;;;;21684:8;21632:24;:61::i;:::-;21728:9;;21612:81;;-1:-1:-1;;;;;;21708:29:0;;;21728:9;;21708:29;21704:339;;21762:9;:14;21754:32;;;;;-1:-1:-1;;;21754:32:0;;;;;;;;;;;;-1:-1:-1;;;21754:32:0;;;;;;;;;;;;;;;21801:67;21826:7;21836:10;21848:9;21859:8;21801:16;:67::i;:::-;21704:339;;;16297:42;21901:22;;21938:9;;;;;;;;;-1:-1:-1;;;;;21938:9:0;-1:-1:-1;;;;;21938:17:0;;21962:9;21938:36;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21938:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;21989:42:0;;-1:-1:-1;;;;;;;;21989:20:0;;;-1:-1:-1;22010:9:0;22021;21989:20;:42::i;:::-;22057:10;:8;:10::i;:::-;22053:1251;;;22103:54;22109:7;22118;22127:4;22141;22148:8;22103:5;:54::i;:::-;22214:9;;-1:-1:-1;;;;;22193:30:0;;;22214:9;;22193:30;22189:125;;;22244:9;;22263:34;;;-1:-1:-1;;;22263:34:0;;22291:4;22263:34;;;;;;-1:-1:-1;;;;;22244:9:0;;;;:18;;:9;;22263:19;;:34;;;;;;;;;;;;;;;22244:9;22263:34;;;5:2:-1;;;;30:1;27;20:12;5:2;22263:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22263:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22263:34:0;22244:54;;;-1:-1:-1;;;;;;22244:54:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22244:54:0;;;;;;;-1:-1:-1;22244:54:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;22244:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22244:54:0;;;;22189:125;22330:19;22352:36;22364:8;22382:4;22352:11;:36::i;:::-;22330:58;;22426:12;22411:11;:27;;22403:83;;;;-1:-1:-1;;;22403:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22503:16;22522:35;22534:7;22551:4;22522:11;:35::i;:::-;22503:54;-1:-1:-1;22576:12:0;;22572:93;;22609:40;22619:7;22628:10;22640:8;22609:9;:40::i;:::-;22679:83;22689:8;22699:10;22711:50;22746:14;;22711:30;22727:13;;22711:11;:15;;:30;;;;:::i;:::-;:34;:50;:34;:50;:::i;:::-;22679:9;:83::i;:::-;22797:7;;22835:14;;22822:7;;22777:74;;22787:8;;-1:-1:-1;;;;;22797:7:0;;;;22806:44;;22835:14;22806:24;;:11;;:24;:15;:24;:::i;22777:74::-;22053:1251;;;;;22911:9;;-1:-1:-1;;;;;22890:30:0;;;22911:9;;22890:30;22886:405;;;22941:54;22947:7;22956;22965:4;22979;22986:8;22941:5;:54::i;:::-;23036:9;;:34;;;-1:-1:-1;;;23036:34:0;;23064:4;23036:34;;;;;;23014:19;;-1:-1:-1;;;;;23036:9:0;;:19;;:34;;;;;;;;;;;;;;:9;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;23036:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23036:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23036:34:0;23089:9;;:31;;;-1:-1:-1;;;23089:31:0;;;;;;;;;;23036:34;;-1:-1:-1;;;;;;23089:9:0;;;;:18;;:31;;;;;:9;;:31;;;;;;;;:9;;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;23089:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23089:31:0;;;;23139:44;23149:8;23159:10;23171:11;23139:9;:44::i;:::-;22886:405;;;;23224:51;23230:7;23239;23248:4;23254:10;23266:8;23224:5;:51::i;:::-;23384:10;-1:-1:-1;;;;;23319:114:0;23373:8;-1:-1:-1;;;;;23319:114:0;23355:7;-1:-1:-1;;;;;23319:114:0;;23396:7;23405;23430:1;23413:7;:14;:18;23405:27;;;;;;;;;;;;;;;;;;;23319:114;;;-1:-1:-1;;;;;23319:114:0;;;;;;;;;;;;;;;;;;18650:1;;;20827:2614;;;;;;;;:::o;19072:78::-;18462:6;;-1:-1:-1;;;;;18462:6:0;18449:9;:19;18441:64;;;;;-1:-1:-1;;;18441:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18441:64:0;;;;;;;;;;;;;;;19131:7;:11;19072:78::o;18667:97::-;18462:6;;-1:-1:-1;;;;;18462:6:0;18449:9;:19;18441:64;;;;;-1:-1:-1;;;18441:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18441:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18730:17:0;;;;;:9;:17;;;;;:24;;-1:-1:-1;;18730:24:0;18750:4;18730:24;;;18667:97::o;19158:130::-;18462:6;;-1:-1:-1;;;;;18462:6:0;18449:9;:19;18441:64;;;;;-1:-1:-1;;;18441:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18441:64:0;;;;;;;;;;;;;;;19233:1;19227:3;:7;:20;;;;;19245:2;19238:3;:9;;19227:20;19219:37;;;;;-1:-1:-1;;;19219:37:0;;;;;;;;;;;;;;;-1:-1:-1;;;19219:37:0;;;;;;;;;;;;;;;19267:7;:13;19158:130::o;23451:2383::-;23635:8;18595:15;18583:8;:27;;18575:64;;;;;-1:-1:-1;;;18575:64:0;;;;;;;;;;;;-1:-1:-1;;;18575:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23664:24:0;;23683:4;23664:24;;23656:44;;;;;-1:-1:-1;;;23656:44:0;;;;;;;;;;;;-1:-1:-1;;;23656:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23719:19:0;;23748:1;23719:19;;;:10;:19;;;;;:26;;-1:-1:-1;;23719:26:0;;;;;;;;;;;23711:61;;;;;-1:-1:-1;;;23711:61:0;;;;;;;;;;;;-1:-1:-1;;;23711:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23807:19:0;;;;;;:10;:19;;;;;;;;;23783:43;;;;;;-1:-1:-1;;23783:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;:43;;;23807:19;23783:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23837:21;23872:4;:11;23861:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;23861:23:0;-1:-1:-1;;;;;;23921:22:0;;23910:8;23921:22;;;:13;:22;;;;;;23837:47;;-1:-1:-1;23968:70:0;23935:7;24007:9;24018:4;24024:8;23921:22;23968:29;:70::i;:::-;23958:80;;18650:1;24082:11;24068:7;24076:1;24068:10;;;;;;;;;;;;;;:25;;24060:77;;;;-1:-1:-1;;;24060:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24150:17;24170:61;24195:7;24204:4;24209:1;24204:7;;;;;;;24170:61;24266:9;;24150:81;;-1:-1:-1;;;;;;24246:29:0;;;24266:9;;24246:29;24242:433;;24300:9;:14;24292:32;;;;;-1:-1:-1;;;24292:32:0;;;;;;;;;;;;-1:-1:-1;;;24292:32:0;;;;;;;;;;;;;;;24339:69;24364:7;24374:10;24386:9;24397:7;24405:1;24397:10;;;;;;;;;;;;;;24339:16;:69::i;:::-;24242:433;;;24463:9;24449:7;24457:1;24449:10;;;;;;;;;;;;;;:23;;24441:75;;;;-1:-1:-1;;;24441:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24568:9;;24592:10;;16297:42;;-1:-1:-1;;;;;;24568:9:0;;;;:17;;24592:7;;24568:9;;24592:10;;;;;;;;;;24568:37;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24568:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24568:37:0;;;;;24620:43;24641:9;24652:7;24660:1;24652:10;;;;;;;;;;;;;;24620:7;-1:-1:-1;;;;;24620:20:0;;;:43;;;;;:::i;:::-;24689:10;:8;:10::i;:::-;24685:898;;;24735:54;24741:7;24750;24759:4;24773;24780:8;24735:5;:54::i;:::-;24846:9;;-1:-1:-1;;;;;24825:30:0;;;24846:9;;24825:30;24821:125;;;24876:9;;24895:34;;;-1:-1:-1;;;24895:34:0;;24923:4;24895:34;;;;;;-1:-1:-1;;;;;24876:9:0;;;;:18;;:9;;24895:19;;:34;;;;;;;;;;;;;;;24876:9;24895:34;;;5:2:-1;;;;30:1;27;20:12;5:2;24895:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24895:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24895:34:0;24876:54;;;-1:-1:-1;;;;;;24876:54:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24876:54:0;;;;;;;-1:-1:-1;24876:54:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;24876:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24876:54:0;;;;24821:125;24962:81;24972:8;24982:10;24994:48;25027:14;;24994:28;25008:13;;24994:9;:13;;:28;;;;:::i;24962:81::-;25078:7;;25114:14;;25101:7;;25058:72;;25068:8;;-1:-1:-1;;;;;25078:7:0;;;;25087:42;;25114:14;25087:22;;:9;;:22;:13;:22;:::i;25058:72::-;24685:898;;;25190:9;;-1:-1:-1;;;;;25169:30:0;;;25190:9;;25169:30;25165:405;;;25220:54;25226:7;25235;25244:4;25258;25265:8;25220:5;:54::i;:::-;25315:9;;:34;;;-1:-1:-1;;;25315:34:0;;25343:4;25315:34;;;;;;25293:19;;-1:-1:-1;;;;;25315:9:0;;:19;;:34;;;;;;;;;;;;;;:9;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;25315:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25315:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25315:34:0;25368:9;;:31;;;-1:-1:-1;;;25368:31:0;;;;;;;;;;25315:34;;-1:-1:-1;;;;;;25368:9:0;;;;:18;;:31;;;;;:9;;:31;;;;;;;;:9;;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;25368:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25368:31:0;;;;25418:44;25428:8;25438:10;25450:11;25418:9;:44::i;:::-;25165:405;;;;25503:51;25509:7;25518;25527:4;25533:10;25545:8;25503:5;:51::i;:::-;25609:7;25617:1;25609:10;;;;;;;;;;;;;;25597:9;:22;25593:120;;;25655:10;-1:-1:-1;;;;;25655:19:0;:46;25675:25;25689:7;25697:1;25689:10;;;;;;;;;;;;;;25675:9;:13;;:25;;;;:::i;:::-;25655:46;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25655:46:0;25593:120;25730:96;;;-1:-1:-1;;;;;25730:96:0;;;;;;;;;;;;;25795:10;;25730:96;;;;;;;;;;;;;;;;;;;18650:1;;;23451:2383;;;;;;;;:::o;18883:181::-;18462:6;;-1:-1:-1;;;;;18462:6:0;18449:9;:19;18441:64;;;;;-1:-1:-1;;;18441:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18441:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18985:20:0;;;;;;:10;:20;;;;;;;;:31;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;19027:23:0;;;;;;;:13;:23;;;;;:29;18883:181::o;27849:144::-;18462:6;;-1:-1:-1;;;;;18462:6:0;18449:9;:19;18441:64;;;;;-1:-1:-1;;;18441:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18441:64:0;;;;;;;;;;;;;;;27917:68;27938:3;27944:10;27956:3;-1:-1:-1;;;;;27956:13:0;;27978:4;27956:28;;;;;;;;;;;;;-1:-1:-1;;;;;27956:28:0;-1:-1:-1;;;;;27956:28:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27956:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27956:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27956:28:0;27917:12;:68::i;:::-;27849:144;:::o;27738:103::-;18462:6;;-1:-1:-1;;;;;18462:6:0;18449:9;:19;18441:64;;;;;-1:-1:-1;;;18441:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18441:64:0;;;;;;;;;;;;;;;27791:42;;:10;;27819:4;27811:21;27791:42;;;;;;;;;27811:21;27791:10;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;19392:1427:0;-1:-1:-1;;;;;19555:23:0;;19573:4;19555:23;;19547:43;;;;;-1:-1:-1;;;19547:43:0;;;;;;;;;;;;-1:-1:-1;;;19547:43:0;;;;;;;;;;;;;;;19624:1;19609:12;:16;19601:53;;;;;-1:-1:-1;;;19601:53:0;;;;;;;;;;;;-1:-1:-1;;;19601:53:0;;;;;;;;;;;;;;;19673:16;19682:6;19673:8;:16::i;:::-;19665:51;;;;;-1:-1:-1;;;19665:51:0;;;;;;;;;;;;-1:-1:-1;;;19665:51:0;;;;;;;;;;;;;;;19753:9;;-1:-1:-1;;;;;19733:29:0;;;19753:9;;19733:29;19729:156;;19787:9;:14;19779:32;;;;;-1:-1:-1;;;19779:32:0;;;;;;;;;;;;-1:-1:-1;;;19779:32:0;;;;;;;;;;;;;;;19826:47;19843:7;19852:10;19864:8;19826:16;:47::i;:::-;19897:24;19905:7;19914:6;19897:7;:24::i;:::-;19949:12;19966:6;-1:-1:-1;;;;;19966:11:0;19984:9;19995:4;19966:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;19966:34:0;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;19948:52:0;;;20019:7;20011:32;;;;;-1:-1:-1;;;20011:32:0;;;;;;;;;;;;-1:-1:-1;;;20011:32:0;;;;;;;;;;;;;;;20056:19;20078:36;20090:8;20108:4;20078:11;:36::i;:::-;20056:58;;20148:12;20133:11;:27;;20125:83;;;;-1:-1:-1;;;20125:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20258:16;20277:35;20289:7;20306:4;20277:11;:35::i;:::-;20258:54;-1:-1:-1;20327:12:0;;20323:85;;20356:40;20366:7;20375:10;20387:8;20356:9;:40::i;:::-;20424:10;:8;:10::i;:::-;20420:292;;;20451:83;20461:8;20471:10;20483:50;20518:14;;20483:30;20499:13;;20483:11;:15;;:30;;;;:::i;20451:83::-;20569:7;;20607:14;;20594:7;;20549:74;;20559:8;;-1:-1:-1;;;;;20569:7:0;;;;20578:44;;20607:14;20578:24;;:11;;:24;:15;:24;:::i;20549:74::-;20420:292;;;20656:44;20666:8;20676:10;20688:11;20656:9;:44::i;:::-;20727:84;;;-1:-1:-1;;;;;20727:84:0;;;;;;;;;;;;;20779:10;;20727:84;;;;;;;;;;;;;;;;;;;19392:1427;;;;;;;;;:::o;16265:74::-;16297:42;16265:74;:::o;28003:84::-;18462:6;;-1:-1:-1;;;;;18462:6:0;18449:9;:19;18441:64;;;;;-1:-1:-1;;;18441:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18441:64:0;;;;;;;;;;;;;;;28068:10;28055:24;18772:103;-1:-1:-1;;;;;18850:17:0;18827:4;18850:17;;;:9;:17;;;;;;;;;18772:103::o;11103:440::-;11215:12;11241:14;11257;11275:26;11286:6;11294;11275:10;:26::i;:::-;11240:61;;;;11403:7;11456:6;11464;11439:32;;;;;;-1:-1:-1;;;;;11439:32:0;-1:-1:-1;;;;;11439:32:0;;;;;;;;-1:-1:-1;;;;;11439:32:0;-1:-1:-1;;;;;11439:32:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11439:32:0;;;11429:43;;;;;;11491:8;11342:190;;;;;;-1:-1:-1;;;;;;11342:190:0;;;;;;-1:-1:-1;;;;;11342:190:0;-1:-1:-1;;;;;11342:190:0;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11342:190:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11342:190:0;;;11332:201;;;;;;11327:207;;11312:223;;11103:440;;;;;;;;:::o;13361:559::-;13495:21;13552:1;13537:4;:11;:16;;13529:59;;;;;-1:-1:-1;;;13529:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13620:4;:11;13609:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;13609:23:0;;13599:33;;13656:8;13643:7;13651:1;13643:10;;;;;;;;;;;;;:21;;;;;13680:6;13675:238;13706:1;13692:4;:11;:15;13688:1;:19;13675:238;;;13730:14;13746:15;13765:52;13777:7;13786:4;13791:1;13786:7;;;;;;;;;;;;;;13795:4;13800:1;13804;13800:5;13795:11;;;;;;;;;;;;;;13808:8;13765:11;:52::i;:::-;13729:88;;;;13849:52;13862:7;13870:1;13862:10;;;;;;;;;;;;;;13874:9;13885:10;13897:3;13849:12;:52::i;:::-;13832:7;13840:1;13844;13840:5;13832:14;;;;;;;;;;;;;;;;;:69;-1:-1:-1;;13709:3:0;;13675:238;;;;13361:559;;;;;;;:::o;15813:323::-;15959:51;;;-1:-1:-1;;;;;15959:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15959:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15948:63:0;;;;15913:12;;15927:17;;15948:10;;;;15959:51;15948:63;;;25:18:-1;15948:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;15948:63:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;15912:99:0;;;;16030:7;:57;;;;-1:-1:-1;16042:11:0;;:16;;:44;;;16073:4;16062:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16062:24:0;16042:44;16022:106;;;;-1:-1:-1;;;16022:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15813:323;;;;;;:::o;7699:176::-;7808:58;;;-1:-1:-1;;;;;7808:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7808:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;7782:85:0;;7801:5;;7782:18;:85::i;:::-;7699:176;;;:::o;19296:86::-;19339:4;19362:7;19373:1;19362:12;19296:86;;:::o;26931:799::-;27082:6;27077:646;27108:1;27094:4;:11;:15;27090:1;:19;27077:646;;;27132:13;27147:14;27166:4;27171:1;27166:7;;;;;;;;;;;;;;27175:4;27180:1;27184;27180:5;27175:11;;;;;;;;;;;;;;27131:56;;;;27203:14;27222:42;27250:5;27257:6;27222:27;:42::i;:::-;27202:62;;;27279:14;27296:7;27304:1;27308;27304:5;27296:14;;;;;;;;;;;;;;27279:31;;27326:15;27343;27371:6;-1:-1:-1;;;;;27362:15:0;:5;-1:-1:-1;;;;;27362:15:0;;:61;;27404:9;27420:1;27362:61;;;27386:1;27390:9;27362:61;27325:98;;;;27438:10;27469:1;27455:4;:11;:15;27451:1;:19;:92;;27540:3;27451:92;;;27473:64;27498:7;27507:6;27515:4;27520:1;27524;27520:5;27515:11;;;;;;;;;;;;;;27528:8;27473:24;:64::i;:::-;27438:105;;27573:58;27598:7;27607:5;27614:6;27622:8;27573:24;:58::i;:::-;-1:-1:-1;;;;;27558:79:0;;27656:10;27668;27680:2;27694:1;27684:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;27684:12:0;87:34:-1;135:17;;-1:-1;27684:12:0;;27558:153;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27558:153:0;-1:-1:-1;;;;;27558:153:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27558:153:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27558:153:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;27111:3:0;;;;;-1:-1:-1;27077:646:0;;-1:-1:-1;;;;;;;;27077:646:0;26420:236;26531:9;;26491:7;;-1:-1:-1;;;;;26515:25:0;;;26531:9;;26515:25;26511:138;;;-1:-1:-1;;;;;;26564:13:0;;;26557:20;;26511:138;26617:3;-1:-1:-1;;;;;26617:13:0;;26631:5;26617:20;;;;;;;;;;;;;-1:-1:-1;;;;;26617:20:0;-1:-1:-1;;;;;26617:20:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26617:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26617:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26617:20:0;;-1:-1:-1;26511:138:0;26420:236;;;;:::o;26664:257::-;26776:9;;-1:-1:-1;;;;;26760:25:0;;;26776:9;;26760:25;26756:158;;;26802:24;;-1:-1:-1;;;;;26802:17:0;;;:24;;;;;26820:5;;26802:24;;;;26820:5;26802:17;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26802:24:0;26756:158;;;26859:43;26880:3;26886:8;26896:5;26859:12;:43::i;3909:470::-;3967:7;4211:6;4207:47;;-1:-1:-1;4241:1:0;4234:8;;4207:47;4278:5;;;4282:1;4278;:5;:1;4302:5;;;;;:10;4294:56;;;;-1:-1:-1;;;4294:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4370:1;3909:470;-1:-1:-1;;;3909:470:0:o;4847:333::-;4905:7;5004:1;5000;:5;4992:44;;;;;-1:-1:-1;;;4992:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5047:9;5063:1;5059;:5;;;;;;;4847:333;-1:-1:-1;;;;4847:333:0:o;14001:580::-;14135:21;14192:1;14177:4;:11;:16;;14169:59;;;;;-1:-1:-1;;;14169:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14260:4;:11;14249:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;14249:23:0;;14239:33;;14313:9;14283:7;14308:1;14291:7;:14;:18;14283:27;;;;;;;;;;;;;;;;;:39;14347:11;;-1:-1:-1;;14347:15:0;14333:241;14364:5;;14333:241;;14392:14;14408:15;14427:52;14439:7;14448:4;14457:1;14453;:5;14448:11;;;;;;;;;;;;;;14461:4;14466:1;14461:7;;;;;;;14427:52;14391:88;;;;14511:51;14523:7;14531:1;14523:10;;;;;;;;;;;;;;14535:9;14546:10;14558:3;14511:11;:51::i;:::-;14494:7;14506:1;14502;:5;14494:14;;;;;;;;;;;;;;;;;:68;-1:-1:-1;;;;14371:3:0;14333:241;;3474:184;3532:7;3565:1;3560;:6;;3552:49;;;;;-1:-1:-1;;;3552:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3624:5:0;;;3474:184::o;15508:297::-;15639:45;;;-1:-1:-1;;;;;15639:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15639:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15628:57:0;;;;15593:12;;15607:17;;15628:10;;;;15639:45;15628:57;;;25:18:-1;15628:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;15628:57:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;15592:93:0;;;;15704:7;:57;;;;-1:-1:-1;15716:11:0;;:16;;:44;;;15747:4;15736:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15736:24:0;15716:44;15696:101;;;;;-1:-1:-1;;;15696:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15508:297;;;;;:::o;25844:305::-;25970:9;;-1:-1:-1;;;;;25954:25:0;;;25970:9;;25954:25;;;;:86;;-1:-1:-1;25992:35:0;;;-1:-1:-1;;;25992:35:0;;-1:-1:-1;;;;;25992:35:0;;;;;;;26021:4;25992:35;;;;;;26031:9;;25992:13;;;;;:35;;;;;;;;;;;;;;:13;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;25992:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25992:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25992:35:0;:48;;25954:86;25936:206;;;26067:63;26092:3;26098:5;26113:4;26120:9;26067:16;:63::i;26157:255::-;26258:9;;-1:-1:-1;;;;;26242:25:0;;;26258:9;;26242:25;;;;:85;;-1:-1:-1;26284:38:0;;;-1:-1:-1;;;26284:38:0;;26306:4;26284:38;;;;-1:-1:-1;;;;;26284:38:0;;;;;;;;;:13;;;;;;:38;;;;;;;;;;;;;;;:13;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;26284:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26284:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26284:38:0;:43;26242:85;26224:181;;;26354:39;-1:-1:-1;;;;;26354:15:0;;26370:8;-1:-1:-1;;26354:39:0;:15;:39;:::i;:::-;26157:255;;:::o;10662:349::-;10737:14;10753;10798:6;-1:-1:-1;;;;;10788:16:0;:6;-1:-1:-1;;;;;10788:16:0;;;10780:66;;;;-1:-1:-1;;;10780:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10885:6;-1:-1:-1;;;;;10876:15:0;:6;-1:-1:-1;;;;;10876:15:0;;:53;;10914:6;10922;10876:53;;;10895:6;10903;10876:53;10857:72;;-1:-1:-1;10857:72:0;-1:-1:-1;;;;;;10948:20:0;;10940:63;;;;;-1:-1:-1;;;10940:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10662:349;;;;;:::o;11601:424::-;11717:13;11732;11759:14;11778:26;11789:6;11797;11778:10;:26::i;:::-;11758:46;;;11816:13;11831;11864:42;11872:7;11881:6;11889;11897:8;11864:7;:42::i;:::-;-1:-1:-1;;;;;11849:70:0;;:72;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11849:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11849:72:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11849:72:0;;;;;;;11815:106;;;;;-1:-1:-1;11815:106:0;;-1:-1:-1;;;;;;11955:16:0;;;;;;;:62;;11998:8;12008;11955:62;;;11975:8;11985;11955:62;11932:85;;;;-1:-1:-1;11601:424:0;-1:-1:-1;;;;;;;;11601:424:0:o;12147:528::-;12250:14;12296:1;12285:8;:12;12277:68;;;;-1:-1:-1;;;12277:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12376:1;12364:9;:13;:31;;;;;12394:1;12381:10;:14;12364:31;12356:84;;;;-1:-1:-1;;;12356:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12451:20;12474:17;:8;12487:3;12474:17;:12;:17;:::i;:::-;12451:40;-1:-1:-1;12502:14:0;12519:31;12451:40;12539:10;12519:31;:19;:31;:::i;:::-;12502:48;-1:-1:-1;12561:16:0;12580:41;12605:15;12580:20;:9;12594:5;12580:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;12561:60;;12656:11;12644:9;:23;;;;;;;12147:528;-1:-1:-1;;;;;;;;12147:528:0:o;9109:1113::-;9713:27;9721:5;-1:-1:-1;;;;;9713:25:0;;:27::i;:::-;9705:71;;;;;-1:-1:-1;;;9705:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9850:12;9864:23;9899:5;-1:-1:-1;;;;;9891:19:0;9911:4;9891:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;9891:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;9849:67:0;;;;9935:7;9927:52;;;;;-1:-1:-1;;;9927:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9996:17;;:21;9992:223;;10137:10;10126:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10126:30:0;10118:85;;;;-1:-1:-1;;;10118:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9109:1113;;;;:::o;12796:483::-;12899:13;12945:1;12933:9;:13;12925:70;;;;-1:-1:-1;;;12925:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13026:1;13014:9;:13;:31;;;;;13044:1;13031:10;:14;13014:31;13006:84;;;;-1:-1:-1;;;13006:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13101:14;13118:35;13147:5;13118:24;:9;13132;13118:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13101:52;-1:-1:-1;13164:16:0;13183:34;13213:3;13183:25;:10;13198:9;13183:25;:14;:25;:::i;:34::-;13164:53;;13239:32;13269:1;13252:11;13240:9;:23;;;;;;;13239:32;:29;:32;:::i;:::-;13228:43;12796:483;-1:-1:-1;;;;;;;12796:483:0:o;8095:621::-;8465:10;;;8464:62;;-1:-1:-1;8481:39:0;;;-1:-1:-1;;;8481:39:0;;8505:4;8481:39;;;;-1:-1:-1;;;;;8481:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;8481:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8481:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8481:39:0;:44;8464:62;8456:152;;;;-1:-1:-1;;;8456:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8645:62;;;-1:-1:-1;;;;;8645:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8645:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;8619:89:0;;8638:5;;8619:18;:89::i;3018:181::-;3076:7;3108:5;;;3132:6;;;;3124:46;;;;;-1:-1:-1;;;3124:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6324:808;6384:4;7042:20;;6886:66;7081:15;;;;;:42;;;7112:11;7100:8;:23;;7081:42;7073:51;6324:808;-1:-1:-1;;;;6324:808:0:o;14950:13237::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14950:13237:0;;;-1:-1:-1;14950:13237:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://fe3b1f2b193a606582aadc9d7e1d6744ef5f0bd9117e5d5977a29238527c8d1f
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading