Contract 0xc668b1b949cd4ec51f26004319398cae88f031bc

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6009a0f0c789aeb3cc6279e38c61a69b7b56d87f94f9fd05d1aad8bea7f31647Approve121438212021-10-27 19:46:284 mins ago0x6e959000f93b88e63576dc6652b9541b15a3ba60 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x72ceedb47968775870a2cd9a01cd2ce766be3f7d00423b26412cc5183396bd13Approve121096152021-10-26 14:43:581 day 5 hrs ago0x42976b5e2fda82657fcfd147438dc5a7eb3b0962 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x841e09121599d2dae4a4c92e713c7d9c8e5dccb3184bc1412d52ca6b5beaf81fApprove120696152021-10-25 5:13:072 days 14 hrs ago0xeeb878f439969ce7c8f2274a571c45816b4a0350 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0xa82795acb8026fab88d5df887fc2e90d757e9f81b8aae28c57fdfab210fb433fApprove120472512021-10-24 10:14:243 days 9 hrs ago0x70f3871e3589c2b18956cd87e68ea5f9a079b333 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0xef8f0bfc2776f4396458a812975374974cbe11548601f4da48d0980b216d83abApprove120349952021-10-23 23:57:403 days 19 hrs ago0x0838913565d4246dd249df97fdac5835deeb435a IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0xcfe2f23b8396520a317964b1ed63f807a14636c6b2a5948ab72da2567bc3ad03Approve119449282021-10-20 19:40:047 days 11 mins ago0xeaa111a77c8e5f97b380cf03a6b1ed592dc49f43 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0xab1fe5dcb88e68195cf5b0c76854cd0d6913cbb3b874ed23a90bac042fb0967cApprove119339542021-10-20 10:26:447 days 9 hrs ago0x266f8dae09c00473b22be8673d9f9bc6fd175514 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0xef96ecb28ff7c6e416d77b6b95f088fc703192ac924c2ea794e2bbd7ffa65a47Approve118949802021-10-19 1:17:368 days 18 hrs ago0x9125a571aeaa7dc5cc358f5a3afbb4c76ef69889 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0xb6303c8b426169442d42579fcd67b292acce7f8e71f97f02123e40671e16a0dbApprove118664312021-10-18 1:23:529 days 18 hrs ago0x14d366918e44e12f292c9c16cec1109aee99812a IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022484
0x125fdda5d8aedcf548a54b0bbc5fb3090d6774956be3e096e407f6490d3b0f8dApprove118105442021-10-16 2:33:0911 days 17 hrs ago0xa8afe1059b7eeeb32d85e47344a89ba2c5716460 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x0711ffec3861965e87e27fe782e5fd4cea3d1895ed8a91ee837cdc07ea3ae6daApprove117821342021-10-15 2:47:1112 days 17 hrs ago0xe9acc23d73df96d3e39032701b2ecdc87cc25e4e IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x7cdabfa35a720a97fbbe87a7955c5e0fe73f6031004ced36ffc7fe82d1281c9cApprove117359052021-10-13 12:01:4314 days 7 hrs ago0x27e5f04b795dee832680b74ff33bdfe53fed7864 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x52a797dd4b612984c391e87e46321ae1803ffa417ffe54114522c2b87a36e596Approve117357222021-10-13 11:52:3414 days 7 hrs ago0x27e5f04b795dee832680b74ff33bdfe53fed7864 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0xfd994e92d13f795ecaf4bc6da682a7ae0b4b1ece81ebf6df15d575269b49b051Approve117123452021-10-12 16:03:1615 days 3 hrs ago0x1f11ed7f89822aaa8dc6180964fc59e67d2dba86 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x39489e243f5972016c57a2c64cc81f1c54f309adcc9752fd9251253111568349Approve116899622021-10-11 21:16:3915 days 22 hrs ago0x332b18fc123c0a2018e0dab9f39cdf8b3ad14223 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022484
0xc36321bf4e2c89df9330d3895b9241341d40e4ff11e4d841eee9edefd90ba3eaApprove116856192021-10-11 17:17:2016 days 2 hrs ago0x321f50965eddd516ce2597235351cef96e2696ac IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0xf45e170734a03ecda8a6bd729d93e3e782a4181833bfec8cffa352557af97294Approve116830172021-10-11 14:50:0116 days 5 hrs ago0xfdba1700633f26d68a160d71e766fa5acd8d9469 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x1d216b6ce7cd82a20906a4410290d414366972aeaa915f17dc6c70de9ea4199aApprove116342112021-10-09 22:01:3817 days 21 hrs ago0x49a641b5c132da1b73fb46ec04f89db78f82cde6 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0xb961625d203e197e04629b2e3daaf7fa8d0c9c2c61591364947b2c8cb46782eaApprove116072382021-10-08 23:30:0818 days 20 hrs ago0xc084c7d9866067fc2d2eb1851fb2a971840fb408 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x53c02325e54ede81a781a41b77a350aacd43945445ad697fc2dda99d706a1f3dApprove115784652021-10-07 23:26:2519 days 20 hrs ago0x266f8dae09c00473b22be8673d9f9bc6fd175514 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022484
0x8d3a5639a75811eb438bf71927d508ac7cd7c3ad22f64d5295fe13f15c5e35e5Approve115476022021-10-06 21:41:1720 days 22 hrs ago0xf2934237b81ab731a2b5cd5373219ba561f78335 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022484
0xbb0cfe476d5090cf5424a0332ba2819def719901d3f76301bb8180787ec1bd00Approve115357902021-10-06 11:49:5921 days 8 hrs ago0x49a641b5c132da1b73fb46ec04f89db78f82cde6 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x329962a2eff02855e0490d19c7b675c3b481c5fb25c0ce2ff833c2fbba840e40Approve115179012021-10-05 20:54:1721 days 22 hrs ago0x2bb1bf4b310fcee75a3967be6d989baf7c675683 IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x691460b62f59f8ccb4ef9a46b93c86e5a1e097222820be6bc807221a9f1d1318Approve114968282021-10-05 3:19:5622 days 16 hrs ago0x6bcf236ba691d99725e6d3e6ad9d0eb9c531032e IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022622
0x1abc14bca892cff3fef1f9e2bc1056e4448c7023c278e0a2db39ba4f251197fcApprove114464382021-10-03 9:15:1024 days 10 hrs ago0x93fa0bc764929ba3dff543795567f618de5076cb IN  0xc668b1b949cd4ec51f26004319398cae88f031bc0 BNB0.00022484
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x0104554457b618271d5be196bce4be19602f4aa7128a4dbde085d3ee3ea4f6a9104073902021-08-28 0:12:2660 days 19 hrs ago 0x12c2b0a1c9c786bf7ad0e92ce3f2d1805874e185  Contract Creation0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e

Contract Name:
ViralataPair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-08-17
*/

// Sources flattened with hardhat v2.5.0 https://hardhat.org

// File contracts/uniswapv2/libraries/SafeMath.sol

// SPDX-License-Identifier: GPL-3.0

pragma solidity =0.6.12;

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

library SafeMathViralata {
    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');
    }
}


// File contracts/uniswapv2/ViralataERC20.sol


pragma solidity =0.6.12;

contract ViralataERC20 {
    using SafeMathViralata for uint;

    string public constant name = 'ViralataSwap LP Token';
    string public constant symbol = 'VLP';
    uint8 public constant decimals = 18;
    uint  public totalSupply;
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) public allowance;

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

    address private _trustedForwarder; // remember to change before deploying

    // Control support for EIP-2771 Meta Transactions
    bool public metaTxnsEnabled = false;

    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    event MetaTxnsEnabled(address indexed caller);
    event MetaTxnsDisabled(address indexed caller);

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

    function isTrustedForwarder(address forwarder) public view returns (bool) {
        return metaTxnsEnabled && forwarder == _trustedForwarder;
    }

    function _msgSender() internal view returns (address sender) {
        if (isTrustedForwarder(msg.sender)) {
            // The assembly code is more direct than the Solidity version using `abi.decode`.
            assembly {
                sender := shr(96, calldataload(sub(calldatasize(), 20)))
            }
        } else {
            return msg.sender;
        }
    }

    function _msgData() internal view returns (bytes calldata) {
        if (isTrustedForwarder(msg.sender)) {
            return msg.data[:msg.data.length - 20];
        } else {
            return msg.data;
        }
    }

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

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

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

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

    function approve(address spender, uint value) external returns (bool) {
        _approve(_msgSender(), spender, value);
        return true;
    }

    function transfer(address to, uint value) external returns (bool) {
        _transfer(_msgSender(), to, value);
        return true;
    }

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

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


// File contracts/uniswapv2/libraries/Math.sol


pragma solidity =0.6.12;

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

    // 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 contracts/uniswapv2/libraries/UQ112x112.sol


pragma solidity =0.6.12;

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

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

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

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

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


// File contracts/uniswapv2/interfaces/IERC20.sol


pragma solidity >=0.5.0;

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (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);
}


// File contracts/uniswapv2/interfaces/IViralataFactory.sol


pragma solidity >=0.5.0;

interface IViralataFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);
    function auro() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
    function setAuroAddress(address) external;
}


// File contracts/uniswapv2/interfaces/IViralataCallee.sol


pragma solidity >=0.5.0;

interface IViralataCallee {
    function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}


// File contracts/uniswapv2/ViralataPair.sol


pragma solidity =0.6.12;






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

contract ViralataPair is ViralataERC20 {
    using SafeMathViralata for uint;
    using UQ112x112 for uint224;

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

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

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

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

    struct SwapVariables {
        uint112 _reserve0;
        uint112 _reserve1;
        uint balance0;
        uint balance1;
        uint amount0In;
        uint amount1In;
        uint fee;
    }

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'ViralataSwap: LOCKED');
        unlocked = 0;
        _;
        unlocked = 1;
    }

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

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

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

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

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

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

    // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IViralataFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    // multiply by 0 in denominator to capture all fees
                    // mul operation is kept for consistency with legacy code
                    uint denominator = rootK.mul(0).add(rootKLast);
                    uint liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

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

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = IViralataFactory(factory).migrator();
            if (_msgSender() == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
            } else {
                require(migrator == address(0), "Must not have migrator");
                liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
                _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
            }
        } else {
            liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'ViralataSwap: INSUFFICIENT_LIQUIDITY_MINTED');
        _mint(to, liquidity);

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

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

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

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

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

        vars.fee = 25;

        address auro = IViralataFactory(factory).auro();
        { // scope for _token{0,1}, avoids stack too deep errors
            address _token0 = token0;
            address _token1 = token1;
            require(to != _token0 && to != _token1, 'ViralataSwap: INVALID_TO');
            if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
            if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
            if (data.length > 0) IViralataCallee(to).uniswapV2Call(_msgSender(), amount0Out, amount1Out, data);
            if (_token0 == auro || _token1 == auro) vars.fee = 50; // increase fee for AURO
            vars.balance0 = IERC20Viralata(_token0).balanceOf(address(this));
            vars.balance1 = IERC20Viralata(_token1).balanceOf(address(this));
        }
        vars.amount0In = vars.balance0 > vars._reserve0 - amount0Out ? vars.balance0 - (vars._reserve0 - amount0Out) : 0;
        vars.amount1In = vars.balance1 > vars._reserve1 - amount1Out ? vars.balance1 - (vars._reserve1 - amount1Out) : 0;
        require(vars.amount0In > 0 || vars.amount1In > 0, 'ViralataSwap: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint balance0Adjusted = vars.balance0.mul(10000).sub(vars.amount0In.mul(vars.fee));
            uint balance1Adjusted = vars.balance1.mul(10000).sub(vars.amount1In.mul(vars.fee));
            require(balance0Adjusted.mul(balance1Adjusted) >= uint(vars._reserve0).mul(vars._reserve1).mul(10000**2), 'ViralataSwap: K');
        }

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

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

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

    function disableMetaTxns() external {
        require(_msgSender() == factory, 'ViralataSwap: FORBIDDEN');
        require(metaTxnsEnabled, "ViralataSwap: META_TXNS_ALREADY_DISABLED");

        metaTxnsEnabled = false;

        emit MetaTxnsDisabled(_msgSender());
    }

    function enableMetaTxns() external {
        require(_msgSender() == factory, 'ViralataSwap: FORBIDDEN');
        require(!metaTxnsEnabled, "ViralataSwap: META_TXNS_ALREADY_ENABLED");

        metaTxnsEnabled = true;

        emit MetaTxnsEnabled(_msgSender());
    }
}

Contract Security Audit

Contract ABI

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

60806040526005805460ff60a01b191690556001600d5534801561002257600080fd5b50604080518082018252601581527f566972616c61746153776170204c5020546f6b656e00000000000000000000006020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f74395e1e6331e722a2daafb6a053df80b7ff71036f1a18db088bab1d965fe5db818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600680546001600160a01b031916331790556135da806101286000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80635a3d54931161010f578063a9059cbb116100a2578063d21220a711610071578063d21220a714610651578063d505accf14610659578063dd62ed3e146106b7578063fff6cae9146106f2576101e5565b8063a9059cbb146105d5578063ba9a7a561461060e578063bc25cf7714610616578063c45a015514610649576101e5565b80637ecebe00116100de5780637ecebe001461054657806389afcb441461057957806395d89b41146105c5578063a8c95dc0146105cd576101e5565b80635a3d5493146104d05780636a627842146104d857806370a082311461050b5780637464fc3d1461053e576101e5565b806323b872dd11610187578063485cc95511610156578063485cc95514610452578063572b6c051461048d578063578bb42d146104c05780635909c0d5146104c8576101e5565b806323b872dd146103e157806330adf81f14610424578063313ce5671461042c5780633644e5151461044a576101e5565b80630902f1ac116101c35780630902f1ac1461030a578063095ea7b3146103495780630dfe16811461039657806318160ddd146103c7576101e5565b8063022c0d9f146101ea57806306fdde03146102855780630838364014610302575b600080fd5b6102836004803603608081101561020057600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561024457600080fd5b82018360208201111561025657600080fd5b8035906020019184600183028401116401000000008311171561027857600080fd5b5090925090506106fa565b005b61028d610fca565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102c75781810151838201526020016102af565b50505050905090810190601f1680156102f45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610283611003565b61031261118d565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103826004803603604081101561035f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356111e2565b604080519115158252519081900360200190f35b61039e611200565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103cf61121c565b60408051918252519081900360200190f35b610382600480360360608110156103f757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611222565b6103cf61137e565b6104346113a2565b6040805160ff9092168252519081900360200190f35b6103cf6113a7565b6102836004803603604081101561046857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166113ad565b610382600480360360208110156104a357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611486565b6102836114d5565b6103cf611677565b6103cf61167d565b6103cf600480360360208110156104ee57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611683565b6103cf6004803603602081101561052157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ca7565b6103cf611cb9565b6103cf6004803603602081101561055c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611cbf565b6105ac6004803603602081101561058f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611cd1565b6040805192835260208301919091528051918290030190f35b61028d61217b565b6103826121b4565b610382600480360360408110156105eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356121d5565b6103cf6121e9565b6102836004803603602081101561062c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166121ef565b61039e6123dc565b61039e6123f8565b610283600480360360e081101561066f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135612414565b6103cf600480360360408110156106cd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166126e0565b6102836126fd565b600d5460011461076b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f566972616c617461537761703a204c4f434b4544000000000000000000000000604482015290519081900360640190fd5b6000600d558415158061077e5750600084115b6107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806135076028913960400191505060405180910390fd5b6107db61342f565b6040518060e0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815250905061083f61118d565b506dffffffffffffffffffffffffffff9081166020840152168082528610801561087c575080602001516dffffffffffffffffffffffffffff1685105b6108d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806135816024913960400191505060405180910390fd5b601960c0820152600654604080517f21dd70e6000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916321dd70e6916004808301926020929190829003018186803b15801561094357600080fd5b505afa158015610957573d6000803e3d6000fd5b505050506040513d602081101561096d57600080fd5b505160075460085491925073ffffffffffffffffffffffffffffffffffffffff90811691811690871682148015906109d157508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b610a3c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f566972616c617461537761703a20494e56414c49445f544f0000000000000000604482015290519081900360640190fd5b8815610a4d57610a4d82888b6128e3565b8715610a5e57610a5e81888a6128e3565b8415610b31578673ffffffffffffffffffffffffffffffffffffffff166310d1e85c610a88612af0565b8b8b8a8a6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610b1857600080fd5b505af1158015610b2c573d6000803e3d6000fd5b505050505b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610b9657508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610ba357603260c08501525b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610c0f57600080fd5b505afa158015610c23573d6000803e3d6000fd5b505050506040513d6020811015610c3957600080fd5b505160408086019190915280517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8316916370a08231916024808301926020929190829003018186803b158015610cae57600080fd5b505afa158015610cc2573d6000803e3d6000fd5b505050506040513d6020811015610cd857600080fd5b505160608501525050815160408301516dffffffffffffffffffffffffffff90911688900310610d09576000610d27565b8682600001516dffffffffffffffffffffffffffff16038260400151035b8260800181815250508582602001516dffffffffffffffffffffffffffff1603826060015111610d58576000610d76565b8582602001516dffffffffffffffffffffffffffff16038260600151035b60a08301526080820151151580610d91575060008260a00151115b610de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061355a6027913960400191505060405180910390fd5b6000610e1d610e068460c001518560800151612b3390919063ffffffff16565b6040850151610e1790612710612b33565b90612bb9565b90506000610e50610e3f8560c001518660a00151612b3390919063ffffffff16565b6060860151610e1790612710612b33565b9050610e9b6305f5e100610e9586602001516dffffffffffffffffffffffffffff1687600001516dffffffffffffffffffffffffffff16612b3390919063ffffffff16565b90612b33565b610ea58383612b33565b1015610f1257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f566972616c617461537761703a204b0000000000000000000000000000000000604482015290519081900360640190fd5b5050610f308260400151836060015184600001518560200151612c2b565b8473ffffffffffffffffffffffffffffffffffffffff16610f4f612af0565b73ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82284608001518560a001518b8b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001600d555050505050565b6040518060400160405280601581526020017f566972616c61746153776170204c5020546f6b656e000000000000000000000081525081565b60065473ffffffffffffffffffffffffffffffffffffffff16611024612af0565b73ffffffffffffffffffffffffffffffffffffffff16146110a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f566972616c617461537761703a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff16611119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061348d6028913960400191505060405180910390fd5b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055611149612af0565b73ffffffffffffffffffffffffffffffffffffffff167f096be170ccc67847e55535e7d8334b2afedd95805baedc160005addb9144745060405160405180910390a2565b6009546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b60006111f66111ef612af0565b8484612ee1565b5060015b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9082611272612af0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113695773ffffffffffffffffffffffffffffffffffffffff84166000908152600260205260408120611313918491906112e6612af0565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205490612bb9565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260026020526040812090611341612af0565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020555b611374848484612f50565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60065473ffffffffffffffffffffffffffffffffffffffff16331461143357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f566972616c617461537761703a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b6007805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560088054929093169116179055565b60055460009074010000000000000000000000000000000000000000900460ff1680156114cd575060055473ffffffffffffffffffffffffffffffffffffffff8381169116145b90505b919050565b60065473ffffffffffffffffffffffffffffffffffffffff166114f6612af0565b73ffffffffffffffffffffffffffffffffffffffff161461157857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f566972616c617461537761703a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff16156115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806134b56027913960400191505060405180910390fd5b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055611633612af0565b73ffffffffffffffffffffffffffffffffffffffff167f92e4c08d47b71e8dc051232b8e475ec296489a67a4ba5cca88ff20fb6ac499e660405160405180910390a2565b600a5481565b600b5481565b6000600d546001146116f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f566972616c617461537761703a204c4f434b4544000000000000000000000000604482015290519081900360640190fd5b6000600d8190558061170661118d565b50600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d60208110156117aa57600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561182357600080fd5b505afa158015611837573d6000803e3d6000fd5b505050506040513d602081101561184d57600080fd5b50519050600061186d836dffffffffffffffffffffffffffff8716612bb9565b9050600061188b836dffffffffffffffffffffffffffff8716612bb9565b905060006118998787613025565b60005490915080611b3b57600654604080517f7cd07e47000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691637cd07e47916004808301926020929190829003018186803b15801561190f57600080fd5b505afa158015611923573d6000803e3d6000fd5b505050506040513d602081101561193957600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff811661195c612af0565b73ffffffffffffffffffffffffffffffffffffffff161415611a8b578073ffffffffffffffffffffffffffffffffffffffff166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b1580156119be57600080fd5b505afa1580156119d2573d6000803e3d6000fd5b505050506040513d60208110156119e857600080fd5b505199508915801590611a1b57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a14155b611a8657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4261642064657369726564206c69717569646974790000000000000000000000604482015290519081900360640190fd5b611b35565b73ffffffffffffffffffffffffffffffffffffffff811615611b0e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d757374206e6f742068617665206d69677261746f7200000000000000000000604482015290519081900360640190fd5b611b266103e8610e17611b218888612b33565b613192565b9950611b3560006103e86131e3565b50611b8c565b611b896dffffffffffffffffffffffffffff8916611b598684612b33565b81611b6057fe5b046dffffffffffffffffffffffffffff8916611b7c8685612b33565b81611b8357fe5b04613287565b98505b60008911611be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061352f602b913960400191505060405180910390fd5b611bef8a8a6131e3565b611bfb86868a8a612c2b565b8115611c3757600954611c33906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612b33565b600c555b611c3f612af0565b73ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8585604051808381526020018281526020019250505060405180910390a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600c5481565b60046020526000908152604090205481565b600080600d54600114611d4557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f566972616c617461537761703a204c4f434b4544000000000000000000000000604482015290519081900360640190fd5b6000600d81905580611d5561118d565b50600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b158015611dd757600080fd5b505afa158015611deb573d6000803e3d6000fd5b505050506040513d6020811015611e0157600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b158015611e7557600080fd5b505afa158015611e89573d6000803e3d6000fd5b505050506040513d6020811015611e9f57600080fd5b505130600090815260016020526040812054919250611ebe8888613025565b60005490915080611ecf8487612b33565b81611ed657fe5b049a5080611ee48486612b33565b81611eeb57fe5b04995060008b118015611efe575060008a115b611f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806134dc602b913960400191505060405180910390fd5b611f5d308461329f565b611f68878d8d6128e3565b611f73868d8c6128e3565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b158015611fdf57600080fd5b505afa158015611ff3573d6000803e3d6000fd5b505050506040513d602081101561200957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b505193506120b585858b8b612c2b565b81156120f1576009546120ed906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612b33565b600c555b8b73ffffffffffffffffffffffffffffffffffffffff16612110612af0565b73ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d604051808381526020018281526020019250505060405180910390a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020017f564c50000000000000000000000000000000000000000000000000000000000081525081565b60055474010000000000000000000000000000000000000000900460ff1681565b60006111f66121e2612af0565b8484612f50565b6103e881565b600d5460011461226057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f566972616c617461537761703a204c4f434b4544000000000000000000000000604482015290519081900360640190fd5b6000600d55600754600854600954604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff94851694909316926123369285928792612331926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156122ff57600080fd5b505afa158015612313573d6000803e3d6000fd5b505050506040513d602081101561232957600080fd5b505190612bb9565b6128e3565b6123d281846123316009600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122ff57600080fd5b50506001600d5550565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561248357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f566972616c617461537761703a20455850495245440000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156125e4573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061265f57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6126ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f566972616c617461537761703a20494e56414c49445f5349474e415455524500604482015290519081900360640190fd5b6126d5898989612ee1565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600d5460011461276e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f566972616c617461537761703a204c4f434b4544000000000000000000000000604482015290519081900360640190fd5b6000600d55600754604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516128dc9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156127e557600080fd5b505afa1580156127f9573d6000803e3d6000fd5b505050506040513d602081101561280f57600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561288257600080fd5b505afa158015612896573d6000803e3d6000fd5b505050506040513d60208110156128ac57600080fd5b50516009546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612c2b565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106129e957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016129ac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a4b576040519150601f19603f3d011682016040523d82523d6000602084013e612a50565b606091505b5091509150818015612a7e575080511580612a7e5750808060200190516020811015612a7b57600080fd5b50515b612ae957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f566972616c617461537761703a205452414e534645525f4641494c4544000000604482015290519081900360640190fd5b5050505050565b6000612afb33611486565b15612b2d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c612b30565b50335b90565b6000811580612b4e57505080820282828281612b4b57fe5b04145b6111fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808203828111156111fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff8411801590612c5757506dffffffffffffffffffffffffffff8311155b612cc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f566972616c617461537761703a204f564552464c4f5700000000000000000000604482015290519081900360640190fd5b60095463ffffffff428116917c010000000000000000000000000000000000000000000000000000000090048116820390811615801590612d1257506dffffffffffffffffffffffffffff841615155b8015612d2d57506dffffffffffffffffffffffffffff831615155b15612dd7578063ffffffff16612d6a85612d4686613358565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169061337c565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612daa84612d4687613358565b600b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600980547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612f809082612bb9565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612fbc90826133bd565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561309057600080fd5b505afa1580156130a4573d6000803e3d6000fd5b505050506040513d60208110156130ba57600080fd5b5051600c5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061317e57801561317957600061310b611b216dffffffffffffffffffffffffffff888116908816612b33565b9050600061311883613192565b90508082111561317657600061313a6131318484612bb9565b60005490612b33565b905060006131528361314c8684612b33565b906133bd565b9050600081838161315f57fe5b04905080156131725761317287826131e3565b5050505b50505b61318a565b801561318a576000600c555b505092915050565b600060038211156131d5575080600160028204015b818110156131cf578091506002818285816131be57fe5b0401816131c757fe5b0490506131a7565b506114d0565b81156114d057506001919050565b6000546131f090826133bd565b600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602052604090205461322290826133bd565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106132965781613298565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546132cf9082612bb9565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812091909155546133039082612bb9565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416816133b557fe5b049392505050565b808201828110156111fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6040518060e0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152509056fe566972616c617461537761703a204d4554415f54584e535f414c52454144595f44495341424c4544566972616c617461537761703a204d4554415f54584e535f414c52454144595f454e41424c4544566972616c617461537761703a20494e53554646494349454e545f4c49515549444954595f4255524e4544566972616c617461537761703a20494e53554646494349454e545f4f55545055545f414d4f554e54566972616c617461537761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544566972616c617461537761703a20494e53554646494349454e545f494e5055545f414d4f554e54566972616c617461537761703a20494e53554646494349454e545f4c4951554944495459a2646970667358221220a13971f0c4146f137c4aafe8f77aa07ab0d7af7f779cbdd631d39fffc259135064736f6c634300060c0033

Deployed ByteCode Sourcemap

9023:11527:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17048:2310;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17048:2310:0;;-1:-1:-1;17048:2310:0;-1:-1:-1;17048:2310:0;:::i;:::-;;898:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19988:277;;;:::i;10246:231::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4024:149;;;;;;;;;;;;;;;;-1:-1:-1;4024:149:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9322:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1044:24;;;:::i;:::-;;;;;;;;;;;;;;;;4330:307;;;;;;;;;;;;;;;;-1:-1:-1;4330:307:0;;;;;;;;;;;;;;;;;;:::i;1336:108::-;;;:::i;1002:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1193:31;;;:::i;11309:213::-;;;;;;;;;;;;;;;;-1:-1:-1;11309:213:0;;;;;;;;;;;:::i;2409:149::-;;;;;;;;;;;;;;;;-1:-1:-1;2409:149:0;;;;:::i;20273:274::-;;;:::i;9673:32::-;;;:::i;9712:::-;;;:::i;13660:1661::-;;;;;;;;;;;;;;;;-1:-1:-1;13660:1661:0;;;;:::i;1075:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1075:41:0;;;;:::i;9751:17::-;;;:::i;1451:38::-;;;;;;;;;;;;;;;;-1:-1:-1;1451:38:0;;;;:::i;15433:1503::-;;;;;;;;;;;;;;;;-1:-1:-1;15433:1503:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;958:37;;;:::i;1634:35::-;;;:::i;4181:141::-;;;;;;;;;;;;;;;;-1:-1:-1;4181:141:0;;;;;;;;;:::i;9143:46::-;;;:::i;19407:350::-;;;;;;;;;;;;;;;;-1:-1:-1;19407:350:0;;;;:::i;9293:22::-;;;:::i;9350:21::-;;;:::i;4645:680::-;;;;;;;;;;;;;;;;-1:-1:-1;4645:680:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1123:61::-;;;;;;;;;;;;;;;;-1:-1:-1;1123:61:0;;;;;;;;;;;:::i;19806:174::-;;;:::i;17048:2310::-;10134:8;;10146:1;10134:13;10126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10194:1;10183:8;:12;17162:14;;;;:32:::1;;;17193:1;17180:10;:14;17162:32;17154:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17250:25;;:::i;:::-;17278:34;;;;;;;;17292:1;17278:34;;;;;;17295:1;17278:34;;;;;;17298:1;17278:34;;;;17301:1;17278:34;;;;17304:1;17278:34;;;;17307:1;17278:34;;;;17310:1;17278:34;;::::0;17250:62:::1;;17359:13;:11;:13::i;:::-;-1:-1:-1::0;17323:49:0::1;::::0;;::::1;17340:14;::::0;::::1;17323:49:::0;::::1;::::0;;;17406:27;::::1;:58:::0;::::1;;;;17450:4;:14;;;17437:27;;:10;:27;17406:58;17398:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17529:2;17518:8;::::0;::::1;:13:::0;17576:7:::1;::::0;17559:32:::1;::::0;;;;;;;17544:12:::1;::::0;17576:7:::1;;::::0;17559:30:::1;::::0;:32:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;17576:7;17559:32;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17559:32:0;17690:6:::1;::::0;17729::::1;::::0;17559:32;;-1:-1:-1;17690:6:0::1;::::0;;::::1;::::0;17729;::::1;::::0;17758:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;17781:7;17775:13;;:2;:13;;;;17758:30;17750:67;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;17836:14:::0;;17832:58:::1;;17852:38;17866:7;17875:2;17879:10;17852:13;:38::i;:::-;17943:14:::0;;17939:58:::1;;17959:38;17973:7;17982:2;17986:10;17959:13;:38::i;:::-;18050:15:::0;;18046:98:::1;;18083:2;18067:33;;;18101:12;:10;:12::i;:::-;18115:10;18127;18139:4;;18067:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18046:98;18174:4;18163:15;;:7;:15;;;:34;;;;18193:4;18182:15;;:7;:15;;;18163:34;18159:53;;;18210:2;18199:8;::::0;::::1;:13:::0;18159:53:::1;18268:48;::::0;;;;;18310:4:::1;18268:48;::::0;::::1;::::0;;;:33:::1;::::0;::::1;::::0;::::1;::::0;:48;;;;;::::1;::::0;;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18268:48:0;18252:13:::1;::::0;;::::1;:64:::0;;;;18347:48;;;;;18389:4:::1;18347:48;::::0;::::1;::::0;;;:33:::1;::::0;::::1;::::0;::::1;::::0;:48;;;;;18268::::1;::::0;18347;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18347:48:0;18331:13:::1;::::0;::::1;:64:::0;-1:-1:-1;;18450:14:0;;18434:13:::1;::::0;::::1;::::0;18450:27:::1;::::0;;::::1;::::0;;::::1;-1:-1:-1::0;18434:95:0::1;;18528:1;18434:95;;;18514:10;18497:4;:14;;;:27;;;18480:4;:13;;;:45;18434:95;18417:4;:14;;:112;;;::::0;::::1;18590:10;18573:4;:14;;;:27;;;18557:4;:13;;;:43;:95;;18651:1;18557:95;;;18637:10;18620:4;:14;;;:27;;;18603:4;:13;;;:45;18557:95;18540:14;::::0;::::1;:112:::0;18671:14:::1;::::0;::::1;::::0;:18;;;:40:::1;;;18710:1;18693:4;:14;;;:18;18671:40;18663:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18845:21;18869:58;18898:28;18917:4;:8;;;18898:4;:14;;;:18;;:28;;;;:::i;:::-;18869:13;::::0;::::1;::::0;:24:::1;::::0;18887:5:::1;18869:17;:24::i;:::-;:28:::0;::::1;:58::i;:::-;18845:82;;18942:21;18966:58;18995:28;19014:4;:8;;;18995:4;:14;;;:18;;:28;;;;:::i;:::-;18966:13;::::0;::::1;::::0;:24:::1;::::0;18984:5:::1;18966:17;:24::i;:58::-;18942:82;;19089:54;19134:8;19089:40;19114:4;:14;;;19089:40;;19094:4;:14;;;19089:20;;:24;;:40;;;;:::i;:::-;:44:::0;::::1;:54::i;:::-;19047:38;:16:::0;19068;19047:20:::1;:38::i;:::-;:96;;19039:124;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10206:1;;19187:69;19195:4;:13;;;19210:4;:13;;;19225:4;:14;;;19241:4;:14;;;19187:7;:69::i;:::-;19347:2;19272:78;;19277:12;:10;:12::i;:::-;19272:78;;;19291:4;:14;;;19307:4;:14;;;19323:10;19335;19272:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;10229:1:0;10218:8;:12;-1:-1:-1;;;;;17048:2310:0:o;898:53::-;;;;;;;;;;;;;;;;;;;:::o;19988:277::-;20059:7;;;;20043:12;:10;:12::i;:::-;:23;;;20035:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20113:15;;;;;;;20105:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20186:15;:23;;;;;;20244:12;:10;:12::i;:::-;20227:30;;;;;;;;;;;;19988:277::o;10246:231::-;10379:8;;;;;;;10410;;;;;;;10451:18;;;;;;10246:231::o;4024:149::-;4088:4;4105:38;4114:12;:10;:12::i;:::-;4128:7;4137:5;4105:8;:38::i;:::-;-1:-1:-1;4161:4:0;4024:149;;;;;:::o;9322:21::-;;;;;;:::o;1044:24::-;;;;:::o;4330:307::-;4429:15;;;4408:4;4429:15;;;:9;:15;;;;;4467:2;;4408:4;4445:12;:10;:12::i;:::-;4429:29;;;;;;;;;;;;;;;;:41;4425:146;;4519:15;;;;;;;:9;:15;;;;;:40;;4553:5;;4519:15;4535:12;:10;:12::i;:::-;4519:29;;;;;;;;;;;;;-1:-1:-1;4519:29:0;;;:33;:40::i;:::-;4487:15;;;;;;;:9;:15;;;;;;4503:12;:10;:12::i;:::-;4487:29;;;;;;;;;;;;;-1:-1:-1;4487:29:0;:72;4425:146;4581:26;4591:4;4597:2;4601:5;4581:9;:26::i;:::-;-1:-1:-1;4625:4:0;4330:307;;;;;:::o;1336:108::-;1378:66;1336:108;:::o;1002:35::-;1035:2;1002:35;:::o;1193:31::-;;;;:::o;11309:213::-;11405:7;;;;11391:10;:21;11383:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11471:6;:16;;;;;;;;;;;;;;11498:6;:16;;;;;;;;;;;11309:213::o;2409:149::-;2501:15;;2477:4;;2501:15;;;;;:49;;;;-1:-1:-1;2533:17:0;;;2520:30;;;2533:17;;2520:30;2501:49;2494:56;;2409:149;;;;:::o;20273:274::-;20343:7;;;;20327:12;:10;:12::i;:::-;:23;;;20319:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20398:15;;;;;;;20397:16;20389:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20470:15;:22;;;;;;;;20526:12;:10;:12::i;:::-;20510:29;;;;;;;;;;;;20273:274::o;9673:32::-;;;;:::o;9712:::-;;;;:::o;13660:1661::-;13709:14;10134:8;;10146:1;10134:13;10126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10194:1;10183:8;:12;;;10194:1;13778:13:::1;:11;:13::i;:::-;-1:-1:-1::0;13848:6:0::1;::::0;13833:47:::1;::::0;;;;;13874:4:::1;13833:47;::::0;::::1;::::0;;;13736:55;;-1:-1:-1;13736:55:0;;-1:-1:-1;13817:13:0::1;::::0;13848:6:::1;::::0;;::::1;::::0;13833:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;13848:6;13833:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13833:47:0;13922:6:::1;::::0;13907:47:::1;::::0;;;;;13948:4:::1;13907:47;::::0;::::1;::::0;;;13833;;-1:-1:-1;13891:13:0::1;::::0;13922:6:::1;::::0;;::::1;::::0;13907:32:::1;::::0;:47;;;;;13833::::1;::::0;13907;;;;;;;;13922:6;13907:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13907:47:0;;-1:-1:-1;13965:12:0::1;13980:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;13965:38:::0;-1:-1:-1;14014:12:0::1;14029:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;14014:38;;14065:10;14078:30;14087:9;14098;14078:8;:30::i;:::-;14119:17;14139:11:::0;14065:43;;-1:-1:-1;14243:17:0;14239:752:::1;;14313:7;::::0;14296:36:::1;::::0;;;;;;;14277:16:::1;::::0;14313:7:::1;;::::0;14296:34:::1;::::0;:36:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;14313:7;14296:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14296:36:0;;-1:-1:-1;14351:24:0::1;::::0;::::1;:12;:10;:12::i;:::-;:24;;;14347:502;;;14418:8;14408:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14408:38:0;;-1:-1:-1;14473:13:0;;;;;:41:::1;;;14511:2;14490:9;:24;;14473:41;14465:75;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14347:502;;;14589:22;::::0;::::1;::::0;14581:57:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14669:54;9184:5;14669:31;14679:20;:7:::0;14691;14679:11:::1;:20::i;:::-;14669:9;:31::i;:54::-;14657:66;;14742:36;14756:1;9184:5;14742;:36::i;:::-;14239:752;;;;14893:86;14902:37;::::0;::::1;:25;:7:::0;14914:12;14902:11:::1;:25::i;:::-;:37;;;;;;14941;::::0;::::1;:25;:7:::0;14953:12;14941:11:::1;:25::i;:::-;:37;;;;;;14893:8;:86::i;:::-;14881:98;;14239:752;15021:1;15009:9;:13;15001:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15081:20;15087:2;15091:9;15081:5;:20::i;:::-;15114:49;15122:8;15132;15142:9;15153;15114:7;:49::i;:::-;15178:5;15174:47;;;15212:8;::::0;15193:28:::1;::::0;15212:8:::1;15198::::0;;::::1;::::0;15212;;::::1;;15193:18;:28::i;:::-;15185:5;:36:::0;15174:47:::1;15282:12;:10;:12::i;:::-;15277:36;;;15296:7;15305;15277:36;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;10229:1:0;10218:8;:12;-1:-1:-1;13660:1661:0;;;-1:-1:-1;;;;;;13660:1661:0:o;1075:41::-;;;;;;;;;;;;;:::o;9751:17::-;;;;:::o;1451:38::-;;;;;;;;;;;;;:::o;15433:1503::-;15482:12;15496;10134:8;;10146:1;10134:13;10126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10194:1;10183:8;:12;;;10194:1;15563:13:::1;:11;:13::i;:::-;-1:-1:-1::0;15620:6:0::1;::::0;15701::::1;::::0;15780:48:::1;::::0;;;;;15822:4:::1;15780:48;::::0;::::1;::::0;;;15521:55;;-1:-1:-1;15521:55:0;;-1:-1:-1;15620:6:0::1;::::0;;::::1;::::0;15701;::::1;::::0;15602:15:::1;::::0;15620:6;;15780:33:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;15620:6;15780:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15780:48:0;15855::::1;::::0;;;;;15897:4:::1;15855:48;::::0;::::1;::::0;;;15780;;-1:-1:-1;15839:13:0::1;::::0;15855:33:::1;::::0;::::1;::::0;::::1;::::0;:48;;;;;15780::::1;::::0;15855;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15855:48:0;15949:4:::1;15914:14;15931:24:::0;;;:9:::1;15855:48;15931:24:::0;;;;;15855:48;;-1:-1:-1;15981:30:0::1;15990:9:::0;16001;15981:8:::1;:30::i;:::-;16022:17;16042:11:::0;15968:43;;-1:-1:-1;16042:11:0;16152:23:::1;:9:::0;16166:8;16152:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;16285:12:0;16259:23:::1;:9:::0;16273:8;16259:13:::1;:23::i;:::-;:38;;;;;;16249:48;;16374:1;16364:7;:11;:26;;;;;16389:1;16379:7;:11;16364:26;16356:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16449:31;16463:4;16470:9;16449:5;:31::i;:::-;16491:35;16505:7;16514:2;16518:7;16491:13;:35::i;:::-;16537;16551:7;16560:2;16564:7;16537:13;:35::i;:::-;16594:48;::::0;;;;;16636:4:::1;16594:48;::::0;::::1;::::0;;;:33:::1;::::0;::::1;::::0;::::1;::::0;:48;;;;;::::1;::::0;;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16594:48:0;16664::::1;::::0;;;;;16706:4:::1;16664:48;::::0;::::1;::::0;;;16594;;-1:-1:-1;16664:33:0::1;::::0;::::1;::::0;::::1;::::0;:48;;;;;16594::::1;::::0;16664;;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16664:48:0;;-1:-1:-1;16725:49:0::1;16733:8:::0;16664:48;16753:9;16764;16725:7:::1;:49::i;:::-;16789:5;16785:47;;;16823:8;::::0;16804:28:::1;::::0;16823:8:::1;16809::::0;;::::1;::::0;16823;;::::1;;16804:18;:28::i;:::-;16796:5;:36:::0;16785:47:::1;16925:2;16888:40;;16893:12;:10;:12::i;:::-;16888:40;;;16907:7;16916;16888:40;;;;;;;;;;;;;;;;;;;;;;;;10206:1;;;;;;;;;10229::::0;10218:8;:12;;;;15433:1503;;;:::o;958:37::-;;;;;;;;;;;;;;;;;;;:::o;1634:35::-;;;;;;;;;:::o;4181:141::-;4241:4;4258:34;4268:12;:10;:12::i;:::-;4282:2;4286:5;4258:9;:34::i;9143:46::-;9184:5;9143:46;:::o;19407:350::-;10134:8;;10146:1;10134:13;10126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10194:1;10183:8;:12;19476:6:::1;::::0;19526::::1;::::0;19638:8:::1;::::0;19585:48:::1;::::0;;;;;19627:4:::1;19585:48;::::0;::::1;::::0;;;19476:6:::1;::::0;;::::1;::::0;19526;;::::1;::::0;19558:90:::1;::::0;19476:6;;19581:2;;19585:62:::1;::::0;19638:8:::1;;::::0;19476:6;;19585:33:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;;19476:6;19585:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19585:48:0;;:52:::1;:62::i;:::-;19558:13;:90::i;:::-;19659;19673:7;19682:2;19686:62;19739:8;;;;;;;;;;;19686:62;;19701:7;19686:33;;;19728:4;19686:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;19659:90;-1:-1:-1::0;;10229:1:0;10218:8;:12;-1:-1:-1;19407:350:0:o;9293:22::-;;;;;;:::o;9350:21::-;;;;;;:::o;4645:680::-;4791:15;4779:8;:27;;4771:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4948:16;;5044:13;;;;4843:14;5044:13;;;:6;:13;;;;;;;;:15;;;;;;;;;4993:77;;1378:66;4993:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4983:88;;;;;;4884:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4860:237;;;;;;;;;5135:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4843:14;;5044:15;5135:26;;;;;-1:-1:-1;5135:26:0;;;;;;;;;;5044:15;5135:26;;;;;;;;;;;;;;;-1:-1:-1;;5135:26:0;;;;;;-1:-1:-1;;5180:30:0;;;;;;;:59;;;5234:5;5214:25;;:16;:25;;;5180:59;5172:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5286:31;5295:5;5302:7;5311:5;5286:8;:31::i;:::-;4645:680;;;;;;;;;:::o;1123:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19806:174::-;10134:8;;10146:1;10134:13;10126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10194:1;10183:8;:12;19870:6:::1;::::0;19855:47:::1;::::0;;;;;19896:4:::1;19855:47;::::0;::::1;::::0;;;19847:125:::1;::::0;19870:6:::1;;::::0;19855:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;19870:6;19855:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19855:47:0;19919:6:::1;::::0;19904:47:::1;::::0;;;;;19945:4:::1;19904:47;::::0;::::1;::::0;;;19919:6:::1;::::0;;::::1;::::0;19904:32:::1;::::0;:47;;;;;19855::::1;::::0;19904;;;;;;;;19919:6;19904:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19904:47:0;19953:8:::1;::::0;::::1;::::0;;::::1;::::0;19963;;::::1;;19847:7;:125::i;:::-;10229:1:::0;10218:8;:12;19806:174::o;10485:290::-;9248:34;;;;;;;;;;;;;;;;;10613:43;;10602:10;10613:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10602:55;;;;10567:12;;10581:17;;10602:10;;;10613:43;10602:55;;;10613:43;10602:55;;10613:43;10602:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10566:91;;;;10676:7;:57;;;;-1:-1:-1;10688:11:0;;:16;;:44;;;10719:4;10708:24;;;;;;;;;;;;;;;-1:-1:-1;10708:24:0;10688:44;10668:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10485:290;;;;;:::o;2566:385::-;2611:14;2642:30;2661:10;2642:18;:30::i;:::-;2638:306;;;-1:-1:-1;2843:23:0;2847:14;2843:23;2830:37;2826:2;2822:46;2793:90;;;-1:-1:-1;2922:10:0;2638:306;2566:385;:::o;598:142::-;650:6;677;;;:30;;-1:-1:-1;;692:5:0;;;706:1;701;692:5;701:1;687:15;;;;;:20;677:30;669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;461:129;545:5;;;540:16;;;;532:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11607:863;11719:23;;;;;;:50;;-1:-1:-1;11746:23:0;;;;11719:50;11711:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11911:18;;11838:23;:15;:23;;;11911:18;;;;;11894:35;;;11967:15;;;;;;:33;;-1:-1:-1;11986:14:0;;;;;11967:33;:51;;;;-1:-1:-1;12004:14:0;;;;;11967:51;11963:336;;;12173:11;12120:64;;12125:44;12159:9;12125:27;12142:9;12125:16;:27::i;:::-;:33;;;;:44::i;:::-;12096:20;:88;;12120:50;;;;;:64;;;;12096:88;;;12223:64;;;12228:44;12262:9;12228:27;12245:9;12228:16;:27::i;:44::-;12199:20;:88;;12223:50;;;;;:64;;;;12199:88;;;11963:336;12309:8;:28;;;;;;;;;;;;12348;;;;;;;;;;;;12387:35;;;;;;;;;;;;12438:24;;;12443:8;;;12438:24;;12453:8;;;;;;;12438:24;;;;;;;;;;;;;;;;;11607:863;;;;;;:::o;3619:169::-;3700:16;;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;3749:31;;;;;;;;;;;;;;;;;3619:169;;;:::o;3796:220::-;3890:15;;;;;;;:9;:15;;;;;;:26;;3910:5;3890:19;:26::i;:::-;3872:15;;;;;;;;:9;:15;;;;;;:44;;;;3943:13;;;;;;;:24;;3961:5;3943:17;:24::i;:::-;3927:13;;;;;;;;:9;:13;;;;;;;;;:40;;;;3983:25;;;;;;;3927:13;;3983:25;;;;;;;;;;;;;3796:220;;;:::o;12560:988::-;12633:10;12656:13;12689:7;;;;;;;;;;;12672:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12672:33:0;12768:5;;12724:19;;;;;;;-1:-1:-1;12672:33:0;;-1:-1:-1;12768:5:0;12799:742;;12829:11;;12825:646;;12861:10;12874:41;12884:30;;:15;;;;:30;;:19;:30::i;12874:41::-;12861:54;;12934:14;12951:17;12961:6;12951:9;:17::i;:::-;12934:34;;12999:9;12991:5;:17;12987:469;;;13033:14;13050:37;13066:20;:5;13076:9;13066;:20::i;:::-;13050:11;;;:15;:37::i;:::-;13033:54;-1:-1:-1;13262:16:0;13281:27;13298:9;13281:12;:5;13262:16;13281:9;:12::i;:::-;:16;;:27::i;:::-;13262:46;;13331:14;13360:11;13348:9;:23;;;;;;;-1:-1:-1;13398:13:0;;13394:42;;13413:23;13419:5;13426:9;13413:5;:23::i;:::-;12987:469;;;;12825:646;;;12799:742;;;13492:11;;13488:53;;13528:1;13520:5;:9;13488:53;12560:988;;;;;;:::o;5703:303::-;5748:6;5775:1;5771;:5;5767:232;;;-1:-1:-1;5797:1:0;5830;5826;5822:5;;:9;5846:92;5857:1;5853;:5;5846:92;;;5883:1;5879:5;;5921:1;5916;5912;5908;:5;;;;;;:9;5907:15;;;;;;5903:19;;5846:92;;;5767:232;;;;5959:6;;5955:44;;-1:-1:-1;5986:1:0;5703:303;;;:::o;3193:201::-;3266:11;;:22;;3282:5;3266:15;:22::i;:::-;3252:11;:36;;;3315:13;;;;;:9;:13;;;;;;:24;;3333:5;3315:17;:24::i;:::-;3299:13;;;;;;;:9;:13;;;;;;;;:40;;;;3355:31;;;;;;;3299:13;;;;3355:31;;;;;;;;;;3193:201;;:::o;5489:96::-;5541:6;5568:1;5564;:5;:13;;5576:1;5564:13;;;5572:1;5564:13;5560:17;5489:96;-1:-1:-1;;;5489:96:0:o;3402:209::-;3481:15;;;;;;;:9;:15;;;;;;:26;;3501:5;3481:19;:26::i;:::-;3463:15;;;;;;;:9;:15;;;;;:44;;;;3532:11;:22;;3548:5;3532:15;:22::i;:::-;3518:11;:36;;;3570:33;;;;;;;;;;;;;;;;;;;;;;3402:209;;:::o;6366:120::-;6442:10;;6311:6;6442:17;;6366:120::o;6557:108::-;6617:9;6647:10;;;6643:14;;;6647:10;6643:14;;;;;;6557:108;-1:-1:-1;;;6557:108:0:o;325:128::-;409:5;;;404:16;;;;396:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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