Token ABCDEFx Liquidity Position: BUSD Token on xDai pai...

Overview ERC20

Price
$0.00 @ 0.000000 xDAI
Fully Diluted Market Cap
Total Supply:
1 ABCDEFxLP-BUSD/WXDAI

Holders:
2 addresses
Contract:
0xfb54c2b8f6ca99677bae82315b4838f96d5fbd020xFb54C2B8F6ca99677bAe82315b4838f96d5fBD02

Decimals:
18

Social Profiles:
Not Available, Update ?

Balance
0.000000000000001 ABCDEFxLP-BUSD/WXDAI

Value
$0.00
0x0000000000000000000000000000000000000000
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

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

Contract Name:
BaseV1Pair

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-16
*/

/*

FFFFF  TTTTTTT  M   M         GGGGG  U    U  RRRRR     U    U
FF       TTT   M M M M       G       U    U  RR   R    U    U
FFFFF    TTT   M  M  M      G  GGG   U    U  RRRRR     U    U
FF       TTT   M  M  M   O  G    G   U    U  RR R      U    U
FF       TTT   M     M       GGGGG    UUUU   RR  RRR    UUUU



            **************************
            **                      **
            **         ABCDEFx         **
            **                      **
            **     A Multi-Chain    **
            **Decentralized Exchange**
            **                      **
            ** A Product created by **
            **   Guru Network DAO   **
            **************************


Create Liquidity, Trade, Farm, & Vault for your own projects for free with MTV.Guru

                        Contact us at:
            https://discord.com/invite/QpyfMarNrV
                    https://t.me/FTM1337

                Powered by Guru Network (🦾,🚀)

*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

interface erc20 {
    function totalSupply() external view returns (uint256);
    function transfer(address recipient, uint amount) external returns (bool);
    function decimals() external view returns (uint8);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function balanceOf(address) external view returns (uint);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    function approve(address spender, uint value) external returns (bool);
}

library Math {
    function min(uint a, uint b) internal pure returns (uint) {
        return a < b ? a : b;
    }
    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;
        }
    }
}

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

interface IBaseV1Factory {
    function fee() external view returns (uint256);
    function feeTaker() external view returns (address);
}

interface IBaseV1Pair {
    function updateFee(uint _f) external;
    function setFeeTaker(address _ft) external;
}


// The base pair of pools, stable
contract BaseV1Pair {

    string public name;
    string public symbol;
    uint8 public constant decimals = 18;

    uint256 public fee;

    uint public totalSupply = 0;

    mapping(address => mapping (address => uint)) public allowance;
    mapping(address => uint) public balanceOf;

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

    uint internal constant MINIMUM_LIQUIDITY = 10**3;

    address public immutable token0;
    address public immutable token1;
    address public feeTaker;
    address public immutable factory;

    uint112 public reserve0;
    uint112 public reserve1;
    uint32 public blockTimestampLast;

    // Structure to capture time period obervations every 30 minutes, used for local oracles
    struct Observation {
        uint timestamp;
        uint reserve0Cumulative;
        uint reserve1Cumulative;
    }

    // Capture oracle reading every 30 minutes
    uint constant periodSize = 1800;

    Observation[] public observations;

    uint internal immutable decimals0;
    uint internal immutable decimals1;

    uint public reserve0CumulativeLast;
    uint public reserve1CumulativeLast;

    uint public totalFee0;
    uint public totalFee1;

    event Fees(address indexed sender, uint amount0, uint amount1);
    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);

    event Transfer(address indexed from, address indexed to, uint amount);
    event Approval(address indexed owner, address indexed spender, uint amount);

    constructor() {
        factory = msg.sender;
        (address _token0, address _token1) = BaseV1Factory(msg.sender).getInitializable();
        (token0, token1) = (_token0, _token1);
        feeTaker = IBaseV1Factory(msg.sender).feeTaker();
        name = string(abi.encodePacked("ABCDEFx Liquidity Position: ", erc20(_token0).name(), " paired with ", erc20(_token1).name()));
        symbol = string(abi.encodePacked("ABCDEFxLP-", erc20(_token0).symbol(), "/", erc20(_token1).symbol()));
        fee = IBaseV1Factory(factory).fee();

        decimals0 = 10**erc20(_token0).decimals();
        decimals1 = 10**erc20(_token1).decimals();

        observations.push(Observation(block.timestamp, 0, 0));
    }

    // simple re-entrancy check
    uint internal _unlocked = 1;
    modifier lock() {
        require(_unlocked == 1);
        _unlocked = 2;
        _;
        _unlocked = 1;
    }

    function observationLength() external view returns (uint) {
        return observations.length;
    }

    function lastObservation() public view returns (Observation memory) {
        return observations[observations.length-1];
    }

    function metadata() external view returns (uint dec0, uint dec1, uint112 r0, uint112 r1, address t0, address t1) {
        return (decimals0, decimals1, reserve0, reserve1, token0, token1);
    }

    function tokens() external view returns (address, address) {
        return (token0, token1);
    }

    function updateFee(uint _fee) external {
        require(msg.sender == factory && _fee >= 10);
        fee = _fee;
    }

    function getFeeTaker() public view returns(address) {
      address lft = feeTaker;
      if(lft == address(0)) {
        return IBaseV1Factory(factory).feeTaker();
      }
      else {
        return lft;
      }
    }

    function setFeeTaker(address _ft) external {
        require(msg.sender == factory);
        feeTaker = _ft;
    }


    // Accrue fees on token0
    function _update0(uint amount) internal {
        _safeTransfer(token0, getFeeTaker(), amount); // transfer the fees out to BaseV1Fees
        totalFee0 += amount;
        emit Fees(msg.sender, amount, 0);
    }

    // Accrue fees on token1
    function _update1(uint amount) internal {
        _safeTransfer(token1, getFeeTaker(), amount);
        totalFee1 += amount;
        emit Fees(msg.sender, 0, amount);
    }

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

    // update reserves and, on the first call per block, price accumulators
    function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) internal {
        require(balance0 <= type(uint112).max && balance1 <= type(uint112).max, 'BaseV1Pair: OVERFLOW');
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            reserve0CumulativeLast += _reserve0 * timeElapsed;
            reserve1CumulativeLast += _reserve1 * timeElapsed;
        }

        Observation memory _point = lastObservation();
        timeElapsed = blockTimestamp - uint32(_point.timestamp); // compare the last observation with current timestamp, if greater than 30 minutes, record a new event
        if (timeElapsed > periodSize) {
            observations.push(Observation(blockTimestamp, reserve0CumulativeLast, reserve1CumulativeLast));
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.
    function currentCumulativePrices() public view returns (uint reserve0Cumulative, uint reserve1Cumulative, uint blockTimestamp) {
        blockTimestamp = block.timestamp;
        reserve0Cumulative = reserve0CumulativeLast;
        reserve1Cumulative = reserve1CumulativeLast;

        // if time has elapsed since the last update on the pair, mock the accumulated price values
        (uint _reserve0, uint _reserve1, uint _blockTimestampLast) = getReserves();
        if (_blockTimestampLast != blockTimestamp) {
            // subtraction overflow is desired
            uint timeElapsed = blockTimestamp - _blockTimestampLast;
            reserve0Cumulative += _reserve0 * timeElapsed;
            reserve1Cumulative += _reserve1 * timeElapsed;
        }
    }

    // gives the current twap price measured from amountIn * tokenIn gives amountOut
    function current(address tokenIn, uint amountIn) external view returns (uint amountOut) {
        Observation memory _observation = lastObservation();
        (uint reserve0Cumulative, uint reserve1Cumulative,) = currentCumulativePrices();
        if (block.timestamp == _observation.timestamp) {
            _observation = observations[observations.length-2];
        }

        uint timeElapsed = block.timestamp - _observation.timestamp;
        uint _reserve0 = (reserve0Cumulative - _observation.reserve0Cumulative) / timeElapsed;
        uint _reserve1 = (reserve1Cumulative - _observation.reserve1Cumulative) / timeElapsed;
        amountOut = _getAmountOut(amountIn, tokenIn, _reserve0, _reserve1);
    }

    // as per `current`, however allows user configured granularity, up to the full window size
    function quote(address tokenIn, uint amountIn, uint granularity) external view returns (uint amountOut) {
        uint [] memory _prices = sample(tokenIn, amountIn, granularity, 1);
        uint priceAverageCumulative;
        for (uint i = 0; i < _prices.length; i++) {
            priceAverageCumulative += _prices[i];
        }
        return priceAverageCumulative / granularity;
    }

    // returns a memory set of twap prices
    function prices(address tokenIn, uint amountIn, uint points) external view returns (uint[] memory) {
        return sample(tokenIn, amountIn, points, 1);
    }

    function sample(address tokenIn, uint amountIn, uint points, uint window) public view returns (uint[] memory) {
        uint[] memory _prices = new uint[](points);

        uint length = observations.length-1;
        uint i = length - (points * window);
        uint nextIndex = 0;
        uint index = 0;

        for (; i < length; i+=window) {
            nextIndex = i + window;
            uint timeElapsed = observations[nextIndex].timestamp - observations[i].timestamp;
            uint _reserve0 = (observations[nextIndex].reserve0Cumulative - observations[i].reserve0Cumulative) / timeElapsed;
            uint _reserve1 = (observations[nextIndex].reserve1Cumulative - observations[i].reserve1Cumulative) / timeElapsed;
            _prices[index] = _getAmountOut(amountIn, tokenIn, _reserve0, _reserve1);
            index = index + 1;
        }
        return _prices;
    }

    // this low-level function should be called from a contract which performs important safety checks
    // standard uniswap v2 implementation
    function mint(address to) external lock returns (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1) = (reserve0, reserve1);
        uint _balance0 = erc20(token0).balanceOf(address(this));
        uint _balance1 = erc20(token1).balanceOf(address(this));
        uint _amount0 = _balance0 - _reserve0;
        uint _amount1 = _balance1 - _reserve1;

        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            liquidity = Math.sqrt(_amount0 * _amount1) - MINIMUM_LIQUIDITY;
            _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
        } else {
            liquidity = Math.min(_amount0 * _totalSupply / _reserve0, _amount1 * _totalSupply / _reserve1);
        }
        require(liquidity > 0, 'ILM'); // BaseV1: INSUFFICIENT_LIQUIDITY_MINTED
        _mint(to, liquidity);

        _update(_balance0, _balance1, _reserve0, _reserve1);
        emit Mint(msg.sender, _amount0, _amount1);
    }

    // this low-level function should be called from a contract which performs important safety checks
    // standard uniswap v2 implementation
    function burn(address to) external lock returns (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1) = (reserve0, reserve1);
        (address _token0, address _token1) = (token0, token1);
        uint _balance0 = erc20(_token0).balanceOf(address(this));
        uint _balance1 = erc20(_token1).balanceOf(address(this));
        uint _liquidity = balanceOf[address(this)];

        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        amount0 = _liquidity * _balance0 / _totalSupply; // using balances ensures pro-rata distribution
        amount1 = _liquidity * _balance1 / _totalSupply; // using balances ensures pro-rata distribution
        require(amount0 > 0 && amount1 > 0, 'ILB'); // BaseV1: INSUFFICIENT_LIQUIDITY_BURNED
        _burn(address(this), _liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        _balance0 = erc20(_token0).balanceOf(address(this));
        _balance1 = erc20(_token1).balanceOf(address(this));

        _update(_balance0, _balance1, _reserve0, _reserve1);
        emit Burn(msg.sender, 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(!BaseV1Factory(factory).isPaused());
        require(amount0Out > 0 || amount1Out > 0, 'IOA'); // BaseV1: INSUFFICIENT_OUTPUT_AMOUNT
        (uint112 _reserve0, uint112 _reserve1) =  (reserve0, reserve1);
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'IL'); // BaseV1: INSUFFICIENT_LIQUIDITY

        uint _balance0;
        uint _balance1;
        { // scope for _token{0,1}, avoids stack too deep errors
        (address _token0, address _token1) = (token0, token1);
        require(to != _token0 && to != _token1, 'IT'); // BaseV1: 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) IBaseV1Callee(to).hook(msg.sender, amount0Out, amount1Out, data); // callback, used for flash loans
        _balance0 = erc20(_token0).balanceOf(address(this));
        _balance1 = erc20(_token1).balanceOf(address(this));
        }
        uint amount0In = _balance0 > _reserve0 - amount0Out ? _balance0 - (_reserve0 - amount0Out) : 0;
        uint amount1In = _balance1 > _reserve1 - amount1Out ? _balance1 - (_reserve1 - amount1Out) : 0;
        require(amount0In > 0 || amount1In > 0, 'IIA'); // BaseV1: INSUFFICIENT_INPUT_AMOUNT
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        (address _token0, address _token1) = (token0, token1);

        if (amount0In > 0) _update0(amount0In / fee); // accrue fees for token0 and move them out of pool
        if (amount1In > 0) _update1(amount1In / fee); // accrue fees for token1 and move them out of pool

        _balance0 = erc20(_token0).balanceOf(address(this)); // since we removed tokens, we need to reconfirm balances, can also simply use previous balance - amountIn/ 10000, but doing balanceOf again as safety check
        _balance1 = erc20(_token1).balanceOf(address(this));
        // The curve, k = x3y+y3x for stable pools
        require(_k(_balance0, _balance1) >= _k(_reserve0, _reserve1), 'K'); // BaseV1: K
        }

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

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

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

    function _f(uint x0, uint y) internal pure returns (uint) {
        return x0*(y*y/1e18*y/1e18)/1e18+(x0*x0/1e18*x0/1e18)*y/1e18;
    }

    function _d(uint x0, uint y) internal pure returns (uint) {
        return 3*x0*(y*y/1e18)/1e18+(x0*x0/1e18*x0/1e18);
    }

    function _get_y(uint x0, uint xy, uint y) internal pure returns (uint) {
        for (uint i = 0; i < 255; i++) {
            uint y_prev = y;
            uint k = _f(x0, y);
            if (k < xy) {
                uint dy = (xy - k)*1e18/_d(x0, y);
                y = y + dy;
            } else {
                uint dy = (k - xy)*1e18/_d(x0, y);
                y = y - dy;
            }
            if (y > y_prev) {
                if (y - y_prev <= 1) {
                    return y;
                }
            } else {
                if (y_prev - y <= 1) {
                    return y;
                }
            }
        }
        return y;
    }

    function getAmountOut(uint amountIn, address tokenIn) external view returns (uint) {
        (uint _reserve0, uint _reserve1) = (reserve0, reserve1);
        amountIn -= amountIn / fee; // remove fee from amount received
        return _getAmountOut(amountIn, tokenIn, _reserve0, _reserve1);
    }

    function _getAmountOut(uint amountIn, address tokenIn, uint _reserve0, uint _reserve1) internal view returns (uint) {
        uint xy =  _k(_reserve0, _reserve1);
        _reserve0 = _reserve0 * 1e18 / decimals0;
        _reserve1 = _reserve1 * 1e18 / decimals1;
        (uint reserveA, uint reserveB) = tokenIn == token0 ? (_reserve0, _reserve1) : (_reserve1, _reserve0);
        amountIn = tokenIn == token0 ? amountIn * 1e18 / decimals0 : amountIn * 1e18 / decimals1;
        uint y = reserveB - _get_y(amountIn+reserveA, xy, reserveB);
        return y * (tokenIn == token0 ? decimals1 : decimals0) / 1e18;
    }

    function _k(uint x, uint y) internal view returns (uint) {
        uint _x = x * 1e18 / decimals0;
        uint _y = y * 1e18 / decimals1;
        uint _a = (_x * _y) / 1e18;
        uint _b = ((_x * _x) / 1e18 + (_y * _y) / 1e18);
        return _a * _b / 1e18;  // x3y+y3x >= k
    }

    function kLast() public view returns (uint) {
        return _k(reserve0, reserve1);
    }

    function _mint(address dst, uint amount) internal {
        totalSupply += amount;
        balanceOf[dst] += amount;
        emit Transfer(address(0), dst, amount);
    }

    function _burn(address dst, uint amount) internal {
        totalSupply -= amount;
        balanceOf[dst] -= amount;
        emit Transfer(dst, address(0), amount);
    }

    function approve(address spender, uint amount) external returns (bool) {
        allowance[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(deadline >= block.timestamp, 'BaseV1: EXPIRED');
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes(name)),
                keccak256('1'),
                block.chainid,
                address(this)
            )
        );
        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, 'BaseV1: INVALID_SIGNATURE');
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function transfer(address dst, uint amount) external returns (bool) {
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

    function transferFrom(address src, address dst, uint amount) external returns (bool) {
        address spender = msg.sender;
        uint spenderAllowance = allowance[src][spender];

        if (spender != src && spenderAllowance != type(uint).max) {
            uint newAllowance = spenderAllowance - amount;
            allowance[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    function _transferTokens(address src, address dst, uint amount) internal {
        balanceOf[src] -= amount;
        balanceOf[dst] += amount;
        emit Transfer(src, dst, amount);
    }

    function _safeTransfer(address token,address to,uint256 value) internal {
        require(token.code.length > 0);
        (bool success, bytes memory data) =
        token.call(abi.encodeWithSelector(erc20.transfer.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))));
    }
}

contract BaseV1Factory {

    bool public isPaused;
    address public owner;
    address public pendingOwner;
    address public admin;

    uint256 public fee = 250;   //1000: =1/1000 = 0.001 = 0.1%, 250 = 0.4%

    mapping(address => mapping(address => address)) public getPair;
    address[] public allPairs;
    mapping(address => bool) public isPair; // simplified check if its a pair, given that `stable` flag might not be available in peripherals

    address internal _temp0;
    address internal _temp1;

    address public feeTaker;

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

    constructor() {
        owner = msg.sender;
        isPaused = false;
    }

    function setfee(uint256 _fee) external {
        require(msg.sender == owner);
        require(_fee >= 100 && _fee <= 10000, "!range");
        fee = _fee;
    }

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

    function setOwner(address _owner) external {
        require(msg.sender == owner);
        pendingOwner = _owner;
    }

    function setAdmin(address _admin) external {
        require(msg.sender == owner || msg.sender == admin);
        admin = _admin;
    }

    function acceptOwner() external {
        require(msg.sender == pendingOwner);
        owner = pendingOwner;
    }

    //Global
    function setPause(bool _state) external {
        require(msg.sender == owner);
        isPaused = _state;
    }

    //Global
    function setFeeTaker(address _ft) external {
        require (msg.sender == owner);
        feeTaker = _ft;
    }

    //Local
    function setFeeTaker(address _pair, address _ft) external {
        require (msg.sender == owner);
        IBaseV1Pair(_pair).setFeeTaker(_ft);
    }

    //Local
    function setFeeTakers(address[] memory _pairs, address[] memory _ft) external {
        require (msg.sender == owner);
        for(uint i;i<_pairs.length;i++) {
          IBaseV1Pair(_pairs[i]).setFeeTaker(_ft[i]);
        }
    }

    //Local
    function updateFee(address _pair, uint _f) external {
        require (msg.sender == owner);
        IBaseV1Pair(_pair).updateFee(_f);
    }

    //Local
    function updateFee(address[] memory _pairs, uint[] memory _f) external {
        require (msg.sender == owner);
        for(uint i;i<_pairs.length;i++) {
          IBaseV1Pair(_pairs[i]).updateFee(_f[i]);
        }
    }

    function INIT_CODE_PAIR_HASH() external pure returns (bytes32) {
        return keccak256(type(BaseV1Pair).creationCode);
    }

    function getInitializable() external view returns (address, address) {
        return (_temp0, _temp1);
    }

    function createPair(address tokenA, address tokenB) external returns (address pair) {
        require(tokenA != tokenB, 'IA'); // BaseV1: IDENTICAL_ADDRESSES
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'ZA'); // BaseV1: ZERO_ADDRESS
        require(getPair[token0][token1] == address(0), 'PE'); // BaseV1: PAIR_EXISTS - single check is sufficient
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        (_temp0, _temp1) = (token0, token1);
        pair = address(new BaseV1Pair{salt:salt}());
        getPair[token0][token1] = pair;
        getPair[token1][token0] = pair; // populate mapping in the reverse direction
        allPairs.push(pair);
        isPair[pair] = true;
        emit PairCreated(token0, token1, pair, allPairs.length);
    }
}

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":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Fees","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"amount","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":[],"name":"blockTimestampLast","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"current","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentCumulativePrices","outputs":[{"internalType":"uint256","name":"reserve0Cumulative","type":"uint256"},{"internalType":"uint256","name":"reserve1Cumulative","type":"uint256"},{"internalType":"uint256","name":"blockTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeTaker","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":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastObservation","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"reserve0Cumulative","type":"uint256"},{"internalType":"uint256","name":"reserve1Cumulative","type":"uint256"}],"internalType":"struct BaseV1Pair.Observation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadata","outputs":[{"internalType":"uint256","name":"dec0","type":"uint256"},{"internalType":"uint256","name":"dec1","type":"uint256"},{"internalType":"uint112","name":"r0","type":"uint112"},{"internalType":"uint112","name":"r1","type":"uint112"},{"internalType":"address","name":"t0","type":"address"},{"internalType":"address","name":"t1","type":"address"}],"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":[],"name":"observationLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"observations","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"reserve0Cumulative","type":"uint256"},{"internalType":"uint256","name":"reserve1Cumulative","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":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"}],"name":"prices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"granularity","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve0","outputs":[{"internalType":"uint112","name":"","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve1","outputs":[{"internalType":"uint112","name":"","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"window","type":"uint256"}],"name":"sample","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ft","type":"address"}],"name":"setFeeTaker","outputs":[],"stateMutability":"nonpayable","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":"tokens","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61012060405260006003556001600f553480156200001c57600080fd5b503360c08190526040805163eb13c4cf60e01b815281516000938493909263eb13c4cf92600480830193928290030181865afa15801562000061573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000087919062000609565b6001600160a01b0380821660a052821660805260408051631d27c41160e21b81529051929450909250339163749f1044916004808201926020929091908290030181865afa158015620000de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000104919062000641565b600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000169573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001939190810190620006af565b816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620001d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001fc9190810190620006af565b6040516020016200020f92919062000767565b604051602081830303815290604052600090805190602001906200023592919062000546565b50816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000275573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200029f9190810190620006af565b816001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620002de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003089190810190620006af565b6040516020016200031b929190620007dc565b604051602081830303815290604052600190805190602001906200034192919062000546565b5060c0516001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000383573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a9919062000832565b600281905550816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041491906200084c565b6200042190600a62000986565b60e08181525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000467573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048d91906200084c565b6200049a90600a62000986565b61010052505060408051606081018252428152600060208201818152928201818152600a8054600181018255925291517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a860039092029182015591517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a9830155517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2aa90910155620009d4565b828054620005549062000997565b90600052602060002090601f016020900481019282620005785760008555620005c3565b82601f106200059357805160ff1916838001178555620005c3565b82800160010185558215620005c3579182015b82811115620005c3578251825591602001919060010190620005a6565b50620005d1929150620005d5565b5090565b5b80821115620005d15760008155600101620005d6565b80516001600160a01b03811681146200060457600080fd5b919050565b600080604083850312156200061d57600080fd5b6200062883620005ec565b91506200063860208401620005ec565b90509250929050565b6000602082840312156200065457600080fd5b6200065f82620005ec565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620006995781810151838201526020016200067f565b83811115620006a9576000848401525b50505050565b600060208284031215620006c257600080fd5b81516001600160401b0380821115620006da57600080fd5b818401915084601f830112620006ef57600080fd5b81518181111562000704576200070462000666565b604051601f8201601f19908116603f011681019083821181831017156200072f576200072f62000666565b816040528281528760208487010111156200074957600080fd5b6200075c8360208301602088016200067c565b979650505050505050565b7f41424344454678204c697175696469747920506f736974696f6e3a2000000000815260008351620007a181601c8501602088016200067c565b6c0103830b4b932b2103bb4ba341609d1b601c918401918201528351620007d08160298401602088016200067c565b01602901949350505050565b69414243444546784c502d60b01b8152600083516200080381600a8501602088016200067c565b602f60f81b600a9184019182015283516200082681600b8401602088016200067c565b01600b01949350505050565b6000602082840312156200084557600080fd5b5051919050565b6000602082840312156200085f57600080fd5b815160ff811681146200065f57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008c8578160001904821115620008ac57620008ac62000871565b80851615620008ba57918102915b93841c93908002906200088c565b509250929050565b600082620008e15750600162000980565b81620008f05750600062000980565b8160018114620009095760028114620009145762000934565b600191505062000980565b60ff84111562000928576200092862000871565b50506001821b62000980565b5060208310610133831016604e8410600b841016171562000959575081810a62000980565b62000965838362000887565b80600019048211156200097c576200097c62000871565b0290505b92915050565b60006200065f60ff841683620008d0565b600181811c90821680620009ac57607f821691505b60208210811415620009ce57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161340462000b0060003960008181610408015281816123b30152818161276f01528181612831015261293c0152600081816103e501528181612372015281816127300152818161287301526129160152600081816106cc015281816107c40152818161128b01528181611a4c0152611a9e01526000818161047e015281816106510152818161071f0152818161091901528181610be5015281816114b3015281816116f801528181611c07015281816120e401526122f6015260008181610308015281816104560152818161062c015281816108f801528181610bc40152818161141d015281816116d601528181611be50152818161205c0152818161226e015281816127b1015281816127f801526128dd01526134046000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c80637ecebe0011610151578063bf944dbc116100c3578063d505accf11610087578063d505accf14610741578063dd62ed3e14610754578063ddca3f431461077f578063ebeb31db14610788578063f140a35a14610790578063fff6cae9146107a357600080fd5b8063bf944dbc146106b5578063c245febc146106be578063c45a0155146106c7578063c5700a02146106ee578063d21220a71461071a57600080fd5b8063955661e511610115578063955661e51461060e57806395d89b41146106165780639d63848a1461061e5780639e8cc04b1461067c578063a9059cbb1461068f578063bc25cf77146106a257600080fd5b80637ecebe001461058057806389afcb44146105a05780638a7b8cf2146105c85780639012c4a8146105f257806390256e541461060557600080fd5b8063392f37e9116101ea5780635a76f25e116101ae5780635a76f25e1461050f5780636a6278421461052957806370a082311461053c5780637464fc3d1461055c578063749f10441461056457806378f0c7351461057757600080fd5b8063392f37e9146103dc578063443cb4bc146104ab5780634ec5908d146104d6578063517b3f82146104e95780635881c475146104fc57600080fd5b806313345fe11161023c57806313345fe11461034257806318160ddd146103625780631df8c7171461037957806323b872dd1461039c578063252c09d7146103af578063313ce567146103c257600080fd5b8063022c0d9f1461027957806306fdde031461028e5780630902f1ac146102ac578063095ea7b3146102e05780630dfe168114610303575b600080fd5b61028c610287366004612ddb565b6107ab565b005b610296610dde565b6040516102a39190612ea1565b60405180910390f35b6102b4610e6c565b604080516001600160701b03948516815293909216602084015263ffffffff16908201526060016102a3565b6102f36102ee366004612ed4565b610e96565b60405190151581526020016102a3565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a3565b610355610350366004612f00565b610f02565b6040516102a39190612f3b565b61036b60035481565b6040519081526020016102a3565b610381611108565b604080519384526020840192909252908201526060016102a3565b6102f36103aa366004612f7f565b611184565b6103816103bd366004612fc0565b61124d565b6103ca601281565b60405160ff90911681526020016102a3565b600954604080517f000000000000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060208201526001600160701b0380841692820192909252600160701b9092041660608201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660808301527f00000000000000000000000000000000000000000000000000000000000000001660a082015260c0016102a3565b6009546104be906001600160701b031681565b6040516001600160701b0390911681526020016102a3565b61028c6104e4366004612fd9565b611280565b61036b6104f7366004612ed4565b6112d7565b61035561050a366004612ff6565b6113c0565b6009546104be90600160701b90046001600160701b031681565b61036b610537366004612fd9565b6113d7565b61036b61054a366004612fd9565b60056020526000908152604090205481565b61036b61166a565b60085461032a906001600160a01b031681565b61036b600e5481565b61036b61058e366004612fd9565b60076020526000908152604090205481565b6105b36105ae366004612fd9565b611692565b604080519283526020830191909152016102a3565b6105d06119c1565b60408051825181526020808401519082015291810151908201526060016102a3565b61028c610600366004612fc0565b611a41565b61036b600d5481565b61032a611a88565b610296611b29565b604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682527f0000000000000000000000000000000000000000000000000000000000000000166020820152016102a3565b61036b61068a366004612ff6565b611b36565b6102f361069d366004612ed4565b611ba3565b61028c6106b0366004612fd9565b611bb9565b61036b600b5481565b61036b600c5481565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b60095461070590600160e01b900463ffffffff1681565b60405163ffffffff90911681526020016102a3565b61032a7f000000000000000000000000000000000000000000000000000000000000000081565b61028c61074f36600461302b565b611cf0565b61036b6107623660046130a2565b600460209081526000928352604080842090915290825290205481565b61036b60025481565b600a5461036b565b61036b61079e3660046130db565b611fe5565b61028c61202f565b600f546001146107ba57600080fd5b6002600f819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa158015610820573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108449190613100565b1561084e57600080fd5b600085118061085d5750600084115b6108945760405162461bcd60e51b8152602060048201526003602482015262494f4160e81b60448201526064015b60405180910390fd5b6009546001600160701b0380821691600160701b90041681871080156108c25750806001600160701b031686105b6108f35760405162461bcd60e51b8152602060048201526002602482015261125360f21b604482015260640161088b565b6000807f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03898116908316148015906109665750806001600160a01b0316896001600160a01b031614155b6109975760405162461bcd60e51b8152602060048201526002602482015261125560f21b604482015260640161088b565b8a156109a8576109a8828a8d61217a565b89156109b9576109b9818a8c61217a565b8615610a2657604051639a7bff7960e01b81526001600160a01b038a1690639a7bff79906109f39033908f908f908e908e90600401613122565b600060405180830381600087803b158015610a0d57600080fd5b505af1158015610a21573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e919061316e565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af9919061316e565b92505050600089856001600160701b0316610b14919061319d565b8311610b21576000610b3e565b610b348a6001600160701b03871661319d565b610b3e908461319d565b90506000610b558a6001600160701b03871661319d565b8311610b62576000610b7f565b610b758a6001600160701b03871661319d565b610b7f908461319d565b90506000821180610b905750600081115b610bc25760405162461bcd60e51b815260206004820152600360248201526249494160e81b604482015260640161088b565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008315610c2057610c2060025485610c1b91906131ca565b612269565b8215610c3c57610c3c60025484610c3791906131ca565b6122f1565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca4919061316e565b6040516370a0823160e01b81523060048201529096506001600160a01b038216906370a0823190602401602060405180830381865afa158015610ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0f919061316e565b9450610d2d886001600160701b0316886001600160701b031661236d565b610d37878761236d565b1015610d695760405162461bcd60e51b81526020600482015260016024820152604b60f81b604482015260640161088b565b5050610d7784848888612481565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600f55505050505050505050565b60008054610deb906131de565b80601f0160208091040260200160405190810160405280929190818152602001828054610e17906131de565b8015610e645780601f10610e3957610100808354040283529160200191610e64565b820191906000526020600020905b815481529060010190602001808311610e4757829003601f168201915b505050505081565b6009546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ef19086815260200190565b60405180910390a350600192915050565b606060008367ffffffffffffffff811115610f1f57610f1f613213565b604051908082528060200260200182016040528015610f48578160200160208202803683370190505b50600a54909150600090610f5e9060019061319d565b90506000610f6c8587613229565b610f76908361319d565b90506000805b838310156110fa57610f8e8784613248565b91506000600a8481548110610fa557610fa5613260565b906000526020600020906003020160000154600a8481548110610fca57610fca613260565b906000526020600020906003020160000154610fe6919061319d565b9050600081600a8681548110610ffe57610ffe613260565b906000526020600020906003020160010154600a868154811061102357611023613260565b90600052602060002090600302016001015461103f919061319d565b61104991906131ca565b9050600082600a878154811061106157611061613260565b906000526020600020906003020160020154600a878154811061108657611086613260565b9060005260206000209060030201600201546110a2919061319d565b6110ac91906131ca565b90506110ba8c8e848461271f565b8885815181106110cc576110cc613260565b60209081029190910101526110e2846001613248565b935050505086836110f39190613248565b9250610f7c565b509298975050505050505050565b600b54600c54426000808061111b610e6c565b63ffffffff1692506001600160701b031692506001600160701b0316925083811461117c57600061114c828661319d565b90506111588185613229565b6111629088613248565b965061116e8184613229565b6111789087613248565b9550505b505050909192565b6001600160a01b0383166000818152600460209081526040808320338085529252822054919290919082148015906111be57506000198114155b156112345760006111cf858361319d565b6001600160a01b038881166000818152600460209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61123f868686612970565b6001925050505b9392505050565b600a818154811061125d57600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112b557600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000806112e26119c1565b90506000806112ef611108565b508451919350915042141561135857600a805461130e9060029061319d565b8154811061131e5761131e613260565b9060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505092505b8251600090611367904261319d565b905060008185602001518561137c919061319d565b61138691906131ca565b905060008286604001518561139b919061319d565b6113a591906131ca565b90506113b3888a848461271f565b9998505050505050505050565b60606113cf8484846001610f02565b949350505050565b6000600f546001146113e857600080fd5b6002600f556009546040516370a0823160e01b81523060048201526001600160701b0380831692600160701b900416906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561146c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611490919061316e565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156114fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151e919061316e565b905060006115356001600160701b0386168461319d565b9050600061154c6001600160701b0386168461319d565b6003549091508061158a576103e861156c6115678486613229565b612a1e565b611576919061319d565b975061158560006103e8612a8d565b6115d1565b6115ce6001600160701b0388166115a18386613229565b6115ab91906131ca565b6001600160701b0388166115bf8486613229565b6115c991906131ca565b612b17565b97505b600088116116075760405162461bcd60e51b8152602060048201526003602482015262494c4d60e81b604482015260640161088b565b6116118989612a8d565b61161d85858989612481565b604080518481526020810184905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600f55509395945050505050565b60095460009061168d906001600160701b0380821691600160701b90041661236d565b905090565b600080600f546001146116a457600080fd5b6002600f556009546040516370a0823160e01b81523060048201526001600160701b0380831692600160701b900416907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561174c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611770919061316e565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156117ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117de919061316e565b3060009081526005602052604090205460035491925090806118008584613229565b61180a91906131ca565b9950806118178484613229565b61182191906131ca565b985060008a1180156118335750600089115b6118655760405162461bcd60e51b815260206004820152600360248201526224a62160e91b604482015260640161088b565b61186f3083612b2d565b61187a868c8c61217a565b611885858c8b61217a565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa1580156118c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ed919061316e565b6040516370a0823160e01b81523060048201529094506001600160a01b038616906370a0823190602401602060405180830381865afa158015611934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611958919061316e565b925061196684848a8a612481565b604080518b8152602081018b90526001600160a01b038d169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a350505050505050506001600f81905550915091565b6119e560405180606001604052806000815260200160008152602001600081525090565b600a80546119f59060019061319d565b81548110611a0557611a05613260565b90600052602060002090600302016040518060600160405290816000820154815260200160018201548152602001600282015481525050905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a7a5750600a8110155b611a8357600080fd5b600255565b6008546000906001600160a01b031680611b24577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663749f10446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1e9190613276565b91505090565b919050565b60018054610deb906131de565b600080611b468585856001610f02565b90506000805b8251811015611b8e57828181518110611b6757611b67613260565b602002602001015182611b7a9190613248565b915080611b8681613293565b915050611b4c565b50611b9984826131ca565b9695505050505050565b6000611bb0338484612970565b50600192915050565b600f54600114611bc857600080fd5b6002600f556009546040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091611c9e91849186916001600160701b0316906001600160a01b038416906370a08231906024015b602060405180830381865afa158015611c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8f919061316e565b611c99919061319d565b61217a565b6009546040516370a0823160e01b8152306004820152611ce69183918691600160701b90046001600160701b0316906001600160a01b038416906370a0823190602401611c4e565b50506001600f5550565b42841015611d325760405162461bcd60e51b815260206004820152600f60248201526e10985cd9558c4e8811561412549151608a1b604482015260640161088b565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051611d6291906132ae565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f19818403018152918152815160209283012060068190556001600160a01b038a166000908152600790935290822080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b919087611e1883613293565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e00160405160208183030381529060405280519060200120604051602001611e9192919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611efc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611f325750886001600160a01b0316816001600160a01b0316145b611f7e5760405162461bcd60e51b815260206004820152601960248201527f4261736556313a20494e56414c49445f5349474e415455524500000000000000604482015260640161088b565b6001600160a01b038981166000818152600460209081526040808320948d16808452948252918290208b905590518a81527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050505050505050565b6009546002546000916001600160701b0380821692600160701b909204169061200e90866131ca565b612018908661319d565b94506120268585848461271f565b95945050505050565b600f5460011461203e57600080fd5b6002600f556040516370a0823160e01b8152306004820152612173907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156120ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cf919061316e565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612133573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612157919061316e565b6009546001600160701b0380821691600160701b900416612481565b6001600f55565b6000836001600160a01b03163b1161219157600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916121ed919061334a565b6000604051808303816000865af19150503d806000811461222a576040519150601f19603f3d011682016040523d82523d6000602084013e61222f565b606091505b50915091508180156122595750805115806122595750808060200190518101906122599190613100565b61226257600080fd5b5050505050565b61229b7f0000000000000000000000000000000000000000000000000000000000000000612295611a88565b8361217a565b80600d60008282546122ad9190613248565b9091555050604080518281526000602082015233917f112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a860291015b60405180910390a250565b61231d7f0000000000000000000000000000000000000000000000000000000000000000612295611a88565b80600e600082825461232f9190613248565b909155505060408051600081526020810183905233917f112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a860291016122e6565b6000807f00000000000000000000000000000000000000000000000000000000000000006123a385670de0b6b3a7640000613229565b6123ad91906131ca565b905060007f00000000000000000000000000000000000000000000000000000000000000006123e485670de0b6b3a7640000613229565b6123ee91906131ca565b90506000670de0b6b3a76400006124058385613229565b61240f91906131ca565b90506000670de0b6b3a76400006124268480613229565b61243091906131ca565b670de0b6b3a76400006124438680613229565b61244d91906131ca565b6124579190613248565b9050670de0b6b3a764000061246c8284613229565b61247691906131ca565b979650505050505050565b6001600160701b03841180159061249f57506001600160701b038311155b6124e25760405162461bcd60e51b8152602060048201526014602482015273426173655631506169723a204f564552464c4f5760601b604482015260640161088b565b60006124f364010000000042613366565b60095490915060009061251390600160e01b900463ffffffff168361337a565b905060008163ffffffff1611801561253357506001600160701b03841615155b801561254757506001600160701b03831615155b156125ac5761255c63ffffffff82168561339f565b6001600160701b0316600b60008282546125769190613248565b9091555061258c905063ffffffff82168461339f565b6001600160701b0316600c60008282546125a69190613248565b90915550505b60006125b66119c1565b80519091506125c5908461337a565b91506107088263ffffffff161115612686576040805160608101825263ffffffff85168152600b5460208201908152600c54928201928352600a805460018101825560009190915291517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8600390930292830155517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a982015590517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2aa909101555b6009805463ffffffff8516600160e01b026001600160e01b036001600160701b038a8116600160701b9081026001600160e01b03199095168d83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a150505050505050565b60008061272c848461236d565b90507f000000000000000000000000000000000000000000000000000000000000000061276185670de0b6b3a7640000613229565b61276b91906131ca565b93507f00000000000000000000000000000000000000000000000000000000000000006127a084670de0b6b3a7640000613229565b6127aa91906131ca565b92506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316146127ef5784866127f2565b85855b915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614612871577f000000000000000000000000000000000000000000000000000000000000000061286289670de0b6b3a7640000613229565b61286c91906131ca565b6128ae565b7f00000000000000000000000000000000000000000000000000000000000000006128a489670de0b6b3a7640000613229565b6128ae91906131ca565b975060006128c66128bf848b613248565b8584612baf565b6128d0908361319d565b9050670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b03161461293a577f000000000000000000000000000000000000000000000000000000000000000061295c565b7f00000000000000000000000000000000000000000000000000000000000000005b6129669083613229565b6113b391906131ca565b6001600160a01b0383166000908152600560205260408120805483929061299890849061319d565b90915550506001600160a01b038216600090815260056020526040812080548392906129c5908490613248565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a1191815260200190565b60405180910390a3505050565b60006003821115612a7f5750806000612a386002836131ca565b612a43906001613248565b90505b81811015612a7957905080600281612a5e81866131ca565b612a689190613248565b612a7291906131ca565b9050612a46565b50919050565b8115611b2457506001919050565b8060036000828254612a9f9190613248565b90915550506001600160a01b03821660009081526005602052604081208054839290612acc908490613248565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6000818310612b265781611246565b5090919050565b8060036000828254612b3f919061319d565b90915550506001600160a01b03821660009081526005602052604081208054839290612b6c90849061319d565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612b0b565b6000805b60ff811015612cb557826000612bc98783612cbe565b905085811015612c19576000612bdf8887612d5b565b612be9838961319d565b612bfb90670de0b6b3a7640000613229565b612c0591906131ca565b9050612c118187613248565b955050612c5b565b6000612c258887612d5b565b612c2f888461319d565b612c4190670de0b6b3a7640000613229565b612c4b91906131ca565b9050612c57818761319d565b9550505b81851115612c84576001612c6f838761319d565b11612c7f57849350505050611246565b612ca0565b6001612c90868461319d565b11612ca057849350505050611246565b50508080612cad90613293565b915050612bb3565b50909392505050565b6000670de0b6b3a764000082818581612cd78280613229565b612ce191906131ca565b612ceb9190613229565b612cf591906131ca565b612cff9190613229565b612d0991906131ca565b670de0b6b3a7640000808481612d1f8280613229565b612d2991906131ca565b612d339190613229565b612d3d91906131ca565b612d479086613229565b612d5191906131ca565b6112469190613248565b6000670de0b6b3a76400008381612d728280613229565b612d7c91906131ca565b612d869190613229565b612d9091906131ca565b670de0b6b3a764000080612da48580613229565b612dae91906131ca565b612db9866003613229565b612d479190613229565b6001600160a01b0381168114612dd857600080fd5b50565b600080600080600060808688031215612df357600080fd5b85359450602086013593506040860135612e0c81612dc3565b9250606086013567ffffffffffffffff80821115612e2957600080fd5b818801915088601f830112612e3d57600080fd5b813581811115612e4c57600080fd5b896020828501011115612e5e57600080fd5b9699959850939650602001949392505050565b60005b83811015612e8c578181015183820152602001612e74565b83811115612e9b576000848401525b50505050565b6020815260008251806020840152612ec0816040850160208701612e71565b601f01601f19169190910160400192915050565b60008060408385031215612ee757600080fd5b8235612ef281612dc3565b946020939093013593505050565b60008060008060808587031215612f1657600080fd5b8435612f2181612dc3565b966020860135965060408601359560600135945092505050565b6020808252825182820181905260009190848201906040850190845b81811015612f7357835183529284019291840191600101612f57565b50909695505050505050565b600080600060608486031215612f9457600080fd5b8335612f9f81612dc3565b92506020840135612faf81612dc3565b929592945050506040919091013590565b600060208284031215612fd257600080fd5b5035919050565b600060208284031215612feb57600080fd5b813561124681612dc3565b60008060006060848603121561300b57600080fd5b833561301681612dc3565b95602085013595506040909401359392505050565b600080600080600080600060e0888a03121561304657600080fd5b873561305181612dc3565b9650602088013561306181612dc3565b95506040880135945060608801359350608088013560ff8116811461308557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156130b557600080fd5b82356130c081612dc3565b915060208301356130d081612dc3565b809150509250929050565b600080604083850312156130ee57600080fd5b8235915060208301356130d081612dc3565b60006020828403121561311257600080fd5b8151801515811461124657600080fd5b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60006020828403121561318057600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156131af576131af613187565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826131d9576131d96131b4565b500490565b600181811c908216806131f257607f821691505b60208210811415612a7957634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600081600019048311821515161561324357613243613187565b500290565b6000821982111561325b5761325b613187565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561328857600080fd5b815161124681612dc3565b60006000198214156132a7576132a7613187565b5060010190565b600080835481600182811c9150808316806132ca57607f831692505b60208084108214156132ea57634e487b7160e01b86526022600452602486fd5b8180156132fe576001811461330f5761333c565b60ff1986168952848901965061333c565b60008a81526020902060005b868110156133345781548b82015290850190830161331b565b505084890196505b509498975050505050505050565b6000825161335c818460208701612e71565b9190910192915050565b600082613375576133756131b4565b500690565b600063ffffffff8381169083168181101561339757613397613187565b039392505050565b60006001600160701b03808316818516818304811182151516156133c5576133c5613187565b0294935050505056fea264697066735822122021cb75d4aeaaca20d407049d0ec923710f02fdcfdde3f70fc07e2c26a607823564736f6c634300080b0033

Deployed ByteCode Sourcemap

2519:20170:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14565:2407;;;;;;:::i;:::-;;:::i;:::-;;2548:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7089:231;;;:::i;:::-;;;;-1:-1:-1;;;;;1936:15:1;;;1918:34;;1988:15;;;;1983:2;1968:18;;1961:43;2052:10;2040:23;2020:18;;;2013:51;1857:2;1842:18;7089:231:0;1669:401:1;20206:204:0;;;;;;:::i;:::-;;:::i;:::-;;;2560:14:1;;2553:22;2535:41;;2523:2;2508:18;20206:204:0;2395:187:1;3192:31:0;;;;;;;;-1:-1:-1;;;;;2751:32:1;;;2733:51;;2721:2;2706:18;3192:31:0;2587:203:1;10950:902:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2671:27::-;;;;;;;;;4035:25:1;;;4023:2;4008:18;2671:27:0;3889:177:1;8634:777:0;;;:::i;:::-;;;;4273:25:1;;;4329:2;4314:18;;4307:34;;;;4357:18;;;4350:34;4261:2;4246:18;8634:777:0;4071:319:1;21642:511:0;;;;;;:::i;:::-;;:::i;3750:33::-;;;;;;:::i;:::-;;:::i;2600:35::-;;2633:2;2600:35;;;;;5213:4:1;5201:17;;;5183:36;;5171:2;5156:18;2600:35:0;5041:184:1;5815:197:0;5969:8;;5815:197;;;5947:9;5517:25:1;;5958:9:0;5573:2:1;5558:18;;5551:34;-1:-1:-1;;;;;5969:8:0;;;5650:18:1;;;5643:43;;;;-1:-1:-1;;;5979:8:0;;;;5717:2:1;5702:18;;5695:43;-1:-1:-1;;;;;5989:6:0;5813:15:1;;5807:3;5792:19;;5785:44;5997:6:0;5866:15:1;5765:3;5845:19;;5838:44;5504:3;5489:19;5815:197:0;5230:658:1;3339:23:0;;;;;-1:-1:-1;;;;;3339:23:0;;;;;;-1:-1:-1;;;;;6057:43:1;;;6039:62;;6027:2;6012:18;3339:23:0;5893:214:1;6495:117:0;;;;;;:::i;:::-;;:::i;9505:723::-;;;;;;:::i;:::-;;:::i;10781:161::-;;;;;;:::i;:::-;;:::i;3369:23::-;;;;;-1:-1:-1;;;3369:23:0;;-1:-1:-1;;;;;3369:23:0;;;12007:1078;;;;;;:::i;:::-;;:::i;2776:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;19742:92;;;:::i;3268:23::-;;;;;-1:-1:-1;;;;;3268:23:0;;;3986:21;;;;;;3088:38;;;;;;:::i;:::-;;;;;;;;;;;;;;13240:1213;;;;;;:::i;:::-;;:::i;:::-;;;;6926:25:1;;;6982:2;6967:18;;6960:34;;;;6899:18;13240:1213:0;6752:248:1;5678:129:0;;;:::i;:::-;;;;7225:13:1;;7207:32;;7295:4;7283:17;;;7277:24;7255:20;;;7248:54;7346:17;;;7340:24;7318:20;;;7311:54;7195:2;7180:18;5678:129:0;7005:366:1;6129:123:0;;;;;;:::i;:::-;;:::i;3958:21::-;;;;;;6260:227;;;:::i;2573:20::-;;;:::i;6020:101::-;;;;-1:-1:-1;;;;;6098:6:0;7606:15:1;;7588:34;;6106:6:0;7658:15:1;7653:2;7638:18;;7631:43;7523:18;6020:101:0;7376:304:1;10333:396:0;;;;;;:::i;:::-;;:::i;21485:149::-;;;;;;:::i;:::-;;:::i;17021:294::-;;;;;;:::i;:::-;;:::i;3874:34::-;;;;;;3915;;;;;;3298:32;;;;;3399;;;;;-1:-1:-1;;;3399:32:0;;;;;;;;;7859:10:1;7847:23;;;7829:42;;7817:2;7802:18;3399:32:0;7685:192:1;3230:31:0;;;;;20418:1059;;;;;;:::i;:::-;;:::i;2707:62::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2644:18;;;;;;5567:103;5643:12;:19;5567:103;;18502:301;;;;;;:::i;:::-;;:::i;17364:156::-;;;:::i;14565:2407::-;5476:9;;5489:1;5476:14;5468:23;;;;;;5514:1;5502:9;:13;;;;14694:7:::1;-1:-1:-1::0;;;;;14680:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14679:34;14671:43;;;::::0;::::1;;14746:1;14733:10;:14;:32;;;;14764:1;14751:10;:14;14733:32;14725:48;;;::::0;-1:-1:-1;;;14725:48:0;;9913:2:1;14725:48:0::1;::::0;::::1;9895:21:1::0;9952:1;9932:18;;;9925:29;-1:-1:-1;;;9970:18:1;;;9963:33;10013:18;;14725:48:0::1;;;;;;;;;14865:8;::::0;-1:-1:-1;;;;;14865:8:0;;::::1;::::0;-1:-1:-1;;;14875:8:0;::::1;;14903:22:::0;;::::1;:48:::0;::::1;;;;14942:9;-1:-1:-1::0;;;;;14929:22:0::1;:10;:22;14903:48;14895:63;;;::::0;-1:-1:-1;;;14895:63:0;;10244:2:1;14895:63:0::1;::::0;::::1;10226:21:1::0;10283:1;10263:18;;;10256:29;-1:-1:-1;;;10301:18:1;;;10294:32;10343:18;;14895:63:0::1;10042:325:1::0;14895:63:0::1;15005:14;::::0;15159:6:::1;15167;-1:-1:-1::0;;;;;15193:13:0;;::::1;::::0;;::::1;;::::0;::::1;::::0;:30:::1;;;15216:7;-1:-1:-1::0;;;;;15210:13:0::1;:2;-1:-1:-1::0;;;;;15210:13:0::1;;;15193:30;15185:45;;;::::0;-1:-1:-1;;;15185:45:0;;10574:2:1;15185:45:0::1;::::0;::::1;10556:21:1::0;10613:1;10593:18;;;10586:29;-1:-1:-1;;;10631:18:1;;;10624:32;10673:18;;15185:45:0::1;10372:325:1::0;15185:45:0::1;15267:14:::0;;15263:58:::1;;15283:38;15297:7;15306:2;15310:10;15283:13;:38::i;:::-;15370:14:::0;;15366:58:::1;;15386:38;15400:7;15409:2;15413:10;15386:13;:38::i;:::-;15473:15:::0;;15469:85:::1;;15490:64;::::0;-1:-1:-1;;;15490:64:0;;-1:-1:-1;;;;;15490:22:0;::::1;::::0;::::1;::::0;:64:::1;::::0;15513:10:::1;::::0;15525;;15537;;15549:4;;;;15490:64:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15469:85;15611:39;::::0;-1:-1:-1;;;15611:39:0;;15644:4:::1;15611:39;::::0;::::1;2733:51:1::0;-1:-1:-1;;;;;15611:24:0;::::1;::::0;::::1;::::0;2706:18:1;;15611:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15673;::::0;-1:-1:-1;;;15673:39:0;;15706:4:::1;15673:39;::::0;::::1;2733:51:1::0;15599::0;;-1:-1:-1;;;;;;15673:24:0;::::1;::::0;::::1;::::0;2706:18:1;;15673:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15661:51;;15055:669;;15734:14;15775:10;15763:9;-1:-1:-1::0;;;;;15763:22:0::1;;;;;:::i;:::-;15751:9;:34;:77;;15827:1;15751:77;;;15801:22;15813:10:::0;-1:-1:-1;;;;;15801:22:0;::::1;;:::i;:::-;15788:36;::::0;:9;:36:::1;:::i;:::-;15734:94:::0;-1:-1:-1;15839:14:0::1;15868:22;15880:10:::0;-1:-1:-1;;;;;15868:22:0;::::1;;:::i;:::-;15856:9;:34;:77;;15932:1;15856:77;;;15906:22;15918:10:::0;-1:-1:-1;;;;;15906:22:0;::::1;;:::i;:::-;15893:36;::::0;:9;:36:::1;:::i;:::-;15839:94;;15964:1;15952:9;:13;:30;;;;15981:1;15969:9;:13;15952:30;15944:46;;;::::0;-1:-1:-1;;;15944:46:0;;11992:2:1;15944:46:0::1;::::0;::::1;11974:21:1::0;12031:1;12011:18;;;12004:29;-1:-1:-1;;;12049:18:1;;;12042:33;12092:18;;15944:46:0::1;11790:326:1::0;15944:46:0::1;16151:6;16159;16183:13:::0;;16179:44:::1;;16198:25;16219:3;;16207:9;:15;;;;:::i;:::-;16198:8;:25::i;:::-;16290:13:::0;;16286:44:::1;;16305:25;16326:3;;16314:9;:15;;;;:::i;:::-;16305:8;:25::i;:::-;16407:39;::::0;-1:-1:-1;;;16407:39:0;;16440:4:::1;16407:39;::::0;::::1;2733:51:1::0;-1:-1:-1;;;;;16407:24:0;::::1;::::0;::::1;::::0;2706:18:1;;16407:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16626;::::0;-1:-1:-1;;;16626:39:0;;16659:4:::1;16626:39;::::0;::::1;2733:51:1::0;16395::0;;-1:-1:-1;;;;;;16626:24:0;::::1;::::0;::::1;::::0;2706:18:1;;16626:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16614:51;;16764:24;16767:9;-1:-1:-1::0;;;;;16764:24:0::1;16778:9;-1:-1:-1::0;;;;;16764:24:0::1;:2;:24::i;:::-;16736;16739:9;16750;16736:2;:24::i;:::-;:52;;16728:66;;;::::0;-1:-1:-1;;;16728:66:0;;12580:2:1;16728:66:0::1;::::0;::::1;12562:21:1::0;12619:1;12599:18;;;12592:29;-1:-1:-1;;;12637:18:1;;;12630:31;12678:18;;16728:66:0::1;12378:324:1::0;16728:66:0::1;16038:781;;16831:51;16839:9;16850;16861;16872;16831:7;:51::i;:::-;16898:66;::::0;;12938:25:1;;;12994:2;12979:18;;12972:34;;;13022:18;;;13015:34;;;13080:2;13065:18;;13058:34;;;-1:-1:-1;;;;;16898:66:0;::::1;::::0;16903:10:::1;::::0;16898:66:::1;::::0;12925:3:1;12910:19;16898:66:0::1;;;;;;;-1:-1:-1::0;;5550:1:0;5538:9;:13;-1:-1:-1;;;;;;;;;14565:2407:0:o;2548:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7089:231::-;7222:8;;-1:-1:-1;;;;;7222:8:0;;;;-1:-1:-1;;;7253:8:0;;;;;;-1:-1:-1;;;7294:18:0;;;;;7089:231::o;20206:204::-;20298:10;20271:4;20288:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;20288:30:0;;;;;;;;;;:39;;;20343:37;20271:4;;20288:30;;20343:37;;;;20321:6;4035:25:1;;4023:2;4008:18;;3889:177;20343:37:0;;;;;;;;-1:-1:-1;20398:4:0;20206:204;;;;:::o;10950:902::-;11045:13;11071:21;11106:6;11095:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11095:18:0;-1:-1:-1;11140:12:0;:19;11071:42;;-1:-1:-1;11126:11:0;;11140:21;;11160:1;;11140:21;:::i;:::-;11126:35;-1:-1:-1;11172:6:0;11191:15;11200:6;11191;:15;:::i;:::-;11181:26;;:6;:26;:::i;:::-;11172:35;;11218:14;11247:10;11274:546;11285:6;11281:1;:10;11274:546;;;11331:10;11335:6;11331:1;:10;:::i;:::-;11319:22;;11356:16;11411:12;11424:1;11411:15;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;11375:12;11388:9;11375:23;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;:61;;;;:::i;:::-;11356:80;;11451:14;11552:11;11514:12;11527:1;11514:15;;;;;;;;:::i;:::-;;;;;;;;;;;:34;;;11469:12;11482:9;11469:23;;;;;;;;:::i;:::-;;;;;;;;;;;:42;;;:79;;;;:::i;:::-;11468:95;;;;:::i;:::-;11451:112;;11578:14;11679:11;11641:12;11654:1;11641:15;;;;;;;;:::i;:::-;;;;;;;;;;;:34;;;11596:12;11609:9;11596:23;;;;;;;;:::i;:::-;;;;;;;;;;;:42;;;:79;;;;:::i;:::-;11595:95;;;;:::i;:::-;11578:112;;11722:54;11736:8;11746:7;11755:9;11766;11722:13;:54::i;:::-;11705:7;11713:5;11705:14;;;;;;;;:::i;:::-;;;;;;;;;;:71;11799:9;:5;11807:1;11799:9;:::i;:::-;11791:17;;11304:516;;;11296:6;11293:9;;;;;:::i;:::-;;;11274:546;;;-1:-1:-1;11837:7:0;;10950:902;-1:-1:-1;;;;;;;;10950:902:0:o;8634:777::-;8836:22;;8890;;8789:15;8690:23;;;9087:13;:11;:13::i;:::-;9026:74;;;;-1:-1:-1;;;;;9026:74:0;;;-1:-1:-1;;;;;9026:74:0;;;9138:14;9115:19;:37;9111:293;;9217:16;9236:36;9253:19;9236:14;:36;:::i;:::-;9217:55;-1:-1:-1;9309:23:0;9217:55;9309:9;:23;:::i;:::-;9287:45;;;;:::i;:::-;;-1:-1:-1;9369:23:0;9381:11;9369:9;:23;:::i;:::-;9347:45;;;;:::i;:::-;;;9154:250;9111:293;8761:650;;;8634:777;;;:::o;21642:511::-;-1:-1:-1;;;;;21801:14:0;;21721:4;21801:14;;;:9;:14;;;;;;;;21756:10;21801:23;;;;;;;;21721:4;;21756:10;;21801:23;21841:14;;;;;:52;;;-1:-1:-1;;21859:16:0;:34;;21841:52;21837:241;;;21910:17;21930:25;21949:6;21930:16;:25;:::i;:::-;-1:-1:-1;;;;;21970:14:0;;;;;;;:9;:14;;;;;;;;:23;;;;;;;;;;;;;:38;;;22030:36;;4035:25:1;;;21970:38:0;;-1:-1:-1;21970:23:0;;:14;;22030:36;;4008:18:1;22030:36:0;;;;;;;21895:183;21837:241;22090:33;22106:3;22111;22116:6;22090:15;:33::i;:::-;22141:4;22134:11;;;;21642:511;;;;;;:::o;3750:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3750:33:0;:::o;6495:117::-;6557:10;-1:-1:-1;;;;;6571:7:0;6557:21;;6549:30;;;;;;6590:8;:14;;-1:-1:-1;;;;;;6590:14:0;-1:-1:-1;;;;;6590:14:0;;;;;;;;;;6495:117::o;9505:723::-;9577:14;9604:31;9638:17;:15;:17::i;:::-;9604:51;;9667:23;9692;9720:25;:23;:25::i;:::-;-1:-1:-1;9779:22:0;;9666:79;;-1:-1:-1;9666:79:0;-1:-1:-1;9760:15:0;:41;9756:124;;;9833:12;9846:19;;:21;;9866:1;;9846:21;:::i;:::-;9833:35;;;;;;;;:::i;:::-;;;;;;;;;;;9818:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9756:124;9929:22;;9892:16;;9911:40;;:15;:40;:::i;:::-;9892:59;;9962:14;10036:11;10001:12;:31;;;9980:18;:52;;;;:::i;:::-;9979:68;;;;:::i;:::-;9962:85;;10058:14;10132:11;10097:12;:31;;;10076:18;:52;;;;:::i;:::-;10075:68;;;;:::i;:::-;10058:85;;10166:54;10180:8;10190:7;10199:9;10210;10166:13;:54::i;:::-;10154:66;9505:723;-1:-1:-1;;;;;;;;;9505:723:0:o;10781:161::-;10865:13;10898:36;10905:7;10914:8;10924:6;10932:1;10898:6;:36::i;:::-;10891:43;10781:161;-1:-1:-1;;;;10781:161:0:o;12007:1078::-;12056:14;5476:9;;5489:1;5476:14;5468:23;;;;;;5514:1;5502:9;:13;12125:8:::1;::::0;12172:38:::1;::::0;-1:-1:-1;;;12172:38:0;;12204:4:::1;12172:38;::::0;::::1;2733:51:1::0;-1:-1:-1;;;;;12125:8:0;;::::1;::::0;-1:-1:-1;;;12135:8:0;::::1;;::::0;12084:17:::1;::::0;12178:6:::1;-1:-1:-1::0;;;;;12172:23:0::1;::::0;::::1;::::0;2706:18:1;;12172:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12238;::::0;-1:-1:-1;;;12238:38:0;;12270:4:::1;12238:38;::::0;::::1;2733:51:1::0;12155:55:0;;-1:-1:-1;12221:14:0::1;::::0;-1:-1:-1;;;;;12244:6:0::1;12238:23;::::0;::::1;::::0;2706:18:1;;12238:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12221:55:::0;-1:-1:-1;12287:13:0::1;12303:21;-1:-1:-1::0;;;;;12303:21:0;::::1;:9:::0;:21:::1;:::i;:::-;12287:37:::0;-1:-1:-1;12335:13:0::1;12351:21;-1:-1:-1::0;;;;;12351:21:0;::::1;:9:::0;:21:::1;:::i;:::-;12405:11;::::0;12335:37;;-1:-1:-1;12509:17:0;12505:345:::1;;3178:5;12555:30;12565:19;12576:8:::0;12565;:19:::1;:::i;:::-;12555:9;:30::i;:::-;:50;;;;:::i;:::-;12543:62;;12620:36;12634:1;3178:5;12620;:36::i;:::-;12505:345;;;12756:82;-1:-1:-1::0;;;;;12765:35:0;::::1;:23;12776:12:::0;12765:8;:23:::1;:::i;:::-;:35;;;;:::i;:::-;-1:-1:-1::0;;;;;12802:35:0;::::1;:23;12813:12:::0;12802:8;:23:::1;:::i;:::-;:35;;;;:::i;:::-;12756:8;:82::i;:::-;12744:94;;12505:345;12880:1;12868:9;:13;12860:29;;;::::0;-1:-1:-1;;;12860:29:0;;14260:2:1;12860:29:0::1;::::0;::::1;14242:21:1::0;14299:1;14279:18;;;14272:29;-1:-1:-1;;;14317:18:1;;;14310:33;14360:18;;12860:29:0::1;14058:326:1::0;12860:29:0::1;12941:20;12947:2;12951:9;12941:5;:20::i;:::-;12974:51;12982:9;12993;13004;13015;12974:7;:51::i;:::-;13041:36;::::0;;6926:25:1;;;6982:2;6967:18;;6960:34;;;13046:10:0::1;::::0;13041:36:::1;::::0;6899:18:1;13041:36:0::1;;;;;;;-1:-1:-1::0;;5550:1:0;5538:9;:13;-1:-1:-1;12007:1078:0;;;-1:-1:-1;;;;;12007:1078:0:o;19742:92::-;19807:8;;19780:4;;19804:22;;-1:-1:-1;;;;;19807:8:0;;;;-1:-1:-1;;;19817:8:0;;;19804:2;:22::i;:::-;19797:29;;19742:92;:::o;13240:1213::-;13289:12;13303;5476:9;;5489:1;5476:14;5468:23;;;;;;5514:1;5502:9;:13;13370:8:::1;::::0;13481:39:::1;::::0;-1:-1:-1;;;13481:39:0;;13514:4:::1;13481:39;::::0;::::1;2733:51:1::0;-1:-1:-1;;;;;13370:8:0;;::::1;::::0;-1:-1:-1;;;13380:8:0;::::1;;::::0;13438:6:::1;::::0;13446::::1;::::0;13329:17:::1;::::0;-1:-1:-1;;;;;13481:24:0;::::1;::::0;::::1;::::0;2706:18:1;;13481:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13548;::::0;-1:-1:-1;;;13548:39:0;;13581:4:::1;13548:39;::::0;::::1;2733:51:1::0;13464:56:0;;-1:-1:-1;13531:14:0::1;::::0;-1:-1:-1;;;;;13548:24:0;::::1;::::0;::::1;::::0;2706:18:1;;13548:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13634:4;13598:15;13616:24:::0;;;:9:::1;:24;::::0;;;;;13673:11:::1;::::0;13531:56;;-1:-1:-1;13616:24:0;13673:11;13783:22:::1;13796:9:::0;13616:24;13783:22:::1;:::i;:::-;:37;;;;:::i;:::-;13773:47:::0;-1:-1:-1;13914:12:0;13889:22:::1;13902:9:::0;13889:10;:22:::1;:::i;:::-;:37;;;;:::i;:::-;13879:47;;14003:1;13993:7;:11;:26;;;;;14018:1;14008:7;:11;13993:26;13985:42;;;::::0;-1:-1:-1;;;13985:42:0;;14591:2:1;13985:42:0::1;::::0;::::1;14573:21:1::0;14630:1;14610:18;;;14603:29;-1:-1:-1;;;14648:18:1;;;14641:33;14691:18;;13985:42:0::1;14389:326:1::0;13985:42:0::1;14079:32;14093:4;14100:10;14079:5;:32::i;:::-;14122:35;14136:7;14145:2;14149:7;14122:13;:35::i;:::-;14168;14182:7;14191:2;14195:7;14168:13;:35::i;:::-;14226:39;::::0;-1:-1:-1;;;14226:39:0;;14259:4:::1;14226:39;::::0;::::1;2733:51:1::0;-1:-1:-1;;;;;14226:24:0;::::1;::::0;::::1;::::0;2706:18:1;;14226:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14288;::::0;-1:-1:-1;;;14288:39:0;;14321:4:::1;14288:39;::::0;::::1;2733:51:1::0;14214::0;;-1:-1:-1;;;;;;14288:24:0;::::1;::::0;::::1;::::0;2706:18:1;;14288:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14276:51;;14340;14348:9;14359;14370;14381;14340:7;:51::i;:::-;14407:38;::::0;;6926:25:1;;;6982:2;6967:18;;6960:34;;;-1:-1:-1;;;;;14407:38:0;::::1;::::0;14412:10:::1;::::0;14407:38:::1;::::0;6899:18:1;14407:38:0::1;;;;;;;13317:1136;;;;;;;;5550:1:::0;5538:9;:13;;;;13240:1213;;;:::o;5678:129::-;5726:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;5726:18:0;5764:12;5777:19;;:21;;5797:1;;5777:21;:::i;:::-;5764:35;;;;;;;;:::i;:::-;;;;;;;;;;;5757:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5678:129;:::o;6129:123::-;6187:10;-1:-1:-1;;;;;6201:7:0;6187:21;;:35;;;;;6220:2;6212:4;:10;;6187:35;6179:44;;;;;;6234:3;:10;6129:123::o;6260:227::-;6335:8;;6303:7;;-1:-1:-1;;;;;6335:8:0;6355:17;6352:128;;6407:7;-1:-1:-1;;;;;6392:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6385:41;;;6260:227;:::o;6352:128::-;6467:3;6260:227;-1:-1:-1;6260:227:0:o;2573:20::-;;;;;;;:::i;10333:396::-;10421:14;10448:22;10473:41;10480:7;10489:8;10499:11;10512:1;10473:6;:41::i;:::-;10448:66;-1:-1:-1;10525:27:0;;10563:105;10584:7;:14;10580:1;:18;10563:105;;;10646:7;10654:1;10646:10;;;;;;;;:::i;:::-;;;;;;;10620:36;;;;;:::i;:::-;;-1:-1:-1;10600:3:0;;;;:::i;:::-;;;;10563:105;;;-1:-1:-1;10685:36:0;10710:11;10685:22;:36;:::i;:::-;10678:43;10333:396;-1:-1:-1;;;;;;10333:396:0:o;21485:149::-;21547:4;21564:40;21580:10;21592:3;21597:6;21564:15;:40::i;:::-;-1:-1:-1;21622:4:0;21485:149;;;;:::o;17021:294::-;5476:9;;5489:1;5476:14;5468:23;;;;;;5514:1;5502:9;:13;17206:8:::1;::::0;17163:39:::1;::::0;-1:-1:-1;;;17163:39:0;;17196:4:::1;17163:39;::::0;::::1;2733:51:1::0;17110:6:0::1;::::0;17118::::1;::::0;17136:80:::1;::::0;17110:6;;17159:2;;-1:-1:-1;;;;;17206:8:0::1;::::0;-1:-1:-1;;;;;17163:24:0;::::1;::::0;::::1;::::0;2706:18:1;;17163:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;;:::i;:::-;17136:13;:80::i;:::-;17297:8;::::0;17254:39:::1;::::0;-1:-1:-1;;;17254:39:0;;17287:4:::1;17254:39;::::0;::::1;2733:51:1::0;17227:80:0::1;::::0;17241:7;;17250:2;;-1:-1:-1;;;17297:8:0;::::1;-1:-1:-1::0;;;;;17297:8:0::1;::::0;-1:-1:-1;;;;;17254:24:0;::::1;::::0;::::1;::::0;2706:18:1;;17254:39:0::1;2587:203:1::0;17227:80:0::1;-1:-1:-1::0;;5550:1:0;5538:9;:13;-1:-1:-1;17021:294:0:o;20418:1059::-;20564:15;20552:8;:27;;20544:55;;;;-1:-1:-1;;;20544:55:0;;15318:2:1;20544:55:0;;;15300:21:1;15357:2;15337:18;;;15330:30;-1:-1:-1;;;15376:18:1;;;15369:45;15431:18;;20544:55:0;15116:339:1;20544:55:0;20682:95;20812:4;20796:22;;;;;;:::i;:::-;;;;;;;;;;20653:277;;;16957:25:1;;;;16998:18;;16991:34;;;;20837:14:0;17041:18:1;;;17034:34;20870:13:0;17084:18:1;;;17077:34;20910:4:0;17127:19:1;;;17120:61;16929:19;;20653:277:0;;;-1:-1:-1;;20653:277:0;;;;;;;;;20629:312;;20653:277;20629:312;;;;20610:16;:331;;;-1:-1:-1;;;;;21153:13:0;;20952:14;21153:13;;;:6;:13;;;;;;:15;;3015:66;;21130:5;;21137:7;;21146:5;;21153:15;20952:14;21153:15;;;:::i;:::-;;;;-1:-1:-1;21102:77:0;;;;;;17479:25:1;;;;-1:-1:-1;;;;;17578:15:1;;;17558:18;;;17551:43;17630:15;;;;17610:18;;;17603:43;17662:18;;;17655:34;17705:19;;;17698:35;17749:19;;;17742:35;;;17451:19;;21102:77:0;;;;;;;;;;;;21092:88;;;;;;20993:202;;;;;;;;-1:-1:-1;;;18046:27:1;;18098:1;18089:11;;18082:27;;;;18134:2;18125:12;;18118:28;18171:2;18162:12;;17788:392;20993:202:0;;;;-1:-1:-1;;20993:202:0;;;;;;;;;20969:237;;20993:202;20969:237;;;;21217:24;21244:26;;;;;;;;;18412:25:1;;;18485:4;18473:17;;18453:18;;;18446:45;;;;18507:18;;;18500:34;;;18550:18;;;18543:34;;;20969:237:0;;-1:-1:-1;21217:24:0;21244:26;;18384:19:1;;21244:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21244:26:0;;-1:-1:-1;;21244:26:0;;;-1:-1:-1;;;;;;;21289:30:0;;;;;;:59;;;21343:5;-1:-1:-1;;;;;21323:25:0;:16;-1:-1:-1;;;;;21323:25:0;;21289:59;21281:97;;;;-1:-1:-1;;;21281:97:0;;18790:2:1;21281:97:0;;;18772:21:1;18829:2;18809:18;;;18802:30;18868:27;18848:18;;;18841:55;18913:18;;21281:97:0;18588:349:1;21281:97:0;-1:-1:-1;;;;;21389:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;21438:31;;4035:25:1;;;21438:31:0;;4008:18:1;21438:31:0;;;;;;;20533:944;;20418:1059;;;;;;;:::o;18502:301::-;18632:8;;18685:3;;18579:4;;-1:-1:-1;;;;;18632:8:0;;;;-1:-1:-1;;;18642:8:0;;;;;18674:14;;:8;:14;:::i;:::-;18662:26;;;;:::i;:::-;;;18741:54;18755:8;18765:7;18774:9;18785;18741:13;:54::i;:::-;18734:61;18502:301;-1:-1:-1;;;;;18502:301:0:o;17364:156::-;5476:9;;5489:1;5476:14;5468:23;;;;;;5514:1;5502:9;:13;17413:38:::1;::::0;-1:-1:-1;;;17413:38:0;;17445:4:::1;17413:38;::::0;::::1;2733:51:1::0;17405:107:0::1;::::0;17419:6:::1;-1:-1:-1::0;;;;;17413:23:0::1;::::0;::::1;::::0;2706:18:1;;17413:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17453;::::0;-1:-1:-1;;;17453:38:0;;17485:4:::1;17453:38;::::0;::::1;2733:51:1::0;17459:6:0::1;-1:-1:-1::0;;;;;17453:23:0::1;::::0;::::1;::::0;2706:18:1;;17453:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17493:8;::::0;-1:-1:-1;;;;;17493:8:0;;::::1;::::0;-1:-1:-1;;;17503:8:0;::::1;;17405:7;:107::i;:::-;5550:1:::0;5538:9;:13;17364:156::o;22362:324::-;22473:1;22453:5;-1:-1:-1;;;;;22453:17:0;;:21;22445:30;;;;;;22542:58;;;-1:-1:-1;;;;;19134:32:1;;;22542:58:0;;;19116:51:1;19183:18;;;;19176:34;;;22542:58:0;;;;;;;;;;19089:18:1;;;;22542:58:0;;;;;;;-1:-1:-1;;;;;22542:58:0;-1:-1:-1;;;22542:58:0;;;22531:70;;-1:-1:-1;;;;22531:10:0;;;;:70;;22542:58;22531:70;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22486:115;;;;22620:7;:57;;;;-1:-1:-1;22632:11:0;;:16;;:44;;;22663:4;22652:24;;;;;;;;;;;;:::i;:::-;22612:66;;;;;;22434:252;;22362:324;;;:::o;6652:215::-;6703:44;6717:6;6725:13;:11;:13::i;:::-;6740:6;6703:13;:44::i;:::-;6810:6;6797:9;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;6832:27:0;;;6926:25:1;;;6857:1:0;6982:2:1;6967:18;;6960:34;6837:10:0;;6832:27;;6899:18:1;6832:27:0;;;;;;;;6652:215;:::o;6905:176::-;6956:44;6970:6;6978:13;:11;:13::i;6956:44::-;7024:6;7011:9;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;7046:27:0;;;7063:1;6926:25:1;;6982:2;6967:18;;6960:34;;;7051:10:0;;7046:27;;6899:18:1;7046:27:0;6752:248:1;19443:291:0;19494:4;;19532:9;19521:8;:1;19525:4;19521:8;:::i;:::-;:20;;;;:::i;:::-;19511:30;-1:-1:-1;19552:7:0;19573:9;19562:8;:1;19566:4;19562:8;:::i;:::-;:20;;;;:::i;:::-;19552:30;-1:-1:-1;19593:7:0;19615:4;19604:7;19552:30;19604:2;:7;:::i;:::-;19603:16;;;;:::i;:::-;19593:26;-1:-1:-1;19630:7:0;19672:4;19661:7;19666:2;;19661:7;:::i;:::-;19660:16;;;;:::i;:::-;19653:4;19642:7;19647:2;;19642:7;:::i;:::-;19641:16;;;;:::i;:::-;:35;;;;:::i;:::-;19630:47;-1:-1:-1;19705:4:0;19695:7;19630:47;19695:2;:7;:::i;:::-;:14;;;;:::i;:::-;19688:21;19443:291;-1:-1:-1;;;;;;;19443:291:0:o;7405:1123::-;-1:-1:-1;;;;;7518:29:0;;;;;:62;;-1:-1:-1;;;;;;7551:29:0;;;7518:62;7510:95;;;;-1:-1:-1;;;7510:95:0;;20224:2:1;7510:95:0;;;20206:21:1;20263:2;20243:18;;;20236:30;-1:-1:-1;;;20282:18:1;;;20275:50;20342:18;;7510:95:0;20022:344:1;7510:95:0;7616:21;7647:23;7665:5;7647:15;:23;:::i;:::-;7720:18;;7616:55;;-1:-1:-1;7682:18:0;;7703:35;;-1:-1:-1;;;7720:18:0;;;;7616:55;7703:35;:::i;:::-;7682:56;;7790:1;7776:11;:15;;;:33;;;;-1:-1:-1;;;;;;7795:14:0;;;;7776:33;:51;;;;-1:-1:-1;;;;;;7813:14:0;;;;7776:51;7772:197;;;7870:23;;;;:9;:23;:::i;:::-;-1:-1:-1;;;;;7844:49:0;:22;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;7934:23:0;;-1:-1:-1;7934:23:0;;;:9;:23;:::i;:::-;-1:-1:-1;;;;;7908:49:0;:22;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;7772:197:0;7981:25;8009:17;:15;:17::i;:::-;8075:16;;7981:45;;-1:-1:-1;8051:41:0;;:14;:41;:::i;:::-;8037:55;;3737:4;8210:11;:24;;;8206:151;;;8269:75;;;;;;;;;;;;;8297:22;;8269:75;;;;;;8321:22;;8269:75;;;;;;8251:12;:94;;;;;;;-1:-1:-1;8251:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:151;8367:8;:28;;8445:35;;;-1:-1:-1;;;8445:35:0;-1:-1:-1;;;;;;;;;;8406:28:0;;;-1:-1:-1;;;8406:28:0;;;-1:-1:-1;;;;;;8406:28:0;;;8367;;;8406;;;;;8445:35;;;;;;;;;8496:24;;;8501:8;;;;;;;;;;21225:34:1;;8511:8:0;;;;;;;21290:2:1;21275:18;;21268:43;8496:24:0;;21149:18:1;8496:24:0;;;;;;;7499:1029;;;7405:1123;;;;:::o;18811:624::-;18921:4;18938:7;18949:24;18952:9;18963;18949:2;:24::i;:::-;18938:35;-1:-1:-1;19015:9:0;18996:16;:9;19008:4;18996:16;:::i;:::-;:28;;;;:::i;:::-;18984:40;-1:-1:-1;19066:9:0;19047:16;:9;19059:4;19047:16;:::i;:::-;:28;;;;:::i;:::-;19035:40;;19087:13;19102;19130:6;-1:-1:-1;;;;;19119:17:0;:7;-1:-1:-1;;;;;19119:17:0;;:67;;19165:9;19176;19119:67;;;19140:9;19151;19119:67;19086:100;;;;19219:6;-1:-1:-1;;;;;19208:17:0;:7;-1:-1:-1;;;;;19208:17:0;;:77;;19276:9;19258:15;:8;19269:4;19258:15;:::i;:::-;:27;;;;:::i;:::-;19208:77;;;19246:9;19228:15;:8;19239:4;19228:15;:::i;:::-;:27;;;;:::i;:::-;19197:88;-1:-1:-1;19296:6:0;19316:39;19323:17;19332:8;19197:88;19323:17;:::i;:::-;19342:2;19346:8;19316:6;:39::i;:::-;19305:50;;:8;:50;:::i;:::-;19296:59;;19423:4;19389:6;-1:-1:-1;;;;;19378:17:0;:7;-1:-1:-1;;;;;19378:17:0;;:41;;19410:9;19378:41;;;19398:9;19378:41;19373:47;;:1;:47;:::i;:::-;:54;;;;:::i;22161:193::-;-1:-1:-1;;;;;22245:14:0;;;;;;:9;:14;;;;;:24;;22263:6;;22245:14;:24;;22263:6;;22245:24;:::i;:::-;;;;-1:-1:-1;;;;;;;22280:14:0;;;;;;:9;:14;;;;;:24;;22298:6;;22280:14;:24;;22298:6;;22280:24;:::i;:::-;;;;;;;;22334:3;-1:-1:-1;;;;;22320:26:0;22329:3;-1:-1:-1;;;;;22320:26:0;;22339:6;22320:26;;;;4035:25:1;;4023:2;4008:18;;3889:177;22320:26:0;;;;;;;;22161:193;;;:::o;1780:303::-;1825:6;1852:1;1848;:5;1844:232;;;-1:-1:-1;1874:1:0;1890:6;1899:5;1903:1;1874;1899:5;:::i;:::-;:9;;1907:1;1899:9;:::i;:::-;1890:18;;1923:92;1934:1;1930;:5;1923:92;;;1960:1;-1:-1:-1;1960:1:0;1998;1960;1985:5;1960:1;1985;:5;:::i;:::-;:9;;;;:::i;:::-;1984:15;;;;:::i;:::-;1980:19;;1923:92;;;1855:171;6467:3;6260:227;-1:-1:-1;6260:227:0:o;1844:232::-;2036:6;;2032:44;;-1:-1:-1;2063:1:0;1780:303;;;:::o;19842:174::-;19918:6;19903:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;19935:14:0;;;;;;:9;:14;;;;;:24;;19953:6;;19935:14;:24;;19953:6;;19935:24;:::i;:::-;;;;-1:-1:-1;;19975:33:0;;4035:25:1;;;-1:-1:-1;;;;;19975:33:0;;;19992:1;;19975:33;;4023:2:1;4008:18;19975:33:0;;;;;;;;19842:174;;:::o;1677:97::-;1729:4;1757:1;1753;:5;:13;;1765:1;1753:13;;;-1:-1:-1;1761:1:0;;1746:20;-1:-1:-1;1677:97:0:o;20024:174::-;20100:6;20085:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;20117:14:0;;;;;;:9;:14;;;;;:24;;20135:6;;20117:14;:24;;20135:6;;20117:24;:::i;:::-;;;;-1:-1:-1;;20157:33:0;;4035:25:1;;;20179:1:0;;-1:-1:-1;;;;;20157:33:0;;;;;4023:2:1;4008:18;20157:33:0;3889:177:1;17806:688:0;17871:4;;17888:580;17909:3;17905:1;:7;17888:580;;;17948:1;17934:11;17973:9;17976:2;17948:1;17973:2;:9::i;:::-;17964:18;;18005:2;18001:1;:6;17997:212;;;18028:7;18052:9;18055:2;18059:1;18052:2;:9::i;:::-;18039:6;18044:1;18039:2;:6;:::i;:::-;18038:13;;18047:4;18038:13;:::i;:::-;:23;;;;:::i;:::-;18028:33;-1:-1:-1;18084:6:0;18028:33;18084:1;:6;:::i;:::-;18080:10;;18009:97;17997:212;;;18131:7;18155:9;18158:2;18162:1;18155:2;:9::i;:::-;18142:6;18146:2;18142:1;:6;:::i;:::-;18141:13;;18150:4;18141:13;:::i;:::-;:23;;;;:::i;:::-;18131:33;-1:-1:-1;18187:6:0;18131:33;18187:1;:6;:::i;:::-;18183:10;;18112:97;17997:212;18231:6;18227:1;:10;18223:234;;;18276:1;18262:10;18266:6;18262:1;:10;:::i;:::-;:15;18258:72;;18309:1;18302:8;;;;;;;18258:72;18223:234;;;18388:1;18374:10;18383:1;18374:6;:10;:::i;:::-;:15;18370:72;;18421:1;18414:8;;;;;;;18370:72;17919:549;;17914:3;;;;;:::i;:::-;;;;17888:580;;;-1:-1:-1;18485:1:0;;17806:688;-1:-1:-1;;;17806:688:0:o;17528:137::-;17580:4;17653;17651:1;17653:4;17642:2;17653:4;17631:5;17642:2;;17631:5;:::i;:::-;:10;;;;:::i;:::-;:13;;;;:::i;:::-;:18;;;;:::i;:::-;17630:22;;;;:::i;:::-;:27;;;;:::i;:::-;17625:4;;17617:1;17625:4;17608:3;17617:1;;17608:3;:::i;:::-;:8;;;;:::i;:::-;:10;;;;:::i;:::-;:15;;;;:::i;:::-;17604:20;;:2;:20;:::i;:::-;:25;;;;:::i;:::-;:53;;;;:::i;17673:125::-;17725:4;17785;17782:2;17785:4;17771:5;17782:2;;17771:5;:::i;:::-;:10;;;;:::i;:::-;:13;;;;:::i;:::-;:18;;;;:::i;:::-;17765:4;;17755:3;17757:1;;17755:3;:::i;:::-;:8;;;;:::i;:::-;17749:4;17751:2;17749:1;:4;:::i;:::-;:15;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:863::-;247:6;255;263;271;279;332:3;320:9;311:7;307:23;303:33;300:53;;;349:1;346;339:12;300:53;385:9;372:23;362:33;;442:2;431:9;427:18;414:32;404:42;;496:2;485:9;481:18;468:32;509:31;534:5;509:31;:::i;:::-;559:5;-1:-1:-1;615:2:1;600:18;;587:32;638:18;668:14;;;665:34;;;695:1;692;685:12;665:34;733:6;722:9;718:22;708:32;;778:7;771:4;767:2;763:13;759:27;749:55;;800:1;797;790:12;749:55;840:2;827:16;866:2;858:6;855:14;852:34;;;882:1;879;872:12;852:34;927:7;922:2;913:6;909:2;905:15;901:24;898:37;895:57;;;948:1;945;938:12;895:57;150:863;;;;-1:-1:-1;150:863:1;;-1:-1:-1;979:2:1;971:11;;1001:6;150:863;-1:-1:-1;;;150:863:1:o;1018:258::-;1090:1;1100:113;1114:6;1111:1;1108:13;1100:113;;;1190:11;;;1184:18;1171:11;;;1164:39;1136:2;1129:10;1100:113;;;1231:6;1228:1;1225:13;1222:48;;;1266:1;1257:6;1252:3;1248:16;1241:27;1222:48;;1018:258;;;:::o;1281:383::-;1430:2;1419:9;1412:21;1393:4;1462:6;1456:13;1505:6;1500:2;1489:9;1485:18;1478:34;1521:66;1580:6;1575:2;1564:9;1560:18;1555:2;1547:6;1543:15;1521:66;:::i;:::-;1648:2;1627:15;-1:-1:-1;;1623:29:1;1608:45;;;;1655:2;1604:54;;1281:383;-1:-1:-1;;1281:383:1:o;2075:315::-;2143:6;2151;2204:2;2192:9;2183:7;2179:23;2175:32;2172:52;;;2220:1;2217;2210:12;2172:52;2259:9;2246:23;2278:31;2303:5;2278:31;:::i;:::-;2328:5;2380:2;2365:18;;;;2352:32;;-1:-1:-1;;;2075:315:1:o;2795:452::-;2881:6;2889;2897;2905;2958:3;2946:9;2937:7;2933:23;2929:33;2926:53;;;2975:1;2972;2965:12;2926:53;3014:9;3001:23;3033:31;3058:5;3033:31;:::i;:::-;3083:5;3135:2;3120:18;;3107:32;;-1:-1:-1;3186:2:1;3171:18;;3158:32;;3237:2;3222:18;3209:32;;-1:-1:-1;2795:452:1;-1:-1:-1;;;2795:452:1:o;3252:632::-;3423:2;3475:21;;;3545:13;;3448:18;;;3567:22;;;3394:4;;3423:2;3646:15;;;;3620:2;3605:18;;;3394:4;3689:169;3703:6;3700:1;3697:13;3689:169;;;3764:13;;3752:26;;3833:15;;;;3798:12;;;;3725:1;3718:9;3689:169;;;-1:-1:-1;3875:3:1;;3252:632;-1:-1:-1;;;;;;3252:632:1:o;4395:456::-;4472:6;4480;4488;4541:2;4529:9;4520:7;4516:23;4512:32;4509:52;;;4557:1;4554;4547:12;4509:52;4596:9;4583:23;4615:31;4640:5;4615:31;:::i;:::-;4665:5;-1:-1:-1;4722:2:1;4707:18;;4694:32;4735:33;4694:32;4735:33;:::i;:::-;4395:456;;4787:7;;-1:-1:-1;;;4841:2:1;4826:18;;;;4813:32;;4395:456::o;4856:180::-;4915:6;4968:2;4956:9;4947:7;4943:23;4939:32;4936:52;;;4984:1;4981;4974:12;4936:52;-1:-1:-1;5007:23:1;;4856:180;-1:-1:-1;4856:180:1:o;6112:247::-;6171:6;6224:2;6212:9;6203:7;6199:23;6195:32;6192:52;;;6240:1;6237;6230:12;6192:52;6279:9;6266:23;6298:31;6323:5;6298:31;:::i;6364:383::-;6441:6;6449;6457;6510:2;6498:9;6489:7;6485:23;6481:32;6478:52;;;6526:1;6523;6516:12;6478:52;6565:9;6552:23;6584:31;6609:5;6584:31;:::i;:::-;6634:5;6686:2;6671:18;;6658:32;;-1:-1:-1;6737:2:1;6722:18;;;6709:32;;6364:383;-1:-1:-1;;;6364:383:1:o;7882:829::-;7993:6;8001;8009;8017;8025;8033;8041;8094:3;8082:9;8073:7;8069:23;8065:33;8062:53;;;8111:1;8108;8101:12;8062:53;8150:9;8137:23;8169:31;8194:5;8169:31;:::i;:::-;8219:5;-1:-1:-1;8276:2:1;8261:18;;8248:32;8289:33;8248:32;8289:33;:::i;:::-;8341:7;-1:-1:-1;8395:2:1;8380:18;;8367:32;;-1:-1:-1;8446:2:1;8431:18;;8418:32;;-1:-1:-1;8502:3:1;8487:19;;8474:33;8551:4;8538:18;;8526:31;;8516:59;;8571:1;8568;8561:12;8516:59;7882:829;;;;-1:-1:-1;7882:829:1;;;;8594:7;8648:3;8633:19;;8620:33;;-1:-1:-1;8700:3:1;8685:19;;;8672:33;;7882:829;-1:-1:-1;;7882:829:1:o;8716:388::-;8784:6;8792;8845:2;8833:9;8824:7;8820:23;8816:32;8813:52;;;8861:1;8858;8851:12;8813:52;8900:9;8887:23;8919:31;8944:5;8919:31;:::i;:::-;8969:5;-1:-1:-1;9026:2:1;9011:18;;8998:32;9039:33;8998:32;9039:33;:::i;:::-;9091:7;9081:17;;;8716:388;;;;;:::o;9109:315::-;9177:6;9185;9238:2;9226:9;9217:7;9213:23;9209:32;9206:52;;;9254:1;9251;9244:12;9206:52;9290:9;9277:23;9267:33;;9350:2;9339:9;9335:18;9322:32;9363:31;9388:5;9363:31;:::i;9429:277::-;9496:6;9549:2;9537:9;9528:7;9524:23;9520:32;9517:52;;;9565:1;9562;9555:12;9517:52;9597:9;9591:16;9650:5;9643:13;9636:21;9629:5;9626:32;9616:60;;9672:1;9669;9662:12;10702:632;10972:1;10968;10963:3;10959:11;10955:19;10947:6;10943:32;10932:9;10925:51;11012:6;11007:2;10996:9;10992:18;10985:34;11055:6;11050:2;11039:9;11035:18;11028:34;11098:3;11093:2;11082:9;11078:18;11071:31;11139:6;11133:3;11122:9;11118:19;11111:35;11197:6;11189;11183:3;11172:9;11168:19;11155:49;11254:1;11224:22;;;11248:3;11220:32;;;11213:43;;;;11317:2;11296:15;;;-1:-1:-1;;11292:29:1;11277:45;11273:55;;10702:632;-1:-1:-1;;;;10702:632:1:o;11339:184::-;11409:6;11462:2;11450:9;11441:7;11437:23;11433:32;11430:52;;;11478:1;11475;11468:12;11430:52;-1:-1:-1;11501:16:1;;11339:184;-1:-1:-1;11339:184:1:o;11528:127::-;11589:10;11584:3;11580:20;11577:1;11570:31;11620:4;11617:1;11610:15;11644:4;11641:1;11634:15;11660:125;11700:4;11728:1;11725;11722:8;11719:34;;;11733:18;;:::i;:::-;-1:-1:-1;11770:9:1;;11660:125::o;12121:127::-;12182:10;12177:3;12173:20;12170:1;12163:31;12213:4;12210:1;12203:15;12237:4;12234:1;12227:15;12253:120;12293:1;12319;12309:35;;12324:18;;:::i;:::-;-1:-1:-1;12358:9:1;;12253:120::o;13103:380::-;13182:1;13178:12;;;;13225;;;13246:61;;13300:4;13292:6;13288:17;13278:27;;13246:61;13353:2;13345:6;13342:14;13322:18;13319:38;13316:161;;;13399:10;13394:3;13390:20;13387:1;13380:31;13434:4;13431:1;13424:15;13462:4;13459:1;13452:15;13488:127;13549:10;13544:3;13540:20;13537:1;13530:31;13580:4;13577:1;13570:15;13604:4;13601:1;13594:15;13620:168;13660:7;13726:1;13722;13718:6;13714:14;13711:1;13708:21;13703:1;13696:9;13689:17;13685:45;13682:71;;;13733:18;;:::i;:::-;-1:-1:-1;13773:9:1;;13620:168::o;13793:128::-;13833:3;13864:1;13860:6;13857:1;13854:13;13851:39;;;13870:18;;:::i;:::-;-1:-1:-1;13906:9:1;;13793:128::o;13926:127::-;13987:10;13982:3;13978:20;13975:1;13968:31;14018:4;14015:1;14008:15;14042:4;14039:1;14032:15;14720:251;14790:6;14843:2;14831:9;14822:7;14818:23;14814:32;14811:52;;;14859:1;14856;14849:12;14811:52;14891:9;14885:16;14910:31;14935:5;14910:31;:::i;14976:135::-;15015:3;-1:-1:-1;;15036:17:1;;15033:43;;;15056:18;;:::i;:::-;-1:-1:-1;15103:1:1;15092:13;;14976:135::o;15589:1104::-;15719:3;15748:1;15781:6;15775:13;15811:3;15833:1;15861:9;15857:2;15853:18;15843:28;;15921:2;15910:9;15906:18;15943;15933:61;;15987:4;15979:6;15975:17;15965:27;;15933:61;16013:2;16061;16053:6;16050:14;16030:18;16027:38;16024:165;;;-1:-1:-1;;;16088:33:1;;16144:4;16141:1;16134:15;16174:4;16095:3;16162:17;16024:165;16205:18;16232:104;;;;16350:1;16345:323;;;;16198:470;;16232:104;-1:-1:-1;;16265:24:1;;16253:37;;16310:16;;;;-1:-1:-1;16232:104:1;;16345:323;15536:1;15529:14;;;15573:4;15560:18;;16443:1;16457:165;16471:6;16468:1;16465:13;16457:165;;;16549:14;;16536:11;;;16529:35;16592:16;;;;16486:10;;16457:165;;;16461:3;;16651:6;16646:3;16642:16;16635:23;;16198:470;-1:-1:-1;16684:3:1;;15589:1104;-1:-1:-1;;;;;;;;15589:1104:1:o;19221:274::-;19350:3;19388:6;19382:13;19404:53;19450:6;19445:3;19438:4;19430:6;19426:17;19404:53;:::i;:::-;19473:16;;;;;19221:274;-1:-1:-1;;19221:274:1:o;20371:112::-;20403:1;20429;20419:35;;20434:18;;:::i;:::-;-1:-1:-1;20468:9:1;;20371:112::o;20488:221::-;20527:4;20556:10;20616;;;;20586;;20638:12;;;20635:38;;;20653:18;;:::i;:::-;20690:13;;20488:221;-1:-1:-1;;;20488:221:1:o;20714:283::-;20754:7;-1:-1:-1;;;;;20843:2:1;20840:1;20836:10;20873:2;20870:1;20866:10;20929:3;20925:2;20921:12;20916:3;20913:21;20906:3;20899:11;20892:19;20888:47;20885:73;;;20938:18;;:::i;:::-;20978:13;;20714:283;-1:-1:-1;;;;20714:283:1:o

Swarm Source

ipfs://21cb75d4aeaaca20d407049d0ec923710f02fdcfdde3f70fc07e2c26a6078235
Loading