Contract 0xaC97153e7ce86fB3e61681b969698AF7C22b4B12 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe541511f0f3eea6fc3a3e24f14423def2d22e3446767c5487205642dc13a5622Approve586774032023-03-30 1:19:573 hrs 41 mins ago0x38ab641b733d543fe1d960e2acb0159931fd6330 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.000845730137
0x310e91f5a405fb4d4ee2359668be8f95bc2160ee31a6913612bf29c5bc632ef7Approve586772732023-03-30 1:17:333 hrs 44 mins ago0x38ab641b733d543fe1d960e2acb0159931fd6330 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.000848648255
0xc40af7ed327fbf59998c2771c83923279eed108a8e0a068c118f27df65fc2bb1Approve586770622023-03-30 1:13:103 hrs 48 mins ago0x38ab641b733d543fe1d960e2acb0159931fd6330 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.00146564183
0x8cfa5953e5669482f1bc4457001995d87ab585416febb64897dcbe38f8e4082eApprove586736472023-03-29 23:53:595 hrs 7 mins ago0x3ded20bc20ffbdcf97d77ed9011bde510f41cd25 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001213693316
0x1a21e2d4b4fa2c6c9d5a3656d6a1d80a77724a9b6bf36fa4c4bb4f4d537c7709Approve586621432023-03-29 20:08:568 hrs 52 mins ago0x535b3f552ba493242e9ad32a292c09d47fc1e155 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001596516351
0x06cced8050bde4a376464bc9f3b6ccd1d32fd346e6c0bf9e90aa9b8a44a0ca22Approve586559242023-03-29 18:00:2211 hrs 1 min ago0x5d56c71d0f55184d7fa5e1c0e02a18fd9e2092bf IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001318323464
0x58b4b3eb903e9b3e3aff95c97be8e6c4b7dbbedffc680f92075a397ccf3d67b5Approve586524992023-03-29 16:50:5712 hrs 10 mins ago0x085a5c72a77849580b9aa5cbadadce8af2699237 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.00143874534
0xfab92a95793268227124ce428a7c3d87ed7110c2da1bca482fe7ed9c129f299bApprove586507602023-03-29 16:15:1212 hrs 46 mins ago0xadf44724617d891b933fab904cf6e939a167aa1f IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001406772432
0x482980d29c36240d2d405be5f536a8b8b811eead25da62caa44a0833ca8a668bApprove586492352023-03-29 15:40:1513 hrs 21 mins ago0x6f32b45a3b4ddf88c7460359b5de3747e2bc6093 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.00532565
0xf7da14115a1d66d169caf14843b90fa94a7a38464455f24e6c586e12ed595174Approve586440232023-03-29 13:46:4915 hrs 14 mins ago0xdec70f3147e51fd32987dc0df8667e06bd83a79d IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.000621057642
0xd04a7786ea9e6a3d5fe186c529fdd4e2eee927a43c9465b91e496d7b38b8cb9eApprove586334722023-03-29 10:17:4718 hrs 43 mins ago0xe149130b040450015446bf6fd4d05d45310dc18a IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001420054614
0x752e835ee509b8a284ac620b251a406f2f42009d77216b6829f58bae0f9ae0ffApprove586261842023-03-29 7:51:5521 hrs 9 mins ago0x90255ca9b363f9055abc6e9d15f4829754be2c8b IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.00139219706
0x1e71adf65dd6741f763e51f8c7687e609d38b13865bd9753624ffeaeb9c294b5Approve586170852023-03-29 4:50:441 day 10 mins ago0x3666f88c1994717c5e3427dae83c32d210a01ff4 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.000708409256
0x8514d5e990ee2ed4acc18e34cd1b9cd824c69911428567a1ce815917db32c84cApprove586122242023-03-29 2:52:071 day 2 hrs ago0xe124ac1d71ab774f31b884fefafd126a66e5b935 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001558518
0x2ee51ffe1363f7cc34823c44a5049f7b81117195a4667850023db5540f18d89eApprove586036362023-03-28 23:45:381 day 5 hrs ago0xc4df408ee9148e495855468efde16be79c4a422c IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001036054013
0x42404eb4852e7887ea08bc905d5e2d61614122e7c74564b400ea82f4bca127b5Approve585977122023-03-28 22:00:471 day 7 hrs ago0xd0fbbf7e5d7fbba3b2afd608415ada965a573481 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001273426293
0x7bba6a8e9c3edb0ee5c59240e476e3f123c6dfe32b5b9d71e65db75ffb5d26daApprove585976462023-03-28 21:58:511 day 7 hrs ago0xd0fbbf7e5d7fbba3b2afd608415ada965a573481 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.000757838411
0x99bb4394c019e7a08a7a064cd59efcc6de9febe87e356a4ed0ad1dafea0e554aApprove585976152023-03-28 21:58:151 day 7 hrs ago0xd0fbbf7e5d7fbba3b2afd608415ada965a573481 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.000757838411
0x707561429b45cc2091e558c80ac347955a15b67a8391a24a1f1b869e5abdc7a4Approve585782662023-03-28 15:54:531 day 13 hrs ago0x4b4eeba67de1f7046303307889d2845c1508d2e5 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.00146885299
0x2dc2d34d49f3e7447ce08eb5cb76cf69c2dda3316f8ffe771775e79add1fa590Approve585139062023-03-27 19:22:092 days 9 hrs ago0xbc4b54ec62063203d2c74302ef3770a1be17a381 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001905129754
0x79f30f6f915c928a47bb93339f91206b45ec04b3800237620d1ca6a664219eb5Approve585094892023-03-27 17:59:382 days 11 hrs ago0xcaa74debeae8b73de8a894e16ceef7625c69c7ff IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.003535339
0x50bad8d7910f3bb3b42c231c013cb979b6e8008d849e30824b427bd2b0337b22Approve584719522023-03-27 6:03:212 days 22 hrs ago0x9fc8bac108bbca48fab8e549b01ca68e1ff4faaf IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.00281017
0x0a53cab60f43aac9431d6569b53e2af6fada406361881d2b4048ad2d16317403Approve584425152023-03-26 20:31:033 days 8 hrs ago0x50f8e7c68ea646423e405a3f753aa53acbfb37ba IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001305971113
0x0d182ab3c0044464829bf6b7dc39830d68f49fb8b8a8b7c0ebb338ef6c0f3e85Approve584327702023-03-26 17:28:043 days 11 hrs ago0xbb322d152f6c5c218f64c94ddc5a81822bc90aa2 IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.001077563877
0x080e761f3af9e38d13551ea5e82ea4ce44f64d204052ee051c4cdc3fd2871655Approve583689792023-03-25 20:25:464 days 8 hrs ago0xe4b5c5ba071f4bbe03e4693b65cb8b48ea7cf46e IN  0xac97153e7ce86fb3e61681b969698af7c22b4b120 FTM0.002606280793
[ Download CSV Export 
Latest 2 internal transactions
Parent Txn Hash Block From To Value
0x3dfbc9c833bd45e4de5c572f2f94b6901367db673e27192ad5b2fde25e5d02be373356282022-05-01 14:26:19332 days 14 hrs ago 0x1cf1c4328c4e210cef6b782411a355003fba47b2 0xac97153e7ce86fb3e61681b969698af7c22b4b120.000000000001 FTM
0x05d3229f68ba5b8efdf02a5c0535d9c6de755531583456f16c132747f38dc33a289356252022-01-24 19:08:24429 days 9 hrs ago WigoSwap: Factory  Contract Creation0 FTM
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x280F2F0cC01B2fd1b10d830b5deAf2343a78D3D5

Contract Name:
WigoswapPair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2022-02-09
*/

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

interface IWigoswapCallee {
    function wigoswapCall(
        address sender,
        uint256 amount0,
        uint256 amount1,
        bytes calldata data
    ) external;
}

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

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

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

    function decimals() external view 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);
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

library SafeMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "ds-math-add-overflow");
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x, "ds-math-sub-underflow");
    }

    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow");
    }
}

library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}

library Math {
    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

contract WigoswapERC20 {
    using SafeMath for uint256;

    string public constant name = "Wigo LPs";
    string public constant symbol = "Wigo-LP";
    uint8 public constant decimals = 18;
    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    bytes32 public DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH =
        0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint256) public nonces;

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

    constructor() public {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)
            )
        );
    }

    function _mint(address to, uint256 value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint256 value) internal {
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _approve(
        address owner,
        address spender,
        uint256 value
    ) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) private {
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint256 value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint256 value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool) {
        if (allowance[from][msg.sender] != uint256(-1)) {
            allowance[from][msg.sender] = allowance[from][msg.sender].sub(
                value
            );
        }
        _transfer(from, to, value);
        return true;
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        require(deadline >= block.timestamp, "Wigoswap: EXPIRED");
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        owner,
                        spender,
                        value,
                        nonces[owner]++,
                        deadline
                    )
                )
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(
            recoveredAddress != address(0) && recoveredAddress == owner,
            "Wigoswap: INVALID_SIGNATURE"
        );
        _approve(owner, spender, value);
    }
}

contract WigoswapPair is WigoswapERC20 {
    using SafeMath for uint256;
    using UQ112x112 for uint224;

    uint256 public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant SELECTOR =
        bytes4(keccak256(bytes("transfer(address,uint256)")));

    address public factory;
    address public token0;
    address public token1;

    uint112 private reserve0; // uses single storage slot, accessible via getReserves
    uint112 private reserve1; // uses single storage slot, accessible via getReserves
    uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves

    uint256 public price0CumulativeLast;
    uint256 public price1CumulativeLast;
    uint256 public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event

    uint256 private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, "Wigoswap: LOCKED");
        unlocked = 0;
        _;
        unlocked = 1;
    }

    function getReserves()
        public
        view
        returns (
            uint112 _reserve0,
            uint112 _reserve1,
            uint32 _blockTimestampLast
        )
    {
        _reserve0 = reserve0;
        _reserve1 = reserve1;
        _blockTimestampLast = blockTimestampLast;
    }

    function _safeTransfer(
        address token,
        address to,
        uint256 value
    ) private {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(SELECTOR, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "Wigoswap: TRANSFER_FAILED"
        );
    }

    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);

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

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, "Wigoswap: FORBIDDEN"); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(
        uint256 balance0,
        uint256 balance1,
        uint112 _reserve0,
        uint112 _reserve1
    ) private {
        require(
            balance0 <= uint112(-1) && balance1 <= uint112(-1),
            "Wigoswap: OVERFLOW"
        );
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast +=
                uint256(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) *
                timeElapsed;
            price1CumulativeLast +=
                uint256(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) *
                timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

    // if fee is on, mint liquidity equivalent to 1/19 of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1)
        private
        returns (bool feeOn)
    {
        address feeTo = IWigoswapFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint256 _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint256 rootK = Math.sqrt(uint256(_reserve0).mul(_reserve1));
                uint256 rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint256 numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint256 denominator = rootK.mul(18).add(rootKLast);
                    uint256 liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint256 liquidity) {
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        uint256 balance0 = IERC20(token0).balanceOf(address(this));
        uint256 balance1 = IERC20(token1).balanceOf(address(this));
        uint256 amount0 = balance0.sub(_reserve0);
        uint256 amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
            _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
        } else {
            liquidity = Math.min(
                amount0.mul(_totalSupply) / _reserve0,
                amount1.mul(_totalSupply) / _reserve1
            );
        }
        require(liquidity > 0, "Wigoswap: INSUFFICIENT_LIQUIDITY_MINTED");
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Mint(msg.sender, amount0, amount1);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function burn(address to)
        external
        lock
        returns (uint256 amount0, uint256 amount1)
    {
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        uint256 balance0 = IERC20(_token0).balanceOf(address(this));
        uint256 balance1 = IERC20(_token1).balanceOf(address(this));
        uint256 liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution
        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution
        require(
            amount0 > 0 && amount1 > 0,
            "Wigoswap: INSUFFICIENT_LIQUIDITY_BURNED"
        );
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Burn(msg.sender, amount0, amount1, to);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external lock {
        require(
            amount0Out > 0 || amount1Out > 0,
            "Wigoswap: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        require(
            amount0Out < _reserve0 && amount1Out < _reserve1,
            "Wigoswap: INSUFFICIENT_LIQUIDITY"
        );

        uint256 balance0;
        uint256 balance1;
        {
            // scope for _token{0,1}, avoids stack too deep errors
            address _token0 = token0;
            address _token1 = token1;
            require(to != _token0 && to != _token1, "Wigoswap: INVALID_TO");
            if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
            if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
            if (data.length > 0)
                IWigoswapCallee(to).wigoswapCall(
                    msg.sender,
                    amount0Out,
                    amount1Out,
                    data
                );
            balance0 = IERC20(_token0).balanceOf(address(this));
            balance1 = IERC20(_token1).balanceOf(address(this));
        }
        uint256 amount0In = balance0 > _reserve0 - amount0Out
            ? balance0 - (_reserve0 - amount0Out)
            : 0;
        uint256 amount1In = balance1 > _reserve1 - amount1Out
            ? balance1 - (_reserve1 - amount1Out)
            : 0;
        require(
            amount0In > 0 || amount1In > 0,
            "Wigoswap: INSUFFICIENT_INPUT_AMOUNT"
        );
        {
            // scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint256 balance0Adjusted = balance0.mul(10000).sub(
                amount0In.mul(19)
            );
            uint256 balance1Adjusted = balance1.mul(10000).sub(
                amount1In.mul(19)
            );
            require(
                balance0Adjusted.mul(balance1Adjusted) >=
                    uint256(_reserve0).mul(_reserve1).mul(10000**2),
                "Wigoswap: K"
            );
        }

        _update(balance0, balance1, _reserve0, _reserve1);
        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);
    }

    // force balances to match reserves
    function skim(address to) external lock {
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        _safeTransfer(
            _token0,
            to,
            IERC20(_token0).balanceOf(address(this)).sub(reserve0)
        );
        _safeTransfer(
            _token1,
            to,
            IERC20(_token1).balanceOf(address(this)).sub(reserve1)
        );
    }

    // force reserves to match balances
    function sync() external lock {
        _update(
            IERC20(token0).balanceOf(address(this)),
            IERC20(token1).balanceOf(address(this)),
            reserve0,
            reserve1
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526001600c5534801561001557600080fd5b5060408051808201825260088152675769676f204c507360c01b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f7469c90d2e4594c31e4d0a08bd15c2bef57993dfe37840f3c72adc9d6b54abfc818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b03191633179055612b43806101066000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610d2e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610d67565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610dbc565b604080519115158252519081900360200190f35b61036a610dd3565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610def565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610df5565b61039b610ece565b610400610ef2565b6040805160ff9092168252519081900360200190f35b61039b610ef7565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610efd565b61039b610fd6565b61039b610fdc565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fe2565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611378565b61039b61138a565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611390565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113a2565b6040805192835260208301919091528051918290030190f35b61026161182d565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611866565b61039b611873565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611879565b61036a611a66565b61036a611a82565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611a9e565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611d6a565b610257611d87565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5769676f737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61075c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612ac76024913960400191505060405180910390fd5b600080610767610d67565b5091509150816dffffffffffffffffffffffffffff168710801561079a5750806dffffffffffffffffffffffffffff1686105b61080557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5769676f737761703a20494e53554646494349454e545f4c4951554944495459604482015290519081900360640190fd5b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061086a57508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6108d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5769676f737761703a20494e56414c49445f544f000000000000000000000000604482015290519081900360640190fd5b8a156108e6576108e6828a8d611f6d565b89156108f7576108f7818a8c611f6d565b86156109c3578873ffffffffffffffffffffffffffffffffffffffff1663d4f9a2ee338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d6020811015610a5957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610acb57600080fd5b505afa158015610adf573d6000803e3d6000fd5b505050506040513d6020811015610af557600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610b1f576000610b35565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610b59576000610b6f565b89856dffffffffffffffffffffffffffff160383035b90506000821180610b805750600081115b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612aeb6023913960400191505060405180910390fd5b6000610bf7610be584601361217a565b610bf18761271061217a565b90612200565b90506000610c09610be584601361217a565b9050610c366305f5e100610c306dffffffffffffffffffffffffffff8b8116908b1661217a565b9061217a565b610c40838361217a565b1015610cad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5769676f737761703a204b000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610cbb84848888612272565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600881526020017f5769676f204c507300000000000000000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610dc9338484612528565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610eb95773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610e879083612200565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610ec4848484612597565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314610f8357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5769676f737761703a20464f5242494444454e00000000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461105557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5769676f737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611065610d67565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b1580156110df57600080fd5b505afa1580156110f3573d6000803e3d6000fd5b505050506040513d602081101561110957600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561118257600080fd5b505afa158015611196573d6000803e3d6000fd5b505050506040513d60208110156111ac57600080fd5b5051905060006111cc836dffffffffffffffffffffffffffff8716612200565b905060006111ea836dffffffffffffffffffffffffffff8716612200565b905060006111f8878761266c565b6000549091508061122f5761121b6103e8610bf1611216878761217a565b6127da565b985061122a60006103e861282c565b611280565b61127d6dffffffffffffffffffffffffffff891661124d868461217a565b8161125457fe5b046dffffffffffffffffffffffffffff8916611270868561217a565b8161127757fe5b046128d0565b98505b600089116112d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612a796027913960400191505060405180910390fd5b6112e38a8a61282c565b6112ef86868a8a612272565b811561132b57600854611327906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041661217a565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461141657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5769676f737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611426610d67565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b1580156114a857600080fd5b505afa1580156114bc573d6000803e3d6000fd5b505050506040513d60208110156114d257600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b15801561154657600080fd5b505afa15801561155a573d6000803e3d6000fd5b505050506040513d602081101561157057600080fd5b50513060009081526001602052604081205491925061158f888861266c565b600054909150806115a0848761217a565b816115a757fe5b049a50806115b5848661217a565b816115bc57fe5b04995060008b1180156115cf575060008a115b611624576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612aa06027913960400191505060405180910390fd5b61162e30846128e8565b611639878d8d611f6d565b611644868d8c611f6d565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b1580156116b057600080fd5b505afa1580156116c4573d6000803e3d6000fd5b505050506040513d60208110156116da57600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b15801561174c57600080fd5b505afa158015611760573d6000803e3d6000fd5b505050506040513d602081101561177657600080fd5b5051935061178685858b8b612272565b81156117c2576008546117be906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041661217a565b600b555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600781526020017f5769676f2d4c500000000000000000000000000000000000000000000000000081525081565b6000610dc9338484612597565b6103e881565b600c546001146118ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5769676f737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff94851694909316926119c092859287926119bb926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b15801561198957600080fd5b505afa15801561199d573d6000803e3d6000fd5b505050506040513d60208110156119b357600080fd5b505190612200565b611f6d565b611a5c81846119bb6008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561198957600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611b0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f5769676f737761703a2045585049524544000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611c6e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611ce957508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611d5457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5769676f737761703a20494e56414c49445f5349474e41545552450000000000604482015290519081900360640190fd5b611d5f898989612528565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611df857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5769676f737761703a204c4f434b454400000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611f669273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015611e6f57600080fd5b505afa158015611e83573d6000803e3d6000fd5b505050506040513d6020811015611e9957600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b158015611f0c57600080fd5b505afa158015611f20573d6000803e3d6000fd5b505050506040513d6020811015611f3657600080fd5b50516008546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612272565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b6020831061207357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612036565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146120d5576040519150601f19603f3d011682016040523d82523d6000602084013e6120da565b606091505b5091509150818015612108575080511580612108575080806020019051602081101561210557600080fd5b50515b61217357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5769676f737761703a205452414e534645525f4641494c454400000000000000604482015290519081900360640190fd5b5050505050565b60008115806121955750508082028282828161219257fe5b04145b610dcd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610dcd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061229e57506dffffffffffffffffffffffffffff8311155b61230957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5769676f737761703a204f564552464c4f570000000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c01000000000000000000000000000000000000000000000000000000009004811682039081161580159061235957506dffffffffffffffffffffffffffff841615155b801561237457506dffffffffffffffffffffffffffff831615155b1561241e578063ffffffff166123b18561238d866129a1565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16906129c5565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff81166123f18461238d876129a1565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260409020546125c79082612200565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602052604080822093909355908416815220546126039082612a06565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156126d757600080fd5b505afa1580156126eb573d6000803e3d6000fd5b505050506040513d602081101561270157600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff82161580159450919250906127c65780156127c15760006127526112166dffffffffffffffffffffffffffff88811690881661217a565b9050600061275f836127da565b9050808211156127be5760006127816127788484612200565b6000549061217a565b9050600061279a8361279486601261217a565b90612a06565b905060008183816127a757fe5b04905080156127ba576127ba878261282c565b5050505b50505b6127d2565b80156127d2576000600b555b505092915050565b6000600382111561281d575080600160028204015b818110156128175780915060028182858161280657fe5b04018161280f57fe5b0490506127ef565b50612827565b8115612827575060015b919050565b6000546128399082612a06565b600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602052604090205461286b9082612a06565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106128df57816128e1565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546129189082612200565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120919091555461294c9082612200565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416816129fe57fe5b049392505050565b80820182811015610dcd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe5769676f737761703a20494e53554646494349454e545f4c49515549444954595f4d494e5445445769676f737761703a20494e53554646494349454e545f4c49515549444954595f4255524e45445769676f737761703a20494e53554646494349454e545f4f55545055545f414d4f554e545769676f737761703a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220600c651fd4f492a228ea51fa309fd5eeda5590fd81e0d47f427a766a1852bd8864736f6c634300060c0033

Deployed ByteCode Sourcemap

7383:10938:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15120:2445;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15120:2445:0;;-1:-1:-1;15120:2445:0;-1:-1:-1;15120:2445:0;:::i;:::-;;3458:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8390:313;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5689:150;;;;;;;;;;;;;;;;-1:-1:-1;5689:150:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7689:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3595:26;;;:::i;:::-;;;;;;;;;;;;;;;;5997:373;;;;;;;;;;;;;;;;-1:-1:-1;5997:373:0;;;;;;;;;;;;;;;;;;:::i;3895:117::-;;;:::i;3553:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3752:31;;;:::i;9696:209::-;;;;;;;;;;;;;;;;-1:-1:-1;9696:209:0;;;;;;;;;;;:::i;8019:35::-;;;:::i;8061:::-;;;:::i;12091:1311::-;;;;;;;;;;;;;;;;-1:-1:-1;12091:1311:0;;;;:::i;3628:44::-;;;;;;;;;;;;;;;;-1:-1:-1;3628:44:0;;;;:::i;8103:20::-;;;:::i;4019:41::-;;;;;;;;;;;;;;;;-1:-1:-1;4019:41:0;;;;:::i;13514:1494::-;;;;;;;;;;;;;;;;-1:-1:-1;13514:1494:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3505:41;;;:::i;5847:142::-;;;;;;;;;;;;;;;;-1:-1:-1;5847:142:0;;;;;;;;;:::i;7498:49::-;;;:::i;17614:434::-;;;;;;;;;;;;;;;;-1:-1:-1;17614:434:0;;;;:::i;7660:22::-;;;:::i;7717:21::-;;;:::i;6378:998::-;;;;;;;;;;;;;;;;-1:-1:-1;6378:998:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3679:64::-;;;;;;;;;;;;;;;;-1:-1:-1;3679:64:0;;;;;;;;;;;:::i;18097:221::-;;;:::i;15120:2445::-;8282:8;;8294:1;8282:13;8274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:1;8327:8;:12;15297:14;;;;:32:::1;;;15328:1;15315:10;:14;15297:32;15275:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15405:17;15424::::0;15447:13:::1;:11;:13::i;:::-;15404:56;;;;;15521:9;15508:22;;:10;:22;:48;;;;;15547:9;15534:22;;:10;:22;15508:48;15486:130;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15784:6;::::0;15823::::1;::::0;15629:16:::1;::::0;;;15784:6:::1;::::0;;::::1;::::0;15823;;::::1;::::0;15852:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;15875:7;15869:13;;:2;:13;;;;15852:30;15844:63;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15926:14:::0;;15922:58:::1;;15942:38;15956:7;15965:2;15969:10;15942:13;:38::i;:::-;16033:14:::0;;16029:58:::1;;16049:38;16063:7;16072:2;16076:10;16049:13;:38::i;:::-;16140:15:::0;;16136:215:::1;;16190:2;16174:32;;;16229:10;16262;16295;16328:4;;16174:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16136:215;16377:40;::::0;;;;;16411:4:::1;16377:40;::::0;::::1;::::0;;;:25:::1;::::0;::::1;::::0;::::1;::::0;:40;;;;;::::1;::::0;;;;;;;;:25;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16377:40:0;16443::::1;::::0;;;;;16477:4:::1;16443:40;::::0;::::1;::::0;;;16377;;-1:-1:-1;16443:25:0::1;::::0;::::1;::::0;::::1;::::0;:40;;;;;16377::::1;::::0;16443;;;;;;;;:25;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16443:40:0;;-1:-1:-1;16505:17:0::1;::::0;-1:-1:-1;;16536:22:0::1;::::0;::::1;::::0;;::::1;16525:33:::0;::::1;:101;;16625:1;16525:101;;;16598:10;16586:9;:22;;;16574:8;:35;16525:101;16505:121;;16637:17;16680:10;16668:9;:22;;;16657:8;:33;:101;;16757:1;16657:101;;;16730:10;16718:9;:22;;;16706:8;:35;16657:101;16637:121;;16803:1;16791:9;:13;:30;;;;16820:1;16808:9;:13;16791:30;16769:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16987:24;17014:74;17056:17;:9:::0;17070:2:::1;17056:13;:17::i;:::-;17014:19;:8:::0;17027:5:::1;17014:12;:19::i;:::-;:23:::0;::::1;:74::i;:::-;16987:101:::0;-1:-1:-1;17103:24:0::1;17130:74;17172:17;:9:::0;17186:2:::1;17172:13;:17::i;17130:74::-;17103:101:::0;-1:-1:-1;17308:47:0::1;17346:8;17308:33;;:18:::0;;::::1;::::0;:33;::::1;:22;:33::i;:::-;:37:::0;::::1;:47::i;:::-;17245:38;:16:::0;17266;17245:20:::1;:38::i;:::-;:110;;17219:183;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8350:1;;17426:49;17434:8;17444;17454:9;17465;17426:7;:49::i;:::-;17491:66;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;17496:10:::1;::::0;17491:66:::1;::::0;;;;;;;::::1;-1:-1:-1::0;;8373:1:0;8362:8;:12;-1:-1:-1;;;;;;;;;15120:2445:0:o;3458:40::-;;;;;;;;;;;;;;;;;;;:::o;8390:313::-;8605:8;;;;;;;8636;;;;;;;8677:18;;;;;;8390:313::o;5689:150::-;5756:4;5773:36;5782:10;5794:7;5803:5;5773:8;:36::i;:::-;-1:-1:-1;5827:4:0;5689:150;;;;;:::o;7689:21::-;;;;;;:::o;3595:26::-;;;;:::o;5997:373::-;6133:15;;;6112:4;6133:15;;;:9;:15;;;;;;;;6149:10;6133:27;;;;;;;;6172:2;6133:42;6129:175;;6222:15;;;;;;;:9;:15;;;;;;;;6238:10;6222:27;;;;;;;;:70;;6272:5;6222:31;:70::i;:::-;6192:15;;;;;;;:9;:15;;;;;;;;6208:10;6192:27;;;;;;;:100;6129:175;6314:26;6324:4;6330:2;6334:5;6314:9;:26::i;:::-;-1:-1:-1;6358:4:0;5997:373;;;;;:::o;3895:117::-;3946:66;3895:117;:::o;3553:35::-;3586:2;3553:35;:::o;3752:31::-;;;;:::o;9696:209::-;9792:7;;;;9778:10;:21;9770:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9854:6;:16;;;;;;;;;;;;;;9881:6;:16;;;;;;;;;;;9696:209::o;8019:35::-;;;;:::o;8061:::-;;;;:::o;12091:1311::-;12140:17;8282:8;;8294:1;8282:13;8274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:1;8327:8;:12;;;8338:1;12213:13:::1;:11;:13::i;:::-;-1:-1:-1::0;12278:6:0::1;::::0;12271:39:::1;::::0;;;;;12304:4:::1;12271:39;::::0;::::1;::::0;;;12170:56;;-1:-1:-1;12170:56:0;;-1:-1:-1;12252:16:0::1;::::0;12278:6:::1;::::0;;::::1;::::0;12271:24:::1;::::0;:39;;;;;::::1;::::0;;;;;;;;12278:6;12271:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12271:39:0;12347:6:::1;::::0;12340:39:::1;::::0;;;;;12373:4:::1;12340:39;::::0;::::1;::::0;;;12271;;-1:-1:-1;12321:16:0::1;::::0;12347:6:::1;::::0;;::::1;::::0;12340:24:::1;::::0;:39;;;;;12271::::1;::::0;12340;;;;;;;;12347:6;12340:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12340:39:0;;-1:-1:-1;12390:15:0::1;12408:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;12390:41:::0;-1:-1:-1;12442:15:0::1;12460:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;12442:41;;12496:10;12509:30;12518:9;12529;12509:8;:30::i;:::-;12550:20;12573:11:::0;12496:43;;-1:-1:-1;12677:17:0;12673:402:::1;;12723:54;7542:5;12723:31;12733:20;:7:::0;12745;12733:11:::1;:20::i;:::-;12723:9;:31::i;:54::-;12711:66;;12792:36;12806:1;7542:5;12792;:36::i;:::-;12673:402;;;12928:135;12955:37;::::0;::::1;:25;:7:::0;12967:12;12955:11:::1;:25::i;:::-;:37;;;;;;13011;::::0;::::1;:25;:7:::0;13023:12;13011:11:::1;:25::i;:::-;:37;;;;;;12928:8;:135::i;:::-;12916:147;;12673:402;13105:1;13093:9;:13;13085:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13161:20;13167:2;13171:9;13161:5;:20::i;:::-;13194:49;13202:8;13212;13222:9;13233;13194:7;:49::i;:::-;13258:5;13254:50;;;13295:8;::::0;13273:31:::1;::::0;13295:8:::1;13281::::0;;::::1;::::0;13295;;::::1;;13273:21;:31::i;:::-;13265:5;:39:::0;13254:50:::1;13360:34;::::0;;;;;::::1;::::0;::::1;::::0;;;;;13365:10:::1;::::0;13360:34:::1;::::0;;;;;;::::1;-1:-1:-1::0;;8373:1:0;8362:8;:12;-1:-1:-1;12091:1311:0;;;-1:-1:-1;;;;;;12091:1311:0:o;3628:44::-;;;;;;;;;;;;;:::o;8103:20::-;;;;:::o;4019:41::-;;;;;;;;;;;;;:::o;13514:1494::-;13590:15;13607;8282:8;;8294:1;8282:13;8274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:1;8327:8;:12;;;8338:1;13683:13:::1;:11;:13::i;:::-;-1:-1:-1::0;13740:6:0::1;::::0;13790::::1;::::0;13841:40:::1;::::0;;;;;13875:4:::1;13841:40;::::0;::::1;::::0;;;13640:56;;-1:-1:-1;13640:56:0;;-1:-1:-1;13740:6:0::1;::::0;;::::1;::::0;13790;::::1;::::0;13722:15:::1;::::0;13740:6;;13841:25:::1;::::0;:40;;;;;::::1;::::0;;;;;;;;13740:6;13841:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13841:40:0;13911::::1;::::0;;;;;13945:4:::1;13911:40;::::0;::::1;::::0;;;13841;;-1:-1:-1;13892:16:0::1;::::0;13911:25:::1;::::0;::::1;::::0;::::1;::::0;:40;;;;;13841::::1;::::0;13911;;;;;;;:25;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13911:40:0;14000:4:::1;13962:17;13982:24:::0;;;:9:::1;13911:40;13982:24:::0;;;;;13911:40;;-1:-1:-1;14032:30:0::1;14041:9:::0;14052;14032:8:::1;:30::i;:::-;14073:20;14096:11:::0;14019:43;;-1:-1:-1;14096:11:0;14206:23:::1;:9:::0;14220:8;14206:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;14339:12:0;14313:23:::1;:9:::0;14327:8;14313:13:::1;:23::i;:::-;:38;;;;;;14303:48;;14442:1;14432:7;:11;:26;;;;;14457:1;14447:7;:11;14432:26;14410:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14536:31;14550:4;14557:9;14536:5;:31::i;:::-;14578:35;14592:7;14601:2;14605:7;14578:13;:35::i;:::-;14624;14638:7;14647:2;14651:7;14624:13;:35::i;:::-;14681:40;::::0;;;;;14715:4:::1;14681:40;::::0;::::1;::::0;;;:25:::1;::::0;::::1;::::0;::::1;::::0;:40;;;;;::::1;::::0;;;;;;;;:25;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14681:40:0;14743::::1;::::0;;;;;14777:4:::1;14743:40;::::0;::::1;::::0;;;14681;;-1:-1:-1;14743:25:0::1;::::0;::::1;::::0;::::1;::::0;:40;;;;;14681::::1;::::0;14743;;;;;;;;:25;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14743:40:0;;-1:-1:-1;14796:49:0::1;14804:8:::0;14743:40;14824:9;14835;14796:7:::1;:49::i;:::-;14860:5;14856:50;;;14897:8;::::0;14875:31:::1;::::0;14897:8:::1;14883::::0;;::::1;::::0;14897;;::::1;;14875:21;:31::i;:::-;14867:5;:39:::0;14856:50:::1;14962:38;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;14967:10:::1;::::0;14962:38:::1;::::0;;;;;;;;;::::1;8350:1;;;;;;;;;8373::::0;8362:8;:12;;;;13514:1494;;;:::o;3505:41::-;;;;;;;;;;;;;;;;;;;:::o;5847:142::-;5910:4;5927:32;5937:10;5949:2;5953:5;5927:9;:32::i;7498:49::-;7542:5;7498:49;:::o;17614:434::-;8282:8;;8294:1;8282:13;8274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:1;8327:8;:12;17683:6:::1;::::0;17733::::1;::::0;17877:8:::1;::::0;17832:40:::1;::::0;;;;;17866:4:::1;17832:40;::::0;::::1;::::0;;;17683:6:::1;::::0;;::::1;::::0;17733;;::::1;::::0;17765:132:::1;::::0;17683:6;;17815:2;;17832:54:::1;::::0;17877:8:::1;;::::0;17683:6;;17832:25:::1;::::0;:40;;;;;::::1;::::0;;;;;;;;;17683:6;17832:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17832:40:0;;:44:::1;:54::i;:::-;17765:13;:132::i;:::-;17908;17936:7;17958:2;17975:54;18020:8;;;;;;;;;;;17975:54;;17982:7;17975:25;;;18009:4;17975:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;17908:132;-1:-1:-1::0;;8373:1:0;8362:8;:12;-1:-1:-1;17614:434:0:o;7660:22::-;;;;;;:::o;7717:21::-;;;;;;:::o;6378:998::-;6600:15;6588:8;:27;;6580:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6753:16;;6997:13;;;;6648:14;6997:13;;;:6;:13;;;;;;;;:15;;;;;;;;;6820:250;;3946:66;6820:250;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6788:301;;;;;;6689:415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6665:450;;;;;;;;;7153:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6648:14;;6997:15;7153:26;;;;;-1:-1:-1;7153:26:0;;;;;;;;;;6997:15;7153:26;;;;;;;;;;;;;;;-1:-1:-1;;7153:26:0;;;;;;-1:-1:-1;;7212:30:0;;;;;;;:59;;;7266:5;7246:25;;:16;:25;;;7212:59;7190:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7337:31;7346:5;7353:7;7362:5;7337:8;:31::i;:::-;6378:998;;;;;;;;;:::o;3679:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;18097:221::-;8282:8;;8294:1;8282:13;8274:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8338:1;8327:8;:12;18167:6:::1;::::0;18160:39:::1;::::0;;;;;18193:4:::1;18160:39;::::0;::::1;::::0;;;18138:172:::1;::::0;18167:6:::1;;::::0;18160:24:::1;::::0;:39;;;;;::::1;::::0;;;;;;;;18167:6;18160:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18160:39:0;18221:6:::1;::::0;18214:39:::1;::::0;;;;;18247:4:::1;18214:39;::::0;::::1;::::0;;;18221:6:::1;::::0;;::::1;::::0;18214:24:::1;::::0;:39;;;;;18160::::1;::::0;18214;;;;;;;;18221:6;18214:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18214:39:0;18268:8:::1;::::0;::::1;::::0;;::::1;::::0;18291;;::::1;;18138:7;:172::i;:::-;8373:1:::0;8362:8;:12;18097:221::o;8711:384::-;7615:34;;;;;;;;;;;;;;;;;8890:43;;8865:10;8890:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8865:79;;;;8830:12;;8844:17;;8865:10;;;8890:43;8865:79;;;8890:43;8865:79;;8890:43;8865:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8829:115;;;;8977:7;:57;;;;-1:-1:-1;8989:11:0;;:16;;:44;;;9020:4;9009:24;;;;;;;;;;;;;;;-1:-1:-1;9009:24:0;8989:44;8955:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8711:384;;;;;:::o;2263:151::-;2321:9;2351:6;;;:30;;-1:-1:-1;;2366:5:0;;;2380:1;2375;2366:5;2375:1;2361:15;;;;;:20;2351:30;2343:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2117:138;2210:5;;;2205:16;;;;2197:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9990:1019;10165:23;;;;;;:50;;-1:-1:-1;10192:23:0;;;;10165:50;10143:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10376:18;;10303:23;:15;:23;;;10376:18;;;;;10359:35;;;10432:15;;;;;;:33;;-1:-1:-1;10451:14:0;;;;;10432:33;:51;;;;-1:-1:-1;10469:14:0;;;;;10432:51;10428:410;;;10675:11;10602:84;;10610:44;10644:9;10610:27;10627:9;10610:16;:27::i;:::-;:33;;;;:44::i;:::-;10561:20;:125;;10602:53;;;;;:84;;;;10561:125;;;10742:84;;;10750:44;10784:9;10750:27;10767:9;10750:16;:27::i;:44::-;10701:20;:125;;10742:53;;;;;:84;;;;10701:125;;;10428:410;10848:8;:28;;;;;;;;;;;;10887;;;;;;;;;;;;10926:35;;;;;;;;;;;;10977:24;;;10982:8;;;10977:24;;10992:8;;;;;;;10977:24;;;;;;;;;;;;;;;;;9990:1019;;;;;;:::o;5210:206::-;5328:16;;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;5377:31;;;;;;;;;;;;;;;;;5210:206;;;:::o;5424:257::-;5555:15;;;;;;;:9;:15;;;;;;:26;;5575:5;5555:19;:26::i;:::-;5537:15;;;;;;;;:9;:15;;;;;;:44;;;;5608:13;;;;;;;:24;;5626:5;5608:17;:24::i;:::-;5592:13;;;;;;;;:9;:13;;;;;;;;;:40;;;;5648:25;;;;;;;5592:13;;5648:25;;;;;;;;;;;;;5424:257;;;:::o;11098:881::-;11189:10;11217:13;11250:7;;;;;;;;;;;11233:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11233:33:0;11332:5;;11285:19;;;;;;;-1:-1:-1;11233:33:0;;-1:-1:-1;11332:5:0;11363:609;;11393:11;;11389:513;;11425:13;11441:44;11451:33;;:18;;;;:33;;:22;:33::i;11441:44::-;11425:60;;11504:17;11524;11534:6;11524:9;:17::i;:::-;11504:37;;11572:9;11564:5;:17;11560:327;;;11606:17;11626:37;11642:20;:5;11652:9;11642;:20::i;:::-;11626:11;;;:15;:37::i;:::-;11606:57;-1:-1:-1;11686:19:0;11708:28;11726:9;11708:13;:5;11718:2;11708:9;:13::i;:::-;:17;;:28::i;:::-;11686:50;;11759:17;11791:11;11779:9;:23;;;;;;;-1:-1:-1;11829:13:0;;11825:42;;11844:23;11850:5;11857:9;11844:5;:23::i;:::-;11560:327;;;;11389:513;;;11363:609;;;11923:11;;11919:53;;11959:1;11951:5;:9;11919:53;11098:881;;;;;;:::o;3074:312::-;3122:9;3152:1;3148;:5;3144:235;;;-1:-1:-1;3174:1:0;3210;3206;3202:5;;:9;3226:92;3237:1;3233;:5;3226:92;;;3263:1;3259:5;;3301:1;3296;3292;3288;:5;;;;;;:9;3287:15;;;;;;3283:19;;3226:92;;;3144:235;;;;3339:6;;3335:44;;-1:-1:-1;3366:1:0;3335:44;3074:312;;;:::o;4778:204::-;4854:11;;:22;;4870:5;4854:15;:22::i;:::-;4840:11;:36;;;4903:13;;;;;:9;:13;;;;;;:24;;4921:5;4903:17;:24::i;:::-;4887:13;;;;;;;:9;:13;;;;;;;;:40;;;;4943:31;;;;;;;4887:13;;;;4943:31;;;;;;;;;;4778:204;;:::o;2851:105::-;2909:9;2939:1;2935;:5;:13;;2947:1;2935:13;;;2943:1;2935:13;2931:17;2851:105;-1:-1:-1;;;2851:105:0:o;4990:212::-;5072:15;;;;;;;:9;:15;;;;;;:26;;5092:5;5072:19;:26::i;:::-;5054:15;;;;;;;:9;:15;;;;;:44;;;;5123:11;:22;;5139:5;5123:15;:22::i;:::-;5109:11;:36;;;5161:33;;;;;;;;;;;;;;;;;;;;;;4990:212;;:::o;2525:120::-;2601:10;;2470:6;2601:17;;2525:120::o;2716:108::-;2776:9;2806:10;;;2802:14;;;2806:10;2802:14;;;;;;2716:108;-1:-1:-1;;;2716:108:0:o;1972:137::-;2065:5;;;2060:16;;;;2052:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://600c651fd4f492a228ea51fa309fd5eeda5590fd81e0d47f427a766a1852bd88
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.