MOVR Price: $2.13 (-0.47%)

Contract

0x168C95536C77Be5400EED2AEEE21ef64D9c8CA2E

Overview

MOVR Balance

Moonriver Chain LogoMoonriver Chain LogoMoonriver Chain Logo0 MOVR

MOVR Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To

There are no matching entries

> 10 Internal Transactions found.

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
26331632022-09-24 12:16:421224 days ago1664021802
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
26331252022-09-24 12:08:361224 days ago1664021316
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
26283252022-09-23 19:25:061225 days ago1663961106
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
26283232022-09-23 19:24:421225 days ago1663961082
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
26283112022-09-23 19:22:181225 days ago1663960938
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
26282922022-09-23 19:18:241225 days ago1663960704
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
26133552022-09-21 14:58:541227 days ago1663772334
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
26133382022-09-21 14:55:181227 days ago1663772118
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25751842022-09-16 1:08:541232 days ago1663290534
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25745532022-09-15 22:41:061232 days ago1663281666
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25742672022-09-15 21:34:301232 days ago1663277670
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25742552022-09-15 21:31:301232 days ago1663277490
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25742292022-09-15 21:25:421232 days ago1663277142
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25742182022-09-15 21:22:241232 days ago1663276944
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25741802022-09-15 21:12:301232 days ago1663276350
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25741672022-09-15 21:09:241232 days ago1663276164
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25741292022-09-15 21:00:421232 days ago1663275642
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25741222022-09-15 20:59:011232 days ago1663275541
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25740972022-09-15 20:53:361232 days ago1663275216
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25740882022-09-15 20:51:301232 days ago1663275090
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25740692022-09-15 20:47:121233 days ago1663274832
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25740662022-09-15 20:46:241233 days ago1663274784
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25740502022-09-15 20:41:481233 days ago1663274508
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25740452022-09-15 20:40:421233 days ago1663274442
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
25740302022-09-15 20:36:361233 days ago1663274196
0x168C9553...4D9c8CA2E
 Contract Creation0 MOVR
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZirconEnergyFactory

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: GPL-3.0
pragma solidity =0.5.16;
import "./ZirconEnergy.sol";
import "./ZirconEnergyRevenue.sol";
import "./interfaces/IZirconEnergyFactory.sol";
import "./interfaces/IZirconEnergyRevenue.sol";

contract ZirconEnergyFactory is IZirconEnergyFactory{
    mapping(address => mapping(address => address)) public getEnergy;
    mapping(address => mapping(address => address)) public getEnergyRevenue;
    address[] public allEnergies;
    address[] public allEnergiesRevenue;
    address public feeToSetter;
    address public migrator;
    uint public insurancePerMille;

    uint public feePercentageRev;
    uint public feePercentageEnergy;
    struct Fee {
        uint112 minPylonFee;
        uint112 maxPylonFee;
    }
    Fee private fee;

    event EnergyCreated(address indexed pair, address indexed energy, address tokenA, address tokenB, uint);

    modifier onlyFeeToSetter {
        require(msg.sender == feeToSetter, 'ZPT: FORBIDDEN');
        _;
    }
    modifier onlyMigrator {
        require(msg.sender == migrator, 'ZPT: FORBIDDEN');
        _;
    }

    constructor(address _feeToSetter, address _migrator) public {
        fee = Fee({minPylonFee: 1, maxPylonFee: 50});
        insurancePerMille = 100;
        feePercentageRev = 20;
        feeToSetter = _feeToSetter;
        migrator = _migrator;
    }

    function getMinMaxFee() external view returns (uint112 minFee, uint112 maxFee) {
        minFee = fee.minPylonFee;
        maxFee = fee.maxPylonFee;
    }

    function setFee(uint112 _minPylonFee, uint112 _maxPylonFee) external onlyFeeToSetter {
        fee.minPylonFee = _minPylonFee;
        fee.maxPylonFee = _maxPylonFee;
    }

    function setInsurancePerMille(uint _insurancePerMille) external onlyFeeToSetter {
        insurancePerMille = _insurancePerMille;
    }

    function allEnergiesLength() external view returns (uint) {
        return allEnergies.length;
    }

    function allEnergiesRevenueLength() external view returns (uint) {
        return allEnergiesRevenue.length;
    }

    function energyCodeHash() public pure returns (bytes32) {
        return keccak256(type(ZirconEnergy).creationCode);
    }

    function energyRevenueCodeHash() public pure returns (bytes32) {
        return keccak256(type(ZirconEnergy).creationCode);
    }

    function energyFor(address token, address pair) view internal returns (address energy) {
        energy = address(uint(keccak256(abi.encodePacked(
        hex'ff',
        address(this),
        keccak256(abi.encodePacked(pair, token)),
        hex'f7f47583f133c1e04059755d96b165532bef2114faae8e068f21ffd8fe846bd0' // init code hash
        ))));
    }

    function pylonFor(address tokenA, address tokenB, address pair, address pylonFactory) pure internal returns (address pylon) {
//       console.log("pylonFor", tokenA, tokenB);
//       console.log("pylonFor", pair, pylonFactory);
        pylon = address(uint(keccak256(abi.encodePacked(
        hex'ff',
        pylonFactory,
        keccak256(abi.encodePacked(tokenA, tokenB, pair)),
        hex'9fc442a4d7a12215c697eb81564442a0cd83ff2b9db622486b898fe36004e492' // init code hash
        ))));
    }

    function createEnergyRev(address _pair, address _tokenA, address _tokenB, address _pylonFactory) external returns (address energy) {
        require(_tokenA != _tokenB, 'ZF: IDENTICAL_ADDRESS');
        require(_pair != address(0), 'ZE: ZERO_ADDRESS');
        (address token0, address token1) = _tokenA < _tokenB ? (_tokenA, _tokenB) : (_tokenB, _tokenA);
        require(getEnergyRevenue[token0][token1] == address(0), 'ZE: ENERGY_EXISTS'); // single check is sufficient
        bytes memory bytecode = type(ZirconEnergyRevenue).creationCode;
        require(bytecode.length != 0, "Create2: bytecode length is zero");
        bytes32 salt = keccak256(abi.encodePacked(_pair, token0, token1));
        assembly {
            energy := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        require(energy != address(0), "Create2: Failed on deploy");
        address energy0 = energyFor(token0, _pair);
        address energy1 = energyFor(token1, _pair);
        // pylon 0 always with token0 first
        address pylon0 = pylonFor(token0, token1, _pair, _pylonFactory);
        address pylon1 = pylonFor(token1, token0, _pair, _pylonFactory);

        IZirconEnergyRevenue(energy).initialize(_pair, token0, token1, energy0, energy1, pylon0, pylon1);
        getEnergyRevenue[token0][token1] = energy;
        getEnergyRevenue[token1][token0] = energy;
        allEnergiesRevenue.push(energy);
        emit EnergyCreated(_pair, energy, token0, token1, allEnergies.length);
    }


    function createEnergy(address _pylon, address _pair, address _tokenA, address _tokenB) external returns (address energy) {
        require(_tokenA != _tokenB, 'ZF: IDENTICAL_ADDRESS');
        require(_pylon != address(0) && _pair != address(0), 'ZE: ZERO_ADDRESS');
        require(getEnergy[_tokenA][_tokenB] == address(0), 'ZE: ENERGY_EXISTS'); // single check is sufficient
        bytes memory bytecode = type(ZirconEnergy).creationCode;
        require(bytecode.length != 0, "Create2: bytecode length is zero");
        bytes32 salt = keccak256(abi.encodePacked(_pair, _tokenA));
        assembly {
            energy := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        require(energy != address(0), "Create2: Failed on deploy");
        IZirconEnergy(energy).initialize(_pylon, _pair, _tokenA, _tokenB);
        getEnergy[_tokenA][_tokenB] = energy;
        allEnergies.push(energy);
        emit EnergyCreated(_pair, energy, _tokenA, _tokenB, allEnergies.length);
    }

    function migrateEnergyLiquidity(address pair, address token, address newEnergy) external onlyMigrator{
        require(newEnergy != address(0), 'ZE: ZERO_ADDRESS');
        address energy = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                address(this),
                keccak256(abi.encodePacked(pair, token)),
                energyCodeHash() // init code hash
            ))));
        IZirconEnergy(energy).migrateLiquidity(newEnergy);
    }

    function migrateEnergyRevenue(address oldEnergy, address newEnergy) external onlyMigrator{
        require(newEnergy != address(0), 'ZE: ZERO_ADDRESS');
        IZirconEnergyRevenue(oldEnergy).migrateLiquidity(newEnergy);
    }

    function migrateEnergyRevenueFees(address oldEnergy, address newEnergy) external onlyMigrator{
        require(newEnergy != address(0), 'ZE: ZERO_ADDRESS');

        uint feeValue0 = IZirconEnergyRevenue(oldEnergy).feeValue0();
        uint feeValue1 = IZirconEnergyRevenue(oldEnergy).feeValue1();
        IZirconEnergyRevenue(newEnergy).setFeeValue(feeValue0, feeValue1);

    }

    function migrateEnergy(address oldEnergy, address newEnergy) external onlyMigrator{
        require(newEnergy != address(0), 'ZE: ZERO_ADDRESS');

        IZirconEnergy(oldEnergy).migrateLiquidity(newEnergy);
    }

    function setFeePercentageRev(uint _fee) external onlyFeeToSetter {
        require(_fee <= 100, 'ZE: FEE_TOO_HIGH');
        require(_fee >= 0, 'ZE: FEE_TOO_LOW');
        feePercentageRev = _fee;
    }

    function setFeePercentageEnergy(uint _fee) external onlyFeeToSetter {
        require(_fee <= 100, 'ZE: FEE_TOO_HIGH');
        require(_fee >= 0, 'ZE: FEE_TOO_LOW');
        feePercentageEnergy = _fee;
    }

    function setFeeToSetter(address _feeToSetter) external onlyFeeToSetter {
        feeToSetter = _feeToSetter;
    }

    function setMigrator(address _migrator) external onlyMigrator {
        migrator = _migrator;
    }
    function getFees(address _token, uint _amount, address _to, address energyRev) external onlyFeeToSetter {

        require(_amount != 0, "Operations: Cannot recover zero balance");

        IZirconEnergyRevenue(energyRev).getFees(_token, _amount, _to);
    }
}

//SPDX-License-Identifier: Unlicense
pragma solidity =0.5.16;

//import "hardhat/console.sol";
import "./interfaces/IZirconEnergy.sol";
import '@uniswap/v2-core/contracts/interfaces/IUniswapV2ERC20.sol';
import "./libraries/SafeMath.sol";
import "./interfaces/IZirconEnergyFactory.sol";
import "../interfaces/IZirconPair.sol";
import "../interfaces/IZirconPylon.sol";
import '../libraries/Math.sol';

contract ZirconEnergy is IZirconEnergy {

  /*
  Zircon Energy is the protocol-wide accumulator of revenue.
  Each Pylon ahas an energy that works as a "bank account" and works as an insurance portion balance
*/

  using SafeMath for uint112;
  using SafeMath for uint256;

  struct Pylon {
    address pylonAddress;
    address pairAddress;
    address floatToken;
    address anchorToken;
  }
  Pylon pylon;

  address energyFactory;
  uint anchorReserve; //Used to track balances and sync up in case of donations
  bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));
  // **** MODIFIERS *****
  uint public initialized = 0;

  modifier _initialize() {
    require(initialized == 1, 'Zircon: FORBIDDEN');
    _;
  }
  constructor() public {
    energyFactory = msg.sender;
  }

  function getFee() internal view returns (uint112 minFee, uint112 maxFee) {
    (minFee, maxFee) = IZirconEnergyFactory(energyFactory).getMinMaxFee();
  }

  function initialize(address _pylon, address _pair, address _token0, address _token1) external {
    require(initialized == 0, "ZER: AI");
    require(msg.sender == energyFactory, 'Zircon: FORBIDDEN'); // sufficient check
    bool isFloatToken0 = IZirconPair(_pair).token0() == _token0;
    (address tokenA, address tokenB) = isFloatToken0 ? (_token0, _token1) : (_token1, _token0);
    pylon = Pylon(
      _pylon,
      _pair,
      tokenA,
      tokenB
    );
    // Approving pylon to use anchor tokens
    IUniswapV2ERC20(_pair).approve(_pylon, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
    IUniswapV2ERC20(tokenB).approve(_pylon, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);

    initialized = 1;

  }

  // ****** HELPER FUNCTIONS *****
  function _safeTransfer(address token, address to, uint value) private {
    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
    require(success && (data.length == 0 || abi.decode(data, (bool))), 'Zircon Pylon: TRANSFER_FAILED');
  }

  modifier _onlyPylon() {
    require(pylon.pylonAddress == msg.sender, "ZE: Not Pylon");
    _;
  }
  modifier _onlyPair() {
    require(pylon.pairAddress == msg.sender, "ZE: Not Pylon");
    _;
  }
  function registerFee() external _onlyPylon _initialize{
    uint balance = IUniswapV2ERC20(pylon.anchorToken).balanceOf(address(this));
    require(balance >= anchorReserve, "ZE: Anchor not sent");

    uint register = balance.sub(anchorReserve);
    uint feePercentageForRev = IZirconEnergyFactory(energyFactory).feePercentageEnergy();
    address energyRevAddress = IZirconEnergyFactory(energyFactory).getEnergyRevenue(pylon.floatToken, pylon.anchorToken);
    uint toSend = register.mul(feePercentageForRev)/(100);
    if(toSend != 0) _safeTransfer(pylon.anchorToken, energyRevAddress, toSend);

    anchorReserve = balance.sub(toSend);
  }

  //Called when tokens are withdrawn to ensure pylon doesn't get bricked
  function syncReserve() external _onlyPylon _initialize {
      anchorReserve = IUniswapV2ERC20(pylon.anchorToken).balanceOf(address(this));
  }


  //Returns the fee in basis points (0.01% units, needs to be divided by 10000)
  //Uses two piece-wise parabolas. Between 0.45 and 0.55 the fee is very low (minFee).
  //After the cutoff it uses a steeper parabola defined by a max fee at the extremes (very high, up to 1% by default).
  function getFeeByGamma(uint gammaMulDecimals) _initialize external view returns (uint amount) {
    (uint _minFee, uint _maxFee) = getFee();
    uint _gammaHalf = 5e17;
    uint x = (gammaMulDecimals > _gammaHalf) ? (gammaMulDecimals - _gammaHalf).mul(10) : (_gammaHalf - gammaMulDecimals).mul(10);
    if (gammaMulDecimals <= 45e16 || gammaMulDecimals >= 55e16) {
      amount = (_maxFee.mul(x).mul(x))/(25e36); //25 is a reduction factor based on the 0.45-0.55 range we're using.
    } else {
      amount = (_minFee.mul(x).mul(x).mul(36)/(1e36)).add(_minFee); //Ensures minFee is the lowest value.
    }
  }


  function migrateLiquidity(address newEnergy) external{
    require(msg.sender == energyFactory, 'ZP: FORBIDDEN'); // sufficient check

    uint balance = IZirconPair(pylon.pairAddress).balanceOf(address(this));
    uint balanceAnchor = IUniswapV2ERC20(pylon.anchorToken).balanceOf(address(this));

    _safeTransfer(pylon.pairAddress, newEnergy, balance);
    _safeTransfer(pylon.anchorToken, newEnergy, balanceAnchor);
  }




}

pragma solidity =0.5.16;
import '@uniswap/v2-core/contracts/interfaces/IUniswapV2ERC20.sol';
import "./libraries/SafeMath.sol";
import "../interfaces/IZirconPair.sol";
import "../interfaces/IZirconPylon.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "hardhat/console.sol";
import "./interfaces/IZirconEnergyFactory.sol";

contract ZirconEnergyRevenue is ReentrancyGuard  {
    using SafeMath for uint112;
    using SafeMath for uint256;

    uint public reserve;
    address public energyFactory;
    uint public feeValue1;
    uint public feeValue0;
    struct Zircon {
        address pairAddress;
        address floatToken;
        address anchorToken;
        address energy0;
        address energy1;
        address pylon0;
        address pylon1;
    }
    Zircon zircon;
    bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));
    function _safeTransfer(address token, address to, uint value) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'Zircon Pylon: TRANSFER_FAILED');
    }
    // **** MODIFIERS *****
    uint public initialized = 0;

    modifier _initialize() {
        require(initialized == 1, 'Zircon: FORBIDDEN');
        _;
    }
    modifier _onlyPair() {
        require(zircon.pairAddress == msg.sender, "ZE: Not Pair");
        _;
    }

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

    function initialize(address _pair, address _tokenA, address _tokenB, address _energy0, address _energy1, address _pylon0, address _pylon1) external {
        require(initialized == 0, "ZER: Not Factory");
        require(energyFactory == msg.sender, "ZER: Not Factory");
        zircon = Zircon(
            _pair,
            _tokenA,
            _tokenB,
            _energy0,
            _energy1,
            _pylon0,
            _pylon1
        );

        initialized = 1;

    }


    function setFeeValue(uint _feeValue0, uint _feeValue1) external {
        require(energyFactory == msg.sender, "ZER: Not Factory");
        feeValue1 = _feeValue1;
        feeValue0 = _feeValue0;
    }

    function calculate(uint percentage) external _onlyPair nonReentrant _initialize {
        uint balance = IUniswapV2ERC20(zircon.pairAddress).balanceOf(address(this));
        require(balance > reserve, "ZER: Reverted");

        //Percentage is feeValue/TPV, percentage of pool reserves that are actually fee
        //It's reduced by mint fee already
        uint totalSupply = IUniswapV2ERC20(zircon.pairAddress).totalSupply();
        //These are the PTBs, balance of pool tokens held by each pylon vault
        uint pylonBalance0 = IUniswapV2ERC20(zircon.pairAddress).balanceOf(zircon.pylon0);
        uint pylonBalance1 = IUniswapV2ERC20(zircon.pairAddress).balanceOf(zircon.pylon1);
        {
            (uint112 _reservePair0, uint112 _reservePair1,) = IZirconPair(zircon.pairAddress).getReserves();

            //Increments the contract variable that stores total fees acquired by pair. Multiplies by each Pylon's share

            feeValue0 += percentage.mul(_reservePair1).mul(2).mul(pylonBalance0)/totalSupply.mul(1e18);
            feeValue1 += percentage.mul(_reservePair0).mul(2).mul(pylonBalance1)/totalSupply.mul(1e18);
        }

        {
            uint feePercentageForRev = IZirconEnergyFactory(energyFactory).feePercentageRev();
            uint amount = balance.sub(reserve);
            uint pylon0Liq = (amount.mul(pylonBalance0)/totalSupply).mul(100 - feePercentageForRev)/(100);
            uint pylon1Liq = (amount.mul(pylonBalance1)/totalSupply).mul(100 - feePercentageForRev)/(100);
            _safeTransfer(zircon.pairAddress, zircon.energy0, pylon0Liq);
            _safeTransfer(zircon.pairAddress, zircon.energy1, pylon1Liq);
            reserve = balance.sub(pylon0Liq.add(pylon1Liq));
        }
    }

    function changePylonAddresses(address _pylonAddressA, address _pylonAddressB) external {
        require(msg.sender == energyFactory, 'Zircon: FORBIDDEN'); // sufficient check
        zircon.pylon0 = _pylonAddressA;
        zircon.pylon1 = _pylonAddressB;
    }

    function migrateLiquidity(address newEnergy) external{
        require(msg.sender == energyFactory, 'ZP: FORBIDDEN'); // sufficient check
        uint balance = IZirconPair(zircon.pairAddress).balanceOf(address(this));
        uint anchorBalance = IZirconPair(zircon.anchorToken).balanceOf(address(this));
        uint floatBalance = IZirconPair(zircon.floatToken).balanceOf(address(this));
        _safeTransfer(zircon.pairAddress, newEnergy, balance);
        _safeTransfer(zircon.anchorToken, newEnergy, anchorBalance);
        _safeTransfer(zircon.floatToken, newEnergy, floatBalance);
    }


    function getBalanceFromPair() external _initialize returns (uint balance) {
        require(msg.sender == zircon.pylon0 || msg.sender == zircon.pylon1, "ZE: Not Pylon");
        if(msg.sender == zircon.pylon0) {
            balance = feeValue0;
            feeValue0 = 0;

        } else if(msg.sender == zircon.pylon1) {
            balance = feeValue1;
            feeValue1 = 0;
        }
    }

    function getFees(address _token, uint _amount, address _to) external {
        require(msg.sender == energyFactory, "ZER: Not properly called");
        require(_amount != 0, "Operations: Cannot recover zero balance");

        if(_token == zircon.pairAddress) {
            require(_amount <= reserve, "ZER: Reverted");
            reserve = reserve.sub(_amount);
        }

        _safeTransfer(_token, _to, _amount);
    }
}

pragma solidity =0.5.16;

interface IZirconEnergyFactory {

    // Variables
    function allEnergies(uint p) external view returns (address);
    function insurancePerMille() external view returns (uint);
    function feePercentageRev() external view returns (uint);
    function feePercentageEnergy() external view returns (uint);
    function getEnergy(address _tokenA, address _tokenB) external view returns (address energy);
    function getEnergyRevenue(address _tokenA, address _tokenB) external view returns (address energy);
    function allEnergiesLength() external view returns (uint);
    function feeToSetter() external pure returns (address);
    function setMigrator(address _migrator) external;
    function setFeeToSetter(address _feeToSetter) external;
    function setInsurancePerMille(uint _insurancePerMille) external;
    function setFeePercentageRev(uint fee) external;
    function setFeePercentageEnergy(uint fee) external;
    // Functions
    function createEnergy(address, address, address, address) external returns (address energy);
    function createEnergyRev(address, address, address, address) external returns (address energy);
    function setFee(uint112 _minPylonFee, uint112 _maxPylonFee) external;
    function getMinMaxFee() external view returns (uint112 minFee, uint112 maxFee);
    function getFees(address _token, uint _amount, address _to, address energyRev) external;
    function migrateEnergyLiquidity(address pair, address token, address newEnergy) external;
    function migrateEnergyRevenue(address oldEnergy, address newEnergy) external;
    function migrateEnergyRevenueFees(address oldEnergy, address newEnergy) external;
    function migrateEnergy(address oldEnergy, address newEnergy) external;

}

pragma solidity =0.5.16;

interface IZirconEnergyRevenue {
    function initialize(address _pair, address _tokenA, address _tokenB, address energy0, address energy1, address pylon0, address pylon1) external;
    function calculate(uint percentage) external;
    function migrateLiquidity(address newEnergy) external;
    function getBalanceFromPair() external returns (uint);
    function feeValue1() external returns (uint);
    function feeValue0() external returns (uint);
    function getFees(address _token, uint _amount, address _to) external;
    function setFeeValue(uint _feeValue0, uint _feeValue1) external;
}

pragma solidity =0.5.16;

interface IZirconEnergy {
    function initialize(address _pylon, address _pair, address _token0, address _token1) external;
//    function breakPiggybank(uint _requestedLiquidity) external returns (uint returnedLiquidity);
//    function syncPylonFee() external;
//    function syncPairFee() external;
    function getFeeByGamma(uint gammaMulDecimals) external view returns (uint amount);
    function registerFee() external;
    function syncReserve() external;
    function migrateLiquidity(address newEnergy) external;
}

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

// SPDX-License-Identifier: GPL-3.0

pragma solidity =0.5.16;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

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

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

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

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.16;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function energyRevenueAddress() external pure returns (address);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burnOneSide(address to, bool isReserve0) external returns (uint amount);
    function mintOneSide(address to, bool isReserve0) external returns (uint liquidity, uint amount0, uint amount1);
    function publicMintFee() external;
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
//    function skim(address to) external;
    function sync() external;

    function tryLock() external;

    function initialize(address, address, address) external;
    function changeEnergyRevAddress(address _revAddress) external;

}

pragma solidity >=0.5.16;
interface IZirconPylon {
    function initialized() external view returns (uint);
//    function anchorPoolTokenAddress() external view returns (address);
//    function floatPoolTokenAddress() external view returns (address);
//    function energyAddress() external view returns (address);
    function gammaMulDecimals() external view returns (uint);
    function isFloatReserve0() external view returns (bool);
    function virtualAnchorBalance() external view returns (uint);
    function anchorKFactor() external view returns (uint);
    function lastRootKTranslated() external view returns (uint);
    function formulaSwitch() external view returns (bool);
    function EMABlockNumber() external view returns (bool);
    function getSyncReserves() external view returns  (uint112 _reserve0, uint112 _reserve1);
    // Called once by the factory at time of deployment
    // @_floatPoolToken -> Contains Address Of Float PT
    // @_anchorPoolToken -> Contains Address Of Anchor PT
    // @token0 -> Float token
    // @token1 -> Anchor token
    function initMigratedPylon(uint _gamma, uint _vab, uint _anchorKFactor, bool _formulaSwitch) external;
    function initialize(address _floatPoolTokenAddress, address _anchorPoolTokenAddress, address _floatToken, address _anchorToken, address _pairAddress, address _pairFactoryAddress, address _energy, address _energyRev) external;
    // On init pylon we have to handle two cases
    // The first case is when we initialize the pair through the pylon
    // And the second one is when initialize the pylon with a pair al ready existing
    function initPylon(address _to) external returns (uint floatLiquidity, uint anchorLiquidity);
    // External Function called to mint pool Token
    // Liquidity have to be sent before
    function mintPoolTokens(address to, bool isAnchor) external returns (uint liquidity);
//    function mintAsync100(address to, bool isAnchor) external returns (uint liquidity);
    function mintAsync(address to, bool shouldMintAnchor) external returns (uint liquidity);
    // Burn Async send both tokens 50-50
    // Liquidity has to be sent before
    function burnAsync(address _to, bool _isAnchor) external returns (uint amount0, uint amount1);
    // Burn send liquidity back to user burning Pool tokens
    // The function first uses the reserves of the Pylon
    // If not enough reserves it burns The Pool Tokens of the pylon
    function burn(address _to, bool _isAnchor) external returns (uint amount);
    function changeEnergyAddress(address _energyAddress, address _energyRevAddress) external;

}

// SPDX-License-Identifier: GPL-3.0
pragma solidity =0.5.16;
// a library for performing various math operations
library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }
    function max(uint x, uint y) internal pure returns (uint z) {
        z = x > y ? x : y;
    }
    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

File 12 of 13 : ReentrancyGuard.sol
pragma solidity ^0.5.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 *
 * _Since v2.5.0:_ this module is now much more gas efficient, given net gas
 * metering changes introduced in the Istanbul hardfork.
 */
contract ReentrancyGuard {
    bool private _notEntered;

    constructor () internal {
        // Storing an initial non-zero value makes deployment a bit more
        // expensive, but in exchange the refund on every call to nonReentrant
        // will be lower in amount. Since refunds are capped to a percetange of
        // the total transaction's gas, it is best to keep them low in cases
        // like this one, to increase the likelihood of the full refund coming
        // into effect.
        _notEntered = true;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_notEntered, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _notEntered = false;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }
}

File 13 of 13 : console.sol
// SPDX-License-Identifier: MIT
pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"},{"internalType":"address","name":"_migrator","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"address","name":"energy","type":"address"},{"indexed":false,"internalType":"address","name":"tokenA","type":"address"},{"indexed":false,"internalType":"address","name":"tokenB","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"EnergyCreated","type":"event"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allEnergies","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allEnergiesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allEnergiesRevenue","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allEnergiesRevenueLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_pylon","type":"address"},{"internalType":"address","name":"_pair","type":"address"},{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"}],"name":"createEnergy","outputs":[{"internalType":"address","name":"energy","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"address","name":"_pylonFactory","type":"address"}],"name":"createEnergyRev","outputs":[{"internalType":"address","name":"energy","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"energyCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"energyRevenueCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"feePercentageEnergy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feePercentageRev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getEnergy","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getEnergyRevenue","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"energyRev","type":"address"}],"name":"getFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMinMaxFee","outputs":[{"internalType":"uint112","name":"minFee","type":"uint112"},{"internalType":"uint112","name":"maxFee","type":"uint112"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"insurancePerMille","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"oldEnergy","type":"address"},{"internalType":"address","name":"newEnergy","type":"address"}],"name":"migrateEnergy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"newEnergy","type":"address"}],"name":"migrateEnergyLiquidity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"oldEnergy","type":"address"},{"internalType":"address","name":"newEnergy","type":"address"}],"name":"migrateEnergyRevenue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"oldEnergy","type":"address"},{"internalType":"address","name":"newEnergy","type":"address"}],"name":"migrateEnergyRevenueFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint112","name":"_minPylonFee","type":"uint112"},{"internalType":"uint112","name":"_maxPylonFee","type":"uint112"}],"name":"setFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFeePercentageEnergy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFeePercentageRev","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_insurancePerMille","type":"uint256"}],"name":"setInsurancePerMille","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_migrator","type":"address"}],"name":"setMigrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516139563803806139568339818101604052604081101561003357600080fd5b50805160209182015160408051808201909152600180825260329190940152600980546001600160701b031916909317600160701b600160e01b031916601960711b1790925560646006556014600755600480546001600160a01b03199081166001600160a01b03938416179091556005805490911691909216179055613897806100bf6000396000f3fe608060405234801561001057600080fd5b50600436106101495760003560e01c8063094b74151461014e5780630b0d7eb1146101725780630c16293a146101a25780631b151bc1146101de57806323cf3118146101fb578063295305d1146102215780634dd814421461024f57806363e1240114610269578063708284b41461029757806373e56b141461029f5780637cd07e47146102a757806388413ca0146102af5780638d72dfee146102dd5780639172e784146102fa5780639364a2961461029f57806394a77e5b14610338578063957ddb16146103765780639f9c54c914610393578063a2669ce7146103b0578063a2e74af6146103b8578063b5b729f6146103de578063ba77c79214610416578063cd2ba9641461041e578063d63135601461043b578063dcd8fc0b14610469578063e95078cf14610221578063f732ff4b14610471575b600080fd5b61015661049f565b604080516001600160a01b039092168252519081900360200190f35b6101a06004803603604081101561018857600080fd5b506001600160701b03813581169160200135166104ae565b005b6101a0600480360360808110156101b857600080fd5b506001600160a01b03813581169160208101359160408201358116916060013516610539565b6101a0600480360360208110156101f457600080fd5b503561063d565b6101a06004803603602081101561021157600080fd5b50356001600160a01b03166106db565b6101a06004803603604081101561023757600080fd5b506001600160a01b038135811691602001351661074d565b61025761085f565b60408051918252519081900360200190f35b610271610865565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b610257610880565b610257610886565b6101566108b8565b610156600480360360408110156102c557600080fd5b506001600160a01b03813581169160200135166108c7565b6101a0600480360360208110156102f357600080fd5b50356108ed565b6101566004803603608081101561031057600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516610942565b6101566004803603608081101561034e57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516610cc9565b6101566004803603602081101561038c57600080fd5b503561121a565b6101a0600480360360208110156103a957600080fd5b5035611241565b6102576112df565b6101a0600480360360208110156103ce57600080fd5b50356001600160a01b03166112e5565b6101a0600480360360608110156103f457600080fd5b506001600160a01b038135811691602081013582169160409091013516611357565b61025761150f565b6101566004803603602081101561043457600080fd5b5035611515565b6101a06004803603604081101561045157600080fd5b506001600160a01b0381358116916020013516611522565b6102576116ef565b6101566004803603604081101561048757600080fd5b506001600160a01b03813581169160200135166116f5565b6004546001600160a01b031681565b6004546001600160a01b031633146104fe576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b600980546001600160701b03928316600160701b02600160701b600160e01b0319949093166001600160701b03199091161792909216179055565b6004546001600160a01b03163314610589576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b826105c55760405162461bcd60e51b81526004018080602001828103825260278152602001806137fc6027913960400191505060405180910390fd5b604080516365b7c8b760e11b81526001600160a01b03868116600483015260248201869052848116604483015291519183169163cb6f916e9160648082019260009290919082900301818387803b15801561061f57600080fd5b505af1158015610633573d6000803e3d6000fd5b5050505050505050565b6004546001600160a01b0316331461068d576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b60648111156106d6576040805162461bcd60e51b815260206004820152601060248201526f0b48a74408c8a8abea89e9ebe90928e960831b604482015290519081900360640190fd5b600755565b6005546001600160a01b0316331461072b576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461079d576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b6001600160a01b0381166107eb576040805162461bcd60e51b815260206004820152601060248201526f5a453a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b816001600160a01b031663438ab5ac826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561084357600080fd5b505af1158015610857573d6000803e3d6000fd5b505050505050565b60035490565b6009546001600160701b0380821692600160701b9092041690565b60085481565b6000604051806020016108989061185f565b6020820181038252601f19601f8201166040525080519060200120905090565b6005546001600160a01b031681565b60016020908152600092835260408084209091529082529020546001600160a01b031681565b6004546001600160a01b0316331461093d576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b600655565b6000816001600160a01b0316836001600160a01b031614156109a3576040805162461bcd60e51b81526020600482015260156024820152745a463a204944454e544943414c5f4144445245535360581b604482015290519081900360640190fd5b6001600160a01b038516158015906109c357506001600160a01b03841615155b610a07576040805162461bcd60e51b815260206004820152601060248201526f5a453a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b6001600160a01b0383811660009081526020818152604080832086851684529091529020541615610a73576040805162461bcd60e51b81526020600482015260116024820152705a453a20454e455247595f45584953545360781b604482015290519081900360640190fd5b606060405180602001610a859061185f565b601f1982820381018352601f909101166040528051909150610adc576040805162461bcd60e51b81526020600482018190526024820152600080516020613823833981519152604482015290519081900360640190fd5b6000858560405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f592506001600160a01b038316610b9c576040805162461bcd60e51b8152602060048201526019602482015278437265617465323a204661696c6564206f6e206465706c6f7960381b604482015290519081900360640190fd5b60408051637c643b2f60e11b81526001600160a01b03898116600483015288811660248301528781166044830152868116606483015291519185169163f8c8765e9160848082019260009290919082900301818387803b158015610bff57600080fd5b505af1158015610c13573d6000803e3d6000fd5b5050506001600160a01b038087166000818152602081815260408083208a86168085529083528184208054878c166001600160a01b0319918216811790925560028054600181018255968190527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90960180549091168217905593548251958652928501528381019190915251909350918916916000805160206138438339815191529181900360600190a35050949350505050565b6000826001600160a01b0316846001600160a01b03161415610d2a576040805162461bcd60e51b81526020600482015260156024820152745a463a204944454e544943414c5f4144445245535360581b604482015290519081900360640190fd5b6001600160a01b038516610d78576040805162461bcd60e51b815260206004820152601060248201526f5a453a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b600080846001600160a01b0316866001600160a01b031610610d9b578486610d9e565b85855b6001600160a01b03808316600090815260016020908152604080832084861684529091529020549294509092501615610e12576040805162461bcd60e51b81526020600482015260116024820152705a453a20454e455247595f45584953545360781b604482015290519081900360640190fd5b606060405180602001610e249061186c565b601f1982820381018352601f909101166040528051909150610e7b576040805162461bcd60e51b81526020600482018190526024820152600080516020613823833981519152604482015290519081900360640190fd5b6040805160608a811b6001600160601b031990811660208085019190915287831b821660348501529186901b1660488301528251808303603c018152605c9092019092528051908201208251909182919084016000f594506001600160a01b038516610f2a576040805162461bcd60e51b8152602060048201526019602482015278437265617465323a204661696c6564206f6e206465706c6f7960381b604482015290519081900360640190fd5b6000610f36858b611718565b90506000610f44858c611718565b90506000610f5487878e8c6117b6565b90506000610f6487898f8d6117b6565b9050886001600160a01b031663358764768e8a8a888888886040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b03168152602001975050505050505050600060405180830381600087803b15801561105a57600080fd5b505af115801561106e573d6000803e3d6000fd5b5050505088600160008a6001600160a01b03166001600160a01b031681526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508860016000896001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060038990806001815401808255809150509060018203906000526020600020016000909192909190916101000a8154816001600160a01b0302191690836001600160a01b0316021790555050886001600160a01b03168d6001600160a01b03166000805160206138438339815191528a8a60028054905060405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a35050505050505050949350505050565b6002818154811061122757fe5b6000918252602090912001546001600160a01b0316905081565b6004546001600160a01b03163314611291576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b60648111156112da576040805162461bcd60e51b815260206004820152601060248201526f0b48a74408c8a8abea89e9ebe90928e960831b604482015290519081900360640190fd5b600855565b60025490565b6004546001600160a01b03163314611335576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113a7576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b6001600160a01b0381166113f5576040805162461bcd60e51b815260206004820152601060248201526f5a453a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b600030848460405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120611459610886565b60405160200180806001600160f81b0319815250600101846001600160a01b03166001600160a01b031660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012060001c9050806001600160a01b031663438ab5ac836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561061f57600080fd5b60075481565b6003818154811061122757fe5b6005546001600160a01b03163314611572576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b6001600160a01b0381166115c0576040805162461bcd60e51b815260206004820152601060248201526f5a453a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b6000826001600160a01b03166386f6f4306040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156115fd57600080fd5b505af1158015611611573d6000803e3d6000fd5b505050506040513d602081101561162757600080fd5b5051604080516350d7de8560e11b815290519192506000916001600160a01b0386169163a1afbd0a91600480830192602092919082900301818787803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b505050506040513d602081101561169a57600080fd5b50516040805163f222771560e01b8152600481018590526024810183905290519192506001600160a01b0385169163f22277159160448082019260009290919082900301818387803b15801561061f57600080fd5b60065481565b60006020818152928152604080822090935290815220546001600160a01b031681565b604080516001600160601b0319606093841b811660208084019190915294841b166034820152815160288183030181526048820183528051908501206001600160f81b031960688301523090931b6069820152607d8101929092527ff7f47583f133c1e04059755d96b165532bef2114faae8e068f21ffd8fe846bd0609d808401919091528151808403909101815260bd9092019052805191012090565b604080516001600160601b0319606096871b811660208084019190915295871b8116603483015293861b841660488201528151603c818303018152605c820183528051908601206001600160f81b0319607c8301529290951b909216607d85015260918401527f9fc442a4d7a12215c697eb81564442a0cd83ff2b9db622486b898fe36004e49260b1808501919091528151808503909101815260d19093019052815191012090565b610df48061187a83390190565b61118e8061266e8339019056fe6080604052600060065534801561001557600080fd5b50600480546001600160a01b03191633179055610dbd806100376000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80630269b9ca1461006757806303f187ea14610096578063158ef93e146100a0578063438ab5ac146100a85780634923b230146100ce578063f8c8765e146100d6575b600080fd5b6100846004803603602081101561007d57600080fd5b5035610114565b60408051918252519081900360200190f35b61009e610268565b005b610084610542565b61009e600480360360208110156100be57600080fd5b50356001600160a01b0316610548565b61009e6106c1565b61009e600480360360808110156100ec57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160600135166107d7565b6000600654600114610161576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b60008061016c610a6a565b6001600160701b0391821693501690506706f05b59d3b2000060008186116101a6576101a1868303600a63ffffffff610aea16565b6101b9565b6101b9828703600a63ffffffff610aea16565b905067063eb89da4ed0000861115806101da57506707a1fe16027700008610155b1561021e576b012ced32a16a1b11e826288960241b61020f82610203868263ffffffff610aea16565b9063ffffffff610aea16565b8161021657fe5b04945061025f565b61025c846a0c097ce7bc90715b34b9f160241b61024860246102038681868263ffffffff610aea16565b8161024f57fe5b049063ffffffff610b5316565b94505b50505050919050565b6000546001600160a01b031633146102b7576040805162461bcd60e51b815260206004820152600d60248201526c2d229d102737ba10283cb637b760991b604482015290519081900360640190fd5b600654600114610302576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561034d57600080fd5b505afa158015610361573d6000803e3d6000fd5b505050506040513d602081101561037757600080fd5b50516005549091508110156103c9576040805162461bcd60e51b815260206004820152601360248201527216914e88105b98da1bdc881b9bdd081cd95b9d606a1b604482015290519081900360640190fd5b60006103e060055483610ba290919063ffffffff16565b90506000600460009054906101000a90046001600160a01b03166001600160a01b031663708284b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561043257600080fd5b505afa158015610446573d6000803e3d6000fd5b505050506040513d602081101561045c57600080fd5b5051600480546002546003546040805163044209e560e51b81526001600160a01b03938416958101959095529082166024850152519394506000939116916388413ca0916044808301926020929190829003018186803b1580156104bf57600080fd5b505afa1580156104d3573d6000803e3d6000fd5b505050506040513d60208110156104e957600080fd5b5051905060006064610501858563ffffffff610aea16565b8161050857fe5b049050801561052857600354610528906001600160a01b03168383610bf2565b610538858263ffffffff610ba216565b6005555050505050565b60065481565b6004546001600160a01b03163314610597576040805162461bcd60e51b815260206004820152600d60248201526c2d281d102327a92124a22222a760991b604482015290519081900360640190fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156105e257600080fd5b505afa1580156105f6573d6000803e3d6000fd5b505050506040513d602081101561060c57600080fd5b5051600354604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561065f57600080fd5b505afa158015610673573d6000803e3d6000fd5b505050506040513d602081101561068957600080fd5b50516001549091506106a5906001600160a01b03168484610bf2565b6003546106bc906001600160a01b03168483610bf2565b505050565b6000546001600160a01b03163314610710576040805162461bcd60e51b815260206004820152600d60248201526c2d229d102737ba10283cb637b760991b604482015290519081900360640190fd5b60065460011461075b576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156107a657600080fd5b505afa1580156107ba573d6000803e3d6000fd5b505050506040513d60208110156107d057600080fd5b5051600555565b60065415610816576040805162461bcd60e51b81526020600482015260076024820152665a45523a20414960c81b604482015290519081900360640190fd5b6004546001600160a01b03163314610869576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b6000826001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ae57600080fd5b505afa1580156108c2573d6000803e3d6000fd5b505050506040513d60208110156108d857600080fd5b50516001600160a01b0316149050600080826108f55783856108f8565b84845b604080516080810182526001600160a01b03808c168083528b821660208085018290528388168587018190529387166060909501859052600080546001600160a01b0319908116851782556001805482168517905560028054821690961790955560038054909516909517909355845163095ea7b360e01b8152600481019290925260001960248301529351959750939550919363095ea7b39360448082019493918390030190829087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050506040513d60208110156109da57600080fd5b50506040805163095ea7b360e01b81526001600160a01b038981166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b158015610a3057600080fd5b505af1158015610a44573d6000803e3d6000fd5b505050506040513d6020811015610a5a57600080fd5b5050600160065550505050505050565b60048054604080516363e1240160e01b8152815160009485946001600160a01b0316936363e124019380830193919290829003018186803b158015610aae57600080fd5b505afa158015610ac2573d6000803e3d6000fd5b505050506040513d6040811015610ad857600080fd5b50805160209091015190939092509050565b6000811580610b0557505080820282828281610b0257fe5b04145b610b4d576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b80820182811015610b4d576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b4d576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310610c9b5780518252601f199092019160209182019101610c7c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610cfd576040519150601f19603f3d011682016040523d82523d6000602084013e610d02565b606091505b5091509150818015610d30575080511580610d305750808060200190516020811015610d2d57600080fd5b50515b610d81576040805162461bcd60e51b815260206004820152601d60248201527f5a6972636f6e2050796c6f6e3a205452414e534645525f4641494c4544000000604482015290519081900360640190fd5b505050505056fea265627a7a723158209902d661ff4fb63696078ea7b4bc6b449e7ce11e13953a0e85b46977b3bb7bb964736f6c6343000510003260806040526000600c5534801561001557600080fd5b506000805460ff19166001179055600280546001600160a01b0319163317905561114a806100446000396000f3fe608060405234801561001057600080fd5b50600436106100a45760003560e01c80630b48bd23146100a9578063158ef93e146100c357806317d1ff9f146100cb57806335876476146100ef578063438ab5ac1461014957806349d20f661461016f57806386f6f4301461019d578063a1afbd0a146101a5578063b9d92de8146101ad578063cb6f916e146101ca578063cd3293de14610200578063f222771514610208575b600080fd5b6100b161022b565b60408051918252519081900360200190f35b6100b161031f565b6100d3610325565b604080516001600160a01b039092168252519081900360200190f35b610147600480360360e081101561010557600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c09091013516610334565b005b6101476004803603602081101561015f57600080fd5b50356001600160a01b0316610485565b6101476004803603604081101561018557600080fd5b506001600160a01b0381358116916020013516610693565b6100b1610714565b6100b161071a565b610147600480360360208110156101c357600080fd5b5035610720565b610147600480360360608110156101e057600080fd5b506001600160a01b03813581169160208101359160409091013516610cd6565b6100b1610df0565b6101476004803603604081101561021e57600080fd5b5080359060200135610df6565b6000600c54600114610278576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b600a546001600160a01b031633148061029b5750600b546001600160a01b031633145b6102dc576040805162461bcd60e51b815260206004820152600d60248201526c2d229d102737ba10283cb637b760991b604482015290519081900360640190fd5b600a546001600160a01b03163314156102fe575060048054600090915561031c565b600b546001600160a01b031633141561031c57506003805460009091555b90565b600c5481565b6002546001600160a01b031681565b600c541561037c576040805162461bcd60e51b815260206004820152601060248201526f5a45523a204e6f7420466163746f727960801b604482015290519081900360640190fd5b6002546001600160a01b031633146103ce576040805162461bcd60e51b815260206004820152601060248201526f5a45523a204e6f7420466163746f727960801b604482015290519081900360640190fd5b6040805160e0810182526001600160a01b0398891680825297891660208201819052968916918101829052948816606086018190529388166080860181905292881660a086018190529190971660c0909401849052600580546001600160a01b031990811690971790556006805487169095179094556007805486169096179095556008805485169091179055600980548416909417909355600a805483169091179055600b805490911690911790556001600c55565b6002546001600160a01b031633146104d4576040805162461bcd60e51b815260206004820152600d60248201526c2d281d102327a92124a22222a760991b604482015290519081900360640190fd5b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561051f57600080fd5b505afa158015610533573d6000803e3d6000fd5b505050506040513d602081101561054957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561059c57600080fd5b505afa1580156105b0573d6000803e3d6000fd5b505050506040513d60208110156105c657600080fd5b5051600654604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561061957600080fd5b505afa15801561062d573d6000803e3d6000fd5b505050506040513d602081101561064357600080fd5b505160055490915061065f906001600160a01b03168585610e50565b600754610676906001600160a01b03168584610e50565b60065461068d906001600160a01b03168583610e50565b50505050565b6002546001600160a01b031633146106e6576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b600a80546001600160a01b039384166001600160a01b031991821617909155600b8054929093169116179055565b60045481565b60035481565b6005546001600160a01b0316331461076e576040805162461bcd60e51b815260206004820152600c60248201526b2d229d102737ba102830b4b960a11b604482015290519081900360640190fd5b60005460ff166107c5576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff19169055600c5460011461081a576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561086557600080fd5b505afa158015610879573d6000803e3d6000fd5b505050506040513d602081101561088f57600080fd5b505160015490915081116108da576040805162461bcd60e51b815260206004820152600d60248201526c1691548e8814995d995c9d1959609a1b604482015290519081900360640190fd5b600554604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561091f57600080fd5b505afa158015610933573d6000803e3d6000fd5b505050506040513d602081101561094957600080fd5b5051600554600a54604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b1580156109a157600080fd5b505afa1580156109b5573d6000803e3d6000fd5b505050506040513d60208110156109cb57600080fd5b5051600554600b54604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b158015610a2357600080fd5b505afa158015610a37573d6000803e3d6000fd5b505050506040513d6020811015610a4d57600080fd5b505160055460408051630240bc6b60e21b8152905192935060009283926001600160a01b031691630902f1ac916004808301926060929190829003018186803b158015610a9957600080fd5b505afa158015610aad573d6000803e3d6000fd5b505050506040513d6060811015610ac357600080fd5b5080516020909101519092509050610ae985670de0b6b3a764000063ffffffff610fe616565b610b1585610b096002818c6001600160701b03881663ffffffff610fe616565b9063ffffffff610fe616565b81610b1c57fe5b60048054929091049091019055610b3b85670de0b6b3a7640000610fe6565b610b5b84610b096002818c6001600160701b03891663ffffffff610fe616565b81610b6257fe5b60038054929091049091019055505060025460408051635d3be3c960e11b815290516000926001600160a01b03169163ba77c792916004808301926020929190829003018186803b158015610bb657600080fd5b505afa158015610bca573d6000803e3d6000fd5b505050506040513d6020811015610be057600080fd5b5051600154909150600090610bfc90879063ffffffff61104f16565b905060006064610c2d84820388610c19868a63ffffffff610fe616565b81610c2057fe5b049063ffffffff610fe616565b81610c3457fe5b04905060006064610c5285820389610c19878a63ffffffff610fe616565b81610c5957fe5b600554600854929091049250610c7c916001600160a01b03918216911684610e50565b600554600954610c99916001600160a01b03908116911683610e50565b610cb9610cac838363ffffffff61109f16565b899063ffffffff61104f16565b60019081556000805460ff19169091179055505050505050505050565b6002546001600160a01b03163314610d30576040805162461bcd60e51b81526020600482015260186024820152771691548e88139bdd081c1c9bdc195c9b1e4818d85b1b195960421b604482015290519081900360640190fd5b81610d6c5760405162461bcd60e51b81526004018080602001828103825260278152602001806110ef6027913960400191505060405180910390fd5b6005546001600160a01b0384811691161415610de057600154821115610dc9576040805162461bcd60e51b815260206004820152600d60248201526c1691548e8814995d995c9d1959609a1b604482015290519081900360640190fd5b600154610ddc908363ffffffff61104f16565b6001555b610deb838284610e50565b505050565b60015481565b6002546001600160a01b03163314610e48576040805162461bcd60e51b815260206004820152601060248201526f5a45523a204e6f7420466163746f727960801b604482015290519081900360640190fd5b600355600455565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310610ef95780518252601f199092019160209182019101610eda565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610f5b576040519150601f19603f3d011682016040523d82523d6000602084013e610f60565b606091505b5091509150818015610f8e575080511580610f8e5750808060200190516020811015610f8b57600080fd5b50515b610fdf576040805162461bcd60e51b815260206004820152601d60248201527f5a6972636f6e2050796c6f6e3a205452414e534645525f4641494c4544000000604482015290519081900360640190fd5b5050505050565b600081158061100157505080820282828281610ffe57fe5b04145b611049576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b80820382811115611049576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b80820182811015611049576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe4f7065726174696f6e733a2043616e6e6f74207265636f766572207a65726f2062616c616e6365a265627a7a7231582072ec96ea622bee2792b7c61061d3846cbdb3956f7c993cb20c92fd66680e907664736f6c634300051000324f7065726174696f6e733a2043616e6e6f74207265636f766572207a65726f2062616c616e6365437265617465323a2062797465636f6465206c656e677468206973207a65726f3b4e72e4103178db6cd2e27320e98d9afdd1ab6f078b707886d1bf92b9fd8b25a265627a7a72315820b5cb53795b27a5aee37d897cc57581562248c36a37dba54c82528fc1d2db9b2d64736f6c634300051000320000000000000000000000004ba754989b77925f47e26c54aaa1b03df23b32ce0000000000000000000000009aef9098af9d1e2d78fcd9b928c946a7f23307d3

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101495760003560e01c8063094b74151461014e5780630b0d7eb1146101725780630c16293a146101a25780631b151bc1146101de57806323cf3118146101fb578063295305d1146102215780634dd814421461024f57806363e1240114610269578063708284b41461029757806373e56b141461029f5780637cd07e47146102a757806388413ca0146102af5780638d72dfee146102dd5780639172e784146102fa5780639364a2961461029f57806394a77e5b14610338578063957ddb16146103765780639f9c54c914610393578063a2669ce7146103b0578063a2e74af6146103b8578063b5b729f6146103de578063ba77c79214610416578063cd2ba9641461041e578063d63135601461043b578063dcd8fc0b14610469578063e95078cf14610221578063f732ff4b14610471575b600080fd5b61015661049f565b604080516001600160a01b039092168252519081900360200190f35b6101a06004803603604081101561018857600080fd5b506001600160701b03813581169160200135166104ae565b005b6101a0600480360360808110156101b857600080fd5b506001600160a01b03813581169160208101359160408201358116916060013516610539565b6101a0600480360360208110156101f457600080fd5b503561063d565b6101a06004803603602081101561021157600080fd5b50356001600160a01b03166106db565b6101a06004803603604081101561023757600080fd5b506001600160a01b038135811691602001351661074d565b61025761085f565b60408051918252519081900360200190f35b610271610865565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b610257610880565b610257610886565b6101566108b8565b610156600480360360408110156102c557600080fd5b506001600160a01b03813581169160200135166108c7565b6101a0600480360360208110156102f357600080fd5b50356108ed565b6101566004803603608081101561031057600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516610942565b6101566004803603608081101561034e57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516610cc9565b6101566004803603602081101561038c57600080fd5b503561121a565b6101a0600480360360208110156103a957600080fd5b5035611241565b6102576112df565b6101a0600480360360208110156103ce57600080fd5b50356001600160a01b03166112e5565b6101a0600480360360608110156103f457600080fd5b506001600160a01b038135811691602081013582169160409091013516611357565b61025761150f565b6101566004803603602081101561043457600080fd5b5035611515565b6101a06004803603604081101561045157600080fd5b506001600160a01b0381358116916020013516611522565b6102576116ef565b6101566004803603604081101561048757600080fd5b506001600160a01b03813581169160200135166116f5565b6004546001600160a01b031681565b6004546001600160a01b031633146104fe576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b600980546001600160701b03928316600160701b02600160701b600160e01b0319949093166001600160701b03199091161792909216179055565b6004546001600160a01b03163314610589576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b826105c55760405162461bcd60e51b81526004018080602001828103825260278152602001806137fc6027913960400191505060405180910390fd5b604080516365b7c8b760e11b81526001600160a01b03868116600483015260248201869052848116604483015291519183169163cb6f916e9160648082019260009290919082900301818387803b15801561061f57600080fd5b505af1158015610633573d6000803e3d6000fd5b5050505050505050565b6004546001600160a01b0316331461068d576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b60648111156106d6576040805162461bcd60e51b815260206004820152601060248201526f0b48a74408c8a8abea89e9ebe90928e960831b604482015290519081900360640190fd5b600755565b6005546001600160a01b0316331461072b576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461079d576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b6001600160a01b0381166107eb576040805162461bcd60e51b815260206004820152601060248201526f5a453a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b816001600160a01b031663438ab5ac826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561084357600080fd5b505af1158015610857573d6000803e3d6000fd5b505050505050565b60035490565b6009546001600160701b0380821692600160701b9092041690565b60085481565b6000604051806020016108989061185f565b6020820181038252601f19601f8201166040525080519060200120905090565b6005546001600160a01b031681565b60016020908152600092835260408084209091529082529020546001600160a01b031681565b6004546001600160a01b0316331461093d576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b600655565b6000816001600160a01b0316836001600160a01b031614156109a3576040805162461bcd60e51b81526020600482015260156024820152745a463a204944454e544943414c5f4144445245535360581b604482015290519081900360640190fd5b6001600160a01b038516158015906109c357506001600160a01b03841615155b610a07576040805162461bcd60e51b815260206004820152601060248201526f5a453a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b6001600160a01b0383811660009081526020818152604080832086851684529091529020541615610a73576040805162461bcd60e51b81526020600482015260116024820152705a453a20454e455247595f45584953545360781b604482015290519081900360640190fd5b606060405180602001610a859061185f565b601f1982820381018352601f909101166040528051909150610adc576040805162461bcd60e51b81526020600482018190526024820152600080516020613823833981519152604482015290519081900360640190fd5b6000858560405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f592506001600160a01b038316610b9c576040805162461bcd60e51b8152602060048201526019602482015278437265617465323a204661696c6564206f6e206465706c6f7960381b604482015290519081900360640190fd5b60408051637c643b2f60e11b81526001600160a01b03898116600483015288811660248301528781166044830152868116606483015291519185169163f8c8765e9160848082019260009290919082900301818387803b158015610bff57600080fd5b505af1158015610c13573d6000803e3d6000fd5b5050506001600160a01b038087166000818152602081815260408083208a86168085529083528184208054878c166001600160a01b0319918216811790925560028054600181018255968190527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90960180549091168217905593548251958652928501528381019190915251909350918916916000805160206138438339815191529181900360600190a35050949350505050565b6000826001600160a01b0316846001600160a01b03161415610d2a576040805162461bcd60e51b81526020600482015260156024820152745a463a204944454e544943414c5f4144445245535360581b604482015290519081900360640190fd5b6001600160a01b038516610d78576040805162461bcd60e51b815260206004820152601060248201526f5a453a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b600080846001600160a01b0316866001600160a01b031610610d9b578486610d9e565b85855b6001600160a01b03808316600090815260016020908152604080832084861684529091529020549294509092501615610e12576040805162461bcd60e51b81526020600482015260116024820152705a453a20454e455247595f45584953545360781b604482015290519081900360640190fd5b606060405180602001610e249061186c565b601f1982820381018352601f909101166040528051909150610e7b576040805162461bcd60e51b81526020600482018190526024820152600080516020613823833981519152604482015290519081900360640190fd5b6040805160608a811b6001600160601b031990811660208085019190915287831b821660348501529186901b1660488301528251808303603c018152605c9092019092528051908201208251909182919084016000f594506001600160a01b038516610f2a576040805162461bcd60e51b8152602060048201526019602482015278437265617465323a204661696c6564206f6e206465706c6f7960381b604482015290519081900360640190fd5b6000610f36858b611718565b90506000610f44858c611718565b90506000610f5487878e8c6117b6565b90506000610f6487898f8d6117b6565b9050886001600160a01b031663358764768e8a8a888888886040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b03168152602001975050505050505050600060405180830381600087803b15801561105a57600080fd5b505af115801561106e573d6000803e3d6000fd5b5050505088600160008a6001600160a01b03166001600160a01b031681526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508860016000896001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060038990806001815401808255809150509060018203906000526020600020016000909192909190916101000a8154816001600160a01b0302191690836001600160a01b0316021790555050886001600160a01b03168d6001600160a01b03166000805160206138438339815191528a8a60028054905060405180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060405180910390a35050505050505050949350505050565b6002818154811061122757fe5b6000918252602090912001546001600160a01b0316905081565b6004546001600160a01b03163314611291576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b60648111156112da576040805162461bcd60e51b815260206004820152601060248201526f0b48a74408c8a8abea89e9ebe90928e960831b604482015290519081900360640190fd5b600855565b60025490565b6004546001600160a01b03163314611335576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113a7576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b6001600160a01b0381166113f5576040805162461bcd60e51b815260206004820152601060248201526f5a453a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b600030848460405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120611459610886565b60405160200180806001600160f81b0319815250600101846001600160a01b03166001600160a01b031660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012060001c9050806001600160a01b031663438ab5ac836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561061f57600080fd5b60075481565b6003818154811061122757fe5b6005546001600160a01b03163314611572576040805162461bcd60e51b815260206004820152600e60248201526d2d282a1d102327a92124a22222a760911b604482015290519081900360640190fd5b6001600160a01b0381166115c0576040805162461bcd60e51b815260206004820152601060248201526f5a453a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b6000826001600160a01b03166386f6f4306040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156115fd57600080fd5b505af1158015611611573d6000803e3d6000fd5b505050506040513d602081101561162757600080fd5b5051604080516350d7de8560e11b815290519192506000916001600160a01b0386169163a1afbd0a91600480830192602092919082900301818787803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b505050506040513d602081101561169a57600080fd5b50516040805163f222771560e01b8152600481018590526024810183905290519192506001600160a01b0385169163f22277159160448082019260009290919082900301818387803b15801561061f57600080fd5b60065481565b60006020818152928152604080822090935290815220546001600160a01b031681565b604080516001600160601b0319606093841b811660208084019190915294841b166034820152815160288183030181526048820183528051908501206001600160f81b031960688301523090931b6069820152607d8101929092527ff7f47583f133c1e04059755d96b165532bef2114faae8e068f21ffd8fe846bd0609d808401919091528151808403909101815260bd9092019052805191012090565b604080516001600160601b0319606096871b811660208084019190915295871b8116603483015293861b841660488201528151603c818303018152605c820183528051908601206001600160f81b0319607c8301529290951b909216607d85015260918401527f9fc442a4d7a12215c697eb81564442a0cd83ff2b9db622486b898fe36004e49260b1808501919091528151808503909101815260d19093019052815191012090565b610df48061187a83390190565b61118e8061266e8339019056fe6080604052600060065534801561001557600080fd5b50600480546001600160a01b03191633179055610dbd806100376000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80630269b9ca1461006757806303f187ea14610096578063158ef93e146100a0578063438ab5ac146100a85780634923b230146100ce578063f8c8765e146100d6575b600080fd5b6100846004803603602081101561007d57600080fd5b5035610114565b60408051918252519081900360200190f35b61009e610268565b005b610084610542565b61009e600480360360208110156100be57600080fd5b50356001600160a01b0316610548565b61009e6106c1565b61009e600480360360808110156100ec57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160600135166107d7565b6000600654600114610161576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b60008061016c610a6a565b6001600160701b0391821693501690506706f05b59d3b2000060008186116101a6576101a1868303600a63ffffffff610aea16565b6101b9565b6101b9828703600a63ffffffff610aea16565b905067063eb89da4ed0000861115806101da57506707a1fe16027700008610155b1561021e576b012ced32a16a1b11e826288960241b61020f82610203868263ffffffff610aea16565b9063ffffffff610aea16565b8161021657fe5b04945061025f565b61025c846a0c097ce7bc90715b34b9f160241b61024860246102038681868263ffffffff610aea16565b8161024f57fe5b049063ffffffff610b5316565b94505b50505050919050565b6000546001600160a01b031633146102b7576040805162461bcd60e51b815260206004820152600d60248201526c2d229d102737ba10283cb637b760991b604482015290519081900360640190fd5b600654600114610302576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561034d57600080fd5b505afa158015610361573d6000803e3d6000fd5b505050506040513d602081101561037757600080fd5b50516005549091508110156103c9576040805162461bcd60e51b815260206004820152601360248201527216914e88105b98da1bdc881b9bdd081cd95b9d606a1b604482015290519081900360640190fd5b60006103e060055483610ba290919063ffffffff16565b90506000600460009054906101000a90046001600160a01b03166001600160a01b031663708284b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561043257600080fd5b505afa158015610446573d6000803e3d6000fd5b505050506040513d602081101561045c57600080fd5b5051600480546002546003546040805163044209e560e51b81526001600160a01b03938416958101959095529082166024850152519394506000939116916388413ca0916044808301926020929190829003018186803b1580156104bf57600080fd5b505afa1580156104d3573d6000803e3d6000fd5b505050506040513d60208110156104e957600080fd5b5051905060006064610501858563ffffffff610aea16565b8161050857fe5b049050801561052857600354610528906001600160a01b03168383610bf2565b610538858263ffffffff610ba216565b6005555050505050565b60065481565b6004546001600160a01b03163314610597576040805162461bcd60e51b815260206004820152600d60248201526c2d281d102327a92124a22222a760991b604482015290519081900360640190fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156105e257600080fd5b505afa1580156105f6573d6000803e3d6000fd5b505050506040513d602081101561060c57600080fd5b5051600354604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561065f57600080fd5b505afa158015610673573d6000803e3d6000fd5b505050506040513d602081101561068957600080fd5b50516001549091506106a5906001600160a01b03168484610bf2565b6003546106bc906001600160a01b03168483610bf2565b505050565b6000546001600160a01b03163314610710576040805162461bcd60e51b815260206004820152600d60248201526c2d229d102737ba10283cb637b760991b604482015290519081900360640190fd5b60065460011461075b576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156107a657600080fd5b505afa1580156107ba573d6000803e3d6000fd5b505050506040513d60208110156107d057600080fd5b5051600555565b60065415610816576040805162461bcd60e51b81526020600482015260076024820152665a45523a20414960c81b604482015290519081900360640190fd5b6004546001600160a01b03163314610869576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b6000826001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ae57600080fd5b505afa1580156108c2573d6000803e3d6000fd5b505050506040513d60208110156108d857600080fd5b50516001600160a01b0316149050600080826108f55783856108f8565b84845b604080516080810182526001600160a01b03808c168083528b821660208085018290528388168587018190529387166060909501859052600080546001600160a01b0319908116851782556001805482168517905560028054821690961790955560038054909516909517909355845163095ea7b360e01b8152600481019290925260001960248301529351959750939550919363095ea7b39360448082019493918390030190829087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050506040513d60208110156109da57600080fd5b50506040805163095ea7b360e01b81526001600160a01b038981166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b158015610a3057600080fd5b505af1158015610a44573d6000803e3d6000fd5b505050506040513d6020811015610a5a57600080fd5b5050600160065550505050505050565b60048054604080516363e1240160e01b8152815160009485946001600160a01b0316936363e124019380830193919290829003018186803b158015610aae57600080fd5b505afa158015610ac2573d6000803e3d6000fd5b505050506040513d6040811015610ad857600080fd5b50805160209091015190939092509050565b6000811580610b0557505080820282828281610b0257fe5b04145b610b4d576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b80820182811015610b4d576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b4d576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310610c9b5780518252601f199092019160209182019101610c7c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610cfd576040519150601f19603f3d011682016040523d82523d6000602084013e610d02565b606091505b5091509150818015610d30575080511580610d305750808060200190516020811015610d2d57600080fd5b50515b610d81576040805162461bcd60e51b815260206004820152601d60248201527f5a6972636f6e2050796c6f6e3a205452414e534645525f4641494c4544000000604482015290519081900360640190fd5b505050505056fea265627a7a723158209902d661ff4fb63696078ea7b4bc6b449e7ce11e13953a0e85b46977b3bb7bb964736f6c6343000510003260806040526000600c5534801561001557600080fd5b506000805460ff19166001179055600280546001600160a01b0319163317905561114a806100446000396000f3fe608060405234801561001057600080fd5b50600436106100a45760003560e01c80630b48bd23146100a9578063158ef93e146100c357806317d1ff9f146100cb57806335876476146100ef578063438ab5ac1461014957806349d20f661461016f57806386f6f4301461019d578063a1afbd0a146101a5578063b9d92de8146101ad578063cb6f916e146101ca578063cd3293de14610200578063f222771514610208575b600080fd5b6100b161022b565b60408051918252519081900360200190f35b6100b161031f565b6100d3610325565b604080516001600160a01b039092168252519081900360200190f35b610147600480360360e081101561010557600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c09091013516610334565b005b6101476004803603602081101561015f57600080fd5b50356001600160a01b0316610485565b6101476004803603604081101561018557600080fd5b506001600160a01b0381358116916020013516610693565b6100b1610714565b6100b161071a565b610147600480360360208110156101c357600080fd5b5035610720565b610147600480360360608110156101e057600080fd5b506001600160a01b03813581169160208101359160409091013516610cd6565b6100b1610df0565b6101476004803603604081101561021e57600080fd5b5080359060200135610df6565b6000600c54600114610278576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b600a546001600160a01b031633148061029b5750600b546001600160a01b031633145b6102dc576040805162461bcd60e51b815260206004820152600d60248201526c2d229d102737ba10283cb637b760991b604482015290519081900360640190fd5b600a546001600160a01b03163314156102fe575060048054600090915561031c565b600b546001600160a01b031633141561031c57506003805460009091555b90565b600c5481565b6002546001600160a01b031681565b600c541561037c576040805162461bcd60e51b815260206004820152601060248201526f5a45523a204e6f7420466163746f727960801b604482015290519081900360640190fd5b6002546001600160a01b031633146103ce576040805162461bcd60e51b815260206004820152601060248201526f5a45523a204e6f7420466163746f727960801b604482015290519081900360640190fd5b6040805160e0810182526001600160a01b0398891680825297891660208201819052968916918101829052948816606086018190529388166080860181905292881660a086018190529190971660c0909401849052600580546001600160a01b031990811690971790556006805487169095179094556007805486169096179095556008805485169091179055600980548416909417909355600a805483169091179055600b805490911690911790556001600c55565b6002546001600160a01b031633146104d4576040805162461bcd60e51b815260206004820152600d60248201526c2d281d102327a92124a22222a760991b604482015290519081900360640190fd5b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561051f57600080fd5b505afa158015610533573d6000803e3d6000fd5b505050506040513d602081101561054957600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561059c57600080fd5b505afa1580156105b0573d6000803e3d6000fd5b505050506040513d60208110156105c657600080fd5b5051600654604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561061957600080fd5b505afa15801561062d573d6000803e3d6000fd5b505050506040513d602081101561064357600080fd5b505160055490915061065f906001600160a01b03168585610e50565b600754610676906001600160a01b03168584610e50565b60065461068d906001600160a01b03168583610e50565b50505050565b6002546001600160a01b031633146106e6576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b600a80546001600160a01b039384166001600160a01b031991821617909155600b8054929093169116179055565b60045481565b60035481565b6005546001600160a01b0316331461076e576040805162461bcd60e51b815260206004820152600c60248201526b2d229d102737ba102830b4b960a11b604482015290519081900360640190fd5b60005460ff166107c5576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff19169055600c5460011461081a576040805162461bcd60e51b81526020600482015260116024820152702d34b931b7b71d102327a92124a22222a760791b604482015290519081900360640190fd5b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561086557600080fd5b505afa158015610879573d6000803e3d6000fd5b505050506040513d602081101561088f57600080fd5b505160015490915081116108da576040805162461bcd60e51b815260206004820152600d60248201526c1691548e8814995d995c9d1959609a1b604482015290519081900360640190fd5b600554604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561091f57600080fd5b505afa158015610933573d6000803e3d6000fd5b505050506040513d602081101561094957600080fd5b5051600554600a54604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b1580156109a157600080fd5b505afa1580156109b5573d6000803e3d6000fd5b505050506040513d60208110156109cb57600080fd5b5051600554600b54604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b158015610a2357600080fd5b505afa158015610a37573d6000803e3d6000fd5b505050506040513d6020811015610a4d57600080fd5b505160055460408051630240bc6b60e21b8152905192935060009283926001600160a01b031691630902f1ac916004808301926060929190829003018186803b158015610a9957600080fd5b505afa158015610aad573d6000803e3d6000fd5b505050506040513d6060811015610ac357600080fd5b5080516020909101519092509050610ae985670de0b6b3a764000063ffffffff610fe616565b610b1585610b096002818c6001600160701b03881663ffffffff610fe616565b9063ffffffff610fe616565b81610b1c57fe5b60048054929091049091019055610b3b85670de0b6b3a7640000610fe6565b610b5b84610b096002818c6001600160701b03891663ffffffff610fe616565b81610b6257fe5b60038054929091049091019055505060025460408051635d3be3c960e11b815290516000926001600160a01b03169163ba77c792916004808301926020929190829003018186803b158015610bb657600080fd5b505afa158015610bca573d6000803e3d6000fd5b505050506040513d6020811015610be057600080fd5b5051600154909150600090610bfc90879063ffffffff61104f16565b905060006064610c2d84820388610c19868a63ffffffff610fe616565b81610c2057fe5b049063ffffffff610fe616565b81610c3457fe5b04905060006064610c5285820389610c19878a63ffffffff610fe616565b81610c5957fe5b600554600854929091049250610c7c916001600160a01b03918216911684610e50565b600554600954610c99916001600160a01b03908116911683610e50565b610cb9610cac838363ffffffff61109f16565b899063ffffffff61104f16565b60019081556000805460ff19169091179055505050505050505050565b6002546001600160a01b03163314610d30576040805162461bcd60e51b81526020600482015260186024820152771691548e88139bdd081c1c9bdc195c9b1e4818d85b1b195960421b604482015290519081900360640190fd5b81610d6c5760405162461bcd60e51b81526004018080602001828103825260278152602001806110ef6027913960400191505060405180910390fd5b6005546001600160a01b0384811691161415610de057600154821115610dc9576040805162461bcd60e51b815260206004820152600d60248201526c1691548e8814995d995c9d1959609a1b604482015290519081900360640190fd5b600154610ddc908363ffffffff61104f16565b6001555b610deb838284610e50565b505050565b60015481565b6002546001600160a01b03163314610e48576040805162461bcd60e51b815260206004820152601060248201526f5a45523a204e6f7420466163746f727960801b604482015290519081900360640190fd5b600355600455565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310610ef95780518252601f199092019160209182019101610eda565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610f5b576040519150601f19603f3d011682016040523d82523d6000602084013e610f60565b606091505b5091509150818015610f8e575080511580610f8e5750808060200190516020811015610f8b57600080fd5b50515b610fdf576040805162461bcd60e51b815260206004820152601d60248201527f5a6972636f6e2050796c6f6e3a205452414e534645525f4641494c4544000000604482015290519081900360640190fd5b5050505050565b600081158061100157505080820282828281610ffe57fe5b04145b611049576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b80820382811115611049576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b80820182811015611049576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe4f7065726174696f6e733a2043616e6e6f74207265636f766572207a65726f2062616c616e6365a265627a7a7231582072ec96ea622bee2792b7c61061d3846cbdb3956f7c993cb20c92fd66680e907664736f6c634300051000324f7065726174696f6e733a2043616e6e6f74207265636f766572207a65726f2062616c616e6365437265617465323a2062797465636f6465206c656e677468206973207a65726f3b4e72e4103178db6cd2e27320e98d9afdd1ab6f078b707886d1bf92b9fd8b25a265627a7a72315820b5cb53795b27a5aee37d897cc57581562248c36a37dba54c82528fc1d2db9b2d64736f6c63430005100032

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

0000000000000000000000004ba754989b77925f47e26c54aaa1b03df23b32ce0000000000000000000000009aef9098af9d1e2d78fcd9b928c946a7f23307d3

-----Decoded View---------------
Arg [0] : _feeToSetter (address): 0x4bA754989b77925F47e26C54aaa1b03Df23B32Ce
Arg [1] : _migrator (address): 0x9AEF9098af9d1E2d78FCd9B928C946a7f23307d3

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004ba754989b77925f47e26c54aaa1b03df23b32ce
Arg [1] : 0000000000000000000000009aef9098af9d1e2d78fcd9b928c946a7f23307d3


Block Transaction Gas Used Reward
view all blocks collator

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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