ETH Price: $2,079.24 (-2.28%)

Contract

0x68cf6D1eA1e731A76FCdaEEAD388192aaA7EA58F
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Trade88099562019-10-25 15:31:532323 days ago1572017513IN
0x68cf6D1e...aaA7EA58F
0.001 ETH0.001913035
List Token88099462019-10-25 15:28:362323 days ago1572017316IN
0x68cf6D1e...aaA7EA58F
0 ETH0.00069110
List Token88099392019-10-25 15:26:392323 days ago1572017199IN
0x68cf6D1e...aaA7EA58F
0 ETH0.000695810
List Token88099282019-10-25 15:24:192323 days ago1572017059IN
0x68cf6D1e...aaA7EA58F
0 ETH0.0006922310
Trade88091872019-10-25 12:36:042323 days ago1572006964IN
0x68cf6D1e...aaA7EA58F
0.001 ETH0.000965764
Trade88091832019-10-25 12:35:242323 days ago1572006924IN
0x68cf6D1e...aaA7EA58F
0.001 ETH0.00147244
List Token88090772019-10-25 12:10:372323 days ago1572005437IN
0x68cf6D1e...aaA7EA58F
0 ETH0.000417066
List Token88090332019-10-25 12:01:472323 days ago1572004907IN
0x68cf6D1e...aaA7EA58F
0 ETH0.000278834

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
-88099562019-10-25 15:31:532323 days ago1572017513
0x68cf6D1e...aaA7EA58F
0.001 ETH
-88091872019-10-25 12:36:042323 days ago1572006964
0x68cf6D1e...aaA7EA58F
0.001 ETH
-88091832019-10-25 12:35:242323 days ago1572006924
0x68cf6D1e...aaA7EA58F
0.001 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KyberBancorReserve

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: KyberBancorReserve.sol
pragma solidity 0.5.11;

import "./ERC20InterfaceV5.sol";
import "./KyberReserveInterfaceV5.sol";
import "./WithdrawableV5.sol";
import "./UtilsV5.sol";
import "./IBancorContracts.sol";

contract KyberBancorReserve is KyberReserveInterface, Withdrawable, Utils {

    uint  constant internal BPS = 10000; // 10^4

    address public kyberNetwork;
    IContractRegistry public contractRegistry; // 0x52Ae12ABe5D8BD778BD5397F99cA900624CfADD4
    IBancorNetwork public bancorNetwork;
    IBancorNetworkPathFinder public bancorPathFinder;
    address public converterRegistry;

    bool public tradeEnabled;
    uint public feeBps;

    ERC20 public bancorEth = ERC20(0xc0829421C1d260BD3cB3E0F06cfE2D52db2cE315);
    ERC20 public bancorToken = ERC20(0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C);

    mapping(address => bool) public isTokenListed;

    constructor(
        address _contractRegistry,
        address _kyberNetwork,
        uint _feeBps,
        address _admin
    )
        public
    {
        require(_contractRegistry != address(0), "contractRegistry address is missing");
        require(_kyberNetwork != address(0), "kyberNetwork address is missing");
        require(_admin != address(0), "admin address is missing");
        require(_feeBps < BPS, "fee is too big");

        contractRegistry = IContractRegistry(_contractRegistry);
        bancorNetwork = IBancorNetwork(contractRegistry.getAddress("BancorNetwork"));
        bancorPathFinder = IBancorNetworkPathFinder(contractRegistry.getAddress("BancorNetworkPathFinder"));
        converterRegistry = contractRegistry.getAddress("BancorConverterRegistry");

        kyberNetwork = _kyberNetwork;
        feeBps = _feeBps;
        admin = _admin;
        tradeEnabled = true;
    }

    function() external payable { }

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint) public view returns(uint) {
        if (!tradeEnabled) return 0;

        ERC20 token = src == ETH_TOKEN_ADDRESS ? dest : src;
        if (!isTokenListed[address(token)]) { return 0; } // not listed

        ERC20[] memory path = getConversionPath(src, dest, bancorPathFinder);

        uint destQty;
        (destQty, ) = bancorNetwork.getReturnByPath(path, srcQty);

        uint rate = calcRateFromQty(srcQty, destQty, getDecimals(src), getDecimals(dest));

        rate = valueAfterReducingFee(rate);

        return rate;
    }

    event TradeExecute(
        address indexed sender,
        address src,
        uint srcAmount,
        address destToken,
        uint destAmount,
        address payable destAddress
    );

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address payable destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool)
    {

        require(tradeEnabled);
        require(msg.sender == kyberNetwork);
        require(srcToken == ETH_TOKEN_ADDRESS || destToken == ETH_TOKEN_ADDRESS);

        require(doTrade(srcToken, srcAmount, destToken, destAddress, conversionRate, validate));

        return true;
    }

    // test func
    function testGetReturns(ERC20 token, bool isEthToToken, uint srcAmount) public returns(uint) {
        uint destAmount;
        ERC20[] memory path = getConversionPath(
            isEthToToken ? bancorEth : token,
            isEthToToken ? token : bancorEth,
            bancorPathFinder
        );
        if (isEthToToken) {
            (destAmount, ) = bancorNetwork.getReturnByPath(path, srcAmount);
        } else {
            (destAmount, ) = bancorNetwork.getReturnByPath(path, srcAmount);
        }
        tradeEnabled = true;
        return destAmount;
    }

    event ContractsSet(address kyberNetwork, address _contractRegistry);

    function setContracts(address _kyberNetwork, address _contractRegistry) public onlyAdmin {
        require(_contractRegistry != address(0), "contractRegistry address is missing");
        require(_kyberNetwork != address(0), "kyberNetwork address is missing");

        kyberNetwork = _kyberNetwork;
        contractRegistry = IContractRegistry(_contractRegistry);

        bancorNetwork = IBancorNetwork(contractRegistry.getAddress("BancorNetwork"));
        bancorPathFinder = IBancorNetworkPathFinder(contractRegistry.getAddress("BancorNetworkPathFinder"));
        converterRegistry = contractRegistry.getAddress("BancorConverterRegistry");

        emit ContractsSet(_kyberNetwork, _contractRegistry);
    }

    event BasicTokensSet(address bancorEth, address bancorToken);

    function setBasicTokens(address _bancorEth, address _bancorToken) public {
        require(_bancorEth != address(0), "setBasicTokens: bancorEth is missing");
        require(_bancorToken != address(0), "setBasicTokens: bancorToken is missing");

        bancorEth = ERC20(_bancorEth);
        bancorToken = ERC20(_bancorToken);

        emit BasicTokensSet(_bancorEth, _bancorToken);
    }

    event TokenListed(ERC20 token);

    function listToken(ERC20 token) public onlyAdmin {
        require(address(token) != address(0), "listToken: token's address is missing");
        require(!isTokenListed[address(token)], "listToken: duplicated");

        require(token.approve(address(bancorNetwork), 2**255), "listToken: fail to approve bancor network");

        isTokenListed[address(token)] = true;

        emit TokenListed(token);
    }

    event TokenDelisted(ERC20 token);

    function delistToken(ERC20 token) public onlyAdmin {
        require(address(token) != address(0), "listToken: token's address is missing");
        require(isTokenListed[address(token)], "listToken: duplicated");

        require(token.approve(address(bancorNetwork), 0), "listToken: fail to approve bancor network");

        delete isTokenListed[address(token)];

        emit TokenDelisted(token);
    }

    event FeeBpsSet(uint feeBps);

    function setFeeBps(uint _feeBps) public onlyAdmin {
        require(_feeBps < BPS, "setFeeBps: feeBps >= bps");

        feeBps = _feeBps;
        emit FeeBpsSet(feeBps);
    }

    event TradeEnabled(bool enable);

    function enableTrade() public onlyAdmin returns(bool) {
        tradeEnabled = true;
        emit TradeEnabled(true);

        return true;
    }

    function disableTrade() public onlyAlerter returns(bool) {
        tradeEnabled = false;
        emit TradeEnabled(false);

        return true;
    }

    function doTrade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address payable destAddress,
        uint conversionRate,
        bool validate
    )
        internal
        returns(bool)
    {
        // can skip validation if done at kyber network level
        if (validate) {
            require(conversionRate > 0);
            if (srcToken == ETH_TOKEN_ADDRESS)
                require(msg.value == srcAmount, "doTrade: msg value is not correct for ETH trade");
            else
                require(msg.value == 0, "doTrade: msg value is not correct for token trade");
        }

        if (srcToken != ETH_TOKEN_ADDRESS) {
            // collect source amount
            require(srcToken.transferFrom(msg.sender, address(this), srcAmount), "doTrade: collect src token failed");
        }

        ERC20[] memory path = getConversionPath(srcToken, destToken, bancorPathFinder);
        require(path.length > 0, "doTrade: couldn't find path");

        uint userExpectedDestAmount = calcDstQty(srcAmount, getDecimals(srcToken), getDecimals(destToken), conversionRate);
        uint destAmount;

        if (srcToken == ETH_TOKEN_ADDRESS) {
            destAmount = bancorNetwork.convert2.value(srcAmount)(path, srcAmount, userExpectedDestAmount, address(0), 0);
        } else {
            destAmount = bancorNetwork.convert2(path, srcAmount, userExpectedDestAmount, address(0), 0);
        }

        require(destAmount >= userExpectedDestAmount, "doTrade: dest amount is lower than expected amount");

        if (destToken == ETH_TOKEN_ADDRESS) {
            destAddress.transfer(userExpectedDestAmount);
        } else {
            require(destToken.transfer(destAddress, userExpectedDestAmount), "doTrade: transfer back dest token failed");
        }

        emit TradeExecute(msg.sender, address(srcToken), srcAmount, address(destToken), userExpectedDestAmount, destAddress);
        return true;
    }

    function getConversionPath(ERC20 src, ERC20 dest, IBancorNetworkPathFinder finder) public view returns(ERC20[] memory path) {
        ERC20 bntToken = bancorToken;

        address[] memory converterRegistries = new address[](1);
        converterRegistries[0] = converterRegistry;

        if (src == ETH_TOKEN_ADDRESS) {
            address[] memory newPath = finder.get(bntToken, dest, converterRegistries);
            if (newPath.length == 0) { return path; }
            path = new ERC20[](newPath.length + 2);
            path[0] = bancorEth;
            path[1] = bntToken;
            for(uint i = 0; i < newPath.length; i++) {
                path[i + 2] = ERC20(newPath[i]);
            }
        } else {
            address[] memory newPath = finder.get(src, bntToken, converterRegistries);
            if (newPath.length == 0) { return path; }
            path = new ERC20[](newPath.length + 2);
            for(uint i = 0; i < newPath.length; i++) {
                path[i] = ERC20(newPath[i]);
            }
            path[newPath.length] = bntToken;
            path[newPath.length + 1] = bancorEth;
        }

        return path;
    }

    function valueAfterReducingFee(uint val) internal view returns(uint) {
        require(val <= MAX_QTY, "valueAfterReducingFee: val > MAX_QTY");
        return ((BPS - feeBps) * val) / BPS;
    }
}

File 2 of 7: ERC20InterfaceV5.sol
pragma solidity 0.5.11;


interface ERC20 {
    function transfer(address _to, uint _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint _value) external returns (bool success);
    function approve(address _spender, uint _value) external returns (bool success);
    function totalSupply() external view returns (uint supply);
    function balanceOf(address _owner) external view returns (uint balance);
    function allowance(address _owner, address _spender) external view returns (uint remaining);
    function decimals() external view returns(uint digits);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

File 3 of 7: IBancorContracts.sol
pragma solidity 0.5.11;


import "./ERC20InterfaceV5.sol";


/**
    Id definitions for bancor contracts

    Can be used in conjunction with the contract registry to get contract addresses
*/
contract ContractIds {
    // generic
    bytes32 public constant CONTRACT_REGISTRY = "ContractRegistry";

    // bancor logic
    bytes32 public constant BANCOR_NETWORK = "BancorNetwork";
    bytes32 public constant BANCOR_FORMULA = "BancorFormula";
    bytes32 public constant BANCOR_NETWORK_PATH_FINDER = "BancorNetworkPathFinder";

    // Ids of BNT converter and BNT token
    bytes32 public constant BNT_TOKEN = "BNTToken";
    bytes32 public constant BNT_CONVERTER = "BNTConverter";

    // Id of BancorX contract
    bytes32 public constant BANCOR_X = "BancorX";
}

contract IBancorNetworkPathFinder {
    function get(ERC20 srcToken, ERC20 destToken, address[] memory converterRegistries) public view returns (address[] memory);
}

// File: contracts/utility/interfaces/IContractRegistry.sol

/*
    Contract Registry interface
*/
contract IContractRegistry {
    function addressOf(bytes32 _contractName) public view returns (address);

    // deprecated, backward compatibility
    function getAddress(bytes32 _contractName) public view returns (address);
}


// File: contracts/converter/interfaces/IBancorConverter.sol

/*
    Bancor Converter interface
*/
contract IBancorNetwork {
    function getReturnByPath(ERC20[] calldata _path, uint256 _amount) external view returns (uint256, uint256);
    function convert2(
        ERC20[] calldata _path,
        uint256 _amount,
        uint256 _minReturn,
        address _affiliateAccount,
        uint256 _affiliateFee
    ) external payable returns (uint256);
}

File 4 of 7: KyberReserveInterfaceV5.sol
pragma solidity 0.5.11;

import "./ERC20InterfaceV5.sol";


/// @title Kyber Reserve contract
interface KyberReserveInterface {

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address payable destAddress,
        uint conversionRate,
        bool validate
    )
        external
        payable
        returns(bool);

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) external view returns(uint);
}

File 5 of 7: PermissionGroupsV5.sol
pragma solidity 0.5.11;


contract PermissionGroups {

    address public admin;
    address public pendingAdmin;
    mapping(address=>bool) internal operators;
    mapping(address=>bool) internal alerters;
    address[] internal operatorsGroup;
    address[] internal alertersGroup;
    uint constant internal MAX_GROUP_SIZE = 50;

    constructor() public {
        admin = msg.sender;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin);
        _;
    }

    modifier onlyOperator() {
        require(operators[msg.sender]);
        _;
    }

    modifier onlyAlerter() {
        require(alerters[msg.sender]);
        _;
    }

    function getOperators () external view returns(address[] memory) {
        return operatorsGroup;
    }

    function getAlerters () external view returns(address[] memory) {
        return alertersGroup;
    }

    event TransferAdminPending(address pendingAdmin);

    /**
     * @dev Allows the current admin to set the pendingAdmin address.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdmin(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        emit TransferAdminPending(pendingAdmin);
        pendingAdmin = newAdmin;
    }

    /**
     * @dev Allows the current admin to set the admin in one tx. Useful initial deployment.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdminQuickly(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        emit TransferAdminPending(newAdmin);
        emit AdminClaimed(newAdmin, admin);
        admin = newAdmin;
    }

    event AdminClaimed( address newAdmin, address previousAdmin);

    /**
     * @dev Allows the pendingAdmin address to finalize the change admin process.
     */
    function claimAdmin() public {
        require(pendingAdmin == msg.sender);
        emit AdminClaimed(pendingAdmin, admin);
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }

    event AlerterAdded (address newAlerter, bool isAdd);

    function addAlerter(address newAlerter) public onlyAdmin {
        require(!alerters[newAlerter]); // prevent duplicates.
        require(alertersGroup.length < MAX_GROUP_SIZE);

        emit AlerterAdded(newAlerter, true);
        alerters[newAlerter] = true;
        alertersGroup.push(newAlerter);
    }

    function removeAlerter (address alerter) public onlyAdmin {
        require(alerters[alerter]);
        alerters[alerter] = false;

        for (uint i = 0; i < alertersGroup.length; ++i) {
            if (alertersGroup[i] == alerter) {
                alertersGroup[i] = alertersGroup[alertersGroup.length - 1];
                alertersGroup.length--;
                emit AlerterAdded(alerter, false);
                break;
            }
        }
    }

    event OperatorAdded(address newOperator, bool isAdd);

    function addOperator(address newOperator) public onlyAdmin {
        require(!operators[newOperator]); // prevent duplicates.
        require(operatorsGroup.length < MAX_GROUP_SIZE);

        emit OperatorAdded(newOperator, true);
        operators[newOperator] = true;
        operatorsGroup.push(newOperator);
    }

    function removeOperator (address operator) public onlyAdmin {
        require(operators[operator]);
        operators[operator] = false;

        for (uint i = 0; i < operatorsGroup.length; ++i) {
            if (operatorsGroup[i] == operator) {
                operatorsGroup[i] = operatorsGroup[operatorsGroup.length - 1];
                operatorsGroup.length -= 1;
                emit OperatorAdded(operator, false);
                break;
            }
        }
    }
}

File 6 of 7: UtilsV5.sol
pragma solidity 0.5.11;

import "./ERC20InterfaceV5.sol";


/// @title Kyber utils and utils2 contracts
contract Utils {

    ERC20 constant internal ETH_TOKEN_ADDRESS = ERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
    uint  constant internal PRECISION = (10**18);
    uint  constant internal MAX_QTY   = (10**28); // 10B tokens
    uint  constant internal MAX_RATE  = (PRECISION * 10**6); // up to 1M tokens per ETH
    uint  constant internal MAX_DECIMALS = 18;
    uint  constant internal ETH_DECIMALS = 18;

    mapping(address=>uint) internal decimals;

    /// @dev get the balance of a user.
    /// @param token The token type
    /// @return The balance
    function getBalance(ERC20 token, address user) public view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS)
            return user.balance;
        else
            return token.balanceOf(user);
    }

    function setDecimals(ERC20 token) internal {
        if (token == ETH_TOKEN_ADDRESS)
            decimals[address(token)] = ETH_DECIMALS;
        else
            decimals[address(token)] = token.decimals();
    }

    function getDecimals(ERC20 token) internal view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS) return ETH_DECIMALS; // save storage access
        uint tokenDecimals = decimals[address(token)];
        // moreover, very possible that old tokens have decimals 0
        // these tokens will just have higher gas fees.
        if (tokenDecimals == 0) return token.decimals();

        return tokenDecimals;
    }

    function calcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(srcQty <= MAX_QTY);
        require(rate <= MAX_RATE);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (srcQty * rate * (10**(dstDecimals - srcDecimals))) / PRECISION;
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (srcQty * rate) / (PRECISION * (10**(srcDecimals - dstDecimals)));
        }
    }

    function calcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(dstQty <= MAX_QTY);
        require(rate <= MAX_RATE);
        
        //source quantity is rounded up. to avoid dest quantity being too low.
        uint numerator;
        uint denominator;
        if (srcDecimals >= dstDecimals) {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty * (10**(srcDecimals - dstDecimals)));
            denominator = rate;
        } else {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty);
            denominator = (rate * (10**(dstDecimals - srcDecimals)));
        }
        return (numerator + denominator - 1) / denominator; //avoid rounding down errors
    }

    function calcDestAmount(ERC20 src, ERC20 dest, uint srcAmount, uint rate) internal view returns(uint) {
        return calcDstQty(srcAmount, getDecimals(src), getDecimals(dest), rate);
    }

    function calcSrcAmount(ERC20 src, ERC20 dest, uint destAmount, uint rate) internal view returns(uint) {
        return calcSrcQty(destAmount, getDecimals(src), getDecimals(dest), rate);
    }

    function calcRateFromQty(uint srcAmount, uint destAmount, uint srcDecimals, uint dstDecimals)
        internal pure returns(uint)
    {
        require(srcAmount <= MAX_QTY);
        require(destAmount <= MAX_QTY);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (destAmount * PRECISION / ((10 ** (dstDecimals - srcDecimals)) * srcAmount));
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (destAmount * PRECISION * (10 ** (srcDecimals - dstDecimals)) / srcAmount);
        }
    }

    function minOf(uint x, uint y) internal pure returns(uint) {
        return x > y ? y : x;
    }
}

File 7 of 7: WithdrawableV5.sol
pragma solidity 0.5.11;

import "./ERC20InterfaceV5.sol";
import "./PermissionGroupsV5.sol";


contract Withdrawable is PermissionGroups {

    event TokenWithdraw(ERC20 token, uint amount, address sendTo);

    /**
     * @dev Withdraw all ERC20 compatible tokens
     * @param token ERC20 The address of the token contract
     */
    function withdrawToken(ERC20 token, uint amount, address sendTo) external onlyAdmin {
        require(token.transfer(sendTo, amount));
        emit TokenWithdraw(token, amount, sendTo);
    }

    event EtherWithdraw(uint amount, address sendTo);

    /**
     * @dev Withdraw Ethers
     */
    function withdrawEther(uint amount, address payable sendTo) external onlyAdmin {
        sendTo.transfer(amount);
        emit EtherWithdraw(amount, sendTo);
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[],"name":"enableTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ERC20","name":"token","type":"address"},{"internalType":"bool","name":"isEthToToken","type":"bool"},{"internalType":"uint256","name":"srcAmount","type":"uint256"}],"name":"testGetReturns","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"converterRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ERC20","name":"token","type":"address"}],"name":"listToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bancorPathFinder","outputs":[{"internalType":"contract IBancorNetworkPathFinder","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_bancorEth","type":"address"},{"internalType":"address","name":"_bancorToken","type":"address"}],"name":"setBasicTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bancorToken","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bancorEth","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ERC20","name":"srcToken","type":"address"},{"internalType":"uint256","name":"srcAmount","type":"uint256"},{"internalType":"contract ERC20","name":"destToken","type":"address"},{"internalType":"address payable","name":"destAddress","type":"address"},{"internalType":"uint256","name":"conversionRate","type":"uint256"},{"internalType":"bool","name":"validate","type":"bool"}],"name":"trade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_feeBps","type":"uint256"}],"name":"setFeeBps","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"contract ERC20","name":"src","type":"address"},{"internalType":"contract ERC20","name":"dest","type":"address"},{"internalType":"contract IBancorNetworkPathFinder","name":"finder","type":"address"}],"name":"getConversionPath","outputs":[{"internalType":"contract ERC20[]","name":"path","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAlerters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract ERC20","name":"src","type":"address"},{"internalType":"contract ERC20","name":"dest","type":"address"},{"internalType":"uint256","name":"srcQty","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"getConversionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bancorNetwork","outputs":[{"internalType":"contract IBancorNetwork","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contractRegistry","outputs":[{"internalType":"contract IContractRegistry","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ERC20","name":"token","type":"address"}],"name":"delistToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetwork","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"contract ERC20","name":"token","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_kyberNetwork","type":"address"},{"internalType":"address","name":"_contractRegistry","type":"address"}],"name":"setContracts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTokenListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contractRegistry","type":"address"},{"internalType":"address","name":"_kyberNetwork","type":"address"},{"internalType":"uint256","name":"_feeBps","type":"uint256"},{"internalType":"address","name":"_admin","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"srcAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"destToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"destAmount","type":"uint256"},{"indexed":false,"internalType":"address payable","name":"destAddress","type":"address"}],"name":"TradeExecute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"kyberNetwork","type":"address"},{"indexed":false,"internalType":"address","name":"_contractRegistry","type":"address"}],"name":"ContractsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"bancorEth","type":"address"},{"indexed":false,"internalType":"address","name":"bancorToken","type":"address"}],"name":"BasicTokensSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ERC20","name":"token","type":"address"}],"name":"TokenListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ERC20","name":"token","type":"address"}],"name":"TokenDelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feeBps","type":"uint256"}],"name":"FeeBpsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAlerter","type":"address"},{"indexed":false,"internalType":"bool","name":"isAdd","type":"bool"}],"name":"AlerterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOperator","type":"address"},{"indexed":false,"internalType":"bool","name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"}]

6080604052600d80546001600160a01b031990811673c0829421c1d260bd3cb3e0f06cfe2d52db2ce31517909155600e8054909116731f573d6fb3f13d689ff844b4ce37794d79a7ff1c1790553480156200005957600080fd5b506040516200350b3803806200350b833981810160405260808110156200007f57600080fd5b50805160208201516040830151606090930151600080546001600160a01b03191633179055919290916001600160a01b03841662000109576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180620034e86023913960400191505060405180910390fd5b6001600160a01b0383166200017f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6b796265724e6574776f726b2061646472657373206973206d697373696e6700604482015290519081900360640190fd5b6001600160a01b038116620001f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f61646d696e2061646472657373206973206d697373696e670000000000000000604482015290519081900360640190fd5b61271082106200026657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f66656520697320746f6f20626967000000000000000000000000000000000000604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b038681169190911791829055604080517f21f8a7210000000000000000000000000000000000000000000000000000000081527f42616e636f724e6574776f726b000000000000000000000000000000000000006004820152905192909116916321f8a72191602480820192602092909190829003018186803b1580156200030257600080fd5b505afa15801562000317573d6000803e3d6000fd5b505050506040513d60208110156200032e57600080fd5b5051600980546001600160a01b0319166001600160a01b03928316179055600854604080517f21f8a7210000000000000000000000000000000000000000000000000000000081527f42616e636f724e6574776f726b5061746846696e6465720000000000000000006004820152905191909216916321f8a721916024808301926020929190829003018186803b158015620003c957600080fd5b505afa158015620003de573d6000803e3d6000fd5b505050506040513d6020811015620003f557600080fd5b5051600a80546001600160a01b0319166001600160a01b03928316179055600854604080517f21f8a7210000000000000000000000000000000000000000000000000000000081527f42616e636f72436f6e76657274657252656769737472790000000000000000006004820152905191909216916321f8a721916024808301926020929190829003018186803b1580156200049057600080fd5b505afa158015620004a5573d6000803e3d6000fd5b505050506040513d6020811015620004bc57600080fd5b5051600b8054600780546001600160a01b03199081166001600160a01b0398891617909155600c95909555600080548616948716949094178455740100000000000000000000000000000000000000009416949091169390931760ff60a01b191691909117909155612fb2915081906200053690396000f3fe6080604052600436106102035760003560e01c806375829def11610118578063abffc9ac116100a0578063d4fac45d1161006f578063d4fac45d14610751578063d621e8131461078c578063d8952a49146107a1578063e69ec653146107dc578063f851a4401461080f57610203565b8063abffc9ac1461069d578063ac8a584a146106d0578063b78b842d14610703578063ce56c4541461071857610203565b80637c423f54116100e75780637c423f54146105e25780637cd44272146105f75780639870d7fe14610640578063a4edb25e14610673578063abf410e51461068857610203565b806375829def1461052257806377f50f9714610555578063797ae0e01461056a5780637acc8678146105af57610203565b806327a099d81161019b578063408ee7fe1161016a578063408ee7fe1461044f5780634d21dff7146104825780636940030f146104975780636cf69811146104ac57806372c27b62146104f857610203565b806327a099d8146103575780632a044e39146103bc5780633b172a32146103f75780633ccdbb281461040c57610203565b80631fc1e25f116101d75780631fc1e25f146102e5578063235ce45c1461031857806324a9d8531461032d578063267822471461034257610203565b806299d3861461020557806301a12fd31461022e578063038fe1b114610261578063043a3c07146102b4575b005b34801561021157600080fd5b5061021a610824565b604080519115158252519081900360200190f35b34801561023a57600080fd5b506102036004803603602081101561025157600080fd5b50356001600160a01b031661088a565b34801561026d57600080fd5b506102a26004803603606081101561028457600080fd5b506001600160a01b03813516906020810135151590604001356109ed565b60408051918252519081900360200190f35b3480156102c057600080fd5b506102c9610bd6565b604080516001600160a01b039092168252519081900360200190f35b3480156102f157600080fd5b506102036004803603602081101561030857600080fd5b50356001600160a01b0316610be5565b34801561032457600080fd5b506102c9610dc2565b34801561033957600080fd5b506102a2610dd1565b34801561034e57600080fd5b506102c9610dd7565b34801561036357600080fd5b5061036c610de6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103a8578181015183820152602001610390565b505050509050019250505060405180910390f35b3480156103c857600080fd5b50610203600480360360408110156103df57600080fd5b506001600160a01b0381358116916020013516610e48565b34801561040357600080fd5b506102c9610f41565b34801561041857600080fd5b506102036004803603606081101561042f57600080fd5b506001600160a01b03813581169160208101359160409091013516610f50565b34801561045b57600080fd5b506102036004803603602081101561047257600080fd5b50356001600160a01b031661104b565b34801561048e57600080fd5b506102c9611141565b3480156104a357600080fd5b5061021a611150565b61021a600480360360c08110156104c257600080fd5b506001600160a01b038135811691602081013591604082013581169160608101359091169060808101359060a0013515156111b3565b34801561050457600080fd5b506102036004803603602081101561051b57600080fd5b5035611257565b34801561052e57600080fd5b506102036004803603602081101561054557600080fd5b50356001600160a01b03166112ff565b34801561056157600080fd5b5061020361138a565b34801561057657600080fd5b5061036c6004803603606081101561058d57600080fd5b506001600160a01b038135811691602081013582169160409091013516611414565b3480156105bb57600080fd5b50610203600480360360208110156105d257600080fd5b50356001600160a01b0316611990565b3480156105ee57600080fd5b5061036c611a60565b34801561060357600080fd5b506102a26004803603608081101561061a57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611ac0565b34801561064c57600080fd5b506102036004803603602081101561066357600080fd5b50356001600160a01b0316611c4a565b34801561067f57600080fd5b506102c9611d40565b34801561069457600080fd5b506102c9611d4f565b3480156106a957600080fd5b50610203600480360360208110156106c057600080fd5b50356001600160a01b0316611d5e565b3480156106dc57600080fd5b50610203600480360360208110156106f357600080fd5b50356001600160a01b0316611f37565b34801561070f57600080fd5b506102c9612096565b34801561072457600080fd5b506102036004803603604081101561073b57600080fd5b50803590602001356001600160a01b03166120a5565b34801561075d57600080fd5b506102a26004803603604081101561077457600080fd5b506001600160a01b038135811691602001351661213a565b34801561079857600080fd5b5061021a6121fd565b3480156107ad57600080fd5b50610203600480360360408110156107c457600080fd5b506001600160a01b038135811691602001351661220d565b3480156107e857600080fd5b5061021a600480360360208110156107ff57600080fd5b50356001600160a01b0316612523565b34801561081b57600080fd5b506102c9612538565b600080546001600160a01b0316331461083c57600080fd5b600b805460ff60a01b1916600160a01b179055604080516001815290517f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359181900360200190a15060015b90565b6000546001600160a01b031633146108a157600080fd5b6001600160a01b03811660009081526003602052604090205460ff166108c657600080fd5b6001600160a01b0381166000908152600360205260408120805460ff191690555b6005548110156109e957816001600160a01b03166005828154811061090857fe5b6000918252602090912001546001600160a01b031614156109e15760058054600019810190811061093557fe5b600091825260209091200154600580546001600160a01b03909216918390811061095b57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556005805490610997906000198301612d7c565b50604080516001600160a01b03841681526000602082015281517f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762929181900390910190a16109e9565b6001016108e7565b5050565b6000806060610a3685610a005786610a0d565b600d546001600160a01b03165b86610a2357600d546001600160a01b0316610a25565b875b600a546001600160a01b0316611414565b90508415610afd576009546040805163032125b360e21b815260248101879052600481019182528351604482015283516001600160a01b0390931692630c8496cc92859289928291606401906020808701910280838360005b83811015610aa7578181015183820152602001610a8f565b505050509050019350505050604080518083038186803b158015610aca57600080fd5b505afa158015610ade573d6000803e3d6000fd5b505050506040513d6040811015610af457600080fd5b50519150610bb8565b6009546040805163032125b360e21b815260248101879052600481019182528351604482015283516001600160a01b0390931692630c8496cc92859289928291606401906020808701910280838360005b83811015610b66578181015183820152602001610b4e565b505050509050019350505050604080518083038186803b158015610b8957600080fd5b505afa158015610b9d573d6000803e3d6000fd5b505050506040513d6040811015610bb357600080fd5b505191505b50600b805460ff60a01b1916600160a01b17905590505b9392505050565b600b546001600160a01b031681565b6000546001600160a01b03163314610bfc57600080fd5b6001600160a01b038116610c415760405162461bcd60e51b8152600401808060200182810382526025815260200180612e976025913960400191505060405180910390fd5b6001600160a01b0381166000908152600f602052604090205460ff1615610ca7576040805162461bcd60e51b81526020600482015260156024820152741b1a5cdd151bdad95b8e88191d5c1b1a58d85d1959605a1b604482015290519081900360640190fd5b6009546040805163095ea7b360e01b81526001600160a01b039283166004820152600160ff1b602482015290519183169163095ea7b3916044808201926020929091908290030181600087803b158015610d0057600080fd5b505af1158015610d14573d6000803e3d6000fd5b505050506040513d6020811015610d2a57600080fd5b5051610d675760405162461bcd60e51b8152600401808060200182810382526029815260200180612e6e6029913960400191505060405180910390fd5b6001600160a01b0381166000818152600f6020908152604091829020805460ff19166001179055815192835290517f017664858438d89f547fee46da0bcfc5396ea13a9fb1490b8fdd76cfa979f1a99281900390910190a150565b600a546001600160a01b031681565b600c5481565b6001546001600160a01b031681565b60606004805480602002602001604051908101604052809291908181526020018280548015610e3e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e20575b5050505050905090565b6001600160a01b038216610e8d5760405162461bcd60e51b8152600401808060200182810382526024815260200180612f5a6024913960400191505060405180910390fd5b6001600160a01b038116610ed25760405162461bcd60e51b8152600401808060200182810382526026815260200180612dc46026913960400191505060405180910390fd5b600d80546001600160a01b038085166001600160a01b03199283168117909355600e805491851691909216811790915560408051928352602083019190915280517fcfbfff80d8491666a08780b57f8c2a4b9adfec058fc94d4a91ea6220f6e135bc9281900390910190a15050565b600e546001600160a01b031681565b6000546001600160a01b03163314610f6757600080fd5b826001600160a01b031663a9059cbb82846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610fc757600080fd5b505af1158015610fdb573d6000803e3d6000fd5b505050506040513d6020811015610ff157600080fd5b5051610ffc57600080fd5b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b6000546001600160a01b0316331461106257600080fd5b6001600160a01b03811660009081526003602052604090205460ff161561108857600080fd5b60055460321161109757600080fd5b604080516001600160a01b03831681526001602082015281517f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762929181900390910190a16001600160a01b03166000818152600360205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b600d546001600160a01b031681565b3360009081526003602052604081205460ff1661116c57600080fd5b600b805460ff60a01b19169055604080516000815290517f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359181900360200190a150600190565b600b54600090600160a01b900460ff166111cc57600080fd5b6007546001600160a01b031633146111e357600080fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148061122a57506001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b61123357600080fd5b611241878787878787612547565b61124a57600080fd5b5060019695505050505050565b6000546001600160a01b0316331461126e57600080fd5b61271081106112c4576040805162461bcd60e51b815260206004820152601860248201527f7365744665654270733a20666565427073203e3d206270730000000000000000604482015290519081900360640190fd5b600c8190556040805182815290517f4f78c4ceb393a616bbd264a4584a9ad15d722042ce1e135e6a8380217f5cb42b9181900360200190a150565b6000546001600160a01b0316331461131657600080fd5b6001600160a01b03811661132957600080fd5b600154604080516001600160a01b039092168252517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146113a157600080fd5b600154600054604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b600e546040805160018082528183019092526060926001600160a01b031691839190602080830190803883395050600b5482519293506001600160a01b03169183915060009061146057fe5b6001600160a01b039283166020918202929092010152861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611711576060846001600160a01b0316635be093498488856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561152657818101518382015260200161150e565b5050505090500194505050505060006040518083038186803b15801561154b57600080fd5b505afa15801561155f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561158857600080fd5b81019080805160405193929190846401000000008211156115a857600080fd5b9083019060208201858111156115bd57600080fd5b82518660208202830111640100000000821117156115da57600080fd5b82525081516020918201928201910280838360005b838110156116075781810151838201526020016115ef565b5050505090500160405250505090508051600014156116295750610bcf915050565b8051600201604051908082528060200260200182016040528015611657578160200160208202803883390190505b50600d5481519195506001600160a01b031690859060009061167557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505082846001815181106116a357fe5b6001600160a01b039092166020928302919091019091015260005b815181101561170a578181815181106116d357fe5b60200260200101518582600201815181106116ea57fe5b6001600160a01b03909216602092830291909101909101526001016116be565b5050611987565b6060846001600160a01b0316635be093498885856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156117a457818101518382015260200161178c565b5050505090500194505050505060006040518083038186803b1580156117c957600080fd5b505afa1580156117dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561180657600080fd5b810190808051604051939291908464010000000082111561182657600080fd5b90830190602082018581111561183b57600080fd5b825186602082028301116401000000008211171561185857600080fd5b82525081516020918201928201910280838360005b8381101561188557818101518382015260200161186d565b5050505090500160405250505090508051600014156118a75750610bcf915050565b80516002016040519080825280602002602001820160405280156118d5578160200160208202803883390190505b50935060005b8151811015611924578181815181106118f057fe5b602002602001015185828151811061190457fe5b6001600160a01b03909216602092830291909101909101526001016118db565b50828482518151811061193357fe5b6001600160a01b039283166020918202929092010152600d548251865191909216918691600190910190811061196557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b50509392505050565b6000546001600160a01b031633146119a757600080fd5b6001600160a01b0381166119ba57600080fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600054604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60606005805480602002602001604051908101604052809291908181526020018280548015610e3e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e20575050505050905090565b600b54600090600160a01b900460ff16611adc57506000611c42565b60006001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611b085785611b0a565b845b6001600160a01b0381166000908152600f602052604090205490915060ff16611b37576000915050611c42565b600a54606090611b5390889088906001600160a01b0316611414565b6009546040805163032125b360e21b815260248101899052600481019182528351604482015283519394506000936001600160a01b0390931692630c8496cc9286928b92829160640190602080870191028083838c5b83811015611bc1578181015183820152602001611ba9565b505050509050019350505050604080518083038186803b158015611be457600080fd5b505afa158015611bf8573d6000803e3d6000fd5b505050506040513d6040811015611c0e57600080fd5b505190506000611c308783611c228c612b30565b611c2b8c612b30565b612bf3565b9050611c3b81612c8a565b9450505050505b949350505050565b6000546001600160a01b03163314611c6157600080fd5b6001600160a01b03811660009081526002602052604090205460ff1615611c8757600080fd5b600454603211611c9657600080fd5b604080516001600160a01b03831681526001602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a16001600160a01b03166000818152600260205260408120805460ff191660019081179091556004805491820181559091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055565b6009546001600160a01b031681565b6008546001600160a01b031681565b6000546001600160a01b03163314611d7557600080fd5b6001600160a01b038116611dba5760405162461bcd60e51b8152600401808060200182810382526025815260200180612e976025913960400191505060405180910390fd5b6001600160a01b0381166000908152600f602052604090205460ff16611e1f576040805162461bcd60e51b81526020600482015260156024820152741b1a5cdd151bdad95b8e88191d5c1b1a58d85d1959605a1b604482015290519081900360640190fd5b6009546040805163095ea7b360e01b81526001600160a01b03928316600482015260006024820181905291519284169263095ea7b392604480840193602093929083900390910190829087803b158015611e7857600080fd5b505af1158015611e8c573d6000803e3d6000fd5b505050506040513d6020811015611ea257600080fd5b5051611edf5760405162461bcd60e51b8152600401808060200182810382526029815260200180612e6e6029913960400191505060405180910390fd5b6001600160a01b0381166000818152600f6020908152604091829020805460ff19169055815192835290517f6621c4efc5efa31320394260425b7d14cbb9d7e3754b2c98c04af66b1cbf315b9281900390910190a150565b6000546001600160a01b03163314611f4e57600080fd5b6001600160a01b03811660009081526002602052604090205460ff16611f7357600080fd5b6001600160a01b0381166000908152600260205260408120805460ff191690555b6004548110156109e957816001600160a01b031660048281548110611fb557fe5b6000918252602090912001546001600160a01b0316141561208e57600480546000198101908110611fe257fe5b600091825260209091200154600480546001600160a01b03909216918390811061200857fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556004805460001901906120449082612d7c565b50604080516001600160a01b03841681526000602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a16109e9565b600101611f94565b6007546001600160a01b031681565b6000546001600160a01b031633146120bc57600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156120f2573d6000803e3d6000fd5b50604080518381526001600160a01b038316602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a15050565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561217257506001600160a01b038116316121f7565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156121c857600080fd5b505afa1580156121dc573d6000803e3d6000fd5b505050506040513d60208110156121f257600080fd5b505190505b92915050565b600b54600160a01b900460ff1681565b6000546001600160a01b0316331461222457600080fd5b6001600160a01b0381166122695760405162461bcd60e51b8152600401808060200182810382526023815260200180612ebc6023913960400191505060405180910390fd5b6001600160a01b0382166122c4576040805162461bcd60e51b815260206004820152601f60248201527f6b796265724e6574776f726b2061646472657373206973206d697373696e6700604482015290519081900360640190fd5b600780546001600160a01b038085166001600160a01b0319928316179092556008805484841692169190911790819055604080516321f8a72160e01b81526c42616e636f724e6574776f726b60981b6004820152905191909216916321f8a721916024808301926020929190829003018186803b15801561234457600080fd5b505afa158015612358573d6000803e3d6000fd5b505050506040513d602081101561236e57600080fd5b5051600980546001600160a01b0319166001600160a01b03928316179055600854604080516321f8a72160e01b81527f42616e636f724e6574776f726b5061746846696e6465720000000000000000006004820152905191909216916321f8a721916024808301926020929190829003018186803b1580156123ef57600080fd5b505afa158015612403573d6000803e3d6000fd5b505050506040513d602081101561241957600080fd5b5051600a80546001600160a01b0319166001600160a01b03928316179055600854604080516321f8a72160e01b81527f42616e636f72436f6e76657274657252656769737472790000000000000000006004820152905191909216916321f8a721916024808301926020929190829003018186803b15801561249a57600080fd5b505afa1580156124ae573d6000803e3d6000fd5b505050506040513d60208110156124c457600080fd5b5051600b80546001600160a01b0319166001600160a01b03928316179055604080518483168152918316602083015280517f14662a0fccd762a05d5e1fa6afdd204554c4cf90fe58b5c5947f664fb71925f59281900390910190a15050565b600f6020526000908152604090205460ff1681565b6000546001600160a01b031681565b60008115612601576000831161255c57600080fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156125c4578534146125bf5760405162461bcd60e51b815260040180806020018281038252602f815260200180612e1b602f913960400191505060405180910390fd5b612601565b34156126015760405162461bcd60e51b8152600401808060200182810382526031815260200180612dea6031913960400191505060405180910390fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146126e157604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038916916323b872dd9160648083019260209291908290030181600087803b15801561267a57600080fd5b505af115801561268e573d6000803e3d6000fd5b505050506040513d60208110156126a457600080fd5b50516126e15760405162461bcd60e51b8152600401808060200182810382526021815260200180612edf6021913960400191505060405180910390fd5b600a546060906126fd90899088906001600160a01b0316611414565b90506000815111612755576040805162461bcd60e51b815260206004820152601b60248201527f646f54726164653a20636f756c646e27742066696e6420706174680000000000604482015290519081900360640190fd5b6000612773886127648b612b30565b61276d8a612b30565b88612cf1565b905060006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561287f5760095460405163569706eb60e01b8152602481018b9052604481018490526000606482018190526084820181905260a060048301908152865160a484015286516001600160a01b039094169363569706eb938e93899385938a93839291829160c401906020808a019102808383885b8381101561282357818101518382015260200161280b565b5050505090500196505050505050506020604051808303818588803b15801561284b57600080fd5b505af115801561285f573d6000803e3d6000fd5b50505050506040513d602081101561287657600080fd5b5051905061295d565b60095460405163569706eb60e01b8152602481018b9052604481018490526000606482018190526084820181905260a060048301908152865160a484015286516001600160a01b039094169363569706eb9388938f93899391928392829160c401906020808a019102808383885b838110156129055781810151838201526020016128ed565b505050509050019650505050505050602060405180830381600087803b15801561292e57600080fd5b505af1158015612942573d6000803e3d6000fd5b505050506040513d602081101561295857600080fd5b505190505b8181101561299c5760405162461bcd60e51b8152600401808060200182810382526032815260200180612f006032913960400191505060405180910390fd5b6001600160a01b03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156129fd576040516001600160a01b0388169083156108fc029084906000818181858888f193505050501580156129f7573d6000803e3d6000fd5b50612ac4565b876001600160a01b031663a9059cbb88846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612a5d57600080fd5b505af1158015612a71573d6000803e3d6000fd5b505050506040513d6020811015612a8757600080fd5b5051612ac45760405162461bcd60e51b8152600401808060200182810382526028815260200180612f326028913960400191505060405180910390fd5b604080516001600160a01b038c81168252602082018c90528a8116828401526060820185905289166080820152905133917fea9415385bae08fe9f6dc457b02577166790cde83bb18cc340aac6cb81b824de919081900360a00190a25060019998505050505050505050565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612b5f57506012612bee565b6001600160a01b03821660009081526006602052604090205480612beb57826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612bb657600080fd5b505afa158015612bca573d6000803e3d6000fd5b505050506040513d6020811015612be057600080fd5b50519150612bee9050565b90505b919050565b60006b204fce5e3e25026110000000851115612c0e57600080fd5b6b204fce5e3e25026110000000841115612c2757600080fd5b828210612c605760128383031115612c3e57600080fd5b84838303600a0a02670de0b6b3a7640000850281612c5857fe5b049050611c42565b60128284031115612c7057600080fd5b84828403600a0a670de0b6b3a764000086020281612c5857fe5b60006b204fce5e3e25026110000000821115612cd75760405162461bcd60e51b8152600401808060200182810382526024815260200180612e4a6024913960400191505060405180910390fd5b61271082600c54612710030281612cea57fe5b0492915050565b60006b204fce5e3e25026110000000851115612d0c57600080fd5b69d3c21bcecceda1000000821115612d2357600080fd5b838310612d525760128484031115612d3a57600080fd5b670de0b6b3a7640000858302858503600a0a02612c58565b60128385031115612d6257600080fd5b828403600a0a670de0b6b3a76400000282860281612c5857fe5b815481835581811115612da057600083815260209020612da0918101908301612da5565b505050565b61088791905b80821115612dbf5760008155600101612dab565b509056fe7365744261736963546f6b656e733a2062616e636f72546f6b656e206973206d697373696e67646f54726164653a206d73672076616c7565206973206e6f7420636f727265637420666f7220746f6b656e207472616465646f54726164653a206d73672076616c7565206973206e6f7420636f727265637420666f722045544820747261646576616c756541667465725265647563696e674665653a2076616c203e204d41585f5154596c697374546f6b656e3a206661696c20746f20617070726f76652062616e636f72206e6574776f726b6c697374546f6b656e3a20746f6b656e27732061646472657373206973206d697373696e67636f6e747261637452656769737472792061646472657373206973206d697373696e67646f54726164653a20636f6c6c6563742073726320746f6b656e206661696c6564646f54726164653a206465737420616d6f756e74206973206c6f776572207468616e20657870656374656420616d6f756e74646f54726164653a207472616e73666572206261636b206465737420746f6b656e206661696c65647365744261736963546f6b656e733a2062616e636f72457468206973206d697373696e67a265627a7a723158206e9fe76a21f4783f2cd750ea62a5bddc516dfe312d2a4308b10c3234e71f5fe564736f6c634300050b0032636f6e747261637452656769737472792061646472657373206973206d697373696e6700000000000000000000000052ae12abe5d8bd778bd5397f99ca900624cfadd4000000000000000000000000be2f0354d970265bfc36d383af77f72736b81b540000000000000000000000000000000000000000000000000000000000000019000000000000000000000000be2f0354d970265bfc36d383af77f72736b81b54

Deployed Bytecode

0x6080604052600436106102035760003560e01c806375829def11610118578063abffc9ac116100a0578063d4fac45d1161006f578063d4fac45d14610751578063d621e8131461078c578063d8952a49146107a1578063e69ec653146107dc578063f851a4401461080f57610203565b8063abffc9ac1461069d578063ac8a584a146106d0578063b78b842d14610703578063ce56c4541461071857610203565b80637c423f54116100e75780637c423f54146105e25780637cd44272146105f75780639870d7fe14610640578063a4edb25e14610673578063abf410e51461068857610203565b806375829def1461052257806377f50f9714610555578063797ae0e01461056a5780637acc8678146105af57610203565b806327a099d81161019b578063408ee7fe1161016a578063408ee7fe1461044f5780634d21dff7146104825780636940030f146104975780636cf69811146104ac57806372c27b62146104f857610203565b806327a099d8146103575780632a044e39146103bc5780633b172a32146103f75780633ccdbb281461040c57610203565b80631fc1e25f116101d75780631fc1e25f146102e5578063235ce45c1461031857806324a9d8531461032d578063267822471461034257610203565b806299d3861461020557806301a12fd31461022e578063038fe1b114610261578063043a3c07146102b4575b005b34801561021157600080fd5b5061021a610824565b604080519115158252519081900360200190f35b34801561023a57600080fd5b506102036004803603602081101561025157600080fd5b50356001600160a01b031661088a565b34801561026d57600080fd5b506102a26004803603606081101561028457600080fd5b506001600160a01b03813516906020810135151590604001356109ed565b60408051918252519081900360200190f35b3480156102c057600080fd5b506102c9610bd6565b604080516001600160a01b039092168252519081900360200190f35b3480156102f157600080fd5b506102036004803603602081101561030857600080fd5b50356001600160a01b0316610be5565b34801561032457600080fd5b506102c9610dc2565b34801561033957600080fd5b506102a2610dd1565b34801561034e57600080fd5b506102c9610dd7565b34801561036357600080fd5b5061036c610de6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103a8578181015183820152602001610390565b505050509050019250505060405180910390f35b3480156103c857600080fd5b50610203600480360360408110156103df57600080fd5b506001600160a01b0381358116916020013516610e48565b34801561040357600080fd5b506102c9610f41565b34801561041857600080fd5b506102036004803603606081101561042f57600080fd5b506001600160a01b03813581169160208101359160409091013516610f50565b34801561045b57600080fd5b506102036004803603602081101561047257600080fd5b50356001600160a01b031661104b565b34801561048e57600080fd5b506102c9611141565b3480156104a357600080fd5b5061021a611150565b61021a600480360360c08110156104c257600080fd5b506001600160a01b038135811691602081013591604082013581169160608101359091169060808101359060a0013515156111b3565b34801561050457600080fd5b506102036004803603602081101561051b57600080fd5b5035611257565b34801561052e57600080fd5b506102036004803603602081101561054557600080fd5b50356001600160a01b03166112ff565b34801561056157600080fd5b5061020361138a565b34801561057657600080fd5b5061036c6004803603606081101561058d57600080fd5b506001600160a01b038135811691602081013582169160409091013516611414565b3480156105bb57600080fd5b50610203600480360360208110156105d257600080fd5b50356001600160a01b0316611990565b3480156105ee57600080fd5b5061036c611a60565b34801561060357600080fd5b506102a26004803603608081101561061a57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611ac0565b34801561064c57600080fd5b506102036004803603602081101561066357600080fd5b50356001600160a01b0316611c4a565b34801561067f57600080fd5b506102c9611d40565b34801561069457600080fd5b506102c9611d4f565b3480156106a957600080fd5b50610203600480360360208110156106c057600080fd5b50356001600160a01b0316611d5e565b3480156106dc57600080fd5b50610203600480360360208110156106f357600080fd5b50356001600160a01b0316611f37565b34801561070f57600080fd5b506102c9612096565b34801561072457600080fd5b506102036004803603604081101561073b57600080fd5b50803590602001356001600160a01b03166120a5565b34801561075d57600080fd5b506102a26004803603604081101561077457600080fd5b506001600160a01b038135811691602001351661213a565b34801561079857600080fd5b5061021a6121fd565b3480156107ad57600080fd5b50610203600480360360408110156107c457600080fd5b506001600160a01b038135811691602001351661220d565b3480156107e857600080fd5b5061021a600480360360208110156107ff57600080fd5b50356001600160a01b0316612523565b34801561081b57600080fd5b506102c9612538565b600080546001600160a01b0316331461083c57600080fd5b600b805460ff60a01b1916600160a01b179055604080516001815290517f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359181900360200190a15060015b90565b6000546001600160a01b031633146108a157600080fd5b6001600160a01b03811660009081526003602052604090205460ff166108c657600080fd5b6001600160a01b0381166000908152600360205260408120805460ff191690555b6005548110156109e957816001600160a01b03166005828154811061090857fe5b6000918252602090912001546001600160a01b031614156109e15760058054600019810190811061093557fe5b600091825260209091200154600580546001600160a01b03909216918390811061095b57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556005805490610997906000198301612d7c565b50604080516001600160a01b03841681526000602082015281517f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762929181900390910190a16109e9565b6001016108e7565b5050565b6000806060610a3685610a005786610a0d565b600d546001600160a01b03165b86610a2357600d546001600160a01b0316610a25565b875b600a546001600160a01b0316611414565b90508415610afd576009546040805163032125b360e21b815260248101879052600481019182528351604482015283516001600160a01b0390931692630c8496cc92859289928291606401906020808701910280838360005b83811015610aa7578181015183820152602001610a8f565b505050509050019350505050604080518083038186803b158015610aca57600080fd5b505afa158015610ade573d6000803e3d6000fd5b505050506040513d6040811015610af457600080fd5b50519150610bb8565b6009546040805163032125b360e21b815260248101879052600481019182528351604482015283516001600160a01b0390931692630c8496cc92859289928291606401906020808701910280838360005b83811015610b66578181015183820152602001610b4e565b505050509050019350505050604080518083038186803b158015610b8957600080fd5b505afa158015610b9d573d6000803e3d6000fd5b505050506040513d6040811015610bb357600080fd5b505191505b50600b805460ff60a01b1916600160a01b17905590505b9392505050565b600b546001600160a01b031681565b6000546001600160a01b03163314610bfc57600080fd5b6001600160a01b038116610c415760405162461bcd60e51b8152600401808060200182810382526025815260200180612e976025913960400191505060405180910390fd5b6001600160a01b0381166000908152600f602052604090205460ff1615610ca7576040805162461bcd60e51b81526020600482015260156024820152741b1a5cdd151bdad95b8e88191d5c1b1a58d85d1959605a1b604482015290519081900360640190fd5b6009546040805163095ea7b360e01b81526001600160a01b039283166004820152600160ff1b602482015290519183169163095ea7b3916044808201926020929091908290030181600087803b158015610d0057600080fd5b505af1158015610d14573d6000803e3d6000fd5b505050506040513d6020811015610d2a57600080fd5b5051610d675760405162461bcd60e51b8152600401808060200182810382526029815260200180612e6e6029913960400191505060405180910390fd5b6001600160a01b0381166000818152600f6020908152604091829020805460ff19166001179055815192835290517f017664858438d89f547fee46da0bcfc5396ea13a9fb1490b8fdd76cfa979f1a99281900390910190a150565b600a546001600160a01b031681565b600c5481565b6001546001600160a01b031681565b60606004805480602002602001604051908101604052809291908181526020018280548015610e3e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e20575b5050505050905090565b6001600160a01b038216610e8d5760405162461bcd60e51b8152600401808060200182810382526024815260200180612f5a6024913960400191505060405180910390fd5b6001600160a01b038116610ed25760405162461bcd60e51b8152600401808060200182810382526026815260200180612dc46026913960400191505060405180910390fd5b600d80546001600160a01b038085166001600160a01b03199283168117909355600e805491851691909216811790915560408051928352602083019190915280517fcfbfff80d8491666a08780b57f8c2a4b9adfec058fc94d4a91ea6220f6e135bc9281900390910190a15050565b600e546001600160a01b031681565b6000546001600160a01b03163314610f6757600080fd5b826001600160a01b031663a9059cbb82846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610fc757600080fd5b505af1158015610fdb573d6000803e3d6000fd5b505050506040513d6020811015610ff157600080fd5b5051610ffc57600080fd5b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b6000546001600160a01b0316331461106257600080fd5b6001600160a01b03811660009081526003602052604090205460ff161561108857600080fd5b60055460321161109757600080fd5b604080516001600160a01b03831681526001602082015281517f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762929181900390910190a16001600160a01b03166000818152600360205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b600d546001600160a01b031681565b3360009081526003602052604081205460ff1661116c57600080fd5b600b805460ff60a01b19169055604080516000815290517f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359181900360200190a150600190565b600b54600090600160a01b900460ff166111cc57600080fd5b6007546001600160a01b031633146111e357600080fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148061122a57506001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b61123357600080fd5b611241878787878787612547565b61124a57600080fd5b5060019695505050505050565b6000546001600160a01b0316331461126e57600080fd5b61271081106112c4576040805162461bcd60e51b815260206004820152601860248201527f7365744665654270733a20666565427073203e3d206270730000000000000000604482015290519081900360640190fd5b600c8190556040805182815290517f4f78c4ceb393a616bbd264a4584a9ad15d722042ce1e135e6a8380217f5cb42b9181900360200190a150565b6000546001600160a01b0316331461131657600080fd5b6001600160a01b03811661132957600080fd5b600154604080516001600160a01b039092168252517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146113a157600080fd5b600154600054604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b600e546040805160018082528183019092526060926001600160a01b031691839190602080830190803883395050600b5482519293506001600160a01b03169183915060009061146057fe5b6001600160a01b039283166020918202929092010152861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611711576060846001600160a01b0316635be093498488856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561152657818101518382015260200161150e565b5050505090500194505050505060006040518083038186803b15801561154b57600080fd5b505afa15801561155f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561158857600080fd5b81019080805160405193929190846401000000008211156115a857600080fd5b9083019060208201858111156115bd57600080fd5b82518660208202830111640100000000821117156115da57600080fd5b82525081516020918201928201910280838360005b838110156116075781810151838201526020016115ef565b5050505090500160405250505090508051600014156116295750610bcf915050565b8051600201604051908082528060200260200182016040528015611657578160200160208202803883390190505b50600d5481519195506001600160a01b031690859060009061167557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505082846001815181106116a357fe5b6001600160a01b039092166020928302919091019091015260005b815181101561170a578181815181106116d357fe5b60200260200101518582600201815181106116ea57fe5b6001600160a01b03909216602092830291909101909101526001016116be565b5050611987565b6060846001600160a01b0316635be093498885856040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156117a457818101518382015260200161178c565b5050505090500194505050505060006040518083038186803b1580156117c957600080fd5b505afa1580156117dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561180657600080fd5b810190808051604051939291908464010000000082111561182657600080fd5b90830190602082018581111561183b57600080fd5b825186602082028301116401000000008211171561185857600080fd5b82525081516020918201928201910280838360005b8381101561188557818101518382015260200161186d565b5050505090500160405250505090508051600014156118a75750610bcf915050565b80516002016040519080825280602002602001820160405280156118d5578160200160208202803883390190505b50935060005b8151811015611924578181815181106118f057fe5b602002602001015185828151811061190457fe5b6001600160a01b03909216602092830291909101909101526001016118db565b50828482518151811061193357fe5b6001600160a01b039283166020918202929092010152600d548251865191909216918691600190910190811061196557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b50509392505050565b6000546001600160a01b031633146119a757600080fd5b6001600160a01b0381166119ba57600080fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600054604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60606005805480602002602001604051908101604052809291908181526020018280548015610e3e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e20575050505050905090565b600b54600090600160a01b900460ff16611adc57506000611c42565b60006001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611b085785611b0a565b845b6001600160a01b0381166000908152600f602052604090205490915060ff16611b37576000915050611c42565b600a54606090611b5390889088906001600160a01b0316611414565b6009546040805163032125b360e21b815260248101899052600481019182528351604482015283519394506000936001600160a01b0390931692630c8496cc9286928b92829160640190602080870191028083838c5b83811015611bc1578181015183820152602001611ba9565b505050509050019350505050604080518083038186803b158015611be457600080fd5b505afa158015611bf8573d6000803e3d6000fd5b505050506040513d6040811015611c0e57600080fd5b505190506000611c308783611c228c612b30565b611c2b8c612b30565b612bf3565b9050611c3b81612c8a565b9450505050505b949350505050565b6000546001600160a01b03163314611c6157600080fd5b6001600160a01b03811660009081526002602052604090205460ff1615611c8757600080fd5b600454603211611c9657600080fd5b604080516001600160a01b03831681526001602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a16001600160a01b03166000818152600260205260408120805460ff191660019081179091556004805491820181559091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055565b6009546001600160a01b031681565b6008546001600160a01b031681565b6000546001600160a01b03163314611d7557600080fd5b6001600160a01b038116611dba5760405162461bcd60e51b8152600401808060200182810382526025815260200180612e976025913960400191505060405180910390fd5b6001600160a01b0381166000908152600f602052604090205460ff16611e1f576040805162461bcd60e51b81526020600482015260156024820152741b1a5cdd151bdad95b8e88191d5c1b1a58d85d1959605a1b604482015290519081900360640190fd5b6009546040805163095ea7b360e01b81526001600160a01b03928316600482015260006024820181905291519284169263095ea7b392604480840193602093929083900390910190829087803b158015611e7857600080fd5b505af1158015611e8c573d6000803e3d6000fd5b505050506040513d6020811015611ea257600080fd5b5051611edf5760405162461bcd60e51b8152600401808060200182810382526029815260200180612e6e6029913960400191505060405180910390fd5b6001600160a01b0381166000818152600f6020908152604091829020805460ff19169055815192835290517f6621c4efc5efa31320394260425b7d14cbb9d7e3754b2c98c04af66b1cbf315b9281900390910190a150565b6000546001600160a01b03163314611f4e57600080fd5b6001600160a01b03811660009081526002602052604090205460ff16611f7357600080fd5b6001600160a01b0381166000908152600260205260408120805460ff191690555b6004548110156109e957816001600160a01b031660048281548110611fb557fe5b6000918252602090912001546001600160a01b0316141561208e57600480546000198101908110611fe257fe5b600091825260209091200154600480546001600160a01b03909216918390811061200857fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556004805460001901906120449082612d7c565b50604080516001600160a01b03841681526000602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a16109e9565b600101611f94565b6007546001600160a01b031681565b6000546001600160a01b031633146120bc57600080fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f193505050501580156120f2573d6000803e3d6000fd5b50604080518381526001600160a01b038316602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a15050565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561217257506001600160a01b038116316121f7565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156121c857600080fd5b505afa1580156121dc573d6000803e3d6000fd5b505050506040513d60208110156121f257600080fd5b505190505b92915050565b600b54600160a01b900460ff1681565b6000546001600160a01b0316331461222457600080fd5b6001600160a01b0381166122695760405162461bcd60e51b8152600401808060200182810382526023815260200180612ebc6023913960400191505060405180910390fd5b6001600160a01b0382166122c4576040805162461bcd60e51b815260206004820152601f60248201527f6b796265724e6574776f726b2061646472657373206973206d697373696e6700604482015290519081900360640190fd5b600780546001600160a01b038085166001600160a01b0319928316179092556008805484841692169190911790819055604080516321f8a72160e01b81526c42616e636f724e6574776f726b60981b6004820152905191909216916321f8a721916024808301926020929190829003018186803b15801561234457600080fd5b505afa158015612358573d6000803e3d6000fd5b505050506040513d602081101561236e57600080fd5b5051600980546001600160a01b0319166001600160a01b03928316179055600854604080516321f8a72160e01b81527f42616e636f724e6574776f726b5061746846696e6465720000000000000000006004820152905191909216916321f8a721916024808301926020929190829003018186803b1580156123ef57600080fd5b505afa158015612403573d6000803e3d6000fd5b505050506040513d602081101561241957600080fd5b5051600a80546001600160a01b0319166001600160a01b03928316179055600854604080516321f8a72160e01b81527f42616e636f72436f6e76657274657252656769737472790000000000000000006004820152905191909216916321f8a721916024808301926020929190829003018186803b15801561249a57600080fd5b505afa1580156124ae573d6000803e3d6000fd5b505050506040513d60208110156124c457600080fd5b5051600b80546001600160a01b0319166001600160a01b03928316179055604080518483168152918316602083015280517f14662a0fccd762a05d5e1fa6afdd204554c4cf90fe58b5c5947f664fb71925f59281900390910190a15050565b600f6020526000908152604090205460ff1681565b6000546001600160a01b031681565b60008115612601576000831161255c57600080fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156125c4578534146125bf5760405162461bcd60e51b815260040180806020018281038252602f815260200180612e1b602f913960400191505060405180910390fd5b612601565b34156126015760405162461bcd60e51b8152600401808060200182810382526031815260200180612dea6031913960400191505060405180910390fd5b6001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146126e157604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038916916323b872dd9160648083019260209291908290030181600087803b15801561267a57600080fd5b505af115801561268e573d6000803e3d6000fd5b505050506040513d60208110156126a457600080fd5b50516126e15760405162461bcd60e51b8152600401808060200182810382526021815260200180612edf6021913960400191505060405180910390fd5b600a546060906126fd90899088906001600160a01b0316611414565b90506000815111612755576040805162461bcd60e51b815260206004820152601b60248201527f646f54726164653a20636f756c646e27742066696e6420706174680000000000604482015290519081900360640190fd5b6000612773886127648b612b30565b61276d8a612b30565b88612cf1565b905060006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561287f5760095460405163569706eb60e01b8152602481018b9052604481018490526000606482018190526084820181905260a060048301908152865160a484015286516001600160a01b039094169363569706eb938e93899385938a93839291829160c401906020808a019102808383885b8381101561282357818101518382015260200161280b565b5050505090500196505050505050506020604051808303818588803b15801561284b57600080fd5b505af115801561285f573d6000803e3d6000fd5b50505050506040513d602081101561287657600080fd5b5051905061295d565b60095460405163569706eb60e01b8152602481018b9052604481018490526000606482018190526084820181905260a060048301908152865160a484015286516001600160a01b039094169363569706eb9388938f93899391928392829160c401906020808a019102808383885b838110156129055781810151838201526020016128ed565b505050509050019650505050505050602060405180830381600087803b15801561292e57600080fd5b505af1158015612942573d6000803e3d6000fd5b505050506040513d602081101561295857600080fd5b505190505b8181101561299c5760405162461bcd60e51b8152600401808060200182810382526032815260200180612f006032913960400191505060405180910390fd5b6001600160a01b03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156129fd576040516001600160a01b0388169083156108fc029084906000818181858888f193505050501580156129f7573d6000803e3d6000fd5b50612ac4565b876001600160a01b031663a9059cbb88846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612a5d57600080fd5b505af1158015612a71573d6000803e3d6000fd5b505050506040513d6020811015612a8757600080fd5b5051612ac45760405162461bcd60e51b8152600401808060200182810382526028815260200180612f326028913960400191505060405180910390fd5b604080516001600160a01b038c81168252602082018c90528a8116828401526060820185905289166080820152905133917fea9415385bae08fe9f6dc457b02577166790cde83bb18cc340aac6cb81b824de919081900360a00190a25060019998505050505050505050565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612b5f57506012612bee565b6001600160a01b03821660009081526006602052604090205480612beb57826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612bb657600080fd5b505afa158015612bca573d6000803e3d6000fd5b505050506040513d6020811015612be057600080fd5b50519150612bee9050565b90505b919050565b60006b204fce5e3e25026110000000851115612c0e57600080fd5b6b204fce5e3e25026110000000841115612c2757600080fd5b828210612c605760128383031115612c3e57600080fd5b84838303600a0a02670de0b6b3a7640000850281612c5857fe5b049050611c42565b60128284031115612c7057600080fd5b84828403600a0a670de0b6b3a764000086020281612c5857fe5b60006b204fce5e3e25026110000000821115612cd75760405162461bcd60e51b8152600401808060200182810382526024815260200180612e4a6024913960400191505060405180910390fd5b61271082600c54612710030281612cea57fe5b0492915050565b60006b204fce5e3e25026110000000851115612d0c57600080fd5b69d3c21bcecceda1000000821115612d2357600080fd5b838310612d525760128484031115612d3a57600080fd5b670de0b6b3a7640000858302858503600a0a02612c58565b60128385031115612d6257600080fd5b828403600a0a670de0b6b3a76400000282860281612c5857fe5b815481835581811115612da057600083815260209020612da0918101908301612da5565b505050565b61088791905b80821115612dbf5760008155600101612dab565b509056fe7365744261736963546f6b656e733a2062616e636f72546f6b656e206973206d697373696e67646f54726164653a206d73672076616c7565206973206e6f7420636f727265637420666f7220746f6b656e207472616465646f54726164653a206d73672076616c7565206973206e6f7420636f727265637420666f722045544820747261646576616c756541667465725265647563696e674665653a2076616c203e204d41585f5154596c697374546f6b656e3a206661696c20746f20617070726f76652062616e636f72206e6574776f726b6c697374546f6b656e3a20746f6b656e27732061646472657373206973206d697373696e67636f6e747261637452656769737472792061646472657373206973206d697373696e67646f54726164653a20636f6c6c6563742073726320746f6b656e206661696c6564646f54726164653a206465737420616d6f756e74206973206c6f776572207468616e20657870656374656420616d6f756e74646f54726164653a207472616e73666572206261636b206465737420746f6b656e206661696c65647365744261736963546f6b656e733a2062616e636f72457468206973206d697373696e67a265627a7a723158206e9fe76a21f4783f2cd750ea62a5bddc516dfe312d2a4308b10c3234e71f5fe564736f6c634300050b0032

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

00000000000000000000000052ae12abe5d8bd778bd5397f99ca900624cfadd4000000000000000000000000be2f0354d970265bfc36d383af77f72736b81b540000000000000000000000000000000000000000000000000000000000000019000000000000000000000000be2f0354d970265bfc36d383af77f72736b81b54

-----Decoded View---------------
Arg [0] : _contractRegistry (address): 0x52Ae12ABe5D8BD778BD5397F99cA900624CfADD4
Arg [1] : _kyberNetwork (address): 0xBE2F0354D970265BFc36D383af77F72736b81B54
Arg [2] : _feeBps (uint256): 25
Arg [3] : _admin (address): 0xBE2F0354D970265BFc36D383af77F72736b81B54

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000052ae12abe5d8bd778bd5397f99ca900624cfadd4
Arg [1] : 000000000000000000000000be2f0354d970265bfc36d383af77f72736b81b54
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [3] : 000000000000000000000000be2f0354d970265bfc36d383af77f72736b81b54


Deployed Bytecode Sourcemap

187:9582:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6140:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6140:145:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;2406:456:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2406:456:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2406:456:4;-1:-1:-1;;;;;2406:456:4;;:::i;3150:571:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3150:571:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3150:571:2;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;539:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;539:32:2;;;:::i;:::-;;;;-1:-1:-1;;;;;539:32:2;;;;;;;;;;;;;;5018:409;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5018:409:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5018:409:2;-1:-1:-1;;;;;5018:409:2;;:::i;485:48::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;485:48:2;;;:::i;608:18::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;608:18:2;;;:::i;85:27:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;85:27:4;;;:::i;656:103::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;656:103:4;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;656:103:4;;;;;;;;;;;;;;;;;4586:389:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4586:389:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4586:389:2;;;;;;;;;;:::i;713:76::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;713:76:2;;;:::i;337:191:6:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;337:191:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;337:191:6;;;;;;;;;;;;;;;;;:::i;2094:306:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2094:306:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2094:306:4;-1:-1:-1;;;;;2094:306:4;;:::i;633:74:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;633:74:2;;;:::i;6291:150::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6291:150:2;;;:::i;2601:526::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;2601:526:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5920:176::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5920:176:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5920:176:2;;:::i;1074:188:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1074:188:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1074:188:4;-1:-1:-1;;;;;1074:188:4;;:::i;1836:194::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1836:194:4;;;:::i;8411:1156:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8411:1156:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8411:1156:2;;;;;;;;;;;;;;;;;;;:::i;1437:228:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1437:228:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1437:228:4;-1:-1:-1;;;;;1437:228:4;;:::i;765:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;765:101:4;;;:::i;1797:601:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1797:601:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;1797:601:2;;;;;;;;;;;;;;;;;;;;;;:::i;2927:317:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2927:317:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2927:317:4;-1:-1:-1;;;;;2927:317:4;;:::i;444:35:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;444:35:2;;;:::i;351:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;351:41:2;;;:::i;5472:407::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5472:407:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5472:407:2;-1:-1:-1;;;;;5472:407:2;;:::i;3250:474:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3250:474:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3250:474:4;-1:-1:-1;;;;;3250:474:4;;:::i;318:27:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;318:27:2;;;:::i;633:163:6:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;633:163:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;633:163:6;;;;;;-1:-1:-1;;;;;633:163:6;;:::i;673:208:5:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;673:208:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;673:208:5;;;;;;;;;;:::i;578:24:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;578:24:2;;;:::i;3801:712::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3801:712:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3801:712:2;;;;;;;;;;:::i;796:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;796:45:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;796:45:2;-1:-1:-1;;;;;796:45:2;;:::i;59:20:4:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;59:20:4;;;:::i;6140:145:2:-;6188:4;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;6204:12:2;:19;;-1:-1:-1;;;;6204:19:2;-1:-1:-1;;;6204:19:2;;;6238:18;;;6219:4;6238:18;;;;;;;;;;;;;-1:-1:-1;6274:4:2;468:1:4;6140:145:2;:::o;2406:456:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;2482:17:4;;;;;;:8;:17;;;;;;;;2474:26;;;;;;-1:-1:-1;;;;;2510:17:4;;2530:5;2510:17;;;:8;:17;;;;;:25;;-1:-1:-1;;2510:25:4;;;2546:310;2567:13;:20;2563:24;;2546:310;;;2632:7;-1:-1:-1;;;;;2612:27:4;:13;2626:1;2612:16;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2612:16:4;:27;2608:238;;;2678:13;2692:20;;-1:-1:-1;;2692:24:4;;;2678:39;;;;;;;;;;;;;;;;2659:13;:16;;-1:-1:-1;;;;;2678:39:4;;;;2673:1;;2659:16;;;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;2659:58:4;-1:-1:-1;;;;;2659:58:4;;;;;;;;;;2735:13;:22;;;;;-1:-1:-1;;2735:22:4;;;:::i;:::-;-1:-1:-1;2780:28:4;;;-1:-1:-1;;;;;2780:28:4;;;;2802:5;2780:28;;;;;;;;;;;;;;;;;2826:5;;2608:238;2589:3;;2546:310;;;;2406:456;:::o;3150:571:2:-;3237:4;3253:15;3278:19;3300:149;3331:12;:32;;3358:5;3331:32;;;3346:9;;-1:-1:-1;;;;;3346:9:2;3331:32;3377:12;:32;;3400:9;;-1:-1:-1;;;;;3400:9:2;3377:32;;;3392:5;3377:32;3423:16;;-1:-1:-1;;;;;3423:16:2;3300:17;:149::i;:::-;3278:171;;3463:12;3459:200;;;3508:13;;:46;;;-1:-1:-1;;;3508:46:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3508:13:2;;;;:29;;3538:4;;3544:9;;3508:46;;;;;;;;;;;;;;:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3508:46:2;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3508:46:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3508:46:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3508:46:2;;-1:-1:-1;3459:200:2;;;3602:13;;:46;;;-1:-1:-1;;;3602:46:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3602:13:2;;;;:29;;3632:4;;3638:9;;3602:46;;;;;;;;;;;;;;:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3602:46:2;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3602:46:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3602:46:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3602:46:2;;-1:-1:-1;3459:200:2;-1:-1:-1;3668:12:2;:19;;-1:-1:-1;;;;3668:19:2;-1:-1:-1;;;3668:19:2;;;3704:10;-1:-1:-1;3150:571:2;;;;;;:::o;539:32::-;;;-1:-1:-1;;;;;539:32:2;;:::o;5018:409::-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;5085:28:2;;5077:78;;;;-1:-1:-1;;;5077:78:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5174:29:2;;;;;;:13;:29;;;;;;;;5173:30;5165:64;;;;;-1:-1:-1;;;5165:64:2;;;;;;;;;;;;-1:-1:-1;;;5165:64:2;;;;;;;;;;;;;;;5270:13;;5248:45;;;-1:-1:-1;;;5248:45:2;;-1:-1:-1;;;;;5270:13:2;;;5248:45;;;;-1:-1:-1;;;5248:45:2;;;;;;:13;;;;;;:45;;;;;;;;;;;;;;;5270:13;5248;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;5248:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5248:45:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5248:45:2;5240:99;;;;-1:-1:-1;;;5240:99:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5350:29:2;;;;;;:13;:29;;;;;;;;;:36;;-1:-1:-1;;5350:36:2;5382:4;5350:36;;;5402:18;;;;;;;;;;;;;;;;;5018:409;:::o;485:48::-;;;-1:-1:-1;;;;;485:48:2;;:::o;608:18::-;;;;:::o;85:27:4:-;;;-1:-1:-1;;;;;85:27:4;;:::o;656:103::-;703:16;738:14;731:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;731:21:4;;;;;;;;;;;;;;;;;;;;;;;656:103;:::o;4586:389:2:-;-1:-1:-1;;;;;4677:24:2;;4669:73;;;;-1:-1:-1;;;4669:73:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4760:26:2;;4752:77;;;;-1:-1:-1;;;4752:77:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4840:9;:29;;-1:-1:-1;;;;;4840:29:2;;;-1:-1:-1;;;;;;4840:29:2;;;;;;;;4879:11;:33;;;;;;;;;;;;;;4928:40;;;;;;;;;;;;;;;;;;;;;;;;;4586:389;;:::o;713:76::-;;;-1:-1:-1;;;;;713:76:2;;:::o;337:191:6:-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;439:5:6;-1:-1:-1;;;;;439:14:6;;454:6;462;439:30;;;;;;;;;;;;;-1:-1:-1;;;;;439:30:6;-1:-1:-1;;;;;439:30:6;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;439:30:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;439:30:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;439:30:6;431:39;;;;;;485:36;;;-1:-1:-1;;;;;485:36:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;337:191;;;:::o;2094:306:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;2170:20:4;;;;;;:8;:20;;;;;;;;2169:21;2161:30;;;;;;2232:13;:20;328:2;-1:-1:-1;2224:46:4;;;;;;2286:30;;;-1:-1:-1;;;;;2286:30:4;;;;2311:4;2286:30;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2326:20:4;;;;;:8;:20;;;;;:27;;-1:-1:-1;;2326:27:4;2349:4;2326:27;;;;;;2363:13;27:10:-1;;23:18;;;45:23;;2363:30:4;;;;;;;-1:-1:-1;;;;;;2363:30:4;;;;;;2094:306::o;633:74:2:-;;;-1:-1:-1;;;;;633:74:2;;:::o;6291:150::-;620:10:4;6342:4:2;611:20:4;;;:8;:20;;;;;;;;603:29;;;;;;6358:12:2;:20;;-1:-1:-1;;;;6358:20:2;;;6393:19;;;6373:5;6393:19;;;;;;;;;;;;;-1:-1:-1;6430:4:2;6291:150;:::o;2601:526::-;2860:12;;2831:4;;-1:-1:-1;;;2860:12:2;;;;2852:21;;;;;;2905:12;;-1:-1:-1;;;;;2905:12:2;2891:10;:26;2883:35;;;;;;-1:-1:-1;;;;;2936:29:2;;176:42:5;2936:29:2;;:63;;-1:-1:-1;;;;;;2969:30:2;;176:42:5;2969:30:2;2936:63;2928:72;;;;;;3019:78;3027:8;3037:9;3048;3059:11;3072:14;3088:8;3019:7;:78::i;:::-;3011:87;;;;;;-1:-1:-1;3116:4:2;2601:526;;;;;;;;:::o;5920:176::-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;298:5:2;5988:7;:13;5980:50;;;;;-1:-1:-1;;;5980:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;6041:6;:16;;;6072:17;;;;;;;;;;;;;;;;;5920:176;:::o;1074:188:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;1150:22:4;;1142:31;;;;;;1209:12;;1188:34;;;-1:-1:-1;;;;;1209:12:4;;;1188:34;;;;;;;;;;;;1232:12;:23;;-1:-1:-1;;;;;;1232:23:4;-1:-1:-1;;;;;1232:23:4;;;;;;;;;;1074:188::o;1836:194::-;1883:12;;-1:-1:-1;;;;;1883:12:4;1899:10;1883:26;1875:35;;;;;;1938:12;;;1952:5;1925:33;;;-1:-1:-1;;;;;1938:12:4;;;1925:33;;1952:5;;;;1925:33;;;;;;;;;;;;;;;;1976:12;;;;1968:20;;-1:-1:-1;;;;;;1968:20:4;;;-1:-1:-1;;;;;1976:12:4;;1968:20;;;;1998:25;;;1836:194::o;8411:1156:2:-;8562:11;;8623:16;;;8562:11;8623:16;;;;;;;;;8514:19;;-1:-1:-1;;;;;8562:11:2;;8514:19;;8623:16;;;;;;;105:10:-1;8623:16:2;88:34:-1;-1:-1;;8674:17:2;;8649:22;;;;-1:-1:-1;;;;;;8674:17:2;;8649:22;;-1:-1:-1;8674:17:2;;8649:22;;;;-1:-1:-1;;;;;8649:42:2;;;:22;;;;;;;;;:42;8706:24;;176:42:5;8706:24:2;8702:837;;;8746:24;8773:6;-1:-1:-1;;;;;8773:10:2;;8784:8;8794:4;8800:19;8773:47;;;;;;;;;;;;;-1:-1:-1;;;;;8773:47:2;-1:-1:-1;;;;;8773:47:2;;;;;;-1:-1:-1;;;;;8773:47:2;-1:-1:-1;;;;;8773:47:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;8773:47:2;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8773:47:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8773:47:2;;;;;;39:16:-1;36:1;17:17;2:54;101:4;8773:47:2;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;8773:47:2;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;8773:47:2;;421:4:-1;412:14;;;;8773:47:2;;;;;412:14:-1;8773:47:2;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;8773:47:2;;;;;;;;;;;8746:74;;8838:7;:14;8856:1;8838:19;8834:41;;;-1:-1:-1;8861:11:2;;-1:-1:-1;;8861:11:2;8834:41;8907:7;:14;8924:1;8907:18;8895:31;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;8895:31:2;-1:-1:-1;8950:9:2;;8940:7;;8888:38;;-1:-1:-1;;;;;;8950:9:2;;8888:38;;8950:9;;8940:7;;;;;;;;;:19;-1:-1:-1;;;;;8940:19:2;;;-1:-1:-1;;;;;8940:19:2;;;;;8983:8;8973:4;8978:1;8973:7;;;;;;;;-1:-1:-1;;;;;8973:18:2;;;:7;;;;;;;;;;;:18;9009:6;9005:105;9025:7;:14;9021:1;:18;9005:105;;;9084:7;9092:1;9084:10;;;;;;;;;;;;;;9064:4;9069:1;9073;9069:5;9064:11;;;;;;;;-1:-1:-1;;;;;9064:31:2;;;:11;;;;;;;;;;;:31;9041:3;;9005:105;;;;8702:837;;;;9140:24;9167:6;-1:-1:-1;;;;;9167:10:2;;9178:3;9183:8;9193:19;9167:46;;;;;;;;;;;;;-1:-1:-1;;;;;9167:46:2;-1:-1:-1;;;;;9167:46:2;;;;;;-1:-1:-1;;;;;9167:46:2;-1:-1:-1;;;;;9167:46:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;9167:46:2;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9167:46:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9167:46:2;;;;;;39:16:-1;36:1;17:17;2:54;101:4;9167:46:2;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;9167:46:2;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;9167:46:2;;421:4:-1;412:14;;;;9167:46:2;;;;;412:14:-1;9167:46:2;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;9167:46:2;;;;;;;;;;;9140:73;;9231:7;:14;9249:1;9231:19;9227:41;;;-1:-1:-1;9254:11:2;;-1:-1:-1;;9254:11:2;9227:41;9300:7;:14;9317:1;9300:18;9288:31;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;9288:31:2;-1:-1:-1;9281:38:2;-1:-1:-1;9337:6:2;9333:101;9353:7;:14;9349:1;:18;9333:101;;;9408:7;9416:1;9408:10;;;;;;;;;;;;;;9392:4;9397:1;9392:7;;;;;;;;-1:-1:-1;;;;;9392:27:2;;;:7;;;;;;;;;;;:27;9369:3;;9333:101;;;;9470:8;9447:4;9452:7;:14;9447:20;;;;;;;;-1:-1:-1;;;;;9447:31:2;;;:20;;;;;;;;;:31;9519:9;;9497:14;;9492:24;;9519:9;;;;;9492:24;;9519:9;9497:18;;;;9492:24;;;;;;;;;;;:36;-1:-1:-1;;;;;9492:36:2;;;-1:-1:-1;;;;;9492:36:2;;;;;8702:837;;-1:-1:-1;;8411:1156:2;;;;;:::o;1437:228:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;1520:22:4;;1512:31;;;;;;1558:30;;;-1:-1:-1;;;;;1558:30:4;;;;;;;;;;;;;;;1626:5;;1603:29;;;-1:-1:-1;;;;;1603:29:4;;;;;1626:5;;;1603:29;;;;;;;;;;;;;;;;1642:5;:16;;-1:-1:-1;;;;;;1642:16:4;-1:-1:-1;;;;;1642:16:4;;;;;;;;;;1437:228::o;765:101::-;811:16;846:13;839:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;839:20:4;;;;;;;;;;;;;;;;;;;;;;765:101;:::o;1797:601:2:-;1907:12;;1886:4;;-1:-1:-1;;;1907:12:2;;;;1902:27;;-1:-1:-1;1928:1:2;1921:8;;1902:27;1940:11;-1:-1:-1;;;;;1954:24:2;;176:42:5;1954:24:2;:37;;1988:3;1954:37;;;1981:4;1954:37;-1:-1:-1;;;;;2006:29:2;;;;;;:13;:29;;;;;;1940:51;;-1:-1:-1;2006:29:2;;2001:49;;2046:1;2039:8;;;;;2001:49;2125:16;;2074:19;;2096:46;;2114:3;;2119:4;;-1:-1:-1;;;;;2125:16:2;2096:17;:46::i;:::-;2189:13;;:43;;;-1:-1:-1;;;2189:43:2;;;;;;;;;;;;;;;;;;;;;;2074:68;;-1:-1:-1;2153:12:2;;-1:-1:-1;;;;;2189:13:2;;;;:29;;2074:68;;2225:6;;2189:43;;;;;;;;;;;;;;2153:12;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2189:43:2;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2189:43:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2189:43:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2189:43:2;;-1:-1:-1;2243:9:2;2255:69;2271:6;2189:43;2288:16;2300:3;2288:11;:16::i;:::-;2306:17;2318:4;2306:11;:17::i;:::-;2255:15;:69::i;:::-;2243:81;;2342:27;2364:4;2342:21;:27::i;:::-;2335:34;-1:-1:-1;;;;;1797:601:2;;;;;;;:::o;2927:317:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;3005:22:4;;;;;;:9;:22;;;;;;;;3004:23;2996:32;;;;;;3069:14;:21;328:2;-1:-1:-1;3061:47:4;;;;;;3124:32;;;-1:-1:-1;;;;;3124:32:4;;;;3151:4;3124:32;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3166:22:4;;;;;:9;:22;;;;;:29;;-1:-1:-1;;3166:29:4;3191:4;3166:29;;;;;;3205:14;27:10:-1;;23:18;;;45:23;;3205:32:4;;;;;;;-1:-1:-1;;;;;;3205:32:4;;;;;;2927:317::o;444:35:2:-;;;-1:-1:-1;;;;;444:35:2;;:::o;351:41::-;;;-1:-1:-1;;;;;351:41:2;;:::o;5472:407::-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;5541:28:2;;5533:78;;;;-1:-1:-1;;;5533:78:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5629:29:2;;;;;;:13;:29;;;;;;;;5621:63;;;;;-1:-1:-1;;;5621:63:2;;;;;;;;;;;;-1:-1:-1;;;5621:63:2;;;;;;;;;;;;;;;5725:13;;5703:40;;;-1:-1:-1;;;5703:40:2;;-1:-1:-1;;;;;5725:13:2;;;5703:40;;;;5725:13;5703:40;;;;;;;;:13;;;;;;:40;;;;;;;;;;;;;;;;;;:13;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;5703:40:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5703:40:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5703:40:2;5695:94;;;;-1:-1:-1;;;5695:94:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5807:29:2;;;;;;:13;:29;;;;;;;;;5800:36;;-1:-1:-1;;5800:36:2;;;5852:20;;;;;;;;;;;;;;;;;5472:407;:::o;3250:474:4:-;452:5;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;3328:19:4;;;;;;:9;:19;;;;;;;;3320:28;;;;;;-1:-1:-1;;;;;3358:19:4;;3380:5;3358:19;;;:9;:19;;;;;:27;;-1:-1:-1;;3358:27:4;;;3396:322;3417:14;:21;3413:25;;3396:322;;;3484:8;-1:-1:-1;;;;;3463:29:4;:14;3478:1;3463:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3463:17:4;:29;3459:249;;;3532:14;3547:21;;-1:-1:-1;;3547:25:4;;;3532:41;;;;;;;;;;;;;;;;3512:14;:17;;-1:-1:-1;;;;;3532:41:4;;;;3527:1;;3512:17;;;;;;;;;;;;;;;:61;;-1:-1:-1;;;;;;3512:61:4;-1:-1:-1;;;;;3512:61:4;;;;;;;;;;3591:14;:26;;-1:-1:-1;;3591:26:4;;;;;;:::i;:::-;-1:-1:-1;3640:30:4;;;-1:-1:-1;;;;;3640:30:4;;;;3664:5;3640:30;;;;;;;;;;;;;;;;;3688:5;;3459:249;3440:3;;3396:322;;318:27:2;;;-1:-1:-1;;;;;318:27:2;;:::o;633:163:6:-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;722:23:6;;-1:-1:-1;;;;;722:15:6;;;:23;;;;;738:6;;722:23;;;;738:6;722:15;:23;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;760:29:6;;;;;;-1:-1:-1;;;;;760:29:6;;;;;;;;;;;;;;;;;;;633:163;;:::o;673:208:5:-;740:4;-1:-1:-1;;;;;760:26:5;;176:42;760:26;756:118;;;-1:-1:-1;;;;;;807:12:5;;;800:19;;756:118;853:5;-1:-1:-1;;;;;853:15:5;;869:4;853:21;;;;;;;;;;;;;-1:-1:-1;;;;;853:21:5;-1:-1:-1;;;;;853:21:5;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;853:21:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;853:21:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;853:21:5;;-1:-1:-1;756:118:5;673:208;;;;:::o;578:24:2:-;;;-1:-1:-1;;;578:24:2;;;;;:::o;3801:712::-;452:5:4;;-1:-1:-1;;;;;452:5:4;438:10;:19;430:28;;;;;;-1:-1:-1;;;;;3908:31:2;;3900:79;;;;-1:-1:-1;;;3900:79:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3997:27:2;;3989:71;;;;;-1:-1:-1;;;3989:71:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;4071:12;:28;;-1:-1:-1;;;;;4071:28:2;;;-1:-1:-1;;;;;;4071:28:2;;;;;;;4109:16;:55;;;;;;;;;;;;;;;4206:44;;;-1:-1:-1;;;4206:44:2;;-1:-1:-1;;;4206:44:2;;;;;;:16;;;;;:27;;:44;;;;;;;;;;;;;;:16;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;4206:44:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4206:44:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4206:44:2;4175:13;:76;;-1:-1:-1;;;;;;4175:76:2;-1:-1:-1;;;;;4175:76:2;;;;;;4305:16;;:54;;;-1:-1:-1;;;4305:54:2;;;;;;;;;:16;;;;;:27;;:54;;;;;4206:44;;4305:54;;;;;;;:16;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;4305:54:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4305:54:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4305:54:2;4261:16;:99;;-1:-1:-1;;;;;;4261:99:2;-1:-1:-1;;;;;4261:99:2;;;;;;4390:16;;:54;;;-1:-1:-1;;;4390:54:2;;;;;;;;;:16;;;;;:27;;:54;;;;;4305;;4390;;;;;;;:16;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;4390:54:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4390:54:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4390:54:2;4370:17;:74;;-1:-1:-1;;;;;;4370:74:2;-1:-1:-1;;;;;4370:74:2;;;;;;4460:46;;;;;;;;;;;4390:54;4460:46;;;;;;;;;;;;;;;3801:712;;:::o;796:45::-;;;;;;;;;;;;;;;:::o;59:20:4:-;;;-1:-1:-1;;;;;59:20:4;;:::o;6447:1958:2:-;6665:4;6751:8;6747:324;;;6800:1;6783:14;:18;6775:27;;;;;;-1:-1:-1;;;;;6820:29:2;;176:42:5;6820:29:2;6816:244;;;6888:9;6875;:22;6867:82;;;;-1:-1:-1;;;6867:82:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6816:244;;;6992:9;:14;6984:76;;;;-1:-1:-1;;;6984:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7085:29:2;;176:42:5;7085:29:2;7081:202;;7175:59;;;-1:-1:-1;;;7175:59:2;;7197:10;7175:59;;;;7217:4;7175:59;;;;;;;;;;;;-1:-1:-1;;;;;7175:21:2;;;;;:59;;;;;;;;;;;;;;-1:-1:-1;7175:21:2;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;7175:59:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7175:59:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7175:59:2;7167:105;;;;-1:-1:-1;;;7167:105:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7354:16;;7293:19;;7315:56;;7333:8;;7343:9;;-1:-1:-1;;;;;7354:16:2;7315:17;:56::i;:::-;7293:78;;7403:1;7389:4;:11;:15;7381:55;;;;;-1:-1:-1;;;7381:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;7447:27;7477:84;7488:9;7499:21;7511:8;7499:11;:21::i;:::-;7522:22;7534:9;7522:11;:22::i;:::-;7546:14;7477:10;:84::i;:::-;7447:114;-1:-1:-1;7571:15:2;-1:-1:-1;;;;;7601:29:2;;176:42:5;7601:29:2;7597:290;;;7659:13;;:95;;-1:-1:-1;;;7659:95:2;;;;;;;;;;;;;;:13;:95;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7659:13:2;;;;:22;;7688:9;;7699:4;;7688:9;;7716:22;;7659:13;;:95;;;;;;;;;;;;;;;:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7659:95:2;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7659:95:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7659:95:2;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7659:95:2;;-1:-1:-1;7597:290:2;;;7798:13;;:78;;-1:-1:-1;;;7798:78:2;;;;;;;;;;;;;;:13;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7798:13:2;;;;:22;;7821:4;;7827:9;;7838:22;;7798:13;;;;:78;;;;;;;;;;;;;;:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7798:78:2;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7798:78:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7798:78:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7798:78:2;;-1:-1:-1;7597:290:2;7919:22;7905:10;:36;;7897:99;;;;-1:-1:-1;;;7897:99:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8011:30:2;;176:42:5;8011:30:2;8007:244;;;8057:44;;-1:-1:-1;;;;;8057:20:2;;;:44;;;;;8078:22;;8057:44;;;;8078:22;8057:20;:44;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8057:44:2;8007:244;;;8140:9;-1:-1:-1;;;;;8140:18:2;;8159:11;8172:22;8140:55;;;;;;;;;;;;;-1:-1:-1;;;;;8140:55:2;-1:-1:-1;;;;;8140:55:2;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8140:55:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8140:55:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8140:55:2;8132:108;;;;-1:-1:-1;;;8132:108:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8266:111;;;-1:-1:-1;;;;;8266:111:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8279:10;;8266:111;;;;;;;;;;-1:-1:-1;8394:4:2;;6447:1958;-1:-1:-1;;;;;;;;;6447:1958:2:o;1106:419:5:-;1162:4;-1:-1:-1;;;;;1182:26:5;;176:42;1182:26;1178:51;;;-1:-1:-1;513:2:5;1210:19;;1178:51;-1:-1:-1;;;;;1283:24:5;;1262:18;1283:24;;;:8;:24;;;;;;1444:18;1440:47;;1471:5;-1:-1:-1;;;;;1471:14:5;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1471:16:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1471:16:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1471:16:5;;-1:-1:-1;1464:23:5;;-1:-1:-1;1464:23:5;1440:47;1505:13;-1:-1:-1;1106:419:5;;;;:::o;3338:614::-;3462:4;312:6;3490:9;:20;;3482:29;;;;;;312:6;3529:10;:21;;3521:30;;;;;;3581:11;3566;:26;3562:384;;466:2;3631:11;3617;:25;3616:43;;3608:52;;;;;;3746:9;3730:11;3716;:25;3709:2;:33;3708:47;262:6;3682:10;:22;:74;;;;;;3674:83;;;;3562:384;466:2;3811:11;3797;:25;3796:43;;3788:52;;;;;;3925:9;3909:11;3895;:25;3888:2;:33;262:6;3862:10;:22;:60;:72;;;;9573:194:2;9636:4;312:6:5;9660:3:2;:14;;9652:63;;;;-1:-1:-1;;;9652:63:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;298:5;9750:3;9740:6;;298:5;9734:12;9733:20;9732:28;;;;;;;9573:194;-1:-1:-1;;9573:194:2:o;1531:558:5:-;1633:4;312:6;1657;:17;;1649:26;;;;;;376:17;1693:16;;;1685:25;;;;;;1740:11;1725;:26;1721:362;;466:2;1790:11;1776;:25;1775:43;;1767:52;;;;;;262:6;1841:13;;;1863:25;;;1858:2;:31;1841:49;1840:63;;1721:362;466:2;1957:11;1943;:25;1942:43;;1934:52;;;;;;2058:11;2044;:25;2039:2;:31;262:6;2026:45;2017:4;2008:6;:13;2007:65;;;;187:9582:2;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://6e9fe76a21f4783f2cd750ea62a5bddc516dfe312d2a4308b10c3234e71f5fe5

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.