Contract 0xD9362AA8E0405C93299C573036E7FB4ec3bE1240

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0814e99b2bec7df8a612c53b0b80c2942b8c881d5584028f832f1f15bbb47331Set Fee To87983952021-12-27 21:39:54274 days 5 hrs agoAlligator: Deployer IN  0xd9362aa8e0405c93299c573036e7fb4ec3be12400 AVAX0.001151375 25
0x865264d47be94aae43c6256154ff1687a582012094fcefc390a9ff90a559cd390x6080604087974492021-12-27 21:07:58274 days 5 hrs agoAlligator: Deployer IN  Create: AlligatorFactory0 AVAX0.57163905225
[ Download CSV Export 
Latest 22 internal transactions
Parent Txn Hash Block From To Value
0xa5b24b5aca1aae3354eda3e8b5105bf964eb1ec061308f02c235016ec71195e0189866612022-08-22 20:06:5736 days 6 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0xb8ece9e7217ccdc7bfb80510e80b35db3d606a87426d0fd14406e8a2ef6d5391189851652022-08-22 19:16:5836 days 7 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0xcbf423674b08003f4f2122881ebba825027039e4cca42b3cff3178f5a9f7d25b175603572022-07-20 5:12:0069 days 21 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0xc753cad8bf21eca8eb144c7554e76fd9c03198abc761282058a6150e2e62803f175601412022-07-20 5:04:4869 days 21 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0xdf686a855cb0f17e6b82c49946c901b6114b4f627d96323ff57aceb4593e04a8175599552022-07-20 4:58:3669 days 22 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x165ba08df6128d0dd9d27672b3410d85a83e545f685838c2c8aa381a5816bf28175595742022-07-20 4:45:4169 days 22 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x03fb83d4ac39fe757910686a8ee5206e380d1427991033d1bb6182b9e24a4898175593362022-07-20 4:37:2769 days 22 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x301e26794dec683978111539f9929f7a392b1781fc0d9ba4d3db493aeb2fa51d159006662022-06-11 18:50:27108 days 8 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x4a8baf0968141eeeed1016f9dbd6a1f5caa6e8248652e3a947e9c05a81e76884158999132022-06-11 18:25:22108 days 8 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x19d4c2247be919d00370b87943145ad1e13ab5285391f732c75951c521f9e65b110457232022-02-17 17:14:36222 days 9 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0xdb7178e09f5130ef83175e844f645625b0d83993127061f8fe7a51e1590f78b0102671332022-01-30 18:42:34240 days 8 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x43de5e098ef71ea49336c9d0a1baf9f807e27266c84666a5a259366a68dd14c5102669482022-01-30 18:36:35240 days 8 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x4fa3ef0d32e60789d4bf5a629420c08f6086e4684f304d29ab6ead972e1334b897933972022-01-19 21:43:29251 days 5 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x81fe65f91a74383ddb45508d399f0979eb464ed0b3326d9e1d1f93c2b94d967e97931862022-01-19 21:36:21251 days 5 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x188e5de65725394fa43b8b02e318824f37bf08774371fed6821c132466753cd392650392022-01-07 18:43:50263 days 8 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0xa98b10429598e7affd23526ca5b7835e3c6a3f66a836578ca2eb9543927b578792649652022-01-07 18:41:21263 days 8 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0xa3bdb04a089042e00a239f2d87c13254e8674fecb404cf168cef111a4880300892648372022-01-07 18:37:04263 days 8 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0xa844e4dbc5c71db866692f4ebd2b0830d259791d3cd544dbdf7336010c9c689789747932022-01-01 0:41:25270 days 2 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x7f6d24cbaadff06717130bfa1e8fa43d0f87d071eb74373d8049c640609a223189746862022-01-01 0:37:42270 days 2 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x12e58dc221ff38c31676114a84d1a0cb0c0357fcc3f1ee5f33f4c2c4d7d1a08e88289352021-12-28 14:45:05273 days 12 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0x039a6ca9a3f626d84fb7013f60a204fb4f2912b94b081dbb696947f5bcd4d84588289062021-12-28 14:44:07273 days 12 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
0xe7c6fc08db663c095d792a4e8f4e4e143c3315b7c6c18f6b91a2bddc6c23bd5288288682021-12-28 14:42:50273 days 12 hrs ago 0xd9362aa8e0405c93299c573036e7fb4ec3be1240  Contract Creation0 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AlligatorFactory

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-12-27
*/

// File: contracts/operations/interfaces/IAlligatorFactory.sol

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IAlligatorFactory {
    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/libraries/SafeMath.sol

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/operations/AlligatorLpToken.sol

pragma solidity =0.6.12;


contract AlligatorLpToken {
    using SafeMath for uint256;

    string public constant name = "Alligator LP Token";
    string public constant symbol = "ALP";
    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, "AlligatorLpToken: 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, "AlligatorLpToken: INVALID_SIGNATURE");
        _approve(owner, spender, value);
    }
}

// File: contracts/libraries/Math.sol

pragma solidity =0.6.12;

// a library for performing various math operations

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

// File: contracts/libraries/UQ112x112.sol

pragma solidity =0.6.12;

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))

// range: [0, 2**112 - 1]
// resolution: 1 / 2**112

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

// File: contracts/interfaces/IERC20Alligator.sol

pragma solidity >=0.5.0;

interface IERC20Alligator {
    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);
}

// File: contracts/operations/interfaces/IAlligatorCallee.sol

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

// File: contracts/operations/AlligatorPair.sol

pragma solidity =0.6.12;

interface IMigrator {
    // Return the desired amount of liquidity token that the migrator wants.
    function desiredLiquidity() external view returns (uint256);
}

contract AlligatorPair is AlligatorLpToken {
    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, "AlligatorPair: 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))), "AlligatorPair: 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, "AlligatorPair: 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), "AlligatorPair: 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/6th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IAlligatorFactory(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(5).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 = IERC20Alligator(token0).balanceOf(address(this));
        uint256 balance1 = IERC20Alligator(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) {
            address migrator = IAlligatorFactory(factory).migrator();
            if (msg.sender == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
            } else {
                require(migrator == address(0), "Must not have migrator");
                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, "AlligatorPair: 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 = IERC20Alligator(_token0).balanceOf(address(this));
        uint256 balance1 = IERC20Alligator(_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, "AlligatorPair: INSUFFICIENT_LIQUIDITY_BURNED");
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Alligator(_token0).balanceOf(address(this));
        balance1 = IERC20Alligator(_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, "AlligatorPair: INSUFFICIENT_OUTPUT_AMOUNT");
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, "AlligatorPair: 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, "AlligatorPair: 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) IAlligatorCallee(to).alligatorCall(msg.sender, amount0Out, amount1Out, data);
            balance0 = IERC20Alligator(_token0).balanceOf(address(this));
            balance1 = IERC20Alligator(_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, "AlligatorPair: INSUFFICIENT_INPUT_AMOUNT");
        {
            // scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint256 balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));
            uint256 balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));
            require(
                balance0Adjusted.mul(balance1Adjusted) >= uint256(_reserve0).mul(_reserve1).mul(1000**2),
                "AlligatorPair: 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, IERC20Alligator(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20Alligator(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

// File: contracts/operations/AlligatorFactory.sol

pragma solidity =0.6.12;

contract AlligatorFactory is IAlligatorFactory {
    address public override feeTo;
    address public override feeToSetter;
    address public override migrator;

    mapping(address => mapping(address => address)) public override getPair;
    address[] public override allPairs;

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

    constructor(address _feeToSetter) public {
        feeToSetter = _feeToSetter;
    }

    function allPairsLength() external view override returns (uint256) {
        return allPairs.length;
    }

    function pairCodeHash() external pure returns (bytes32) {
        return keccak256(type(AlligatorPair).creationCode);
    }

    function createPair(address tokenA, address tokenB) external override returns (address pair) {
        require(tokenA != tokenB, "AlligatorFactory: IDENTICAL_ADDRESSES");
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), "AlligatorFactory: ZERO_ADDRESS");
        require(getPair[token0][token1] == address(0), "AlligatorFactory: PAIR_EXISTS"); // single check is sufficient
        bytes memory bytecode = type(AlligatorPair).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        AlligatorPair(pair).initialize(token0, token1);
        getPair[token0][token1] = pair;
        getPair[token1][token0] = pair; // populate mapping in the reverse direction
        allPairs.push(pair);
        emit PairCreated(token0, token1, pair, allPairs.length);
    }

    function setFeeTo(address _feeTo) external override {
        require(msg.sender == feeToSetter, "AlligatorFactory: FORBIDDEN");
        feeTo = _feeTo;
    }

    function setMigrator(address _migrator) external override {
        require(msg.sender == feeToSetter, "AlligatorFactory: FORBIDDEN");
        migrator = _migrator;
    }

    function setFeeToSetter(address _feeToSetter) external override {
        require(msg.sender == feeToSetter, "AlligatorFactory: FORBIDDEN");
        feeToSetter = _feeToSetter;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_migrator","type":"address"}],"name":"setMigrator","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051612cf5380380612cf58339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612c92806100636000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637cd07e47116100715780637cd07e47146101395780639aab924814610141578063a2e74af614610149578063c9c653961461016f578063e6a439051461019d578063f46901ed146101cb576100a9565b8063017e7e58146100ae578063094b7415146100d25780631e3dd18b146100da57806323cf3118146100f7578063574f2ba31461011f575b600080fd5b6100b66101f1565b604080516001600160a01b039092168252519081900360200190f35b6100b6610200565b6100b6600480360360208110156100f057600080fd5b503561020f565b61011d6004803603602081101561010d57600080fd5b50356001600160a01b0316610236565b005b6101276102b7565b60408051918252519081900360200190f35b6100b66102bd565b6101276102cc565b61011d6004803603602081101561015f57600080fd5b50356001600160a01b03166102fe565b6100b66004803603604081101561018557600080fd5b506001600160a01b038135811691602001351661037f565b6100b6600480360360408110156101b357600080fd5b506001600160a01b038135811691602001351661069b565b61011d600480360360208110156101e157600080fd5b50356001600160a01b03166106c1565b6000546001600160a01b031681565b6001546001600160a01b031681565b6004818154811061021c57fe5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03163314610295576040805162461bcd60e51b815260206004820152601b60248201527f416c6c696761746f72466163746f72793a20464f5242494444454e0000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60045490565b6002546001600160a01b031681565b6000604051806020016102de90610742565b6020820181038252601f19601f8201166040525080519060200120905090565b6001546001600160a01b0316331461035d576040805162461bcd60e51b815260206004820152601b60248201527f416c6c696761746f72466163746f72793a20464f5242494444454e0000000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156103d25760405162461bcd60e51b8152600401808060200182810382526025815260200180612c386025913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b0316106103f55783856103f8565b84845b90925090506001600160a01b038216610458576040805162461bcd60e51b815260206004820152601e60248201527f416c6c696761746f72466163746f72793a205a45524f5f414444524553530000604482015290519081900360640190fd5b6001600160a01b038281166000908152600360209081526040808320858516845290915290205416156104d2576040805162461bcd60e51b815260206004820152601d60248201527f416c6c696761746f72466163746f72793a20504149525f455849535453000000604482015290519081900360640190fd5b6060604051806020016104e490610742565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b031660601b8152601401826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f59450846001600160a01b031663485cc95585856040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b1580156105b157600080fd5b505af11580156105c5573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526003602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560048054600181018255958190527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b03163314610720576040805162461bcd60e51b815260206004820152601b60248201527f416c6c696761746f72466163746f72793a20464f5242494444454e0000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6124e8806107508339019056fe60806040526001600c5534801561001557600080fd5b50604080518082018252601281527120b63634b3b0ba37b9102628102a37b5b2b760711b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fad0fb45cf62051aec10654f78a8372fd48c43225aa5cb076057f3e92c0fbea43818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556123d8806101106000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610adb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b09565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b33565b604080519115158252519081900360200190f35b610339610b4a565b604080516001600160a01b039092168252519081900360200190f35b61035d610b59565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b5f565b61035d610bf3565b6103b5610c17565b6040805160ff9092168252519081900360200190f35b61035d610c1c565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c22565b61035d610caf565b61035d610cb5565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cbb565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b031661113b565b61035d61114d565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316611153565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611165565b6040805192835260208301919091528051918290030190f35b6102446114fd565b61031d600480360360408110156104e857600080fd5b506001600160a01b03813516906020013561151c565b61035d611529565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b031661152f565b6103396116a5565b6103396116b4565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356116c3565b61035d600480360360408110156105a357600080fd5b506001600160a01b03813581169160200135166118ba565b61023a6118d7565b600c54600114610612576040805162461bcd60e51b8152602060048201526015602482015274105b1b1a59d85d1bdc94185a5c8e881313d0d2d151605a1b604482015290519081900360640190fd5b6000600c55841515806106255750600084115b6106605760405162461bcd60e51b81526004018080602001828103825260298152602001806122d76029913960400191505060405180910390fd5b60008061066b610b09565b5091509150816001600160701b0316871080156106905750806001600160701b031686105b6106cb5760405162461bcd60e51b81526004018080602001828103825260258152602001806122b26025913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107095750806001600160a01b0316896001600160a01b031614155b61075a576040805162461bcd60e51b815260206004820152601960248201527f416c6c696761746f72506169723a20494e56414c49445f544f00000000000000604482015290519081900360640190fd5b8a1561076b5761076b828a8d611a3d565b891561077c5761077c818a8c611a3d565b861561082e57886001600160a01b03166379b3fd8f338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561081557600080fd5b505af1158015610829573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561087457600080fd5b505afa158015610888573d6000803e3d6000fd5b505050506040513d602081101561089e57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108ea57600080fd5b505afa1580156108fe573d6000803e3d6000fd5b505050506040513d602081101561091457600080fd5b5051925060009150506001600160701b0385168a90038311610937576000610946565b89856001600160701b03160383035b9050600089856001600160701b0316038311610963576000610972565b89856001600160701b03160383035b905060008211806109835750600081115b6109be5760405162461bcd60e51b815260040180806020018281038252602881526020018061232c6028913960400191505060405180910390fd5b60006109e06109ce846003611bd7565b6109da876103e8611bd7565b90611c3c565b905060006109f26109ce846003611bd7565b9050610a17620f4240610a116001600160701b038b8116908b16611bd7565b90611bd7565b610a218383611bd7565b1015610a67576040805162461bcd60e51b815260206004820152601060248201526f416c6c696761746f72506169723a204b60801b604482015290519081900360640190fd5b5050610a7584848888611c8a565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280601281526020017120b63634b3b0ba37b9102628102a37b5b2b760711b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b40338484611e53565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bde576001600160a01b0384166000908152600260209081526040808320338452909152902054610bb99083611c3c565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610be9848484611eb5565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c81576040805162461bcd60e51b815260206004820152601860248201527f416c6c696761746f72506169723a20464f5242494444454e0000000000000000604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d0c576040805162461bcd60e51b8152602060048201526015602482015274105b1b1a59d85d1bdc94185a5c8e881313d0d2d151605a1b604482015290519081900360640190fd5b6000600c81905580610d1c610b09565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610ded57600080fd5b505afa158015610e01573d6000803e3d6000fd5b505050506040513d6020811015610e1757600080fd5b505190506000610e30836001600160701b038716611c3c565b90506000610e47836001600160701b038716611c3c565b90506000610e558787611f63565b6000549091508061102c5760055460408051637cd07e4760e01b815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610ea557600080fd5b505afa158015610eb9573d6000803e3d6000fd5b505050506040513d6020811015610ecf57600080fd5b50519050336001600160a01b0382161415610faa57806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1d57600080fd5b505afa158015610f31573d6000803e3d6000fd5b505050506040513d6020811015610f4757600080fd5b505199508915801590610f5c57506000198a14155b610fa5576040805162461bcd60e51b81526020600482015260156024820152744261642064657369726564206c697175696469747960581b604482015290519081900360640190fd5b611026565b6001600160a01b03811615610fff576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103737ba103430bb329036b4b3b930ba37b960511b604482015290519081900360640190fd5b6110176103e86109da6110128888611bd7565b6120a3565b995061102660006103e86120f5565b5061106f565b61106c6001600160701b0389166110438684611bd7565b8161104a57fe5b046001600160701b03891661105f8685611bd7565b8161106657fe5b0461217f565b98505b600089116110ae5760405162461bcd60e51b815260040180806020018281038252602c815260200180612300602c913960400191505060405180910390fd5b6110b88a8a6120f5565b6110c486868a8a611c8a565b81156110ee576008546110ea906001600160701b0380821691600160701b900416611bd7565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c546001146111b7576040805162461bcd60e51b8152602060048201526015602482015274105b1b1a59d85d1bdc94185a5c8e881313d0d2d151605a1b604482015290519081900360640190fd5b6000600c819055806111c7610b09565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561122357600080fd5b505afa158015611237573d6000803e3d6000fd5b505050506040513d602081101561124d57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561129b57600080fd5b505afa1580156112af573d6000803e3d6000fd5b505050506040513d60208110156112c557600080fd5b5051306000908152600160205260408120549192506112e48888611f63565b600054909150806112f58487611bd7565b816112fc57fe5b049a508061130a8486611bd7565b8161131157fe5b04995060008b118015611324575060008a115b61135f5760405162461bcd60e51b815260040180806020018281038252602c815260200180612354602c913960400191505060405180910390fd5b6113693084612197565b611374878d8d611a3d565b61137f868d8c611a3d565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156113c557600080fd5b505afa1580156113d9573d6000803e3d6000fd5b505050506040513d60208110156113ef57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561143b57600080fd5b505afa15801561144f573d6000803e3d6000fd5b505050506040513d602081101561146557600080fd5b5051935061147585858b8b611c8a565b811561149f5760085461149b906001600160701b0380821691600160701b900416611bd7565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b604051806040016040528060038152602001620414c560ec1b81525081565b6000610b40338484611eb5565b6103e881565b600c5460011461157e576040805162461bcd60e51b8152602060048201526015602482015274105b1b1a59d85d1bdc94185a5c8e881313d0d2d151605a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926116279285928792611622926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156115f057600080fd5b505afa158015611604573d6000803e3d6000fd5b505050506040513d602081101561161a57600080fd5b505190611c3c565b611a3d565b61169b81846116226008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156115f057600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611718576040805162461bcd60e51b815260206004820152601960248201527f416c6c696761746f724c70546f6b656e3a204558504952454400000000000000604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611833573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118695750886001600160a01b0316816001600160a01b0316145b6118a45760405162461bcd60e51b81526004018080602001828103825260238152602001806123806023913960400191505060405180910390fd5b6118af898989611e53565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611926576040805162461bcd60e51b8152602060048201526015602482015274105b1b1a59d85d1bdc94185a5c8e881313d0d2d151605a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611a36926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561197757600080fd5b505afa15801561198b573d6000803e3d6000fd5b505050506040513d60208110156119a157600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119ee57600080fd5b505afa158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b50516008546001600160701b0380821691600160701b900416611c8a565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611aea5780518252601f199092019160209182019101611acb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b4c576040519150601f19603f3d011682016040523d82523d6000602084013e611b51565b606091505b5091509150818015611b7f575080511580611b7f5750808060200190516020811015611b7c57600080fd5b50515b611bd0576040805162461bcd60e51b815260206004820152601e60248201527f416c6c696761746f72506169723a205452414e534645525f4641494c45440000604482015290519081900360640190fd5b5050505050565b6000811580611bf257505080820282828281611bef57fe5b04145b610b44576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a204d756c204f766572666c6f7760501b604482015290519081900360640190fd5b80820382811115610b44576040805162461bcd60e51b8152602060048201526013602482015272536166654d6174683a20556e646572666c6f7760681b604482015290519081900360640190fd5b6001600160701b038411801590611ca857506001600160701b038311155b611cf9576040805162461bcd60e51b815260206004820152601760248201527f416c6c696761746f72506169723a204f564552464c4f57000000000000000000604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d2957506001600160701b03841615155b8015611d3d57506001600160701b03831615155b15611da8578063ffffffff16611d6585611d5686612229565b6001600160e01b03169061223b565b600980546001600160e01b03929092169290920201905563ffffffff8116611d9084611d5687612229565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611ed89082611c3c565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611f079082612260565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611fb457600080fd5b505afa158015611fc8573d6000803e3d6000fd5b505050506040513d6020811015611fde57600080fd5b5051600b546001600160a01b03821615801594509192509061208f57801561208a57600061201b6110126001600160701b03888116908816611bd7565b90506000612028836120a3565b90508082111561208757600061204a6120418484611c3c565b60005490611bd7565b905060006120638361205d866005611bd7565b90612260565b9050600081838161207057fe5b04905080156120835761208387826120f5565b5050505b50505b61209b565b801561209b576000600b555b505092915050565b600060038211156120e6575080600160028204015b818110156120e0578091506002818285816120cf57fe5b0401816120d857fe5b0490506120b8565b506120f0565b81156120f0575060015b919050565b6000546121029082612260565b60009081556001600160a01b0383168152600160205260409020546121279082612260565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061218e5781612190565b825b9392505050565b6001600160a01b0382166000908152600160205260409020546121ba9082611c3c565b6001600160a01b038316600090815260016020526040812091909155546121e19082611c3c565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161225857fe5b049392505050565b81810181811015610b44576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a20416464204f766572666c6f7760501b604482015290519081900360640190fdfe416c6c696761746f72506169723a20494e53554646494349454e545f4c4951554944495459416c6c696761746f72506169723a20494e53554646494349454e545f4f55545055545f414d4f554e54416c6c696761746f72506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544416c6c696761746f72506169723a20494e53554646494349454e545f494e5055545f414d4f554e54416c6c696761746f72506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544416c6c696761746f724c70546f6b656e3a20494e56414c49445f5349474e4154555245a26469706673582212207c0bdd64325840a49ca2a5f327661a0b504c5680f06a8488f0f7997860e7c2aa64736f6c634300060c0033416c6c696761746f72466163746f72793a204944454e544943414c5f414444524553534553a2646970667358221220e96ab7ff466656d3784d59e50b8e407247d2d5ba79a87aa44b57253d1843411b64736f6c634300060c00330000000000000000000000001ff33b086994311e0ea497d4c69ee34f486729b9

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

0000000000000000000000001ff33b086994311e0ea497d4c69ee34f486729b9

-----Decoded View---------------
Arg [0] : _feeToSetter (address): 0x1ff33b086994311e0ea497d4c69ee34f486729b9

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001ff33b086994311e0ea497d4c69ee34f486729b9


Deployed ByteCode Sourcemap

19531:2272:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19585:29;;;:::i;:::-;;;;-1:-1:-1;;;;;19585:29:0;;;;;;;;;;;;;;19621:35;;;:::i;19782:34::-;;;;;;;;;;;;;;;;-1:-1:-1;19782:34:0;;:::i;21434:173::-;;;;;;;;;;;;;;;;-1:-1:-1;21434:173:0;-1:-1:-1;;;;;21434:173:0;;:::i;:::-;;20016:108;;;:::i;:::-;;;;;;;;;;;;;;;;19663:32;;;:::i;20132:125::-;;;:::i;21615:185::-;;;;;;;;;;;;;;;;-1:-1:-1;21615:185:0;-1:-1:-1;;;;;21615:185:0;;:::i;20265:992::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20265:992:0;;;;;;;;;;:::i;19704:71::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19704:71:0;;;;;;;;;;:::i;21265:161::-;;;;;;;;;;;;;;;;-1:-1:-1;21265:161:0;-1:-1:-1;;;;;21265:161:0;;:::i;19585:29::-;;;-1:-1:-1;;;;;19585:29:0;;:::o;19621:35::-;;;-1:-1:-1;;;;;19621:35:0;;:::o;19782:34::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19782:34:0;;-1:-1:-1;19782:34:0;:::o;21434:173::-;21525:11;;-1:-1:-1;;;;;21525:11:0;21511:10;:25;21503:65;;;;;-1:-1:-1;;;21503:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21579:8;:20;;-1:-1:-1;;;;;;21579:20:0;-1:-1:-1;;;;;21579:20:0;;;;;;;;;;21434:173::o;20016:108::-;20101:8;:15;20016:108;:::o;19663:32::-;;;-1:-1:-1;;;;;19663:32:0;;:::o;20132:125::-;20179:7;20216:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;20206:43;;;;;;20199:50;;20132:125;:::o;21615:185::-;21712:11;;-1:-1:-1;;;;;21712:11:0;21698:10;:25;21690:65;;;;;-1:-1:-1;;;21690:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21766:11;:26;;-1:-1:-1;;;;;;21766:26:0;-1:-1:-1;;;;;21766:26:0;;;;;;;;;;21615:185::o;20265:992::-;20344:12;20387:6;-1:-1:-1;;;;;20377:16:0;:6;-1:-1:-1;;;;;20377:16:0;;;20369:66;;;;-1:-1:-1;;;20369:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20447:14;20463;20490:6;-1:-1:-1;;;;;20481:15:0;:6;-1:-1:-1;;;;;20481:15:0;;:53;;20519:6;20527;20481:53;;;20500:6;20508;20481:53;20446:88;;-1:-1:-1;20446:88:0;-1:-1:-1;;;;;;20553:20:0;;20545:63;;;;;-1:-1:-1;;;20545:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20627:15:0;;;20662:1;20627:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:37;20619:79;;;;;-1:-1:-1;;;20619:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20739:21;20763:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;20739:56;;20806:12;20848:6;20856;20831:32;;;;;;-1:-1:-1;;;;;20831:32:0;;;;;;;;-1:-1:-1;;;;;20831:32:0;;;;;;;;;;;;;;;;;;;;;;;20821:43;;;;;;20806:58;;20954:4;20943:8;20937:15;20932:2;20922:8;20918:17;20915:1;20907:52;20899:60;;20994:4;-1:-1:-1;;;;;20980:30:0;;21011:6;21019;20980:46;;;;;;;;;;;;;-1:-1:-1;;;;;20980:46:0;;;;;;-1:-1:-1;;;;;20980:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;21037:15:0;;;;;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:30;;;;;-1:-1:-1;;;;;;21037:30:0;;;;;;;;21078:15;;;;;;:23;;;;;;;;:30;;;;;;;;21164:8;:19;;-1:-1:-1;21164:19:0;;;;;;;;;;;;;;;;;;;;;;21233:15;;21199:50;;;;;;;;;;;;;;;;;;;;;;20265:992;;;;;;;;:::o;19704:71::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19704:71:0;;:::o;21265:161::-;21350:11;;-1:-1:-1;;;;;21350:11:0;21336:10;:25;21328:65;;;;;-1:-1:-1;;;21328:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21404:5;:14;;-1:-1:-1;;;;;;21404:14:0;-1:-1:-1;;;;;21404:14:0;;;;;;;;;;21265:161::o;-1:-1:-1:-;;;;;;;;:::o

Swarm Source

ipfs://e96ab7ff466656d3784d59e50b8e407247d2d5ba79a87aa44b57253d1843411b
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.