Contract 0x861726bfe27931a4e22a7277bde6cb8432b65856 2

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb34547ae84bb3ad09a530dda7bce0798f764ba9ea78a3d1656c3f4ad8ee4cde8Convert Multiple78521532021-12-05 19:46:482 days 20 hrs ago0x65a8cbbf9bc23bcb1c9d1d3039b5bbd9101e6b7a IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.0435649525
0xc2edf730952147f608aed1331d3461bcb591dae6066581b2bd793ac132bd35fbConvert Multiple78521452021-12-05 19:46:352 days 20 hrs ago0x65a8cbbf9bc23bcb1c9d1d3039b5bbd9101e6b7a IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.1673274525
0x6b8633dee3a8cce7e754d309f2bbccf918277d2b53d0229c8f560df8ef584d4cConvert Multiple78484232021-12-05 17:41:392 days 22 hrs ago0x65a8cbbf9bc23bcb1c9d1d3039b5bbd9101e6b7a IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.05338302525
0xa2cfbdfae95bcd358ed5ae8ac77da387d553ca9a9262b6c81525d8b63a88d744Convert68665622021-11-12 21:24:0125 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.0107875525
0x1fb66b19f2d2afc35e3aa5602aaf172e750d491e776e767200c8f71672382189Convert68286172021-11-11 23:58:3826 days 16 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.01113407525
0x0eb32ade96c4509b76d30c6ec7c8878f563effad390a519720ae52ce28fcf971Convert68286152021-11-11 23:58:3326 days 16 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.0074665525
0x1e33c42260b33182803a6de3d35c2a1f02aae0365d686d1ec7f3b51d18c3f0efConvert68286112021-11-11 23:58:2626 days 16 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.01085872525
0xb1ce328ac01060855d0bed141037c8a6a28c7d7a8a08ea96afa95cfa63a5d4adConvert68286102021-11-11 23:58:2126 days 16 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.00772847525
0xcf5cf791153c9a96a178836fd10a80c4778adbb5109502b14942e9a07ee420a2Convert68286072021-11-11 23:58:1526 days 16 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.00800192525
0x5baf956a233511333007fa62010ee89a386815f8c6f9da7f898d16aedfac2b32Convert68286042021-11-11 23:58:0926 days 16 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.00678402525
0xdf3a9d79eaee1a9cddff89f3393366bd7f1dc4f9e8993b33b40e631d6493c7b9Convert68237232021-11-11 21:12:1426 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.00774252525
0x5d3ede0e19214efff083854a5d0c54cddd7bb1c4e45165a459d9e66c92baee72Convert68237182021-11-11 21:12:0526 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.00783767525
0xc30bc88d233369df82b7c65695fa4296512d2c41fe5693170a6d56479dc4a4f1Convert68237152021-11-11 21:11:5726 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.010954225
0x44f22c23d8db36cbac1ec46aa3f179444d95dabed1ef9890365d7919009cb3a0Convert68237102021-11-11 21:11:5126 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.01050882525
0x8040c051e6c78cb05edc47542e5992783148569c752b5d3fd1bc63d1b3591b8eConvert68237072021-11-11 21:11:4426 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.00675417525
0xa9d431868769b7c881a8d5a8d74b747b5494dc2ce9c9ddedf1d91dc9f8019792Convert68237042021-11-11 21:11:3826 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.0111646525
0x6ccbe8a64365acb9b98ac4e1065623f5f7a88fc9c41ea24735d9f3d6c4416bbfConvert68237012021-11-11 21:11:3026 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.01061252525
0x6aab760364ecdea2eba0796317269342b23ff0bb538d2e0c6725993c16a16ab5Convert68236972021-11-11 21:11:2426 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.01111517525
0xfe217248061f0b8a808907c113c8a849d622707bde129a6a33f5dfa40f85489bConvert68236962021-11-11 21:11:1926 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.00585597525
0x4588938d24c530c7052e4a0c12f498672e046e37d15d34715350ca25d6ec62cfConvert68236922021-11-11 21:11:1426 days 19 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.0082217525
0x75ef5dbfe90446b6104552efdba99d1a8ddc7bf9e7c1994f947fa3195621b433Convert68207492021-11-11 19:31:5626 days 21 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.00793012255425.377366666
0x67aa41f4a75f4e34ab29dbd4111fbaea9c7d9f67ba1520ea65a2b87b18117c56Convert68207442021-11-11 19:31:4426 days 21 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.00795202525
0x002a3313c125a5d78fbb37e972dadd86ea057f772ac6274b84d2b8edcff7f12eConvert68207412021-11-11 19:31:3926 days 21 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.00802362525
0x5bd40bb695c78bae52660b89dcdfa3af6b3e4645f6f1bb33042b864fa60ba62dConvert68207382021-11-11 19:31:3326 days 21 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.007651225
0x6fd44b4e52b58e41c09438bb65acd4dbf0c825fbbef9e494c8cc4ef4248c392aConvert68207342021-11-11 19:31:2626 days 21 hrs ago0x79b2bedcf73788a1601fb0bebe88e2c60ac2fea9 IN  0x861726bfe27931a4e22a7277bde6cb8432b658560 AVAX0.007922325
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JoeMaker

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-06
*/

// File: contracts/libraries/SafeMath.sol

// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

// a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a + b) >= b, "SafeMath: Add Overflow");
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a - b) <= a, "SafeMath: Underflow");
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b == 0 || (c = a * b) / b == a, "SafeMath: Mul Overflow");
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b > 0, "SafeMath: Div by Zero");
        c = a / b;
    }

    function to128(uint256 a) internal pure returns (uint128 c) {
        require(a <= uint128(-1), "SafeMath: uint128 Overflow");
        c = uint128(a);
    }
}

library SafeMath128 {
    function add(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a + b) >= b, "SafeMath: Add Overflow");
    }

    function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a - b) <= a, "SafeMath: Underflow");
    }
}

// File: contracts/interfaces/IERC20.sol

pragma solidity 0.6.12;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    // EIP 2612
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}

// File: contracts/libraries/SafeERC20.sol

pragma solidity 0.6.12;


library SafeERC20 {
    function safeSymbol(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(
            abi.encodeWithSelector(0x95d89b41)
        );
        return success && data.length > 0 ? abi.decode(data, (string)) : "???";
    }

    function safeName(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(
            abi.encodeWithSelector(0x06fdde03)
        );
        return success && data.length > 0 ? abi.decode(data, (string)) : "???";
    }

    function safeDecimals(IERC20 token) public view returns (uint8) {
        (bool success, bytes memory data) = address(token).staticcall(
            abi.encodeWithSelector(0x313ce567)
        );
        return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;
    }

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(0xa9059cbb, to, amount)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "SafeERC20: Transfer failed"
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(
            abi.encodeWithSelector(0x23b872dd, from, address(this), amount)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "SafeERC20: TransferFrom failed"
        );
    }
}

// File: contracts/traderjoe/interfaces/IJoeERC20.sol


pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

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

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

// File: contracts/traderjoe/interfaces/IJoePair.sol


pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

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

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// File: contracts/traderjoe/interfaces/IJoeFactory.sol


pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function migrator() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function setMigrator(address) external;
}

// File: contracts/boringcrypto/BoringOwnable.sol

pragma solidity 0.6.12;

// Audit on 5-Jan-2021 by Keno and BoringCrypto
// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol
// Edited by BoringCrypto

contract BoringOwnableData {
    address public owner;
    address public pendingOwner;
}

contract BoringOwnable is BoringOwnableData {
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /// @notice `owner` defaults to msg.sender on construction.
    constructor() public {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    /// @notice Transfers ownership to `newOwner`. Either directly or claimable by the new pending owner.
    /// Can only be invoked by the current `owner`.
    /// @param newOwner Address of the new owner.
    /// @param direct True if `newOwner` should be set immediately. False if `newOwner` needs to use `claimOwnership`.
    /// @param renounce Allows the `newOwner` to be `address(0)` if `direct` and `renounce` is True. Has no effect otherwise.
    function transferOwnership(
        address newOwner,
        bool direct,
        bool renounce
    ) public onlyOwner {
        if (direct) {
            // Checks
            require(
                newOwner != address(0) || renounce,
                "Ownable: zero address"
            );

            // Effects
            emit OwnershipTransferred(owner, newOwner);
            owner = newOwner;
            pendingOwner = address(0);
        } else {
            // Effects
            pendingOwner = newOwner;
        }
    }

    /// @notice Needs to be called by `pendingOwner` to claim ownership.
    function claimOwnership() public {
        address _pendingOwner = pendingOwner;

        // Checks
        require(
            msg.sender == _pendingOwner,
            "Ownable: caller != pending owner"
        );

        // Effects
        emit OwnershipTransferred(owner, _pendingOwner);
        owner = _pendingOwner;
        pendingOwner = address(0);
    }

    /// @notice Only allows the `owner` to execute the function.
    modifier onlyOwner() {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        _;
    }
}

// File: contracts/JoeMaker.sol


// P1 - P3: OK
pragma solidity 0.6.12;







// JoeMaker is MasterJoe's left hand and kinda a wizard. He can cook up Joe from pretty much anything!
// This contract handles "serving up" rewards for xJoe holders by trading tokens collected from fees for Joe.

// T1 - T4: OK
contract JoeMaker is BoringOwnable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    // V1 - V5: OK
    IJoeFactory public immutable factory;
    //0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac
    // V1 - V5: OK
    address public immutable bar;
    //0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272
    // V1 - V5: OK
    address private immutable joe;
    //0x6B3595068778DD592e39A122f4f5a5cF09C90fE2
    // V1 - V5: OK
    address private immutable wavax;
    //0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

    // V1 - V5: OK
    mapping(address => address) internal _bridges;

    // E1: OK
    event LogBridgeSet(address indexed token, address indexed bridge);
    // E1: OK
    event LogConvert(
        address indexed server,
        address indexed token0,
        address indexed token1,
        uint256 amount0,
        uint256 amount1,
        uint256 amountJOE
    );

    constructor(
        address _factory,
        address _bar,
        address _joe,
        address _wavax
    ) public {
        factory = IJoeFactory(_factory);
        bar = _bar;
        joe = _joe;
        wavax = _wavax;
    }

    // F1 - F10: OK
    // C1 - C24: OK
    function bridgeFor(address token) public view returns (address bridge) {
        bridge = _bridges[token];
        if (bridge == address(0)) {
            bridge = wavax;
        }
    }

    // F1 - F10: OK
    // C1 - C24: OK
    function setBridge(address token, address bridge) external onlyOwner {
        // Checks
        require(
            token != joe && token != wavax && token != bridge,
            "JoeMaker: Invalid bridge"
        );

        // Effects
        _bridges[token] = bridge;
        emit LogBridgeSet(token, bridge);
    }

    // M1 - M5: OK
    // C1 - C24: OK
    // C6: It's not a fool proof solution, but it prevents flash loans, so here it's ok to use tx.origin
    modifier onlyEOA() {
        // Try to make flash-loan exploit harder to do by only allowing externally owned addresses.
        require(msg.sender == tx.origin, "JoeMaker: must use EOA");
        _;
    }

    // F1 - F10: OK
    // F3: _convert is separate to save gas by only checking the 'onlyEOA' modifier once in case of convertMultiple
    // F6: There is an exploit to add lots of JOE to the bar, run convert, then remove the JOE again.
    //     As the size of the JoeBar has grown, this requires large amounts of funds and isn't super profitable anymore
    //     The onlyEOA modifier prevents this being done with a flash loan.
    // C1 - C24: OK
    function convert(address token0, address token1) external onlyEOA() {
        _convert(token0, token1);
    }

    // F1 - F10: OK, see convert
    // C1 - C24: OK
    // C3: Loop is under control of the caller
    function convertMultiple(
        address[] calldata token0,
        address[] calldata token1
    ) external onlyEOA() {
        // TODO: This can be optimized a fair bit, but this is safer and simpler for now
        uint256 len = token0.length;
        for (uint256 i = 0; i < len; i++) {
            _convert(token0[i], token1[i]);
        }
    }

    // F1 - F10: OK
    // C1- C24: OK
    function _convert(address token0, address token1) internal {
        // Interactions
        // S1 - S4: OK
        IJoePair pair = IJoePair(factory.getPair(token0, token1));
        require(address(pair) != address(0), "JoeMaker: Invalid pair");
        // balanceOf: S1 - S4: OK
        // transfer: X1 - X5: OK
        IERC20(address(pair)).safeTransfer(
            address(pair),
            pair.balanceOf(address(this))
        );
        // X1 - X5: OK
        (uint256 amount0, uint256 amount1) = pair.burn(address(this));
        if (token0 != pair.token0()) {
            (amount0, amount1) = (amount1, amount0);
        }
        emit LogConvert(
            msg.sender,
            token0,
            token1,
            amount0,
            amount1,
            _convertStep(token0, token1, amount0, amount1)
        );
    }

    // F1 - F10: OK
    // C1 - C24: OK
    // All safeTransfer, _swap, _toJOE, _convertStep: X1 - X5: OK
    function _convertStep(
        address token0,
        address token1,
        uint256 amount0,
        uint256 amount1
    ) internal returns (uint256 joeOut) {
        // Interactions
        if (token0 == token1) {
            uint256 amount = amount0.add(amount1);
            if (token0 == joe) {
                IERC20(joe).safeTransfer(bar, amount);
                joeOut = amount;
            } else if (token0 == wavax) {
                joeOut = _toJOE(wavax, amount);
            } else {
                address bridge = bridgeFor(token0);
                amount = _swap(token0, bridge, amount, address(this));
                joeOut = _convertStep(bridge, bridge, amount, 0);
            }
        } else if (token0 == joe) {
            // eg. JOE - AVAX
            IERC20(joe).safeTransfer(bar, amount0);
            joeOut = _toJOE(token1, amount1).add(amount0);
        } else if (token1 == joe) {
            // eg. USDT - JOE
            IERC20(joe).safeTransfer(bar, amount1);
            joeOut = _toJOE(token0, amount0).add(amount1);
        } else if (token0 == wavax) {
            // eg. AVAX - USDC
            joeOut = _toJOE(
                wavax,
                _swap(token1, wavax, amount1, address(this)).add(amount0)
            );
        } else if (token1 == wavax) {
            // eg. USDT - AVAX
            joeOut = _toJOE(
                wavax,
                _swap(token0, wavax, amount0, address(this)).add(amount1)
            );
        } else {
            // eg. MIC - USDT
            address bridge0 = bridgeFor(token0);
            address bridge1 = bridgeFor(token1);
            if (bridge0 == token1) {
                // eg. MIC - USDT - and bridgeFor(MIC) = USDT
                joeOut = _convertStep(
                    bridge0,
                    token1,
                    _swap(token0, bridge0, amount0, address(this)),
                    amount1
                );
            } else if (bridge1 == token0) {
                // eg. WBTC - DSD - and bridgeFor(DSD) = WBTC
                joeOut = _convertStep(
                    token0,
                    bridge1,
                    amount0,
                    _swap(token1, bridge1, amount1, address(this))
                );
            } else {
                joeOut = _convertStep(
                    bridge0,
                    bridge1, // eg. USDT - DSD - and bridgeFor(DSD) = WBTC
                    _swap(token0, bridge0, amount0, address(this)),
                    _swap(token1, bridge1, amount1, address(this))
                );
            }
        }
    }

    // F1 - F10: OK
    // C1 - C24: OK
    // All safeTransfer, swap: X1 - X5: OK
    function _swap(
        address fromToken,
        address toToken,
        uint256 amountIn,
        address to
    ) internal returns (uint256 amountOut) {
        // Checks
        // X1 - X5: OK
        IJoePair pair = IJoePair(factory.getPair(fromToken, toToken));
        require(address(pair) != address(0), "JoeMaker: Cannot convert");

        // Interactions
        // X1 - X5: OK
        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
        uint256 amountInWithFee = amountIn.mul(997);
        if (fromToken == pair.token0()) {
            amountOut =
                amountIn.mul(997).mul(reserve1) /
                reserve0.mul(1000).add(amountInWithFee);
            IERC20(fromToken).safeTransfer(address(pair), amountIn);
            pair.swap(0, amountOut, to, new bytes(0));
            // TODO: Add maximum slippage?
        } else {
            amountOut =
                amountIn.mul(997).mul(reserve0) /
                reserve1.mul(1000).add(amountInWithFee);
            IERC20(fromToken).safeTransfer(address(pair), amountIn);
            pair.swap(amountOut, 0, to, new bytes(0));
            // TODO: Add maximum slippage?
        }
    }

    // F1 - F10: OK
    // C1 - C24: OK
    function _toJOE(address token, uint256 amountIn)
        internal
        returns (uint256 amountOut)
    {
        // X1 - X5: OK
        amountOut = _swap(token, joe, amountIn, bar);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_bar","type":"address"},{"internalType":"address","name":"_joe","type":"address"},{"internalType":"address","name":"_wavax","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bridge","type":"address"}],"name":"LogBridgeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"server","type":"address"},{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountJOE","type":"uint256"}],"name":"LogConvert","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"bar","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"bridgeFor","outputs":[{"internalType":"address","name":"bridge","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"convert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"token0","type":"address[]"},{"internalType":"address[]","name":"token1","type":"address[]"}],"name":"convertMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IJoeFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61010060405234801561001157600080fd5b506040516117b33803806117b38339818101604052608081101561003457600080fd5b5080516020820151604080840151606090940151600080546001600160a01b0319163390811782559251949593949192917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606094851b811660805292841b831660a05290831b821660c05290911b1660e05260805160601c60a05160601c60c05160601c60e05160601c611650610163600039806105c352806106e15280610cdb5280610d185280610ebd5280610efa5280610f235280610f505280610f8d5280610fb65250806105865280610c455280610c8a5280610d785280610dbd5280610e215280610e6652806110e95250806107965280610cac5280610ddf5280610e88528061110b52508061076352806107bc528061113b52506116506000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063a761a93911610066578063a761a939146101f7578063bd1b820c1461021d578063c45a01551461024b578063e30c397814610253578063febb0f7e1461025b5761009e565b8063078dfbe7146100a3578063303e6aa4146100db5780634e71e0c81461019d5780638da5cb5b146101a55780639d22ae8c146101c9575b600080fd5b6100d9600480360360608110156100b957600080fd5b506001600160a01b03813516906020810135151590604001351515610263565b005b6100d9600480360360408110156100f157600080fd5b81019060208101813564010000000081111561010c57600080fd5b82018360208201111561011e57600080fd5b8035906020019184602083028401116401000000008311171561014057600080fd5b91939092909160208101903564010000000081111561015e57600080fd5b82018360208201111561017057600080fd5b8035906020019184602083028401116401000000008311171561019257600080fd5b5090925090506103ab565b6100d9610454565b6101ad610516565b604080516001600160a01b039092168252519081900360200190f35b6100d9600480360360408110156101df57600080fd5b506001600160a01b0381358116916020013516610525565b6101ad6004803603602081101561020d57600080fd5b50356001600160a01b03166106be565b6100d96004803603604081101561023357600080fd5b506001600160a01b0381358116916020013516610706565b6101ad610761565b6101ad610785565b6101ad610794565b6000546001600160a01b031633146102c2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b811561038a576001600160a01b0383161515806102dc5750805b610325576040805162461bcd60e51b81526020600482015260156024820152744f776e61626c653a207a65726f206164647265737360581b604482015290519081900360640190fd5b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b0319918216179091556001805490911690556103a6565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b3332146103f8576040805162461bcd60e51b81526020600482015260166024820152754a6f654d616b65723a206d7573742075736520454f4160501b604482015290519081900360640190fd5b8260005b8181101561044c5761044486868381811061041357fe5b905060200201356001600160a01b031685858481811061042f57fe5b905060200201356001600160a01b03166107b8565b6001016103fc565b505050505050565b6001546001600160a01b03163381146104b4576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6000546001600160a01b031681565b6000546001600160a01b03163314610584576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580156105f857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156106165750806001600160a01b0316826001600160a01b031614155b610667576040805162461bcd60e51b815260206004820152601860248201527f4a6f654d616b65723a20496e76616c6964206272696467650000000000000000604482015290519081900360640190fd5b6001600160a01b0382811660008181526002602052604080822080546001600160a01b0319169486169485179055517f2e103aa707acc565f9a1547341914802b2bfe977fd79c595209f248ae4b006139190a35050565b6001600160a01b03808216600090815260026020526040902054168061070157507f00000000000000000000000000000000000000000000000000000000000000005b919050565b333214610753576040805162461bcd60e51b81526020600482015260166024820152754a6f654d616b65723a206d7573742075736520454f4160501b604482015290519081900360640190fd5b61075d82826107b8565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a4390584846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561083857600080fd5b505afa15801561084c573d6000803e3d6000fd5b505050506040513d602081101561086257600080fd5b505190506001600160a01b0381166108ba576040805162461bcd60e51b81526020600482015260166024820152752537b2a6b0b5b2b91d1024b73b30b634b2103830b4b960511b604482015290519081900360640190fd5b61094881826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561090b57600080fd5b505afa15801561091f573d6000803e3d6000fd5b505050506040513d602081101561093557600080fd5b50516001600160a01b0384169190610aaf565b600080826001600160a01b03166389afcb44306040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506040805180830381600087803b15801561099957600080fd5b505af11580156109ad573d6000803e3d6000fd5b505050506040513d60408110156109c357600080fd5b50805160209182015160408051630dfe168160e01b815290519295509093506001600160a01b03861692630dfe168192600480840193829003018186803b158015610a0d57600080fd5b505afa158015610a21573d6000803e3d6000fd5b505050506040513d6020811015610a3757600080fd5b50516001600160a01b03868116911614610a4d57905b6001600160a01b03808516908616337fd06b1d7ed79b664d17472c6f6997b929f1abe463ccccb4e5b6a0038f2f730c158585610a8b8b8b8484610c19565b60408051938452602084019290925282820152519081900360600190a45050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310610b2c5780518252601f199092019160209182019101610b0d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610b8e576040519150601f19603f3d011682016040523d82523d6000602084013e610b93565b606091505b5091509150818015610bc1575080511580610bc15750808060200190516020811015610bbe57600080fd5b50515b610c12576040805162461bcd60e51b815260206004820152601a60248201527f5361666545524332303a205472616e73666572206661696c6564000000000000604482015290519081900360640190fd5b5050505050565b6000836001600160a01b0316856001600160a01b03161415610d76576000610c41848461108a565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161415610cd957610cd16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083610aaf565b809150610d70565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161415610d4457610d3d7f0000000000000000000000000000000000000000000000000000000000000000826110e1565b9150610d70565b6000610d4f876106be565b9050610d5d87828430611136565b9150610d6c8182846000610c19565b9250505b50611082565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415610e1f57610e046001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000085610aaf565b610e1883610e1286856110e1565b9061108a565b9050611082565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415610ebb57610ead6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000084610aaf565b610e1882610e1287866110e1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415610f4e57610e187f0000000000000000000000000000000000000000000000000000000000000000610f4985610e12887f00000000000000000000000000000000000000000000000000000000000000008830611136565b6110e1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415610fdc57610e187f0000000000000000000000000000000000000000000000000000000000000000610f4984610e12897f00000000000000000000000000000000000000000000000000000000000000008930611136565b6000610fe7866106be565b90506000610ff4866106be565b9050856001600160a01b0316826001600160a01b0316141561102e5761102782876110218a868a30611136565b87610c19565b925061107f565b866001600160a01b0316816001600160a01b0316141561105f5761102787828761105a8a868a30611136565b610c19565b61107c82826110708a868a30611136565b61105a8a868a30611136565b92505b50505b949350505050565b818101818110156110db576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a20416464204f766572666c6f7760501b604482015290519081900360640190fd5b92915050565b600061112f837f0000000000000000000000000000000000000000000000000000000000000000847f0000000000000000000000000000000000000000000000000000000000000000611136565b9392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a4390587876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156111b757600080fd5b505afa1580156111cb573d6000803e3d6000fd5b505050506040513d60208110156111e157600080fd5b505190506001600160a01b038116611240576040805162461bcd60e51b815260206004820152601860248201527f4a6f654d616b65723a2043616e6e6f7420636f6e766572740000000000000000604482015290519081900360640190fd5b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561127c57600080fd5b505afa158015611290573d6000803e3d6000fd5b505050506040513d60608110156112a657600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060006112d4876103e56115b5565b9050836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d602081101561133957600080fd5b50516001600160a01b038a8116911614156114805761135e81610e12856103e86115b5565b6113748361136e8a6103e56115b5565b906115b5565b8161137b57fe5b0494506113926001600160a01b038a168589610aaf565b604080516000808252602082019283905263022c0d9f60e01b835260248201818152604483018990526001600160a01b038a81166064850152608060848501908152845160a48601819052918a169563022c0d9f958c948e9491939092909160c4850191908083838b5b838110156114145781810151838201526020016113fc565b50505050905090810190601f1680156114415780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561146357600080fd5b505af1158015611477573d6000803e3d6000fd5b505050506115a9565b61149081610e12846103e86115b5565b6114a08461136e8a6103e56115b5565b816114a757fe5b0494506114be6001600160a01b038a168589610aaf565b604080516000808252602082019283905263022c0d9f60e01b835260248201888152604483018290526001600160a01b038a81166064850152608060848501908152845160a48601819052918a169563022c0d9f958c95948e9491939092909160c4850191908083838a5b83811015611541578181015183820152602001611529565b50505050905090810190601f16801561156e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561159057600080fd5b505af11580156115a4573d6000803e3d6000fd5b505050505b50505050949350505050565b60008115806115d0575050808202828282816115cd57fe5b04145b6110db576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a204d756c204f766572666c6f7760501b604482015290519081900360640190fdfea2646970667358221220ee1b4d33d15996220d228513c8b6f2a0338fa62e83f6330f9a28795a38819de364736f6c634300060c00330000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa1000000000000000000000000057319d41f71e81f3c65f2a47ca4e001ebafd4f330000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

0000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa1000000000000000000000000057319d41f71e81f3c65f2a47ca4e001ebafd4f330000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Decoded View---------------
Arg [0] : _factory (address): 0x9ad6c38be94206ca50bb0d90783181662f0cfa10
Arg [1] : _bar (address): 0x57319d41f71e81f3c65f2a47ca4e001ebafd4f33
Arg [2] : _joe (address): 0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd
Arg [3] : _wavax (address): 0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa10
Arg [1] : 00000000000000000000000057319d41f71e81f3c65f2a47ca4e001ebafd4f33
Arg [2] : 0000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd
Arg [3] : 000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7


Deployed ByteCode Sourcemap

12140:8459:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10604:555;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10604:555:0;;;;;;;;;;;;;;;;;:::i;:::-;;14987:360;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14987:360:0;;-1:-1:-1;14987:360:0;-1:-1:-1;14987:360:0;:::i;11241:377::-;;;:::i;9725:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;9725:20:0;;;;;;;;;;;;;;13603:330;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13603:330:0;;;;;;;;;;:::i;13362:191::-;;;;;;;;;;;;;;;;-1:-1:-1;13362:191:0;-1:-1:-1;;;;;13362:191:0;;:::i;14765:111::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14765:111:0;;;;;;;;;;:::i;12270:36::-;;;:::i;9752:27::-;;;:::i;12383:28::-;;;:::i;10604:555::-;11746:5;;-1:-1:-1;;;;;11746:5:0;11732:10;:19;11724:64;;;;;-1:-1:-1;;;11724:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10743:6:::1;10739:413;;;-1:-1:-1::0;;;;;10815:22:0;::::1;::::0;::::1;::::0;:34:::1;;;10841:8;10815:34;10789:117;;;::::0;;-1:-1:-1;;;10789:117:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;10789:117:0;;;;;;;;;;;;;::::1;;10973:5;::::0;;10952:37:::1;::::0;-1:-1:-1;;;;;10952:37:0;;::::1;::::0;10973:5;::::1;::::0;10952:37:::1;::::0;::::1;11004:5;:16:::0;;-1:-1:-1;;;;;11004:16:0;::::1;-1:-1:-1::0;;;;;;11004:16:0;;::::1;;::::0;;;;11035:25;;;;::::1;::::0;;10739:413:::1;;;11117:12;:23:::0;;-1:-1:-1;;;;;;11117:23:0::1;-1:-1:-1::0;;;;;11117:23:0;::::1;;::::0;;10739:413:::1;10604:555:::0;;;:::o;14987:360::-;14227:10;14241:9;14227:23;14219:58;;;;;-1:-1:-1;;;14219:58:0;;;;;;;;;;;;-1:-1:-1;;;14219:58:0;;;;;;;;;;;;;;;15225:6;15211:11:::1;15249:91;15273:3;15269:1;:7;15249:91;;;15298:30;15307:6;;15314:1;15307:9;;;;;;;;;;;;;-1:-1:-1::0;;;;;15307:9:0::1;15318:6;;15325:1;15318:9;;;;;;;;;;;;;-1:-1:-1::0;;;;;15318:9:0::1;15298:8;:30::i;:::-;15278:3;;15249:91;;;;14288:1;14987:360:::0;;;;:::o;11241:377::-;11309:12;;-1:-1:-1;;;;;11309:12:0;11375:10;:27;;11353:109;;;;;-1:-1:-1;;;11353:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11521:5;;;11500:42;;-1:-1:-1;;;;;11500:42:0;;;;11521:5;;;11500:42;;;11553:5;:21;;-1:-1:-1;;;;;11553:21:0;;;-1:-1:-1;;;;;;11553:21:0;;;;;;;11585:25;;;;;;;11241:377::o;9725:20::-;;;-1:-1:-1;;;;;9725:20:0;;:::o;13603:330::-;11746:5;;-1:-1:-1;;;;;11746:5:0;11732:10;:19;11724:64;;;;;-1:-1:-1;;;11724:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13733:3:::1;-1:-1:-1::0;;;;;13724:12:0::1;:5;-1:-1:-1::0;;;;;13724:12:0::1;;;:30;;;;;13749:5;-1:-1:-1::0;;;;;13740:14:0::1;:5;-1:-1:-1::0;;;;;13740:14:0::1;;;13724:30;:49;;;;;13767:6;-1:-1:-1::0;;;;;13758:15:0::1;:5;-1:-1:-1::0;;;;;13758:15:0::1;;;13724:49;13702:123;;;::::0;;-1:-1:-1;;;13702:123:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;13858:15:0;;::::1;;::::0;;;:8:::1;:15;::::0;;;;;:24;;-1:-1:-1;;;;;;13858:24:0::1;::::0;;::::1;::::0;;::::1;::::0;;13898:27;::::1;::::0;13858:15;13898:27:::1;13603:330:::0;;:::o;13362:191::-;-1:-1:-1;;;;;13453:15:0;;;13417:14;13453:15;;;:8;:15;;;;;;;13483:20;13479:67;;-1:-1:-1;13529:5:0;13479:67;13362:191;;;:::o;14765:111::-;14227:10;14241:9;14227:23;14219:58;;;;;-1:-1:-1;;;14219:58:0;;;;;;;;;;;;-1:-1:-1;;;14219:58:0;;;;;;;;;;;;;;;14844:24:::1;14853:6;14861;14844:8;:24::i;:::-;14765:111:::0;;:::o;12270:36::-;;;:::o;9752:27::-;;;-1:-1:-1;;;;;9752:27:0;;:::o;12383:28::-;;;:::o;15396:864::-;15515:13;15540:7;-1:-1:-1;;;;;15540:15:0;;15556:6;15564;15540:31;;;;;;;;;;;;;-1:-1:-1;;;;;15540:31:0;;;;;;-1:-1:-1;;;;;15540:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15540:31:0;;-1:-1:-1;;;;;;15591:27:0;;15583:62;;;;;-1:-1:-1;;;15583:62:0;;;;;;;;;;;;-1:-1:-1;;;15583:62:0;;;;;;;;;;;;;;;15725:117;15782:4;15802;-1:-1:-1;;;;;15802:14:0;;15825:4;15802:29;;;;;;;;;;;;;-1:-1:-1;;;;;15802:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15802:29:0;-1:-1:-1;;;;;15725:34:0;;;:117;:34;:117::i;:::-;15878:15;15895;15914:4;-1:-1:-1;;;;;15914:9:0;;15932:4;15914:24;;;;;;;;;;;;;-1:-1:-1;;;;;15914:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15914:24:0;;;;;;;;15963:13;;-1:-1:-1;;;15963:13:0;;;;15914:24;;-1:-1:-1;15914:24:0;;-1:-1:-1;;;;;;15963:11:0;;;;;:13;;;;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15963:13:0;-1:-1:-1;;;;;15953:23:0;;;;;;15949:95;;16015:7;15949:95;-1:-1:-1;;;;;16059:193:0;;;;;;16084:10;16059:193;16151:7;16173;16195:46;16109:6;16130;16151:7;16173;16195:12;:46::i;:::-;16059:193;;;;;;;;;;;;;;;;;;;;;;;;;;15396:864;;;;;:::o;3184:397::-;3372:46;;;-1:-1:-1;;;;;3372:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3372:46:0;-1:-1:-1;;;3372:46:0;;;3338:91;;;;3303:12;;3317:17;;3338:19;;;;3372:46;3338:91;;;3372:46;3338:91;;3372:46;3338:91;;;;;;;;;;-1:-1:-1;;3338:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3302:127;;;;3462:7;:57;;;;-1:-1:-1;3474:11:0;;:16;;:44;;;3505:4;3494:24;;;;;;;;;;;;;;;-1:-1:-1;3494:24:0;3474:44;3440:133;;;;;-1:-1:-1;;;3440:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3184:397;;;;;:::o;16377:2665::-;16526:14;16592:6;-1:-1:-1;;;;;16582:16:0;:6;-1:-1:-1;;;;;16582:16:0;;16578:2457;;;16615:14;16632:20;:7;16644;16632:11;:20::i;:::-;16615:37;;16681:3;-1:-1:-1;;;;;16671:13:0;:6;-1:-1:-1;;;;;16671:13:0;;16667:431;;;16705:37;-1:-1:-1;;;;;16712:3:0;16705:24;16730:3;16735:6;16705:24;:37::i;:::-;16770:6;16761:15;;16667:431;;;16812:5;-1:-1:-1;;;;;16802:15:0;:6;-1:-1:-1;;;;;16802:15:0;;16798:300;;;16847:21;16854:5;16861:6;16847;:21::i;:::-;16838:30;;16798:300;;;16909:14;16926:17;16936:6;16926:9;:17::i;:::-;16909:34;;16971:44;16977:6;16985;16993;17009:4;16971:5;:44::i;:::-;16962:53;;17043:39;17056:6;17064;17072;17080:1;17043:12;:39::i;:::-;17034:48;;16798:300;;16578:2457;;;;17129:3;-1:-1:-1;;;;;17119:13:0;:6;-1:-1:-1;;;;;17119:13:0;;17115:1920;;;17180:38;-1:-1:-1;;;;;17187:3:0;17180:24;17205:3;17210:7;17180:24;:38::i;:::-;17242:36;17270:7;17242:23;17249:6;17257:7;17242:6;:23::i;:::-;:27;;:36::i;:::-;17233:45;;17115:1920;;;17310:3;-1:-1:-1;;;;;17300:13:0;:6;-1:-1:-1;;;;;17300:13:0;;17296:1739;;;17361:38;-1:-1:-1;;;;;17368:3:0;17361:24;17386:3;17391:7;17361:24;:38::i;:::-;17423:36;17451:7;17423:23;17430:6;17438:7;17423:6;:23::i;17296:1739::-;17491:5;-1:-1:-1;;;;;17481:15:0;:6;-1:-1:-1;;;;;17481:15:0;;17477:1558;;;17554:121;17579:5;17603:57;17652:7;17603:44;17609:6;17617:5;17624:7;17641:4;17603:5;:44::i;:57::-;17554:6;:121::i;17477:1558::-;17707:5;-1:-1:-1;;;;;17697:15:0;:6;-1:-1:-1;;;;;17697:15:0;;17693:1342;;;17770:121;17795:5;17819:57;17868:7;17819:44;17825:6;17833:5;17840:7;17857:4;17819:5;:44::i;17693:1342::-;17955:15;17973:17;17983:6;17973:9;:17::i;:::-;17955:35;;18005:15;18023:17;18033:6;18023:9;:17::i;:::-;18005:35;;18070:6;-1:-1:-1;;;;;18059:17:0;:7;-1:-1:-1;;;;;18059:17:0;;18055:969;;;18169:189;18204:7;18234:6;18263:46;18269:6;18277:7;18286;18303:4;18263:5;:46::i;:::-;18332:7;18169:12;:189::i;:::-;18160:198;;18055:969;;;18395:6;-1:-1:-1;;;;;18384:17:0;:7;-1:-1:-1;;;;;18384:17:0;;18380:644;;;18494:189;18529:6;18558:7;18588;18618:46;18624:6;18632:7;18641;18658:4;18618:5;:46::i;:::-;18494:12;:189::i;18380:644::-;18733:275;18768:7;18798;18874:46;18880:6;18888:7;18897;18914:4;18874:5;:46::i;:::-;18943;18949:6;18957:7;18966;18983:4;18943:5;:46::i;18733:275::-;18724:284;;18380:644;17693:1342;;;16377:2665;;;;;;:::o;256:139::-;349:5;;;344:16;;;;336:51;;;;;-1:-1:-1;;;336:51:0;;;;;;;;;;;;-1:-1:-1;;;336:51:0;;;;;;;;;;;;;;;256:139;;;;:::o;20400:196::-;20485:17;20556:32;20562:5;20569:3;20574:8;20584:3;20556:5;:32::i;:::-;20544:44;20400:196;-1:-1:-1;;;20400:196:0:o;19136:1214::-;19278:17;19351:13;19376:7;-1:-1:-1;;;;;19376:15:0;;19392:9;19403:7;19376:35;;;;;;;;;;;;;-1:-1:-1;;;;;19376:35:0;;;;;;-1:-1:-1;;;;;19376:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19376:35:0;;-1:-1:-1;;;;;;19431:27:0;;19423:64;;;;;-1:-1:-1;;;19423:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19550:16;19568;19590:4;-1:-1:-1;;;;;19590:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19590:18:0;;;;;;;19549:59;;;;;-1:-1:-1;19549:59:0;;-1:-1:-1;19619:23:0;19645:17;:8;19658:3;19645:12;:17::i;:::-;19619:43;;19690:4;-1:-1:-1;;;;;19690:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19690:13:0;-1:-1:-1;;;;;19677:26:0;;;;;;19673:670;;;19800:39;19823:15;19800:18;:8;19813:4;19800:12;:18::i;:39::-;19749:31;19771:8;19749:17;:8;19762:3;19749:12;:17::i;:::-;:21;;:31::i;:::-;:90;;;;;;;-1:-1:-1;19854:55:0;-1:-1:-1;;;;;19854:30:0;;19893:4;19900:8;19854:30;:55::i;:::-;19952:12;;;19934:1;19952:12;;;;;;;;;;-1:-1:-1;;;19924:41:0;;;;;;;;;;;;;;-1:-1:-1;;;;;19924:41:0;;;;;;;;;;;;;;;;;;;;;;:9;;;;;;19937;;19948:2;;19952:12;;19924:41;;;;;;;;19952:12;19924:41;;19952:12;19934:1;19924:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19673:670;;;20122:39;20145:15;20122:18;:8;20135:4;20122:12;:18::i;:39::-;20071:31;20093:8;20071:17;:8;20084:3;20071:12;:17::i;:31::-;:90;;;;;;;-1:-1:-1;20176:55:0;-1:-1:-1;;;;;20176:30:0;;20215:4;20222:8;20176:30;:55::i;:::-;20274:12;;;20267:1;20274:12;;;;;;;;;;-1:-1:-1;;;20246:41:0;;;;;;;;;;;;;;-1:-1:-1;;;;;20246:41:0;;;;;;;;;;;;;;;;;;;;;;:9;;;;;;20256;;20267:1;20270:2;;20274:12;;20246:41;;;;;;;;20274:12;20246:41;;20274:12;20267:1;20246:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19673:670;19136:1214;;;;;;;;;;:::o;547:153::-;605:9;635:6;;;:30;;-1:-1:-1;;650:5:0;;;664:1;659;650:5;659:1;645:15;;;;;:20;635:30;627:65;;;;;-1:-1:-1;;;627:65:0;;;;;;;;;;;;-1:-1:-1;;;627:65:0;;;;;;;;;;;;;

Swarm Source

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