ETH Price: $2,525.46 (-0.01%)
Gas: 0.74 Gwei

Contract

0x314d8dB7D382a9c8AE9fabb82249591aB19A7007
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer147906722022-05-17 5:26:16835 days ago1652765176IN
0x314d8dB7...aB19A7007
0 ETH0.0019980816.67908743
Transfer127225262021-06-28 12:30:121158 days ago1624883412IN
0x314d8dB7...aB19A7007
0 ETH0.0029921621
Transfer121280882021-03-28 14:14:041250 days ago1616940844IN
0x314d8dB7...aB19A7007
0 ETH0.01197698113
Transfer121280772021-03-28 14:11:191250 days ago1616940679IN
0x314d8dB7...aB19A7007
0 ETH0.01582429113
Approve119906402021-03-07 9:49:061271 days ago1615110546IN
0x314d8dB7...aB19A7007
0 ETH0.0042892896
Approve119876902021-03-06 22:52:511272 days ago1615071171IN
0x314d8dB7...aB19A7007
0 ETH0.0046914105
Approve119745202021-03-04 22:31:081274 days ago1614897068IN
0x314d8dB7...aB19A7007
0 ETH0.0012011382.00000145
Approve118814562021-02-18 14:43:101288 days ago1613659390IN
0x314d8dB7...aB19A7007
0 ETH0.00901644203
Approve118769192021-02-17 21:53:201289 days ago1613598800IN
0x314d8dB7...aB19A7007
0 ETH0.013404300
Approve118584692021-02-15 1:59:111292 days ago1613354351IN
0x314d8dB7...aB19A7007
0 ETH0.0091594205
Approve118472542021-02-13 8:42:391293 days ago1613205759IN
0x314d8dB7...aB19A7007
0 ETH0.00853388191
Transfer118342312021-02-11 8:40:581295 days ago1613032858IN
0x314d8dB7...aB19A7007
0 ETH0.01646938115
Approve118342222021-02-11 8:38:481295 days ago1613032728IN
0x314d8dB7...aB19A7007
0 ETH0.00607648136
Approve118342152021-02-11 8:37:401295 days ago1613032660IN
0x314d8dB7...aB19A7007
0 ETH0.00487012109
Approve118054162021-02-06 22:18:081300 days ago1612649888IN
0x314d8dB7...aB19A7007
0 ETH0.00567659127.05001159
Approve118053232021-02-06 22:00:461300 days ago1612648846IN
0x314d8dB7...aB19A7007
0 ETH0.0049148110
Approve118009832021-02-06 5:52:351300 days ago1612590755IN
0x314d8dB7...aB19A7007
0 ETH0.00567436127
Approve117943482021-02-05 5:25:421301 days ago1612502742IN
0x314d8dB7...aB19A7007
0 ETH0.0069254155
Approve117931632021-02-05 0:53:581302 days ago1612486438IN
0x314d8dB7...aB19A7007
0 ETH0.01259976282
Approve117926892021-02-04 23:06:331302 days ago1612479993IN
0x314d8dB7...aB19A7007
0 ETH0.00821754183.92
Transfer117921892021-02-04 21:13:001302 days ago1612473180IN
0x314d8dB7...aB19A7007
0 ETH0.01669887125
Approve117920162021-02-04 20:38:581302 days ago1612471138IN
0x314d8dB7...aB19A7007
0 ETH0.00674668151
Approve117914332021-02-04 18:33:331302 days ago1612463613IN
0x314d8dB7...aB19A7007
0 ETH0.01461036327
Transfer117908042021-02-04 16:12:201302 days ago1612455140IN
0x314d8dB7...aB19A7007
0 ETH0.00702483304
Approve117905112021-02-04 15:10:121302 days ago1612451412IN
0x314d8dB7...aB19A7007
0 ETH0.0080424180
View all transactions

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
117854632021-02-03 20:35:111303 days ago1612384511
0x314d8dB7...aB19A7007
112.9725 ETH
117854632021-02-03 20:35:111303 days ago1612384511
0x314d8dB7...aB19A7007
37.6575 ETH
117854632021-02-03 20:35:111303 days ago1612384511
0x314d8dB7...aB19A7007
150.63 ETH
117672762021-02-01 1:07:381306 days ago1612141658
0x314d8dB7...aB19A7007
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SpeedXStable

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-01
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;

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

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

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
library Constants {
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _launchSupply = 100000 * 10**9;
    uint256 private constant _largeTotal = (MAX - (MAX % _launchSupply));

    uint256 private constant _baseExpansionFactor = 100;
    uint256 private constant _baseContractionFactor = 100;
    uint256 private constant _baseUtilityFee = 50;
    uint256 private constant _baseContractionCap = 1000;

    uint256 private constant _stabilizerFee = 250;
    uint256 private constant _stabilizationLowerBound = 50;
    uint256 private constant _stabilizationLowerReset = 75;
    uint256 private constant _stabilizationUpperBound = 150;
    uint256 private constant _stabilizationUpperReset = 125;
    uint256 private constant _stabilizePercent = 10;

    uint256 private constant _treasuryFee = 250;

    uint256 private constant _presaleMinIndividualCap = 1 ether;
    uint256 private constant _presaleMaxIndividualCap = 3 ether;
    uint256 private constant _presaleCap = 55000 * 10**9;
    uint256 private constant _maxPresaleGas = 200000000000;

    uint256 private constant _epochLength = 30 minutes;

    uint256 private constant _liquidityReward = 5 * 10**9;
    uint256 private constant _minForLiquidity = 20 * 10**9;
    uint256 private constant _minForCallerLiquidity = 20 * 10**9;

    address private constant _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address private constant _factoryAddress = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
    address payable private constant _deployerAddress = 0xc540DA538385ee0aa19dBDfF372edDB9Bb6F47fA;
    address private constant _treasuryAddress = 0xc540DA538385ee0aa19dBDfF372edDB9Bb6F47fA;

    uint256 private constant _presaleRate = 27500;
    uint256 private constant _listingRate = 23333;

    string private constant _name = "SpeedXStable";
    string private constant _symbol = "SXST";
    uint8 private constant _decimals = 9;

    /****** Getters *******/
    function getPresaleRate() internal pure returns (uint256) {
        return _presaleRate;
    }
     function getListingRate() internal pure returns (uint256) {
        return _listingRate;
    }
    function getLaunchSupply() internal pure returns (uint256) {
        return _launchSupply;
    }
    function getLargeTotal() internal pure returns (uint256) {
        return _largeTotal;
    }
    function getPresaleCap() internal pure returns (uint256) {
        return _presaleCap;
    }
    function getPresaleMinIndividualCap() internal pure returns (uint256) {
        return _presaleMinIndividualCap;
    }
    function getPresaleMaxIndividualCap() internal pure returns (uint256) {
        return _presaleMaxIndividualCap;
    }
    function getMaxPresaleGas() internal pure returns (uint256) {
        return _maxPresaleGas;
    }
    function getBaseExpansionFactor() internal pure returns (uint256) {
        return _baseExpansionFactor;
    }
    function getBaseContractionFactor() internal pure returns (uint256) {
        return _baseContractionFactor;
    }
    function getBaseContractionCap() internal pure returns (uint256) {
        return _baseContractionCap;
    }
    function getBaseUtilityFee() internal pure returns (uint256) {
        return _baseUtilityFee;
    }
    function getStabilizerFee() internal pure returns (uint256) {
        return _stabilizerFee;
    }
    function getStabilizationLowerBound() internal pure returns (uint256) {
        return _stabilizationLowerBound;
    }
    function getStabilizationLowerReset() internal pure returns (uint256) {
        return _stabilizationLowerReset;
    }
    function getStabilizationUpperBound() internal pure returns (uint256) {
        return _stabilizationUpperBound;
    }
    function getStabilizationUpperReset() internal pure returns (uint256) {
        return _stabilizationUpperReset;
    }
    function getStabilizePercent() internal pure returns (uint256) {
        return _stabilizePercent;
    }
    function getTreasuryFee() internal pure returns (uint256) {
        return _treasuryFee;
    }
    function getEpochLength() internal pure returns (uint256) {
        return _epochLength;
    }
    function getLiquidityReward() internal pure returns (uint256) {
        return _liquidityReward;
    }
    function getMinForLiquidity() internal pure returns (uint256) {
        return _minForLiquidity;
    }
    function getMinForCallerLiquidity() internal pure returns (uint256) {
        return _minForCallerLiquidity;
    }
    function getRouterAdd() internal pure returns (address) {
        return _routerAddress;
    }
    function getFactoryAdd() internal pure returns (address) {
        return _factoryAddress;
    }
    function getDeployerAdd() internal pure returns (address payable) {
        return _deployerAddress;
    }
    function getTreasuryAdd() internal pure returns (address) {
        return _treasuryAddress;
    }
    function getName() internal pure returns (string memory)  {
        return _name;
    }
    function getSymbol() internal pure returns (string memory) {
        return _symbol;
    }
    function getDecimals() internal pure returns (uint8) {
        return _decimals;
    }
}
contract State {

    mapping (address => uint256) _largeBalances;
    mapping (address => mapping (address => uint256)) _allowances;

    // Supported pools and data for measuring mint & burn factors
    struct PoolCounter {
        address pairToken;
        uint256 tokenBalance;
        uint256 pairTokenBalance;
        uint256 lpBalance;
        uint256 startTokenBalance;
        uint256 startPairTokenBalance;
    }
    address[] _supportedPools;
    mapping (address => PoolCounter) _poolCounters;
    mapping (address => bool) _isSupportedPool;
    address _mainPool;

    uint256 _currentEpoch;
    
    //Creating locked balances
    struct LockBox {
        address beneficiary;
        uint256 lockedBalance;
        uint256 unlockTime;
        bool locked;
    }
    LockBox[] _lockBoxes;
    mapping(address => uint256) _lockedBalance;
    mapping(address => bool) _hasLockedBalance;
    uint256 _totalLockedBalance;
 
    uint256 _largeTotal;
    uint256 _totalSupply;

    address _liquidityReserve;
    address _stabilizer;

    bool _presaleDone;
    address _presaleCon;
    
    bool _paused;
    
    bool _taxLess;
    mapping(address=>bool) _isTaxlessSetter;
}
contract Getters is State {
    using SafeMath for uint256;
    using Address for address;

    function getLargeBalances(address account) public view returns (uint256) {
        return _largeBalances[account];
    }
    function getAllowances(address account, address spender) public view returns (uint256) {
        return _allowances[account][spender];
    } 
    function getSupportedPools(uint256 index) public view returns (address) {
        return _supportedPools[index];
    }
    function getPoolCounters(address pool) public view returns (address, uint256, uint256, uint256, uint256, uint256) {
        PoolCounter memory pc = _poolCounters[pool];
        return (pc.pairToken, pc.tokenBalance, pc.pairTokenBalance, pc.lpBalance, pc.startTokenBalance, pc.startPairTokenBalance);
    }
    function isSupportedPool(address pool) public view returns (bool) {
        return _isSupportedPool[pool];
    }
    function mainPool() public view returns (address) {
        return _mainPool;
    }
    function getCurrentEpoch() public view returns (uint256) {
        return _currentEpoch;
    }
    function getLockBoxes(uint256 box) public view returns (address, uint256, uint256, bool) {
        LockBox memory lb = _lockBoxes[box];
        return (lb.beneficiary, lb.lockedBalance, lb.unlockTime, lb.locked);
    }
    function getLockedBalance(address account) public view returns (uint256) {
        return _lockedBalance[account];
    }
    function hasLockedBalance(address account) public view returns (bool) {
        return _hasLockedBalance[account];
    }
    function getTotalLockedBalance() public view returns (uint256) {
        return _totalLockedBalance;
    }
    function getLargeTotal() public view returns (uint256) {
        return _largeTotal;
    }
    function getTotalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    function getLiquidityReserve() public view returns (address) {
        return _liquidityReserve;
    }
    function getStabilizer() public view returns (address) {
        return _stabilizer;
    }
    function isPresaleDone() public view returns (bool) {
        return _presaleDone;
    }
    function getPresaleAddress() public view returns (address) {
        return _presaleCon;
    }
    function isPaused() public view returns (bool) {
        return _paused;
    }
    function isTaxLess() public view returns (bool) {
        return _taxLess;
    }
    function isTaxlessSetter(address account) public view returns (bool) {
        return _isTaxlessSetter[account];
    }
    function getUniswapRouter() public view returns (IUniswapV2Router02) {
        return IUniswapV2Router02(Constants.getRouterAdd());
    }
    function getUniswapFactory() public view returns (IUniswapV2Factory) {
        return IUniswapV2Factory(Constants.getFactoryAdd());
    }
    function getFactor() public view returns(uint256) {
        if (_presaleDone) {
            return _largeTotal.div(_totalSupply);
        } else {
            return _largeTotal.div(Constants.getLaunchSupply());
        }
    }
    function getUpdatedPoolCounters(address pool, address pairToken) public view returns (uint256, uint256, uint256) {
        uint256 lpBalance = IERC20(pool).totalSupply();
        uint256 tokenBalance = IERC20(address(this)).balanceOf(pool);
        uint256 pairTokenBalance = IERC20(address(pairToken)).balanceOf(pool);
        return (tokenBalance, pairTokenBalance, lpBalance);
    }
    function getMintValue(address sender, uint256 amount) internal view returns(uint256, uint256, uint256) {
        uint256 expansionR = (_poolCounters[sender].pairTokenBalance).mul(_poolCounters[sender].startTokenBalance).mul(100).div(_poolCounters[sender].startPairTokenBalance).div(_poolCounters[sender].tokenBalance);
        uint256 mintAmount;
        if (expansionR > (Constants.getBaseExpansionFactor()).add(10000).div(100)) {
            uint256 mintFactor = expansionR.mul(expansionR);
            mintAmount = amount.mul(mintFactor.sub(10000)).div(10000);
        } else {
            mintAmount = amount.mul(Constants.getBaseExpansionFactor()).div(10000);
        }
        return (mintAmount.mul(Constants.getStabilizerFee()).div(10000),mintAmount.mul(Constants.getTreasuryFee()).div(10000),mintAmount);
    }

    function getBurnValues(address recipient, uint256 amount) internal view returns(uint256, uint256) {
        uint256 currentFactor = getFactor();
        uint256 contractionR;
        if (isSupportedPool(recipient)) {
            contractionR = (_poolCounters[recipient].tokenBalance).mul(_poolCounters[recipient].startPairTokenBalance).mul(100).div(_poolCounters[recipient].pairTokenBalance).div(_poolCounters[recipient].startTokenBalance);
        } else {
            contractionR = (_poolCounters[_mainPool].tokenBalance).mul(_poolCounters[_mainPool].startPairTokenBalance).mul(100).div(_poolCounters[_mainPool].pairTokenBalance).div(_poolCounters[_mainPool].startTokenBalance);
        }
        uint256 burnAmount;
        if (contractionR > (Constants.getBaseContractionFactor().add(10000)).div(100)) {
            uint256 burnFactor = contractionR.mul(contractionR);
            burnAmount = amount.mul(burnFactor.sub(10000)).div(10000);
            if (burnAmount > amount.mul(Constants.getBaseContractionCap()).div(10000)) burnAmount = amount.mul(Constants.getBaseContractionCap()).div(10000);
        } else {
            burnAmount = amount.mul(Constants.getBaseContractionFactor()).div(10000);
        }
        return (burnAmount, burnAmount.mul(currentFactor));
    }

    function getUtilityFee(uint256 amount) internal view returns(uint256, uint256) {
        uint256 currentFactor = getFactor();
        uint256 utilityFee = amount.mul(Constants.getBaseUtilityFee()).div(10000);
        return (utilityFee, utilityFee.mul(currentFactor));
    }
    function getMintRate(address pool) external view returns (uint256) {
        uint256 expansionR = (_poolCounters[pool].pairTokenBalance).mul(_poolCounters[pool].startTokenBalance).mul(100).div(_poolCounters[pool].startPairTokenBalance).div(_poolCounters[pool].tokenBalance);
        if (expansionR > (Constants.getBaseExpansionFactor()).add(10000).div(100)) {
            uint256 mintFactor = expansionR.mul(expansionR);
            return mintFactor.sub(10000);
        } else {
            return Constants.getBaseExpansionFactor();
        }
    }
    function getBurnRate(address pool) external view returns (uint256) {
        uint256 contractionR = (_poolCounters[pool].tokenBalance).mul(_poolCounters[pool].startPairTokenBalance).mul(100).div(_poolCounters[pool].pairTokenBalance).div(_poolCounters[pool].startTokenBalance);
        uint256 burnRate;
        if (contractionR > (Constants.getBaseContractionFactor().add(10000)).div(100)) {
            uint256 burnFactor = contractionR.mul(contractionR);
            burnRate = burnFactor.sub(10000);
            if (burnRate > Constants.getBaseContractionCap()) {
                return Constants.getBaseContractionCap();
            }
            return burnRate;

        } else {
            return Constants.getBaseContractionFactor();
        }
    }
}
contract Setters is State, Getters {
    function updatePresaleAddress(address presaleAddress) internal {
        _presaleCon = presaleAddress;
    }
    function setAllowances(address owner, address spender, uint256 amount) internal {
        _allowances[owner][spender] = amount;
    }
    function addToAccount(address account, uint256 amount) internal {
        uint256 currentFactor = getFactor();
        uint256 largeAmount = amount.mul(currentFactor);
        _largeBalances[account] = _largeBalances[account].add(largeAmount);
        _totalSupply = _totalSupply.add(amount);
    }
    function addToAll(uint256 amount) internal {
        _totalSupply = _totalSupply.add(amount);
    }
    function initializeEpoch() internal {
        _currentEpoch = now;
    }
    function updateEpoch() internal {
        initializeEpoch();
        for (uint256 i=0; i<_supportedPools.length; i++) {
            _poolCounters[_supportedPools[i]].startTokenBalance = _poolCounters[_supportedPools[i]].tokenBalance;
            _poolCounters[_supportedPools[i]].startPairTokenBalance = _poolCounters[_supportedPools[i]].pairTokenBalance;
        }
    }
    function initializeLargeTotal() internal {
        _largeTotal = Constants.getLargeTotal();
    }
    function syncPair(address pool) internal returns(bool) {
        (uint256 tokenBalance, uint256 pairTokenBalance, uint256 lpBalance) = getUpdatedPoolCounters(pool, _poolCounters[pool].pairToken);
        bool lpBurn = lpBalance < _poolCounters[pool].lpBalance;
        _poolCounters[pool].lpBalance = lpBalance;
        _poolCounters[pool].tokenBalance = tokenBalance;
        _poolCounters[pool].pairTokenBalance = pairTokenBalance;
        return (lpBurn);
    }
    function silentSyncPair(address pool) public {
        (uint256 tokenBalance, uint256 pairTokenBalance, uint256 lpBalance) = getUpdatedPoolCounters(pool, _poolCounters[pool].pairToken);
        _poolCounters[pool].lpBalance = lpBalance;
        _poolCounters[pool].tokenBalance = tokenBalance;
        _poolCounters[pool].pairTokenBalance = pairTokenBalance;
    }
    function addSupportedPool(address pool, address pairToken) internal {
        require(!isSupportedPool(pool),"This pool is already supported");
        _isSupportedPool[pool] = true;
        _supportedPools.push(pool);
        (uint256 tokenBalance, uint256 pairTokenBalance, uint256 lpBalance) = getUpdatedPoolCounters(pool, pairToken);
        _poolCounters[pool] = PoolCounter(pairToken, tokenBalance, pairTokenBalance, lpBalance, tokenBalance, pairTokenBalance);
    }
    function removeSupportedPool(address pool) internal {
        require(isSupportedPool(pool), "This pool is currently not supported");
        for (uint256 i = 0; i < _supportedPools.length; i++) {
            if (_supportedPools[i] == pool) {
                _supportedPools[i] = _supportedPools[_supportedPools.length - 1];
                _isSupportedPool[pool] = false;
                delete _poolCounters[pool];
                _supportedPools.pop();
                break;
            }
        }
    }
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract Stabilizer {
    constructor() public {

    }
}
contract SpeedXStable is Setters, Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    modifier onlyTaxless {
        require(isTaxlessSetter(_msgSender()),"not taxless");
        _;
    }
    modifier onlyPresale {
        require(_msgSender()==getPresaleAddress(),"not presale");
        require(!isPresaleDone(), "Presale over");
        _;
    }
    modifier pausable {
        require(!isPaused(), "Paused");
        _;
    }
    modifier taxlessTx {
        _taxLess = true;
        _;
        _taxLess = false;
    }

    constructor() public {
        updateEpoch();
        initializeLargeTotal();
        setStabilizer(address(new Stabilizer()));
    }

    function name() public view returns (string memory) {
        return Constants.getName();
    }
    
    function symbol() public view returns (string memory) {
        return Constants.getSymbol();
    }
    
    function decimals() public view returns (uint8) {
        return Constants.getDecimals();
    }
    
    function totalSupply() public view override returns (uint256) {
        return getTotalSupply();
    }
    
    function circulatingSupply() public view returns (uint256) {
        uint256 currentFactor = getFactor();
        return getTotalSupply().sub(getTotalLockedBalance().div(currentFactor)).sub(balanceOf(address(this))).sub(balanceOf(getStabilizer()));
    }
    
    function balanceOf(address account) public view override returns (uint256) {
        uint256 currentFactor = getFactor();
        if (hasLockedBalance(account)) return (getLargeBalances(account).add(getLockedBalance(account)).div(currentFactor));
        return getLargeBalances(account).div(currentFactor);
    }
    
    function unlockedBalanceOf(address account) public view returns (uint256) {
        uint256 currentFactor = getFactor();
        return getLargeBalances(account).div(currentFactor); 
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return getAllowances(owner,spender);
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), getAllowances(sender,_msgSender()).sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, getAllowances(_msgSender(),spender).add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, getAllowances(_msgSender(),spender).sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function mint(address to, uint256 amount) public onlyPresale {
        addToAccount(to,amount);
        emit Transfer(address(0),to,amount);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        setAllowances(owner, spender, amount);
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private pausable {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Amount must be greater than zero");
        require(amount <= balanceOf(sender),"Amount exceeds balance");
        require(amount <= unlockedBalanceOf(sender),"Amount exceeds unlocked balance");
        require(isPresaleDone(),"Presale yet to close");
        if (now > getCurrentEpoch().add(Constants.getEpochLength())) updateEpoch();
        uint256 currentFactor = getFactor();
        uint256 largeAmount = amount.mul(currentFactor);
        uint256 txType;
        if (isTaxLess()) {
            txType = 3;
        } else {
            bool lpBurn;
            if (isSupportedPool(sender)) {
                lpBurn = syncPair(sender);
            } else if (isSupportedPool(recipient)){
                silentSyncPair(recipient);
            } else {
                silentSyncPair(_mainPool);
            }
            txType = _getTxType(sender, recipient, lpBurn);
        }
        // Buy Transaction from supported pools - requires mint, no utility fee
        if (txType == 1) {
            (uint256 stabilizerMint, uint256 treasuryMint, uint256 totalMint) = getMintValue(sender, amount);
            // uint256 mintSize = amount.div(100);
            _largeBalances[sender] = _largeBalances[sender].sub(largeAmount);
            _largeBalances[recipient] = _largeBalances[recipient].add(largeAmount);
            _largeBalances[getStabilizer()] = _largeBalances[getStabilizer()].add(stabilizerMint.mul(currentFactor));
            _largeBalances[Constants.getTreasuryAdd()] = _largeBalances[Constants.getTreasuryAdd()].add(treasuryMint.mul(currentFactor));
            _totalSupply = _totalSupply.add(totalMint);
            emit Transfer(sender, recipient, amount);
            emit Transfer(address(0),getStabilizer(),stabilizerMint);
            emit Transfer(address(0),Constants.getTreasuryAdd(),treasuryMint);
        }
        // Sells to supported pools or unsupported transfer - requires exit burn and utility fee
        else if (txType == 2) {
            (uint256 burnSize, uint256 largeBurnSize) = getBurnValues(recipient, amount);
            (uint256 utilityFee, uint256 largeUtilityFee) = getUtilityFee(amount);
            uint256 actualTransferAmount = amount.sub(burnSize).sub(utilityFee);
            uint256 largeTransferAmount = actualTransferAmount.mul(currentFactor);
            _largeBalances[sender] = _largeBalances[sender].sub(largeAmount);
            _largeBalances[recipient] = _largeBalances[recipient].add(largeTransferAmount);
            _largeBalances[_liquidityReserve] = _largeBalances[_liquidityReserve].add(largeUtilityFee);
            _totalSupply = _totalSupply.sub(burnSize);
            _largeTotal = _largeTotal.sub(largeBurnSize);
            emit Transfer(sender, recipient, actualTransferAmount);
            emit Transfer(sender, address(0), burnSize);
            emit Transfer(sender, _liquidityReserve, utilityFee);
        } 
        // Add Liquidity via interface or Remove Liquidity Transaction to supported pools - no fee of any sort
        else if (txType == 3) {
            _largeBalances[sender] = _largeBalances[sender].sub(largeAmount);
            _largeBalances[recipient] = _largeBalances[recipient].add(largeAmount);
            emit Transfer(sender, recipient, amount);
        }
    }

    function _getTxType(address sender, address recipient, bool lpBurn) private returns(uint256) {
        uint256 txType = 2;
        if (isSupportedPool(sender)) {
            if (lpBurn) {
                txType = 3;
            } else {
                txType = 1;
            }
        } else if (sender == Constants.getRouterAdd()) {
            txType = 3;
        }
        return txType;
    }

    function setPresale(address presaleAdd) external onlyOwner() {
        require(!isPresaleDone(), "Presale is already completed");
        updatePresaleAddress(presaleAdd);
    }

    function setPresaleDone() public payable onlyPresale {
        require(totalSupply() <= Constants.getLaunchSupply(), "Total supply is already minted");
        _mintRemaining();
        _presaleDone = true;
        _createEthPool();
    }

    function _mintRemaining() private {
        require(!isPresaleDone(), "Cannot mint post presale");
        addToAccount(Constants.getDeployerAdd(), 10000 * 10**9);
        Constants.getDeployerAdd().transfer(address(this).balance.div(4));
        uint256 toMint = Constants.getLaunchSupply().sub(totalSupply());
        uint256 tokensToAdd = address(this).balance.div(10**11).mul(Constants.getListingRate());
        if(toMint > tokensToAdd) {
            addToAccount(address(0),toMint.sub(tokensToAdd));
            emit Transfer(address(0),address(0),toMint.sub(tokensToAdd));
        }
        addToAccount(address(this), tokensToAdd);
        emit Transfer(address(0),Constants.getDeployerAdd(),10000 * 10**9);
        emit Transfer(address(0),address(this),tokensToAdd);
    }

    function mintLockedTranche(address account, uint256 unlockTime, uint256 amount) external onlyOwner() {
        require(!isPresaleDone(), "Cannot mint post presale");
        uint256 currentFactor = getFactor();
        uint256 largeAmount = amount.mul(currentFactor);
        _lockBoxes.push(LockBox(account, largeAmount, unlockTime, true));
        _lockedBalance[account] = _lockedBalance[account].add(largeAmount);
        _hasLockedBalance[account] = true;
        _totalLockedBalance = _totalLockedBalance.add(largeAmount);
        _totalSupply = _totalSupply.add(amount);
        emit Transfer(address(0),account,amount);
    }
    
    function mintUnlockedTranche(address account, uint256 amount) external onlyOwner() {
        require(!isPresaleDone(), "Cannot mint post presale");
        addToAccount(account, amount);
        emit Transfer(address(0),account,amount);
    }

    function unlockTranche(uint256 tranche) external {
        require(hasLockedBalance(_msgSender()),"Caller has no locked balance");
        (address beneficiary, uint256 balance, uint256 unlockTime, bool locked) = getLockBoxes(tranche);
        require(unlockTime <= now,"This tranche cannot be unlocked yet");
        require(beneficiary == _msgSender(),"You are not the owner of this tranche");
        require(locked ==  true, "This tranche has already been unlocked");
        _totalLockedBalance = _totalLockedBalance.sub(balance);
        _largeBalances[_msgSender()] = _largeBalances[_msgSender()].add(balance);
        _lockedBalance[_msgSender()] = _lockedBalance[_msgSender()].sub(balance);
        if (_lockedBalance[_msgSender()] <= 0) _hasLockedBalance[_msgSender()] = false;
        _lockBoxes[tranche].lockedBalance = 0;
        _lockBoxes[tranche].locked = false;
    }

    function reassignTranche(uint256 tranche, address beneficiary) external onlyOwner() {
        (address oldBeneficiary, uint256 balance, uint256 unlockTime, bool locked) = getLockBoxes(tranche);
        require(locked == true, "This tranche has already been unlocked");
        require(unlockTime > now,"This tranche has already been vested");
        _lockedBalance[oldBeneficiary] = _lockedBalance[oldBeneficiary].sub(balance);
        _lockedBalance[beneficiary] = _lockedBalance[beneficiary].add(balance);
        if (_lockedBalance[oldBeneficiary] == 0) _hasLockedBalance[oldBeneficiary] = false;
        _hasLockedBalance[beneficiary] = true; 
        _lockBoxes[tranche].beneficiary = beneficiary;
        uint256 currentFactor = getFactor();
        emit Transfer(oldBeneficiary,beneficiary,balance.div(currentFactor));
    }

    function _createEthPool() private taxlessTx {
        IUniswapV2Router02 uniswapRouterV2 = getUniswapRouter();
        IUniswapV2Factory uniswapFactory = getUniswapFactory();
        address tokenUniswapPair;
        if (uniswapFactory.getPair(address(uniswapRouterV2.WETH()), address(this)) == address(0)) {
            tokenUniswapPair = uniswapFactory.createPair(
            address(uniswapRouterV2.WETH()), address(this));
        } else {
            tokenUniswapPair = uniswapFactory.getPair(address(this),uniswapRouterV2.WETH());
        }
        uint256 tokensToAdd = balanceOf(address(this));        
        _approve(address(this), 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, tokensToAdd);
        uniswapRouterV2.addLiquidityETH{value: address(this).balance}(address(this),
           tokensToAdd, 0, 0, Constants.getDeployerAdd(), block.timestamp);
        addSupportedPool(tokenUniswapPair, address(uniswapRouterV2.WETH()));
        _mainPool = tokenUniswapPair;
    }

    function createTokenPool(address pairToken, uint256 amount) external onlyOwner() taxlessTx {
        IUniswapV2Router02 uniswapRouterV2 = getUniswapRouter();
        IUniswapV2Factory uniswapFactory = getUniswapFactory();
        address tokenUniswapPair;
        if (uniswapFactory.getPair(pairToken, address(this)) == address(0)) {
            tokenUniswapPair = uniswapFactory.createPair(
            pairToken, address(this));
        } else {
            tokenUniswapPair = uniswapFactory.getPair(pairToken,address(this));
        }
        require(uniswapFactory.getPair(pairToken,address(uniswapRouterV2.WETH())) != address(0), "Eth pairing does not exist");
        require(balanceOf(address(this)) >= amount, "Amount exceeds the token balance");
        uint256 toConvert = amount.div(2);
        uint256 toAdd = amount.sub(toConvert);
        uint256 initialBalance = IERC20(pairToken).balanceOf(address(this));
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapRouterV2.WETH();
        path[2] = pairToken;
        _approve(address(this), address(uniswapRouterV2), toConvert);
        uniswapRouterV2.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            toConvert, 0, path, address(this), block.timestamp);
        uint256 newBalance = IERC20(pairToken).balanceOf(address(this)).sub(initialBalance);
        _approve(address(this), address(uniswapRouterV2), toAdd);
        IERC20(pairToken).approve(address(uniswapRouterV2), newBalance);
        uniswapRouterV2.addLiquidity(address(this),pairToken,toAdd,newBalance,0,0,address(this),block.timestamp);
        addSupportedPool(tokenUniswapPair, pairToken);
    }

    function addNewSupportedPool(address pool, address pairToken) external onlyOwner() {
        addSupportedPool(pool, pairToken);
    }

    function removeOldSupportedPool(address pool) external onlyOwner() {
        removeSupportedPool(pool);
    }

    function setTaxlessSetter(address cont) external onlyOwner() {
        require(!isTaxlessSetter(cont),"already setter");
        _isTaxlessSetter[cont] = true;
    }

    function setTaxless(bool flag) public onlyTaxless {
        _taxLess = flag;
    }

    function removeTaxlessSetter(address cont) external onlyOwner() {
        require(isTaxlessSetter(cont),"not setter");
        _isTaxlessSetter[cont] = false;
    }

    function setLiquidityReserve(address reserve) external onlyOwner() {
        require(Address.isContract(reserve),"Need a contract");
        _isTaxlessSetter[_liquidityReserve] = false;
        uint256 oldBalance = balanceOf(_liquidityReserve);
        if (oldBalance > 0) {
            _transfer(_liquidityReserve, reserve, oldBalance);
            emit Transfer(_liquidityReserve, reserve, oldBalance);
        }
        _liquidityReserve = reserve;
        _isTaxlessSetter[reserve] = true;
    }

    function setStabilizer(address reserve) public onlyOwner() taxlessTx {
        require(Address.isContract(reserve),"Need a contract");
        _isTaxlessSetter[_stabilizer] = false;
        uint256 oldBalance = balanceOf(_stabilizer);
        if (oldBalance > 0) {
            _transfer(_stabilizer, reserve, oldBalance);
            emit Transfer(_stabilizer, reserve, oldBalance);
        }
        _stabilizer = reserve;
        _isTaxlessSetter[reserve] = true;
    }
    
    function pauseContract(bool flag) external onlyOwner() {
        _paused = flag;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"pairToken","type":"address"}],"name":"addNewSupportedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pairToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"createTokenPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"getAllowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLargeBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLargeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReserve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"box","type":"uint256"}],"name":"getLockBoxes","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLockedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getMintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCounters","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPresaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStabilizer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getSupportedPools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLockedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"pairToken","type":"address"}],"name":"getUpdatedPoolCounters","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"hasLockedBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isSupportedPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxLess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTaxlessSetter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"unlockTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintLockedTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintUnlockedTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tranche","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"reassignTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"removeOldSupportedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cont","type":"address"}],"name":"removeTaxlessSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reserve","type":"address"}],"name":"setLiquidityReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleAdd","type":"address"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPresaleDone","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"reserve","type":"address"}],"name":"setStabilizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setTaxless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cont","type":"address"}],"name":"setTaxlessSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"silentSyncPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tranche","type":"uint256"}],"name":"unlockTranche","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unlockedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060006200001e620000bc565b601180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000076620000c1565b6200008062000206565b620000b66040516200009290620015e8565b604051809103906000f080158015620000af573d6000803e3d6000fd5b5062000220565b620018d9565b335b90565b620000cb62000386565b60005b60025481101562000203576003600060028381548110620000eb57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206001015460036000600284815481106200013f57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001812060040191909155600280546003929190849081106200017e57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600201546003600060028481548110620001d257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902060050155600101620000ce565b50565b6200021b6200038c60201b620027941760201c565b600b55565b6200022a620000bc565b6011546001600160a01b03908116911614620002635760405162461bcd60e51b81526004016200025a90620017f6565b60405180910390fd5b600f8054600160a81b60ff60a81b199091161790556200028f8162000397602090811b6200279f17901c565b620002ae5760405162461bcd60e51b81526004016200025a90620018a7565b600e80546001600160a01b039081166000908152601060205260408120805460ff191690559154620002e19116620003a1565b905080156200033e57600e5462000303906001600160a01b0316838362000428565b600e546040516001600160a01b038085169216906000805160206200630f8339815191529062000335908590620018d0565b60405180910390a35b50600e80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055600f805460ff60a81b19169055565b42600655565b6507326b47ffff1990565b803b15155b919050565b600080620003ae62000c06565b9050620003bb8362000c72565b1562000411576200040881620003f4620003d58662000c90565b620003e08762000cab565b62000cc660201b620027a51790919060201c565b62000cf760201b620027ca1790919060201c565b9150506200039c565b6200042181620003f48562000cab565b9392505050565b6200043262000d41565b15620004525760405162461bcd60e51b81526004016200025a90620016f2565b6001600160a01b0383166200047b5760405162461bcd60e51b81526004016200025a9062001862565b6001600160a01b038216620004a45760405162461bcd60e51b81526004016200025a90620016af565b60008111620004c75760405162461bcd60e51b81526004016200025a9062001749565b620004d283620003a1565b811115620004f45760405162461bcd60e51b81526004016200025a9062001678565b620004ff8362000d51565b811115620005215760405162461bcd60e51b81526004016200025a906200182b565b6200052b62000d70565b6200054a5760405162461bcd60e51b81526004016200025a906200177e565b6200056d6200056362000d8060201b6200280c1760201c565b620003e062000d86565b4211156200057f576200057f620000c1565b60006200058b62000c06565b90506000620005a9828462000d8c60201b620028121790919060201c565b90506000620005b762000dcc565b15620005c65750600362000636565b6000620005d38762000ddc565b15620005ec57620005e48762000dfa565b905062000625565b620005f78662000ddc565b156200060e57620006088662000e67565b62000625565b60055462000625906001600160a01b031662000e67565b6200063287878362000ece565b9150505b8060011415620008e4576000808062000650898862000f38565b6001600160a01b038c1660009081526020818152604090912054939650919450925062000689919087906200284c620010ec821b17901c565b6001600160a01b03808b1660009081526020818152604080832094909455918b1681529190912054620006c7918790620027a562000cc6821b17901c565b6001600160a01b0389166000908152602081815260409091209190915562000743906200070190859089906200281262000d8c821b17901c565b6000806200070e62001136565b6001600160a01b03166001600160a01b031681526020019081526020016000205462000cc660201b620027a51790919060201c565b6000806200075062001136565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550620007aa62000792878462000d8c60201b620028121790919060201c565b6000806200070e6200114560201b6200288e1760201c565b600080620007c26200114560201b6200288e1760201c565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506200080281600c5462000cc660201b620027a51790919060201c565b600c81905550876001600160a01b0316896001600160a01b03166000805160206200630f833981519152896040516200083c9190620018d0565b60405180910390a36200084e62001136565b6001600160a01b031660006001600160a01b03166000805160206200630f83398151915285604051620008829190620018d0565b60405180910390a36200089f6200114560201b6200288e1760201c565b6001600160a01b031660006001600160a01b03166000805160206200630f83398151915284604051620008d39190620018d0565b60405180910390a350505062000bfe565b806002141562000b3a57600080620008fd87876200115d565b9092509050600080620009108862001349565b915091506000620009498362000935878c620010ec60201b6200284c1790919060201c565b620010ec60201b6200284c1790919060201c565b9050600062000967898362000d8c60201b620028121790919060201c565b6001600160a01b038d16600090815260208181526040909120549192506200099b91908a906200284c620010ec821b17901c565b6001600160a01b03808e1660009081526020818152604080832094909455918e1681529190912054620009d9918390620027a562000cc6821b17901c565b6001600160a01b03808d1660009081526020818152604080832094909455600d549092168152919091205462000a1a918590620027a562000cc6821b17901c565b600d546001600160a01b031660009081526020818152604090912091909155600c5462000a529188906200284c620010ec821b17901c565b600c8190555062000a7485600b54620010ec60201b6200284c1790919060201c565b600b819055508a6001600160a01b03168c6001600160a01b03166000805160206200630f8339815191528460405162000aae9190620018d0565b60405180910390a360006001600160a01b03168c6001600160a01b03166000805160206200630f8339815191528860405162000aeb9190620018d0565b60405180910390a3600d546040516001600160a01b03918216918e16906000805160206200630f8339815191529062000b26908890620018d0565b60405180910390a350505050505062000bfe565b806003141562000bfe576001600160a01b0386166000908152602081815260409091205462000b749184906200284c620010ec821b17901c565b6001600160a01b03808816600090815260208181526040808320949094559188168152919091205462000bb2918490620027a562000cc6821b17901c565b6001600160a01b0380871660008181526020819052604090819020939093559151908816906000805160206200630f8339815191529062000bf5908890620018d0565b60405180910390a35b505050505050565b600e54600090600160a01b900460ff161562000c425762000c3a600c54600b5462000cf760201b620027ca1790919060201c565b9050620000be565b62000c3a62000c5b620013b860201b620028a61760201c565b600b5462000cf760201b620027ca1790919060201c565b6001600160a01b031660009081526009602052604090205460ff1690565b6001600160a01b031660009081526008602052604090205490565b6001600160a01b031660009081526020819052604090205490565b60008282018381101562000cee5760405162461bcd60e51b81526004016200025a9062001712565b90505b92915050565b600062000cee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620013c260201b60201c565b600f54600160a01b900460ff1690565b60008062000d5e62000c06565b90506200042181620003f48562000cab565b600e54600160a01b900460ff1690565b61070890565b60065490565b60008262000d9d5750600062000cf1565b8282028284828162000dab57fe5b041462000cee5760405162461bcd60e51b81526004016200025a90620017b5565b600f54600160a81b900460ff1690565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b03808216600090815260036020526040812054909182918291829162000e2a91879116620013fd565b6001600160a01b03979097166000908152600360208190526040909120908101805490899055600182019390935560020155909410949350505050565b6001600160a01b0380821660009081526003602052604081205490918291829162000e9591869116620013fd565b6001600160a01b039096166000908152600360208190526040909120908101969096556001860191909155600290940193909355505050565b6000600262000edd8562000ddc565b1562000efd57821562000ef35750600362000ef7565b5060015b62000f30565b62000f126200158c60201b620028b01760201c565b6001600160a01b0316856001600160a01b0316141562000f30575060035b949350505050565b6001600160a01b0382166000908152600360209081526040822060018101546005820154600483015460029093015485948594859462000faa949093620003f4939192849260649262000f969290916200281262000d8c821b17901c565b62000d8c60201b620028121790919060201c565b9050600062000fd06064620003f4612710620003e0620015a460201b620028c81760201c565b8211156200103b57600062000ff4838462000d8c60201b620028121790919060201c565b905062001032612710620003f46200101d61271085620010ec60201b6200284c1790919060201c565b8a62000d8c60201b620028121790919060201c565b91505062001073565b62001070612710620003f46200105b620015a460201b620028c81760201c565b8962000d8c60201b620028121790919060201c565b90505b620010a8612710620003f462001093620015a960201b620028cd1760201c565b8462000d8c60201b620028121790919060201c565b620010dd612710620003f4620010c8620015a960201b620028cd1760201c565b8562000d8c60201b620028121790919060201c565b90955093509150509250925092565b600062000cee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620015ae60201b60201c565b600e546001600160a01b031690565b73c540da538385ee0aa19dbdff372eddb9bb6f47fa90565b600080806200116b62000c06565b905060006200117a8662000ddc565b15620011dd576001600160a01b0386166000908152600360209081526040909120600481015460028201546005830154600190930154620011d5949293620003f493849260649262000f96926200281262000d8c821b17901c565b905062001238565b600580546001600160a01b03166000908152600360209081526040909120600481015460028201549382015460019092015462001235949193620003f493849260649262000f96929062000d8c811b6200281217901c565b90505b60006200125c6064620003f4612710620003e0620015a460201b620028c81760201c565b821115620012fd57600062001280838462000d8c60201b620028121790919060201c565b9050620012a9612710620003f46200101d61271085620010ec60201b6200284c1790919060201c565b9150620012cb612710620003f46200101d620015dd60201b620028d21760201c565b821115620012f657620012f3612710620003f46200101d620015dd60201b620028d21760201c565b91505b5062001320565b6200131d612710620003f46200105b620015a460201b620028c81760201c565b90505b806200133b848362000d8c60201b620028121790919060201c565b945094505050509250929050565b600080806200135762000c06565b9050600062001390612710620003f46200137b620015e360201b620028d81760201c565b8862000d8c60201b620028121790919060201c565b905080620013ad838362000d8c60201b620028121790919060201c565b935093505050915091565b655af3107a400090565b60008183620013e65760405162461bcd60e51b81526004016200025a919062001622565b506000838581620013f357fe5b0495945050505050565b600080600080856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200143d57600080fd5b505afa15801562001452573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014789190620015f5565b6040516370a0823160e01b815290915060009030906370a0823190620014a3908a906004016200160e565b60206040518083038186803b158015620014bc57600080fd5b505afa158015620014d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014f79190620015f5565b90506000866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016200152991906200160e565b60206040518083038186803b1580156200154257600080fd5b505afa15801562001557573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200157d9190620015f5565b91989197509195509350505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d90565b606490565b60fa90565b60008184841115620015d55760405162461bcd60e51b81526004016200025a919062001622565b505050900390565b6103e890565b603290565b605c80620062b383390190565b60006020828403121562001607578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6000602080835283518082850152825b81811015620016505785810183015185820160400152820162001632565b81811115620016625783604083870101525b50601f01601f1916929092016040019392505050565b60208082526016908201527f416d6f756e7420657863656564732062616c616e636500000000000000000000604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60208082526014908201527f50726573616c652079657420746f20636c6f7365000000000000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f416d6f756e74206578636565647320756e6c6f636b65642062616c616e636500604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600f908201526e1399595908184818dbdb9d1c9858dd608a1b604082015260600190565b90815260200190565b6149ca80620018e96000396000f3fe60806040526004361061038c5760003560e01c806384955c88116101dc578063bef2112411610102578063d825589b116100a0578063ec2b4e361161006f578063ec2b4e36146109df578063f0e0d14e146109ff578063f2fde38b14610a1f578063f9b7250c14610a3f5761038c565b8063d825589b1461095f578063db7f521a1461097f578063dd62ed3e1461099f578063e272b892146109bf5761038c565b8063c4e41b22116100dc578063c4e41b22146108f5578063cb4d31951461090a578063d5c258901461092a578063d5fcc7b61461093f5761038c565b8063bef2112414610886578063bf9a3a1b146108a6578063c4086893146108d55761038c565b8063a5a302d31161017a578063b21c327811610149578063b21c32781461081c578063b6333d831461083c578063b72455bd1461085c578063b97dd9e2146108715761038c565b8063a5a302d3146107b2578063a9059cbb146107c7578063ae2089ad146107e7578063b187bd26146108075761038c565b8063927ac386116101b6578063927ac386146107535780639358928b1461076857806395d89b411461077d578063a457c2d7146107925761038c565b806384955c88146106ec578063893987831461070c5780638da5cb5b1461073e5761038c565b80634cf73094116102c1578063715018a61161025f57806380af17991161022e57806380af17991461068257806380c2bbd21461069757806380dc74da146106b75780638484ed7e146106cc5761038c565b8063715018a61461060d5780637c2d0774146106225780637dff2680146106425780637e47d625146106625761038c565b8063522361461161029b5780635223614614610598578063524900b5146105b85780635d15d341146105cd57806370a08231146105ed5761038c565b80634cf73094146105435780634f78aa82146105635780635184cc43146105835761038c565b8063395093511161032e5780633f96440e116103085780633f96440e146104ce5780634028358a146104e357806340c10f191461050357806342b5f375146105235761038c565b806339509351146104825780633e6dfa36146104a25780633eedf63c146104c45761038c565b8063220659881161036a578063220659881461040b57806323b872dd1461042b57806323ecdf611461044b578063313ce567146104605761038c565b806306fdde0314610391578063095ea7b3146103bc57806318160ddd146103e9575b600080fd5b34801561039d57600080fd5b506103a6610a6f565b6040516103b39190614178565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004613f26565b610a7f565b6040516103b39190614164565b3480156103f557600080fd5b506103fe610a9d565b6040516103b3919061416f565b34801561041757600080fd5b506103dc610426366004613e76565b610aa7565b34801561043757600080fd5b506103dc610446366004613ee6565b610ac9565b34801561045757600080fd5b506103dc610b21565b34801561046c57600080fd5b50610475610b31565b6040516103b391906148f6565b34801561048e57600080fd5b506103dc61049d366004613f26565b610b3b565b3480156104ae57600080fd5b506104b7610b64565b6040516103b3919061403e565b6104cc610b6e565b005b3480156104da57600080fd5b506104b7610c2e565b3480156104ef57600080fd5b506104cc6104fe366004613eae565b610c3d565b34801561050f57600080fd5b506104cc61051e366004613f26565b610c80565b34801561052f57600080fd5b506103fe61053e366004613e76565b610d2c565b34801561054f57600080fd5b506104cc61055e366004613fed565b610df7565b34801561056f57600080fd5b506103fe61057e366004613e76565b610fd4565b34801561058f57600080fd5b506103fe611063565b3480156105a457600080fd5b506104cc6105b3366004613e76565b6110a2565b3480156105c457600080fd5b506104b76111bf565b3480156105d957600080fd5b506104cc6105e8366004613f26565b6111c9565b3480156105f957600080fd5b506103fe610608366004613e76565b611901565b34801561061957600080fd5b506104cc611949565b34801561062e57600080fd5b506104cc61063d366004613fbd565b6119c8565b34801561064e57600080fd5b506104b761065d366004613fbd565b611c15565b34801561066e57600080fd5b506104cc61067d366004613f85565b611c3f565b34801561068e57600080fd5b506104b7611c84565b3480156106a357600080fd5b506104cc6106b2366004613e76565b611c93565b3480156106c357600080fd5b506104b7611cf8565b3480156106d857600080fd5b506104cc6106e7366004613e76565b611d07565b3480156106f857600080fd5b506103fe610707366004613e76565b611d82565b34801561071857600080fd5b5061072c610727366004613e76565b611d9c565b6040516103b396959493929190614131565b34801561074a57600080fd5b506104b7611e28565b34801561075f57600080fd5b506103dc611e37565b34801561077457600080fd5b506103fe611e47565b34801561078957600080fd5b506103a6611e8b565b34801561079e57600080fd5b506103dc6107ad366004613f26565b611e95565b3480156107be57600080fd5b506104b7611ed1565b3480156107d357600080fd5b506103dc6107e2366004613f26565b611ee0565b3480156107f357600080fd5b506103fe610802366004613e76565b611ef4565b34801561081357600080fd5b506103dc611f0f565b34801561082857600080fd5b506103fe610837366004613eae565b611f1f565b34801561084857600080fd5b506103dc610857366004613e76565b611f4a565b34801561086857600080fd5b506103fe611f68565b34801561087d57600080fd5b506103fe611f6e565b34801561089257600080fd5b506104cc6108a1366004613e76565b611f74565b3480156108b257600080fd5b506108c66108c1366004613eae565b611ff3565b6040516103b3939291906148e0565b3480156108e157600080fd5b506103fe6108f0366004613e76565b612172565b34801561090157600080fd5b506103fe61218d565b34801561091657600080fd5b506104cc610925366004613e76565b612193565b34801561093657600080fd5b506103fe6121d4565b34801561094b57600080fd5b506104cc61095a366004613e76565b6121da565b34801561096b57600080fd5b506104cc61097a366004613f51565b61223d565b34801561098b57600080fd5b506104cc61099a366004613e76565b61244b565b3480156109ab57600080fd5b506103fe6109ba366004613eae565b612588565b3480156109cb57600080fd5b506104cc6109da366004613f85565b612594565b3480156109eb57600080fd5b506103dc6109fa366004613e76565b6125e7565b348015610a0b57600080fd5b506104cc610a1a366004613f26565b612605565b348015610a2b57600080fd5b506104cc610a3a366004613e76565b61265f565b348015610a4b57600080fd5b50610a5f610a5a366004613fbd565b612716565b6040516103b39493929190614109565b6060610a796128dd565b90505b90565b6000610a93610a8c612903565b8484612907565b5060015b92915050565b6000610a7961218d565b6001600160a01b03811660009081526009602052604090205460ff165b919050565b6000610ad68484846129ae565b610b1784610ae2612903565b610b128560405180606001604052806028815260200161492860289139610b0b8a610837612903565b9190612fb1565b612907565b5060019392505050565b600f54600160a81b900460ff1690565b6000610a79612fdd565b6000610a93610b48612903565b84610b1285610b5e610b58612903565b89611f1f565b906127a5565b6000610a79612fe2565b610b76610c2e565b6001600160a01b0316610b87612903565b6001600160a01b031614610bb65760405162461bcd60e51b8152600401610bad9061431d565b60405180910390fd5b610bbe611e37565b15610bdb5760405162461bcd60e51b8152600401610bad90614450565b610be36128a6565b610beb610a9d565b1115610c095760405162461bcd60e51b8152600401610bad90614658565b610c11612ffa565b600e805460ff60a01b1916600160a01b179055610c2c613175565b565b600f546001600160a01b031690565b610c45612903565b6011546001600160a01b03908116911614610c725760405162461bcd60e51b8152600401610bad90614623565b610c7c82826135fd565b5050565b610c88610c2e565b6001600160a01b0316610c99612903565b6001600160a01b031614610cbf5760405162461bcd60e51b8152600401610bad9061431d565b610cc7611e37565b15610ce45760405162461bcd60e51b8152600401610bad90614450565b610cee8282613722565b816001600160a01b031660006001600160a01b031660008051602061495083398151915283604051610d20919061416f565b60405180910390a35050565b6001600160a01b03811660009081526003602052604081206004810154600282015460058301546001909301548493610d819392610d7b9290918391606491610d759190612812565b90612812565b906127ca565b90506000610d986064610d7b612710610b5e6128c8565b821115610de6576000610dab8380612812565b9050610db98161271061284c565b9150610dc36128d2565b821115610ddc57610dd26128d2565b9350505050610ac4565b509150610ac49050565b610dee6128c8565b92505050610ac4565b610dff612903565b6011546001600160a01b03908116911614610e2c5760405162461bcd60e51b8152600401610bad90614623565b600080600080610e3b86612716565b93509350935093508015156001151514610e675760405162461bcd60e51b8152600401610bad906147ca565b428211610e865760405162461bcd60e51b8152600401610bad9061457a565b6001600160a01b038416600090815260086020526040902054610ea9908461284c565b6001600160a01b038086166000908152600860205260408082209390935590871681522054610ed890846127a5565b6001600160a01b038087166000908152600860205260408082209390935590861681522054610f22576001600160a01b0384166000908152600960205260409020805460ff191690555b6001600160a01b0385166000908152600960205260409020805460ff191660011790556007805486919088908110610f5657fe5b6000918252602082206004919091020180546001600160a01b0319166001600160a01b039390931692909217909155610f8d611063565b90506001600160a01b03808716908616600080516020614950833981519152610fb687856127ca565b604051610fc3919061416f565b60405180910390a350505050505050565b6001600160a01b0381166000908152600360205260408120600181015460058201546004830154600290930154849361101d9392610d7b9290918391606491610d759190612812565b90506110326064610d7b612710610b5e6128c8565b8111156110535760006110458280612812565b9050610dee8161271061284c565b61105b6128c8565b915050610ac4565b600e54600090600160a01b900460ff161561108e57600c54600b54611087916127ca565b9050610a7c565b6110876110996128a6565b600b54906127ca565b6110aa612903565b6011546001600160a01b039081169116146110d75760405162461bcd60e51b8152600401610bad90614623565b6110e08161279f565b6110fc5760405162461bcd60e51b8152600401610bad90614847565b600d80546001600160a01b039081166000908152601060205260408120805460ff19169055915461112d9116611901565b9050801561118457600d5461114c906001600160a01b031683836129ae565b600d546040516001600160a01b038085169216906000805160206149508339815191529061117b90859061416f565b60405180910390a35b50600d80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055565b6000610a796128b0565b6111d1612903565b6011546001600160a01b039081169116146111fe5760405162461bcd60e51b8152600401610bad90614623565b600f805460ff60a81b1916600160a81b179055600061121b6111bf565b90506000611227610b64565b60405163e6a4390560e01b815290915060009081906001600160a01b0384169063e6a439059061125d9089903090600401614052565b60206040518083038186803b15801561127557600080fd5b505afa158015611289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ad9190613e92565b6001600160a01b03161415611343576040516364e329cb60e11b81526001600160a01b0383169063c9c65396906112ea9088903090600401614052565b602060405180830381600087803b15801561130457600080fd5b505af1158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c9190613e92565b90506113c4565b60405163e6a4390560e01b81526001600160a01b0383169063e6a43905906113719088903090600401614052565b60206040518083038186803b15801561138957600080fd5b505afa15801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190613e92565b90505b60006001600160a01b0316826001600160a01b031663e6a4390587866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561141857600080fd5b505afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190613e92565b6040518363ffffffff1660e01b815260040161146d929190614052565b60206040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190613e92565b6001600160a01b031614156114e45760405162461bcd60e51b8152600401610bad90614810565b836114ee30611901565b101561150c5760405162461bcd60e51b8152600401610bad90614476565b60006115198560026127ca565b90506000611527868361284c565b90506000876001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611557919061403e565b60206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a79190613fd5565b604080516003808252608082019092529192506060919060208201838036833701905050905030816000815181106115db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190613e92565b8160018151811061167957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088816002815181106116a757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116d2308886612907565b604051635c11d79560e01b81526001600160a01b03881690635c11d79590611707908790600090869030904290600401614870565b600060405180830381600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b5050505060006117c1838b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161176b919061403e565b60206040518083038186803b15801561178357600080fd5b505afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb9190613fd5565b9061284c565b90506117ce308986612907565b60405163095ea7b360e01b81526001600160a01b038b169063095ea7b3906117fc908b9085906004016140b5565b602060405180830381600087803b15801561181657600080fd5b505af115801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e9190613fa1565b5060405162e8e33760e81b81526001600160a01b0389169063e8e33700906118899030908e908990879060009081908690429060040161406c565b606060405180830381600087803b1580156118a357600080fd5b505af11580156118b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118db9190614011565b5050506118e8868b6135fd565b5050600f805460ff60a81b191690555050505050505050565b60008061190c611063565b905061191783610aa7565b156119355761105b81610d7b61192c86612172565b610b5e87611ef4565b61194281610d7b85611ef4565b9392505050565b611951612903565b6011546001600160a01b0390811691161461197e5760405162461bcd60e51b8152600401610bad90614623565b6011546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601180546001600160a01b0319169055565b6119d3610426612903565b6119ef5760405162461bcd60e51b8152600401610bad90614342565b6000806000806119fe85612716565b935093509350935042821115611a265760405162461bcd60e51b8152600401610bad906143e5565b611a2e612903565b6001600160a01b0316846001600160a01b031614611a5e5760405162461bcd60e51b8152600401610bad906144d9565b600181151514611a805760405162461bcd60e51b8152600401610bad906147ca565b600a54611a8d908461284c565b600a55611abf83600080611a9f612903565b6001600160a01b03168152602081019190915260400160002054906127a5565b600080611aca612903565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550611b1e8360086000611afe612903565b6001600160a01b031681526020810191909152604001600020549061284c565b60086000611b2a612903565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060086000611b5c612903565b6001600160a01b03166001600160a01b031681526020019081526020016000205411611bb957600060096000611b90612903565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b600060078681548110611bc857fe5b906000526020600020906004020160010181905550600060078681548110611bec57fe5b60009182526020909120600490910201600301805460ff19169115159190911790555050505050565b600060028281548110611c2457fe5b6000918252602090912001546001600160a01b031692915050565b611c4a610857612903565b611c665760405162461bcd60e51b8152600401610bad9061451e565b600f8054911515600160a81b0260ff60a81b19909216919091179055565b600e546001600160a01b031690565b6001600160a01b03808216600090815260036020526040812054909182918291611cbf91869116611ff3565b6001600160a01b039096166000908152600360208190526040909120908101969096556001860191909155600290940193909355505050565b600d546001600160a01b031690565b611d0f612903565b6011546001600160a01b03908116911614611d3c5760405162461bcd60e51b8152600401610bad90614623565b611d4581611f4a565b611d615760405162461bcd60e51b8152600401610bad906145be565b6001600160a01b03166000908152601060205260409020805460ff19169055565b600080611d8d611063565b905061194281610d7b85611ef4565b600080600080600080611dad613e04565b505050506001600160a01b03938416600090815260036020818152604092839020835160c0810185528154909816808952600182015492890183905260028201549489018590529281015460608901819052600482015460808a0181905260059092015460a090990189905292989197939650919450909250565b6011546001600160a01b031690565b600e54600160a01b900460ff1690565b600080611e52611063565b9050611e85611e62610608611c84565b6117bb611e6e30611901565b6117bb611e7d86610d7b6121d4565b6117bb61218d565b91505090565b6060610a7961378f565b6000610a93611ea2612903565b84610b128560405180606001604052806025815260200161497060259139610b0b611ecb612903565b8a611f1f565b6005546001600160a01b031690565b6000610a93611eed612903565b84846129ae565b6001600160a01b031660009081526020819052604090205490565b600f54600160a01b900460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b031660009081526010602052604090205460ff1690565b600b5490565b60065490565b611f7c612903565b6011546001600160a01b03908116911614611fa95760405162461bcd60e51b8152600401610bad90614623565b611fb281611f4a565b15611fcf5760405162461bcd60e51b8152600401610bad90614428565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b600080600080856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561203257600080fd5b505afa158015612046573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206a9190613fd5565b6040516370a0823160e01b815290915060009030906370a0823190612093908a9060040161403e565b60206040518083038186803b1580156120ab57600080fd5b505afa1580156120bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e39190613fd5565b90506000866001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401612113919061403e565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121639190613fd5565b91989197509195509350505050565b6001600160a01b031660009081526008602052604090205490565b600c5490565b61219b612903565b6011546001600160a01b039081169116146121c85760405162461bcd60e51b8152600401610bad90614623565b6121d1816137ad565b50565b600a5490565b6121e2612903565b6011546001600160a01b0390811691161461220f5760405162461bcd60e51b8152600401610bad90614623565b612217611e37565b156122345760405162461bcd60e51b8152600401610bad90614543565b6121d1816138f1565b612245612903565b6011546001600160a01b039081169116146122725760405162461bcd60e51b8152600401610bad90614623565b61227a611e37565b156122975760405162461bcd60e51b8152600401610bad9061425e565b60006122a1611063565b905060006122af8383612812565b604080516080810182526001600160a01b0388811680835260208084018681528486018b8152600160608701818152600780549283018155600090815297517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688600490930292830180546001600160a01b031916919098161790965591517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689830155517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a82015592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b909301805460ff19169315159390931790925582526008905220549091506123c190826127a5565b6001600160a01b0386166000908152600860209081526040808320939093556009905220805460ff19166001179055600a546123fd90826127a5565b600a55600c5461240d90846127a5565b600c556040516001600160a01b038616906000906000805160206149508339815191529061243c90879061416f565b60405180910390a35050505050565b612453612903565b6011546001600160a01b039081169116146124805760405162461bcd60e51b8152600401610bad90614623565b600f805460ff60a81b1916600160a81b17905561249c8161279f565b6124b85760405162461bcd60e51b8152600401610bad90614847565b600e80546001600160a01b039081166000908152601060205260408120805460ff1916905591546124e99116611901565b9050801561254057600e54612508906001600160a01b031683836129ae565b600e546040516001600160a01b038085169216906000805160206149508339815191529061253790859061416f565b60405180910390a35b50600e80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055600f805460ff60a81b19169055565b60006119428383611f1f565b61259c612903565b6011546001600160a01b039081169116146125c95760405162461bcd60e51b8152600401610bad90614623565b600f8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b61260d612903565b6011546001600160a01b0390811691161461263a5760405162461bcd60e51b8152600401610bad90614623565b612642611e37565b15610ce45760405162461bcd60e51b8152600401610bad9061425e565b612667612903565b6011546001600160a01b039081169116146126945760405162461bcd60e51b8152600401610bad90614623565b6001600160a01b0381166126ba5760405162461bcd60e51b8152600401610bad90614295565b6011546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080612724613e43565b6007868154811061273157fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff1615156060909301839052999298509650945092505050565b6507326b47ffff1990565b3b151590565b6000828201838110156119425760405162461bcd60e51b8152600401610bad90614379565b600061194283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613913565b61070890565b60008261282157506000610a97565b8282028284828161282e57fe5b04146119425760405162461bcd60e51b8152600401610bad906145e2565b600061194283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fb1565b73c540da538385ee0aa19dbdff372eddb9bb6f47fa90565b655af3107a400090565b737a250d5630b4cf539739df2c5dacb4c659f2488d90565b606490565b60fa90565b6103e890565b603290565b60408051808201909152600c81526b537065656458537461626c6560a01b602082015290565b3390565b6001600160a01b03831661292d5760405162461bcd60e51b8152600401610bad9061474f565b6001600160a01b0382166129535760405162461bcd60e51b8152600401610bad906142db565b61295e83838361394a565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129a1919061416f565b60405180910390a3505050565b6129b6611f0f565b156129d35760405162461bcd60e51b8152600401610bad9061423e565b6001600160a01b0383166129f95760405162461bcd60e51b8152600401610bad9061470a565b6001600160a01b038216612a1f5760405162461bcd60e51b8152600401610bad906141fb565b60008111612a3f5760405162461bcd60e51b8152600401610bad906143b0565b612a4883611901565b811115612a675760405162461bcd60e51b8152600401610bad906141cb565b612a7083611d82565b811115612a8f5760405162461bcd60e51b8152600401610bad906146d3565b612a97611e37565b612ab35760405162461bcd60e51b8152600401610bad906144ab565b612ac6612abe61280c565b610b5e611f6e565b421115612ad557612ad5613976565b6000612adf611063565b90506000612aed8383612812565b90506000612af9610b21565b15612b0657506003612b66565b6000612b11876125e7565b15612b2657612b1f87613ab0565b9050612b57565b612b2f866125e7565b15612b4257612b3d86611c93565b612b57565b600554612b57906001600160a01b0316611c93565b612b62878783613b1b565b9150505b8060011415612d41576000806000612b7e8988613b71565b6001600160a01b038c166000908152602081905260409020549295509093509150612ba9908661284c565b6001600160a01b03808b1660009081526020819052604080822093909355908a1681522054612bd890866127a5565b6001600160a01b038916600090815260208190526040902055612c09612bfe8488612812565b600080611a9f611c84565b600080612c14611c84565b6001600160a01b03168152602081019190915260400160002055612c46612c3b8388612812565b600080611a9f61288e565b600080612c5161288e565b6001600160a01b03168152602081019190915260400160002055600c54612c7890826127a5565b600c81905550876001600160a01b0316896001600160a01b031660008051602061495083398151915289604051612caf919061416f565b60405180910390a3612cbf611c84565b6001600160a01b031660006001600160a01b031660008051602061495083398151915285604051612cf0919061416f565b60405180910390a3612d0061288e565b6001600160a01b031660006001600160a01b031660008051602061495083398151915284604051612d31919061416f565b60405180910390a3505050612fa9565b8060021415612f0557600080612d578787613c64565b91509150600080612d6788613db7565b90925090506000612d7c836117bb8b8861284c565b90506000612d8a828a612812565b6001600160a01b038d16600090815260208190526040902054909150612db0908961284c565b6001600160a01b03808e1660009081526020819052604080822093909355908d1681522054612ddf90826127a5565b6001600160a01b03808d1660009081526020819052604080822093909355600d5490911681522054612e1190846127a5565b600d546001600160a01b0316600090815260208190526040902055600c54612e39908761284c565b600c55600b54612e49908661284c565b600b819055508a6001600160a01b03168c6001600160a01b031660008051602061495083398151915284604051612e80919061416f565b60405180910390a360006001600160a01b03168c6001600160a01b031660008051602061495083398151915288604051612eba919061416f565b60405180910390a3600d546040516001600160a01b03918216918e169060008051602061495083398151915290612ef290889061416f565b60405180910390a3505050505050612fa9565b8060031415612fa9576001600160a01b038616600090815260208190526040902054612f31908361284c565b6001600160a01b038088166000908152602081905260408082209390935590871681522054612f6090836127a5565b6001600160a01b03808716600081815260208190526040908190209390935591519088169060008051602061495083398151915290612fa090889061416f565b60405180910390a35b505050505050565b60008184841115612fd55760405162461bcd60e51b8152600401610bad9190614178565b505050900390565b600990565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f90565b613002611e37565b1561301f5760405162461bcd60e51b8152600401610bad9061425e565b61303661302a61288e565b6509184e72a000613722565b61303e61288e565b6001600160a01b03166108fc6130554760046127ca565b6040518115909202916000818181858888f1935050505015801561307d573d6000803e3d6000fd5b50600061309361308b610a9d565b6117bb6128a6565b905060006130b16130a2613df8565b610d754764174876e8006127ca565b905080821115613101576130cf60006130ca848461284c565b613722565b6000806000805160206149508339815191526130eb858561284c565b6040516130f8919061416f565b60405180910390a35b61310b3082613722565b61311361288e565b6001600160a01b031660006001600160a01b03166000805160206149508339815191526509184e72a00060405161314a919061416f565b60405180910390a3604051309060009060008051602061495083398151915290610d2090859061416f565b600f805460ff60a81b1916600160a81b17905560006131926111bf565b9050600061319e610b64565b90506000806001600160a01b0316826001600160a01b031663e6a43905856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131f457600080fd5b505afa158015613208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322c9190613e92565b306040518363ffffffff1660e01b815260040161324a929190614052565b60206040518083038186803b15801561326257600080fd5b505afa158015613276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329a9190613e92565b6001600160a01b031614156133a057816001600160a01b031663c9c65396846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132f157600080fd5b505afa158015613305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133299190613e92565b306040518363ffffffff1660e01b8152600401613347929190614052565b602060405180830381600087803b15801561336157600080fd5b505af1158015613375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133999190613e92565b9050613491565b816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156133e957600080fd5b505afa1580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134219190613e92565b6040518363ffffffff1660e01b815260040161343e929190614052565b60206040518083038186803b15801561345657600080fd5b505afa15801561346a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348e9190613e92565b90505b600061349c30611901565b90506134bd30737a250d5630b4cf539739df2c5dacb4c659f2488d83612907565b836001600160a01b031663f305d7194730846000806134da61288e565b426040518863ffffffff1660e01b81526004016134fc969594939291906140ce565b6060604051808303818588803b15801561351557600080fd5b505af1158015613529573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061354e9190614011565b5050506135cb82856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561358e57600080fd5b505afa1580156135a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c69190613e92565b6135fd565b50600580546001600160a01b0319166001600160a01b03929092169190911790555050600f805460ff60a81b19169055565b613606826125e7565b156136235760405162461bcd60e51b8152600401610bad90614793565b6001600160a01b0382166000818152600460205260408120805460ff1916600190811790915560028054918201815582527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b03191690921790915580806136948585611ff3565b6040805160c0810182526001600160a01b0398891681526020808201868152828401868152606084019586526080840197885260a084019687529b8b16600090815260039283905293909320915182546001600160a01b0319169a16999099178155905160018201559751600289015551958701959095555160048601555050905160059092019190915550565b600061372c611063565b9050600061373a8383612812565b6001600160a01b03851660009081526020819052604090205490915061376090826127a5565b6001600160a01b038516600090815260208190526040902055600c5461378690846127a5565b600c5550505050565b60408051808201909152600481526314d614d560e21b602082015290565b6137b6816125e7565b6137d25760405162461bcd60e51b8152600401610bad9061468f565b60005b600254811015610c7c57816001600160a01b0316600282815481106137f657fe5b6000918252602090912001546001600160a01b031614156138e95760028054600019810190811061382357fe5b600091825260209091200154600280546001600160a01b03909216918390811061384957fe5b6000918252602080832090910180546001600160a01b039485166001600160a01b031991821617909155928516825260048082526040808420805460ff1916905560039283905283208054909416845560018401839055600280850184905591840183905583018290556005909201558054806138c257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610c7c565b6001016137d5565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600081836139345760405162461bcd60e51b8152600401610bad9190614178565b50600083858161394057fe5b0495945050505050565b6001600160a01b0392831660009081526001602090815260408083209490951682529290925291902055565b61397e613dfe565b60005b6002548110156121d157600360006002838154811061399c57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206001015460036000600284815481106139ef57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181206004019190915560028054600392919084908110613a2d57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600201546003600060028481548110613a8057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902060050155600101613981565b6001600160a01b038082166000908152600360205260408120549091829182918291613ade91879116611ff3565b6001600160a01b03979097166000908152600360208190526040909120908101805490899055600182019390935560020155909410949350505050565b60006002613b28856125e7565b15613b44578215613b3b57506003613b3f565b5060015b613b69565b613b4c6128b0565b6001600160a01b0316856001600160a01b03161415613b69575060035b949350505050565b6001600160a01b0382166000908152600360205260408120600181015460058201546004830154600290930154849384938493613bbc939192610d7b928391606491610d7591612812565b90506000613bd36064610d7b612710610b5e6128c8565b821115613c0a576000613be68380612812565b9050613c02612710610d7b613bfb848361284c565b8a90612812565b915050613c25565b613c22612710610d7b613c1b6128c8565b8990612812565b90505b613c3d612710610d7b613c366128cd565b8490612812565b613c55612710610d7b613c4e6128cd565b8590612812565b90955093509150509250925092565b6000806000613c71611063565b90506000613c7e866125e7565b15613cce576001600160a01b0386166000908152600360205260409020600481015460028201546005830154600190930154613cc793610d7b92918391606491610d7591612812565b9050613d19565b600580546001600160a01b031660009081526003602052604090206004810154600282015492820154600190920154613d16939192610d7b92918391606491610d7591612812565b90505b6000613d2e6064610d7b612710610b5e6128c8565b821115613d8a576000613d418380612812565b9050613d56612710610d7b613bfb848361284c565b9150613d69612710610d7b613bfb6128d2565b821115613d8457613d81612710610d7b613bfb6128d2565b91505b50613d9e565b613d9b612710610d7b613c1b6128c8565b90505b80613da98185612812565b945094505050509250929050565b6000806000613dc4611063565b90506000613de0612710610d7b613dd96128d8565b8890612812565b905080613ded8184612812565b935093505050915091565b615b2590565b42600655565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060006001600160a01b0316815260200160008152602001600081526020016000151581525090565b600060208284031215613e87578081fd5b813561194281614904565b600060208284031215613ea3578081fd5b815161194281614904565b60008060408385031215613ec0578081fd5b8235613ecb81614904565b91506020830135613edb81614904565b809150509250929050565b600080600060608486031215613efa578081fd5b8335613f0581614904565b92506020840135613f1581614904565b929592945050506040919091013590565b60008060408385031215613f38578182fd5b8235613f4381614904565b946020939093013593505050565b600080600060608486031215613f65578283fd5b8335613f7081614904565b95602085013595506040909401359392505050565b600060208284031215613f96578081fd5b813561194281614919565b600060208284031215613fb2578081fd5b815161194281614919565b600060208284031215613fce578081fd5b5035919050565b600060208284031215613fe6578081fd5b5051919050565b60008060408385031215613fff578182fd5b823591506020830135613edb81614904565b600080600060608486031215614025578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6001600160a01b03949094168452602084019290925260408301521515606082015260800190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b818110156141a457858101830151858201604001528201614188565b818111156141b55783604083870101525b50601f01601f1916929092016040019392505050565b602080825260169082015275416d6f756e7420657863656564732062616c616e636560501b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b60208082526018908201527f43616e6e6f74206d696e7420706f73742070726573616c650000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a6e6f742070726573616c6560a81b604082015260600190565b6020808252601c908201527f43616c6c657220686173206e6f206c6f636b65642062616c616e636500000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60208082526023908201527f54686973207472616e6368652063616e6e6f7420626520756e6c6f636b6564206040820152621e595d60ea1b606082015260800190565b6020808252600e908201526d30b63932b0b23c9039b2ba3a32b960911b604082015260600190565b6020808252600c908201526b283932b9b0b6329037bb32b960a11b604082015260600190565b6020808252818101527f416d6f756e7420657863656564732074686520746f6b656e2062616c616e6365604082015260600190565b60208082526014908201527350726573616c652079657420746f20636c6f736560601b604082015260600190565b60208082526025908201527f596f7520617265206e6f7420746865206f776e6572206f662074686973207472604082015264616e63686560d81b606082015260800190565b6020808252600b908201526a6e6f74207461786c65737360a81b604082015260600190565b6020808252601c908201527f50726573616c6520697320616c726561647920636f6d706c6574656400000000604082015260600190565b60208082526024908201527f54686973207472616e6368652068617320616c7265616479206265656e2076656040820152631cdd195960e21b606082015260800190565b6020808252600a90820152693737ba1039b2ba3a32b960b11b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f546f74616c20737570706c7920697320616c7265616479206d696e7465640000604082015260600190565b60208082526024908201527f5468697320706f6f6c2069732063757272656e746c79206e6f7420737570706f6040820152631c9d195960e21b606082015260800190565b6020808252601f908201527f416d6f756e74206578636565647320756e6c6f636b65642062616c616e636500604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f5468697320706f6f6c20697320616c726561647920737570706f727465640000604082015260600190565b60208082526026908201527f54686973207472616e6368652068617320616c7265616479206265656e20756e6040820152651b1bd8dad95960d21b606082015260800190565b6020808252601a908201527f4574682070616972696e6720646f6573206e6f74206578697374000000000000604082015260600190565b6020808252600f908201526e1399595908184818dbdb9d1c9858dd608a1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156148bf5784516001600160a01b03168352938301939183019160010161489a565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b6001600160a01b03811681146121d157600080fd5b80151581146121d157600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205832fec2470cb52a9cd3bb5f3c2df9a59eb4a24b7ead6b2acc0c124f40ed43aa64736f6c634300060c00336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220c801075779afd134169e01f47939ba0b0e2651e333b9d042d9e3967b7bd7030b64736f6c634300060c0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x60806040526004361061038c5760003560e01c806384955c88116101dc578063bef2112411610102578063d825589b116100a0578063ec2b4e361161006f578063ec2b4e36146109df578063f0e0d14e146109ff578063f2fde38b14610a1f578063f9b7250c14610a3f5761038c565b8063d825589b1461095f578063db7f521a1461097f578063dd62ed3e1461099f578063e272b892146109bf5761038c565b8063c4e41b22116100dc578063c4e41b22146108f5578063cb4d31951461090a578063d5c258901461092a578063d5fcc7b61461093f5761038c565b8063bef2112414610886578063bf9a3a1b146108a6578063c4086893146108d55761038c565b8063a5a302d31161017a578063b21c327811610149578063b21c32781461081c578063b6333d831461083c578063b72455bd1461085c578063b97dd9e2146108715761038c565b8063a5a302d3146107b2578063a9059cbb146107c7578063ae2089ad146107e7578063b187bd26146108075761038c565b8063927ac386116101b6578063927ac386146107535780639358928b1461076857806395d89b411461077d578063a457c2d7146107925761038c565b806384955c88146106ec578063893987831461070c5780638da5cb5b1461073e5761038c565b80634cf73094116102c1578063715018a61161025f57806380af17991161022e57806380af17991461068257806380c2bbd21461069757806380dc74da146106b75780638484ed7e146106cc5761038c565b8063715018a61461060d5780637c2d0774146106225780637dff2680146106425780637e47d625146106625761038c565b8063522361461161029b5780635223614614610598578063524900b5146105b85780635d15d341146105cd57806370a08231146105ed5761038c565b80634cf73094146105435780634f78aa82146105635780635184cc43146105835761038c565b8063395093511161032e5780633f96440e116103085780633f96440e146104ce5780634028358a146104e357806340c10f191461050357806342b5f375146105235761038c565b806339509351146104825780633e6dfa36146104a25780633eedf63c146104c45761038c565b8063220659881161036a578063220659881461040b57806323b872dd1461042b57806323ecdf611461044b578063313ce567146104605761038c565b806306fdde0314610391578063095ea7b3146103bc57806318160ddd146103e9575b600080fd5b34801561039d57600080fd5b506103a6610a6f565b6040516103b39190614178565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004613f26565b610a7f565b6040516103b39190614164565b3480156103f557600080fd5b506103fe610a9d565b6040516103b3919061416f565b34801561041757600080fd5b506103dc610426366004613e76565b610aa7565b34801561043757600080fd5b506103dc610446366004613ee6565b610ac9565b34801561045757600080fd5b506103dc610b21565b34801561046c57600080fd5b50610475610b31565b6040516103b391906148f6565b34801561048e57600080fd5b506103dc61049d366004613f26565b610b3b565b3480156104ae57600080fd5b506104b7610b64565b6040516103b3919061403e565b6104cc610b6e565b005b3480156104da57600080fd5b506104b7610c2e565b3480156104ef57600080fd5b506104cc6104fe366004613eae565b610c3d565b34801561050f57600080fd5b506104cc61051e366004613f26565b610c80565b34801561052f57600080fd5b506103fe61053e366004613e76565b610d2c565b34801561054f57600080fd5b506104cc61055e366004613fed565b610df7565b34801561056f57600080fd5b506103fe61057e366004613e76565b610fd4565b34801561058f57600080fd5b506103fe611063565b3480156105a457600080fd5b506104cc6105b3366004613e76565b6110a2565b3480156105c457600080fd5b506104b76111bf565b3480156105d957600080fd5b506104cc6105e8366004613f26565b6111c9565b3480156105f957600080fd5b506103fe610608366004613e76565b611901565b34801561061957600080fd5b506104cc611949565b34801561062e57600080fd5b506104cc61063d366004613fbd565b6119c8565b34801561064e57600080fd5b506104b761065d366004613fbd565b611c15565b34801561066e57600080fd5b506104cc61067d366004613f85565b611c3f565b34801561068e57600080fd5b506104b7611c84565b3480156106a357600080fd5b506104cc6106b2366004613e76565b611c93565b3480156106c357600080fd5b506104b7611cf8565b3480156106d857600080fd5b506104cc6106e7366004613e76565b611d07565b3480156106f857600080fd5b506103fe610707366004613e76565b611d82565b34801561071857600080fd5b5061072c610727366004613e76565b611d9c565b6040516103b396959493929190614131565b34801561074a57600080fd5b506104b7611e28565b34801561075f57600080fd5b506103dc611e37565b34801561077457600080fd5b506103fe611e47565b34801561078957600080fd5b506103a6611e8b565b34801561079e57600080fd5b506103dc6107ad366004613f26565b611e95565b3480156107be57600080fd5b506104b7611ed1565b3480156107d357600080fd5b506103dc6107e2366004613f26565b611ee0565b3480156107f357600080fd5b506103fe610802366004613e76565b611ef4565b34801561081357600080fd5b506103dc611f0f565b34801561082857600080fd5b506103fe610837366004613eae565b611f1f565b34801561084857600080fd5b506103dc610857366004613e76565b611f4a565b34801561086857600080fd5b506103fe611f68565b34801561087d57600080fd5b506103fe611f6e565b34801561089257600080fd5b506104cc6108a1366004613e76565b611f74565b3480156108b257600080fd5b506108c66108c1366004613eae565b611ff3565b6040516103b3939291906148e0565b3480156108e157600080fd5b506103fe6108f0366004613e76565b612172565b34801561090157600080fd5b506103fe61218d565b34801561091657600080fd5b506104cc610925366004613e76565b612193565b34801561093657600080fd5b506103fe6121d4565b34801561094b57600080fd5b506104cc61095a366004613e76565b6121da565b34801561096b57600080fd5b506104cc61097a366004613f51565b61223d565b34801561098b57600080fd5b506104cc61099a366004613e76565b61244b565b3480156109ab57600080fd5b506103fe6109ba366004613eae565b612588565b3480156109cb57600080fd5b506104cc6109da366004613f85565b612594565b3480156109eb57600080fd5b506103dc6109fa366004613e76565b6125e7565b348015610a0b57600080fd5b506104cc610a1a366004613f26565b612605565b348015610a2b57600080fd5b506104cc610a3a366004613e76565b61265f565b348015610a4b57600080fd5b50610a5f610a5a366004613fbd565b612716565b6040516103b39493929190614109565b6060610a796128dd565b90505b90565b6000610a93610a8c612903565b8484612907565b5060015b92915050565b6000610a7961218d565b6001600160a01b03811660009081526009602052604090205460ff165b919050565b6000610ad68484846129ae565b610b1784610ae2612903565b610b128560405180606001604052806028815260200161492860289139610b0b8a610837612903565b9190612fb1565b612907565b5060019392505050565b600f54600160a81b900460ff1690565b6000610a79612fdd565b6000610a93610b48612903565b84610b1285610b5e610b58612903565b89611f1f565b906127a5565b6000610a79612fe2565b610b76610c2e565b6001600160a01b0316610b87612903565b6001600160a01b031614610bb65760405162461bcd60e51b8152600401610bad9061431d565b60405180910390fd5b610bbe611e37565b15610bdb5760405162461bcd60e51b8152600401610bad90614450565b610be36128a6565b610beb610a9d565b1115610c095760405162461bcd60e51b8152600401610bad90614658565b610c11612ffa565b600e805460ff60a01b1916600160a01b179055610c2c613175565b565b600f546001600160a01b031690565b610c45612903565b6011546001600160a01b03908116911614610c725760405162461bcd60e51b8152600401610bad90614623565b610c7c82826135fd565b5050565b610c88610c2e565b6001600160a01b0316610c99612903565b6001600160a01b031614610cbf5760405162461bcd60e51b8152600401610bad9061431d565b610cc7611e37565b15610ce45760405162461bcd60e51b8152600401610bad90614450565b610cee8282613722565b816001600160a01b031660006001600160a01b031660008051602061495083398151915283604051610d20919061416f565b60405180910390a35050565b6001600160a01b03811660009081526003602052604081206004810154600282015460058301546001909301548493610d819392610d7b9290918391606491610d759190612812565b90612812565b906127ca565b90506000610d986064610d7b612710610b5e6128c8565b821115610de6576000610dab8380612812565b9050610db98161271061284c565b9150610dc36128d2565b821115610ddc57610dd26128d2565b9350505050610ac4565b509150610ac49050565b610dee6128c8565b92505050610ac4565b610dff612903565b6011546001600160a01b03908116911614610e2c5760405162461bcd60e51b8152600401610bad90614623565b600080600080610e3b86612716565b93509350935093508015156001151514610e675760405162461bcd60e51b8152600401610bad906147ca565b428211610e865760405162461bcd60e51b8152600401610bad9061457a565b6001600160a01b038416600090815260086020526040902054610ea9908461284c565b6001600160a01b038086166000908152600860205260408082209390935590871681522054610ed890846127a5565b6001600160a01b038087166000908152600860205260408082209390935590861681522054610f22576001600160a01b0384166000908152600960205260409020805460ff191690555b6001600160a01b0385166000908152600960205260409020805460ff191660011790556007805486919088908110610f5657fe5b6000918252602082206004919091020180546001600160a01b0319166001600160a01b039390931692909217909155610f8d611063565b90506001600160a01b03808716908616600080516020614950833981519152610fb687856127ca565b604051610fc3919061416f565b60405180910390a350505050505050565b6001600160a01b0381166000908152600360205260408120600181015460058201546004830154600290930154849361101d9392610d7b9290918391606491610d759190612812565b90506110326064610d7b612710610b5e6128c8565b8111156110535760006110458280612812565b9050610dee8161271061284c565b61105b6128c8565b915050610ac4565b600e54600090600160a01b900460ff161561108e57600c54600b54611087916127ca565b9050610a7c565b6110876110996128a6565b600b54906127ca565b6110aa612903565b6011546001600160a01b039081169116146110d75760405162461bcd60e51b8152600401610bad90614623565b6110e08161279f565b6110fc5760405162461bcd60e51b8152600401610bad90614847565b600d80546001600160a01b039081166000908152601060205260408120805460ff19169055915461112d9116611901565b9050801561118457600d5461114c906001600160a01b031683836129ae565b600d546040516001600160a01b038085169216906000805160206149508339815191529061117b90859061416f565b60405180910390a35b50600d80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055565b6000610a796128b0565b6111d1612903565b6011546001600160a01b039081169116146111fe5760405162461bcd60e51b8152600401610bad90614623565b600f805460ff60a81b1916600160a81b179055600061121b6111bf565b90506000611227610b64565b60405163e6a4390560e01b815290915060009081906001600160a01b0384169063e6a439059061125d9089903090600401614052565b60206040518083038186803b15801561127557600080fd5b505afa158015611289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ad9190613e92565b6001600160a01b03161415611343576040516364e329cb60e11b81526001600160a01b0383169063c9c65396906112ea9088903090600401614052565b602060405180830381600087803b15801561130457600080fd5b505af1158015611318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133c9190613e92565b90506113c4565b60405163e6a4390560e01b81526001600160a01b0383169063e6a43905906113719088903090600401614052565b60206040518083038186803b15801561138957600080fd5b505afa15801561139d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c19190613e92565b90505b60006001600160a01b0316826001600160a01b031663e6a4390587866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561141857600080fd5b505afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190613e92565b6040518363ffffffff1660e01b815260040161146d929190614052565b60206040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190613e92565b6001600160a01b031614156114e45760405162461bcd60e51b8152600401610bad90614810565b836114ee30611901565b101561150c5760405162461bcd60e51b8152600401610bad90614476565b60006115198560026127ca565b90506000611527868361284c565b90506000876001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611557919061403e565b60206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a79190613fd5565b604080516003808252608082019092529192506060919060208201838036833701905050905030816000815181106115db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166c9190613e92565b8160018151811061167957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088816002815181106116a757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506116d2308886612907565b604051635c11d79560e01b81526001600160a01b03881690635c11d79590611707908790600090869030904290600401614870565b600060405180830381600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b5050505060006117c1838b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161176b919061403e565b60206040518083038186803b15801561178357600080fd5b505afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb9190613fd5565b9061284c565b90506117ce308986612907565b60405163095ea7b360e01b81526001600160a01b038b169063095ea7b3906117fc908b9085906004016140b5565b602060405180830381600087803b15801561181657600080fd5b505af115801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e9190613fa1565b5060405162e8e33760e81b81526001600160a01b0389169063e8e33700906118899030908e908990879060009081908690429060040161406c565b606060405180830381600087803b1580156118a357600080fd5b505af11580156118b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118db9190614011565b5050506118e8868b6135fd565b5050600f805460ff60a81b191690555050505050505050565b60008061190c611063565b905061191783610aa7565b156119355761105b81610d7b61192c86612172565b610b5e87611ef4565b61194281610d7b85611ef4565b9392505050565b611951612903565b6011546001600160a01b0390811691161461197e5760405162461bcd60e51b8152600401610bad90614623565b6011546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601180546001600160a01b0319169055565b6119d3610426612903565b6119ef5760405162461bcd60e51b8152600401610bad90614342565b6000806000806119fe85612716565b935093509350935042821115611a265760405162461bcd60e51b8152600401610bad906143e5565b611a2e612903565b6001600160a01b0316846001600160a01b031614611a5e5760405162461bcd60e51b8152600401610bad906144d9565b600181151514611a805760405162461bcd60e51b8152600401610bad906147ca565b600a54611a8d908461284c565b600a55611abf83600080611a9f612903565b6001600160a01b03168152602081019190915260400160002054906127a5565b600080611aca612903565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550611b1e8360086000611afe612903565b6001600160a01b031681526020810191909152604001600020549061284c565b60086000611b2a612903565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060086000611b5c612903565b6001600160a01b03166001600160a01b031681526020019081526020016000205411611bb957600060096000611b90612903565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b600060078681548110611bc857fe5b906000526020600020906004020160010181905550600060078681548110611bec57fe5b60009182526020909120600490910201600301805460ff19169115159190911790555050505050565b600060028281548110611c2457fe5b6000918252602090912001546001600160a01b031692915050565b611c4a610857612903565b611c665760405162461bcd60e51b8152600401610bad9061451e565b600f8054911515600160a81b0260ff60a81b19909216919091179055565b600e546001600160a01b031690565b6001600160a01b03808216600090815260036020526040812054909182918291611cbf91869116611ff3565b6001600160a01b039096166000908152600360208190526040909120908101969096556001860191909155600290940193909355505050565b600d546001600160a01b031690565b611d0f612903565b6011546001600160a01b03908116911614611d3c5760405162461bcd60e51b8152600401610bad90614623565b611d4581611f4a565b611d615760405162461bcd60e51b8152600401610bad906145be565b6001600160a01b03166000908152601060205260409020805460ff19169055565b600080611d8d611063565b905061194281610d7b85611ef4565b600080600080600080611dad613e04565b505050506001600160a01b03938416600090815260036020818152604092839020835160c0810185528154909816808952600182015492890183905260028201549489018590529281015460608901819052600482015460808a0181905260059092015460a090990189905292989197939650919450909250565b6011546001600160a01b031690565b600e54600160a01b900460ff1690565b600080611e52611063565b9050611e85611e62610608611c84565b6117bb611e6e30611901565b6117bb611e7d86610d7b6121d4565b6117bb61218d565b91505090565b6060610a7961378f565b6000610a93611ea2612903565b84610b128560405180606001604052806025815260200161497060259139610b0b611ecb612903565b8a611f1f565b6005546001600160a01b031690565b6000610a93611eed612903565b84846129ae565b6001600160a01b031660009081526020819052604090205490565b600f54600160a01b900460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b031660009081526010602052604090205460ff1690565b600b5490565b60065490565b611f7c612903565b6011546001600160a01b03908116911614611fa95760405162461bcd60e51b8152600401610bad90614623565b611fb281611f4a565b15611fcf5760405162461bcd60e51b8152600401610bad90614428565b6001600160a01b03166000908152601060205260409020805460ff19166001179055565b600080600080856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561203257600080fd5b505afa158015612046573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206a9190613fd5565b6040516370a0823160e01b815290915060009030906370a0823190612093908a9060040161403e565b60206040518083038186803b1580156120ab57600080fd5b505afa1580156120bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e39190613fd5565b90506000866001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401612113919061403e565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121639190613fd5565b91989197509195509350505050565b6001600160a01b031660009081526008602052604090205490565b600c5490565b61219b612903565b6011546001600160a01b039081169116146121c85760405162461bcd60e51b8152600401610bad90614623565b6121d1816137ad565b50565b600a5490565b6121e2612903565b6011546001600160a01b0390811691161461220f5760405162461bcd60e51b8152600401610bad90614623565b612217611e37565b156122345760405162461bcd60e51b8152600401610bad90614543565b6121d1816138f1565b612245612903565b6011546001600160a01b039081169116146122725760405162461bcd60e51b8152600401610bad90614623565b61227a611e37565b156122975760405162461bcd60e51b8152600401610bad9061425e565b60006122a1611063565b905060006122af8383612812565b604080516080810182526001600160a01b0388811680835260208084018681528486018b8152600160608701818152600780549283018155600090815297517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688600490930292830180546001600160a01b031916919098161790965591517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689830155517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a82015592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b909301805460ff19169315159390931790925582526008905220549091506123c190826127a5565b6001600160a01b0386166000908152600860209081526040808320939093556009905220805460ff19166001179055600a546123fd90826127a5565b600a55600c5461240d90846127a5565b600c556040516001600160a01b038616906000906000805160206149508339815191529061243c90879061416f565b60405180910390a35050505050565b612453612903565b6011546001600160a01b039081169116146124805760405162461bcd60e51b8152600401610bad90614623565b600f805460ff60a81b1916600160a81b17905561249c8161279f565b6124b85760405162461bcd60e51b8152600401610bad90614847565b600e80546001600160a01b039081166000908152601060205260408120805460ff1916905591546124e99116611901565b9050801561254057600e54612508906001600160a01b031683836129ae565b600e546040516001600160a01b038085169216906000805160206149508339815191529061253790859061416f565b60405180910390a35b50600e80546001600160a01b039092166001600160a01b0319909216821790556000908152601060205260409020805460ff19166001179055600f805460ff60a81b19169055565b60006119428383611f1f565b61259c612903565b6011546001600160a01b039081169116146125c95760405162461bcd60e51b8152600401610bad90614623565b600f8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b61260d612903565b6011546001600160a01b0390811691161461263a5760405162461bcd60e51b8152600401610bad90614623565b612642611e37565b15610ce45760405162461bcd60e51b8152600401610bad9061425e565b612667612903565b6011546001600160a01b039081169116146126945760405162461bcd60e51b8152600401610bad90614623565b6001600160a01b0381166126ba5760405162461bcd60e51b8152600401610bad90614295565b6011546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080612724613e43565b6007868154811061273157fe5b60009182526020918290206040805160808101825260049390930290910180546001600160a01b03168084526001820154948401859052600282015492840183905260039091015460ff1615156060909301839052999298509650945092505050565b6507326b47ffff1990565b3b151590565b6000828201838110156119425760405162461bcd60e51b8152600401610bad90614379565b600061194283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613913565b61070890565b60008261282157506000610a97565b8282028284828161282e57fe5b04146119425760405162461bcd60e51b8152600401610bad906145e2565b600061194283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fb1565b73c540da538385ee0aa19dbdff372eddb9bb6f47fa90565b655af3107a400090565b737a250d5630b4cf539739df2c5dacb4c659f2488d90565b606490565b60fa90565b6103e890565b603290565b60408051808201909152600c81526b537065656458537461626c6560a01b602082015290565b3390565b6001600160a01b03831661292d5760405162461bcd60e51b8152600401610bad9061474f565b6001600160a01b0382166129535760405162461bcd60e51b8152600401610bad906142db565b61295e83838361394a565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129a1919061416f565b60405180910390a3505050565b6129b6611f0f565b156129d35760405162461bcd60e51b8152600401610bad9061423e565b6001600160a01b0383166129f95760405162461bcd60e51b8152600401610bad9061470a565b6001600160a01b038216612a1f5760405162461bcd60e51b8152600401610bad906141fb565b60008111612a3f5760405162461bcd60e51b8152600401610bad906143b0565b612a4883611901565b811115612a675760405162461bcd60e51b8152600401610bad906141cb565b612a7083611d82565b811115612a8f5760405162461bcd60e51b8152600401610bad906146d3565b612a97611e37565b612ab35760405162461bcd60e51b8152600401610bad906144ab565b612ac6612abe61280c565b610b5e611f6e565b421115612ad557612ad5613976565b6000612adf611063565b90506000612aed8383612812565b90506000612af9610b21565b15612b0657506003612b66565b6000612b11876125e7565b15612b2657612b1f87613ab0565b9050612b57565b612b2f866125e7565b15612b4257612b3d86611c93565b612b57565b600554612b57906001600160a01b0316611c93565b612b62878783613b1b565b9150505b8060011415612d41576000806000612b7e8988613b71565b6001600160a01b038c166000908152602081905260409020549295509093509150612ba9908661284c565b6001600160a01b03808b1660009081526020819052604080822093909355908a1681522054612bd890866127a5565b6001600160a01b038916600090815260208190526040902055612c09612bfe8488612812565b600080611a9f611c84565b600080612c14611c84565b6001600160a01b03168152602081019190915260400160002055612c46612c3b8388612812565b600080611a9f61288e565b600080612c5161288e565b6001600160a01b03168152602081019190915260400160002055600c54612c7890826127a5565b600c81905550876001600160a01b0316896001600160a01b031660008051602061495083398151915289604051612caf919061416f565b60405180910390a3612cbf611c84565b6001600160a01b031660006001600160a01b031660008051602061495083398151915285604051612cf0919061416f565b60405180910390a3612d0061288e565b6001600160a01b031660006001600160a01b031660008051602061495083398151915284604051612d31919061416f565b60405180910390a3505050612fa9565b8060021415612f0557600080612d578787613c64565b91509150600080612d6788613db7565b90925090506000612d7c836117bb8b8861284c565b90506000612d8a828a612812565b6001600160a01b038d16600090815260208190526040902054909150612db0908961284c565b6001600160a01b03808e1660009081526020819052604080822093909355908d1681522054612ddf90826127a5565b6001600160a01b03808d1660009081526020819052604080822093909355600d5490911681522054612e1190846127a5565b600d546001600160a01b0316600090815260208190526040902055600c54612e39908761284c565b600c55600b54612e49908661284c565b600b819055508a6001600160a01b03168c6001600160a01b031660008051602061495083398151915284604051612e80919061416f565b60405180910390a360006001600160a01b03168c6001600160a01b031660008051602061495083398151915288604051612eba919061416f565b60405180910390a3600d546040516001600160a01b03918216918e169060008051602061495083398151915290612ef290889061416f565b60405180910390a3505050505050612fa9565b8060031415612fa9576001600160a01b038616600090815260208190526040902054612f31908361284c565b6001600160a01b038088166000908152602081905260408082209390935590871681522054612f6090836127a5565b6001600160a01b03808716600081815260208190526040908190209390935591519088169060008051602061495083398151915290612fa090889061416f565b60405180910390a35b505050505050565b60008184841115612fd55760405162461bcd60e51b8152600401610bad9190614178565b505050900390565b600990565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f90565b613002611e37565b1561301f5760405162461bcd60e51b8152600401610bad9061425e565b61303661302a61288e565b6509184e72a000613722565b61303e61288e565b6001600160a01b03166108fc6130554760046127ca565b6040518115909202916000818181858888f1935050505015801561307d573d6000803e3d6000fd5b50600061309361308b610a9d565b6117bb6128a6565b905060006130b16130a2613df8565b610d754764174876e8006127ca565b905080821115613101576130cf60006130ca848461284c565b613722565b6000806000805160206149508339815191526130eb858561284c565b6040516130f8919061416f565b60405180910390a35b61310b3082613722565b61311361288e565b6001600160a01b031660006001600160a01b03166000805160206149508339815191526509184e72a00060405161314a919061416f565b60405180910390a3604051309060009060008051602061495083398151915290610d2090859061416f565b600f805460ff60a81b1916600160a81b17905560006131926111bf565b9050600061319e610b64565b90506000806001600160a01b0316826001600160a01b031663e6a43905856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131f457600080fd5b505afa158015613208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322c9190613e92565b306040518363ffffffff1660e01b815260040161324a929190614052565b60206040518083038186803b15801561326257600080fd5b505afa158015613276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329a9190613e92565b6001600160a01b031614156133a057816001600160a01b031663c9c65396846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156132f157600080fd5b505afa158015613305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133299190613e92565b306040518363ffffffff1660e01b8152600401613347929190614052565b602060405180830381600087803b15801561336157600080fd5b505af1158015613375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133999190613e92565b9050613491565b816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156133e957600080fd5b505afa1580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134219190613e92565b6040518363ffffffff1660e01b815260040161343e929190614052565b60206040518083038186803b15801561345657600080fd5b505afa15801561346a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348e9190613e92565b90505b600061349c30611901565b90506134bd30737a250d5630b4cf539739df2c5dacb4c659f2488d83612907565b836001600160a01b031663f305d7194730846000806134da61288e565b426040518863ffffffff1660e01b81526004016134fc969594939291906140ce565b6060604051808303818588803b15801561351557600080fd5b505af1158015613529573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061354e9190614011565b5050506135cb82856001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561358e57600080fd5b505afa1580156135a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c69190613e92565b6135fd565b50600580546001600160a01b0319166001600160a01b03929092169190911790555050600f805460ff60a81b19169055565b613606826125e7565b156136235760405162461bcd60e51b8152600401610bad90614793565b6001600160a01b0382166000818152600460205260408120805460ff1916600190811790915560028054918201815582527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b03191690921790915580806136948585611ff3565b6040805160c0810182526001600160a01b0398891681526020808201868152828401868152606084019586526080840197885260a084019687529b8b16600090815260039283905293909320915182546001600160a01b0319169a16999099178155905160018201559751600289015551958701959095555160048601555050905160059092019190915550565b600061372c611063565b9050600061373a8383612812565b6001600160a01b03851660009081526020819052604090205490915061376090826127a5565b6001600160a01b038516600090815260208190526040902055600c5461378690846127a5565b600c5550505050565b60408051808201909152600481526314d614d560e21b602082015290565b6137b6816125e7565b6137d25760405162461bcd60e51b8152600401610bad9061468f565b60005b600254811015610c7c57816001600160a01b0316600282815481106137f657fe5b6000918252602090912001546001600160a01b031614156138e95760028054600019810190811061382357fe5b600091825260209091200154600280546001600160a01b03909216918390811061384957fe5b6000918252602080832090910180546001600160a01b039485166001600160a01b031991821617909155928516825260048082526040808420805460ff1916905560039283905283208054909416845560018401839055600280850184905591840183905583018290556005909201558054806138c257fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610c7c565b6001016137d5565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600081836139345760405162461bcd60e51b8152600401610bad9190614178565b50600083858161394057fe5b0495945050505050565b6001600160a01b0392831660009081526001602090815260408083209490951682529290925291902055565b61397e613dfe565b60005b6002548110156121d157600360006002838154811061399c57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206001015460036000600284815481106139ef57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181206004019190915560028054600392919084908110613a2d57fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600201546003600060028481548110613a8057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902060050155600101613981565b6001600160a01b038082166000908152600360205260408120549091829182918291613ade91879116611ff3565b6001600160a01b03979097166000908152600360208190526040909120908101805490899055600182019390935560020155909410949350505050565b60006002613b28856125e7565b15613b44578215613b3b57506003613b3f565b5060015b613b69565b613b4c6128b0565b6001600160a01b0316856001600160a01b03161415613b69575060035b949350505050565b6001600160a01b0382166000908152600360205260408120600181015460058201546004830154600290930154849384938493613bbc939192610d7b928391606491610d7591612812565b90506000613bd36064610d7b612710610b5e6128c8565b821115613c0a576000613be68380612812565b9050613c02612710610d7b613bfb848361284c565b8a90612812565b915050613c25565b613c22612710610d7b613c1b6128c8565b8990612812565b90505b613c3d612710610d7b613c366128cd565b8490612812565b613c55612710610d7b613c4e6128cd565b8590612812565b90955093509150509250925092565b6000806000613c71611063565b90506000613c7e866125e7565b15613cce576001600160a01b0386166000908152600360205260409020600481015460028201546005830154600190930154613cc793610d7b92918391606491610d7591612812565b9050613d19565b600580546001600160a01b031660009081526003602052604090206004810154600282015492820154600190920154613d16939192610d7b92918391606491610d7591612812565b90505b6000613d2e6064610d7b612710610b5e6128c8565b821115613d8a576000613d418380612812565b9050613d56612710610d7b613bfb848361284c565b9150613d69612710610d7b613bfb6128d2565b821115613d8457613d81612710610d7b613bfb6128d2565b91505b50613d9e565b613d9b612710610d7b613c1b6128c8565b90505b80613da98185612812565b945094505050509250929050565b6000806000613dc4611063565b90506000613de0612710610d7b613dd96128d8565b8890612812565b905080613ded8184612812565b935093505050915091565b615b2590565b42600655565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060006001600160a01b0316815260200160008152602001600081526020016000151581525090565b600060208284031215613e87578081fd5b813561194281614904565b600060208284031215613ea3578081fd5b815161194281614904565b60008060408385031215613ec0578081fd5b8235613ecb81614904565b91506020830135613edb81614904565b809150509250929050565b600080600060608486031215613efa578081fd5b8335613f0581614904565b92506020840135613f1581614904565b929592945050506040919091013590565b60008060408385031215613f38578182fd5b8235613f4381614904565b946020939093013593505050565b600080600060608486031215613f65578283fd5b8335613f7081614904565b95602085013595506040909401359392505050565b600060208284031215613f96578081fd5b813561194281614919565b600060208284031215613fb2578081fd5b815161194281614919565b600060208284031215613fce578081fd5b5035919050565b600060208284031215613fe6578081fd5b5051919050565b60008060408385031215613fff578182fd5b823591506020830135613edb81614904565b600080600060608486031215614025578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6001600160a01b03949094168452602084019290925260408301521515606082015260800190565b6001600160a01b03969096168652602086019490945260408501929092526060840152608083015260a082015260c00190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b818110156141a457858101830151858201604001528201614188565b818111156141b55783604083870101525b50601f01601f1916929092016040019392505050565b602080825260169082015275416d6f756e7420657863656564732062616c616e636560501b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b60208082526018908201527f43616e6e6f74206d696e7420706f73742070726573616c650000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a6e6f742070726573616c6560a81b604082015260600190565b6020808252601c908201527f43616c6c657220686173206e6f206c6f636b65642062616c616e636500000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f604082015260600190565b60208082526023908201527f54686973207472616e6368652063616e6e6f7420626520756e6c6f636b6564206040820152621e595d60ea1b606082015260800190565b6020808252600e908201526d30b63932b0b23c9039b2ba3a32b960911b604082015260600190565b6020808252600c908201526b283932b9b0b6329037bb32b960a11b604082015260600190565b6020808252818101527f416d6f756e7420657863656564732074686520746f6b656e2062616c616e6365604082015260600190565b60208082526014908201527350726573616c652079657420746f20636c6f736560601b604082015260600190565b60208082526025908201527f596f7520617265206e6f7420746865206f776e6572206f662074686973207472604082015264616e63686560d81b606082015260800190565b6020808252600b908201526a6e6f74207461786c65737360a81b604082015260600190565b6020808252601c908201527f50726573616c6520697320616c726561647920636f6d706c6574656400000000604082015260600190565b60208082526024908201527f54686973207472616e6368652068617320616c7265616479206265656e2076656040820152631cdd195960e21b606082015260800190565b6020808252600a90820152693737ba1039b2ba3a32b960b11b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f546f74616c20737570706c7920697320616c7265616479206d696e7465640000604082015260600190565b60208082526024908201527f5468697320706f6f6c2069732063757272656e746c79206e6f7420737570706f6040820152631c9d195960e21b606082015260800190565b6020808252601f908201527f416d6f756e74206578636565647320756e6c6f636b65642062616c616e636500604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f5468697320706f6f6c20697320616c726561647920737570706f727465640000604082015260600190565b60208082526026908201527f54686973207472616e6368652068617320616c7265616479206265656e20756e6040820152651b1bd8dad95960d21b606082015260800190565b6020808252601a908201527f4574682070616972696e6720646f6573206e6f74206578697374000000000000604082015260600190565b6020808252600f908201526e1399595908184818dbdb9d1c9858dd608a1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156148bf5784516001600160a01b03168352938301939183019160010161489a565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b6001600160a01b03811681146121d157600080fd5b80151581146121d157600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205832fec2470cb52a9cd3bb5f3c2df9a59eb4a24b7ead6b2acc0c124f40ed43aa64736f6c634300060c0033

Deployed Bytecode Sourcemap

28920:16290:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29659:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31230:161;;;;;;;;;;-1:-1:-1;31230:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29990:104::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19200:122::-;;;;;;;;;;-1:-1:-1;19200:122:0;;;;;:::i;:::-;;:::i;31399:314::-;;;;;;;;;;-1:-1:-1;31399:314:0;;;;;:::i;:::-;;:::i;20132:82::-;;;;;;;;;;;;;:::i;29881:97::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31721:219::-;;;;;;;;;;-1:-1:-1;31721:219:0;;;;;:::i;:::-;;:::i;20491:139::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36946:243::-;;;:::i;:::-;;19944:96;;;;;;;;;;;;;:::i;43402:135::-;;;;;;;;;;-1:-1:-1;43402:135:0;;;;;:::i;:::-;;:::i;32226:149::-;;;;;;;;;;-1:-1:-1;32226:149:0;;;;;:::i;:::-;;:::i;24262:772::-;;;;;;;;;;-1:-1:-1;24262:772:0;;;;;:::i;:::-;;:::i;39813:843::-;;;;;;;;;;-1:-1:-1;39813:843:0;;;;;:::i;:::-;;:::i;23698:558::-;;;;;;;;;;-1:-1:-1;23698:558:0;;;;;:::i;:::-;;:::i;20636:233::-;;;;;;;;;;;;;:::i;44107:509::-;;;;;;;;;;-1:-1:-1;44107:509:0;;;;;:::i;:::-;;:::i;20346:139::-;;;;;;;;;;;;;:::i;41671:1723::-;;;;;;;;;;-1:-1:-1;41671:1723:0;;;;;:::i;:::-;;:::i;30375:317::-;;;;;;;;;;-1:-1:-1;30375:317:0;;;;;:::i;:::-;;:::i;10756:148::-;;;;;;;;;;;;;:::i;38909:896::-;;;;;;;;;;-1:-1:-1;38909:896:0;;;;;:::i;:::-;;:::i;18092:120::-;;;;;;;;;;-1:-1:-1;18092:120:0;;;;;:::i;:::-;;:::i;43840:84::-;;;;;;;;;;-1:-1:-1;43840:84:0;;;;;:::i;:::-;;:::i;19750:92::-;;;;;;;;;;;;;:::i;26799:369::-;;;;;;;;;;-1:-1:-1;26799:369:0;;;;;:::i;:::-;;:::i;19640:104::-;;;;;;;;;;;;;:::i;43932:167::-;;;;;;;;;;-1:-1:-1;43932:167:0;;;;;:::i;:::-;;:::i;30704:191::-;;;;;;;;;;-1:-1:-1;30704:191:0;;;;;:::i;:::-;;:::i;18218:308::-;;;;;;;;;;-1:-1:-1;18218:308:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;10546:79::-;;;;;;;;;;;;;:::i;19848:90::-;;;;;;;;;;;;;:::i;30106:257::-;;;;;;;;;;;;;:::i;29768:101::-;;;;;;;;;;;;;:::i;31948:270::-;;;;;;;;;;-1:-1:-1;31948:270:0;;;;;:::i;:::-;;:::i;18652:85::-;;;;;;;;;;;;;:::i;30903:167::-;;;;;;;;;;-1:-1:-1;30903:167:0;;;;;:::i;:::-;;:::i;17815:122::-;;;;;;;;;;-1:-1:-1;17815:122:0;;;;;:::i;:::-;;:::i;20046:80::-;;;;;;;;;;;;;:::i;17943:142::-;;;;;;;;;;-1:-1:-1;17943:142:0;;;;;:::i;:::-;;:::i;20220:120::-;;;;;;;;;;-1:-1:-1;20220:120:0;;;;;:::i;:::-;;:::i;19442:92::-;;;;;;;;;;;;;:::i;18743:96::-;;;;;;;;;;;;;:::i;43664:168::-;;;;;;;;;;-1:-1:-1;43664:168:0;;;;;:::i;:::-;;:::i;20875:390::-;;;;;;;;;;-1:-1:-1;20875:390:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;19072:122::-;;;;;;;;;;-1:-1:-1;19072:122:0;;;;;:::i;:::-;;:::i;19540:94::-;;;;;;;;;;;;;:::i;43545:111::-;;;;;;;;;;-1:-1:-1;43545:111:0;;;;;:::i;:::-;;:::i;19328:108::-;;;;;;;;;;;;;:::i;36758:180::-;;;;;;;;;;-1:-1:-1;36758:180:0;;;;;:::i;:::-;;:::i;38000:643::-;;;;;;;;;;-1:-1:-1;38000:643:0;;;;;:::i;:::-;;:::i;44624:481::-;;;;;;;;;;-1:-1:-1;44624:481:0;;;;;:::i;:::-;;:::i;31078:144::-;;;;;;;;;;-1:-1:-1;31078:144:0;;;;;:::i;:::-;;:::i;45117:88::-;;;;;;;;;;-1:-1:-1;45117:88:0;;;;;:::i;:::-;;:::i;18532:114::-;;;;;;;;;;-1:-1:-1;18532:114:0;;;;;:::i;:::-;;:::i;38655:246::-;;;;;;;;;;-1:-1:-1;38655:246:0;;;;;:::i;:::-;;:::i;10910:244::-;;;;;;;;;;-1:-1:-1;10910:244:0;;;;;:::i;:::-;;:::i;18845:221::-;;;;;;;;;;-1:-1:-1;18845:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;29659:97::-;29696:13;29729:19;:17;:19::i;:::-;29722:26;;29659:97;;:::o;31230:161::-;31305:4;31322:39;31331:12;:10;:12::i;:::-;31345:7;31354:6;31322:8;:39::i;:::-;-1:-1:-1;31379:4:0;31230:161;;;;;:::o;29990:104::-;30043:7;30070:16;:14;:16::i;19200:122::-;-1:-1:-1;;;;;19288:26:0;;19264:4;19288:26;;;:17;:26;;;;;;;;19200:122;;;;:::o;31399:314::-;31497:4;31514:36;31524:6;31532:9;31543:6;31514:9;:36::i;:::-;31561:122;31570:6;31578:12;:10;:12::i;:::-;31592:90;31631:6;31592:90;;;;;;;;;;;;;;;;;:34;31606:6;31613:12;:10;:12::i;31592:34::-;:38;:90;:38;:90::i;:::-;31561:8;:122::i;:::-;-1:-1:-1;31701:4:0;31399:314;;;;;:::o;20132:82::-;20198:8;;-1:-1:-1;;;20198:8:0;;;;;20132:82::o;29881:97::-;29922:5;29947:23;:21;:23::i;31721:219::-;31809:4;31826:84;31835:12;:10;:12::i;:::-;31849:7;31858:51;31898:10;31858:35;31872:12;:10;:12::i;:::-;31885:7;31858:13;:35::i;:::-;:39;;:51::i;20491:139::-;20541:17;20596:25;:23;:25::i;36946:243::-;29217:19;:17;:19::i;:::-;-1:-1:-1;;;;;29203:33:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;29203:33:0;;29195:56;;;;-1:-1:-1;;;29195:56:0;;;;;;;:::i;:::-;;;;;;;;;29271:15;:13;:15::i;:::-;29270:16;29262:41;;;;-1:-1:-1;;;29262:41:0;;;;;;;:::i;:::-;37035:27:::1;:25;:27::i;:::-;37018:13;:11;:13::i;:::-;:44;;37010:87;;;;-1:-1:-1::0;;;37010:87:0::1;;;;;;;:::i;:::-;37108:16;:14;:16::i;:::-;37135:12;:19:::0;;-1:-1:-1;;;;37135:19:0::1;-1:-1:-1::0;;;37135:19:0::1;::::0;;37165:16:::1;:14;:16::i;:::-;36946:243::o:0;19944:96::-;20021:11;;-1:-1:-1;;;;;20021:11:0;19944:96;:::o;43402:135::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;43496:33:::1;43513:4;43519:9;43496:16;:33::i;:::-;43402:135:::0;;:::o;32226:149::-;29217:19;:17;:19::i;:::-;-1:-1:-1;;;;;29203:33:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;29203:33:0;;29195:56;;;;-1:-1:-1;;;29195:56:0;;;;;;;:::i;:::-;29271:15;:13;:15::i;:::-;29270:16;29262:41;;;;-1:-1:-1;;;29262:41:0;;;;;;;:::i;:::-;32298:23:::1;32311:2;32314:6;32298:12;:23::i;:::-;32357:2;-1:-1:-1::0;;;;;32337:30:0::1;32354:1;-1:-1:-1::0;;;;;32337:30:0::1;-1:-1:-1::0;;;;;;;;;;;32360:6:0::1;32337:30;;;;;;:::i;:::-;;;;;;;;32226:149:::0;;:::o;24262:772::-;-1:-1:-1;;;;;24500:19:0;;24320:7;24500:19;;;:13;:19;;;;;:37;;;;24458:36;;;;24402:41;;;;24364:32;;;;;24320:7;;24363:175;;24500:37;24363:132;;24458:36;;24363:132;;24449:3;;24363:81;;24364:32;24363:38;:81::i;:::-;:85;;:90::i;:::-;:94;;:132::i;:175::-;24340:198;;24549:16;24595:58;24649:3;24596:47;24637:5;24596:36;:34;:36::i;24595:58::-;24580:12;:73;24576:451;;;24670:18;24691:30;24708:12;;24691:16;:30::i;:::-;24670:51;-1:-1:-1;24747:21:0;24670:51;24762:5;24747:14;:21::i;:::-;24736:32;;24798:33;:31;:33::i;:::-;24787:8;:44;24783:125;;;24859:33;:31;:33::i;:::-;24852:40;;;;;;;24783:125;-1:-1:-1;24929:8:0;-1:-1:-1;24922:15:0;;-1:-1:-1;24922:15:0;24576:451;24979:36;:34;:36::i;:::-;24972:43;;;;;;39813:843;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;39909:22:::1;39933:15:::0;39950:18:::1;39970:11:::0;39985:21:::1;39998:7;39985:12;:21::i;:::-;39908:98;;;;;;;;40025:6;:14;;40035:4;40025:14;;;40017:65;;;;-1:-1:-1::0;;;40017:65:0::1;;;;;;;:::i;:::-;40114:3;40101:10;:16;40093:64;;;;-1:-1:-1::0;;;40093:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40201:30:0;::::1;;::::0;;;:14:::1;:30;::::0;;;;;:43:::1;::::0;40236:7;40201:34:::1;:43::i;:::-;-1:-1:-1::0;;;;;40168:30:0;;::::1;;::::0;;;:14:::1;:30;::::0;;;;;:76;;;;40285:27;;::::1;::::0;;;;:40:::1;::::0;40317:7;40285:31:::1;:40::i;:::-;-1:-1:-1::0;;;;;40255:27:0;;::::1;;::::0;;;:14:::1;:27;::::0;;;;;:70;;;;40340:30;;::::1;::::0;;;;40336:82:::1;;-1:-1:-1::0;;;;;40377:33:0;::::1;40413:5;40377:33:::0;;;:17:::1;:33;::::0;;;;:41;;-1:-1:-1;;40377:41:0::1;::::0;;40336:82:::1;-1:-1:-1::0;;;;;40429:30:0;::::1;;::::0;;;:17:::1;:30;::::0;;;;:37;;-1:-1:-1;;40429:37:0::1;40462:4;40429:37;::::0;;40478:10:::1;:19:::0;;40447:11;;40478:10;40489:7;;40478:19;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;;:45:::0;;-1:-1:-1;;;;;;40478:45:0::1;-1:-1:-1::0;;;;;40478:45:0;;;::::1;::::0;;;::::1;::::0;;;40558:11:::1;:9;:11::i;:::-;40534:35:::0;-1:-1:-1;;;;;;40585:63:0;;::::1;::::0;;::::1;-1:-1:-1::0;;;;;;;;;;;40621:26:0::1;:7:::0;40534:35;40621:11:::1;:26::i;:::-;40585:63;;;;;;:::i;:::-;;;;;;;;10741:1;;;;;39813:843:::0;;:::o;23698:558::-;-1:-1:-1;;;;;23939:19:0;;23756:7;23939:19;;;:13;:19;;;;;:32;;;;23892:41;;;;23840:37;;;;23798:36;;;;;23756:7;;23797:175;;23939:32;23797:137;;23892:41;;23797:137;;23883:3;;23797:81;;23798:36;23797:42;:81::i;:175::-;23776:196;;24000:56;24052:3;24000:47;24041:5;24001:34;:32;:34::i;24000:56::-;23987:10;:69;23983:266;;;24073:18;24094:26;24109:10;;24094:14;:26::i;:::-;24073:47;-1:-1:-1;24142:21:0;24073:47;24157:5;24142:14;:21::i;23983:266::-;24203:34;:32;:34::i;:::-;24196:41;;;;;20636:233;20701:12;;20677:7;;-1:-1:-1;;;20701:12:0;;;;20697:165;;;20753:12;;20737:11;;:29;;:15;:29::i;:::-;20730:36;;;;20697:165;20806:44;20822:27;:25;:27::i;:::-;20806:11;;;:15;:44::i;44107:509::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;44193:27:::1;44212:7;44193:18;:27::i;:::-;44185:54;;;;-1:-1:-1::0;;;44185:54:0::1;;;;;;;:::i;:::-;44267:17;::::0;;-1:-1:-1;;;;;44267:17:0;;::::1;44288:5;44250:35:::0;;;:16:::1;:35;::::0;;;;:43;;-1:-1:-1;;44250:43:0::1;::::0;;44335:17;;44325:28:::1;::::0;44335:17:::1;44325:9;:28::i;:::-;44304:49:::0;-1:-1:-1;44368:14:0;;44364:164:::1;;44409:17;::::0;44399:49:::1;::::0;-1:-1:-1;;;;;44409:17:0::1;44428:7:::0;44437:10;44399:9:::1;:49::i;:::-;44477:17;::::0;44468:48:::1;::::0;-1:-1:-1;;;;;44468:48:0;;::::1;::::0;44477:17:::1;::::0;-1:-1:-1;;;;;;;;;;;44468:48:0;::::1;::::0;44505:10;;44468:48:::1;:::i;:::-;;;;;;;;44364:164;-1:-1:-1::0;44538:17:0::1;:27:::0;;-1:-1:-1;;;;;44538:27:0;;::::1;-1:-1:-1::0;;;;;;44538:27:0;;::::1;::::0;::::1;::::0;;:17:::1;44576:25:::0;;;:16:::1;:25;::::0;;;;:32;;-1:-1:-1;;44576:32:0::1;44538:27:::0;44576:32:::1;::::0;;44107:509::o;20346:139::-;20395:18;20452:24;:22;:24::i;41671:1723::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;29444:8:::1;:15:::0;;-1:-1:-1;;;;29444:15:0::1;-1:-1:-1::0;;;29444:15:0::1;::::0;;;41810:18:::2;:16;:18::i;:::-;41773:55;;41839:32;41874:19;:17;:19::i;:::-;41943:48;::::0;-1:-1:-1;;;41943:48:0;;41839:54;;-1:-1:-1;41904:24:0::2;::::0;;;-1:-1:-1;;;;;41943:22:0;::::2;::::0;::::2;::::0;:48:::2;::::0;41966:9;;41985:4:::2;::::0;41943:48:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41943:62:0::2;;41939:278;;;42041:65;::::0;-1:-1:-1;;;42041:65:0;;-1:-1:-1;;;;;42041:25:0;::::2;::::0;::::2;::::0;:65:::2;::::0;42081:9;;42100:4:::2;::::0;42041:65:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42022:84;;41939:278;;;42158:47;::::0;-1:-1:-1;;;42158:47:0;;-1:-1:-1;;;;;42158:22:0;::::2;::::0;::::2;::::0;:47:::2;::::0;42181:9;;42199:4:::2;::::0;42158:47:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42139:66;;41939:278;42312:1;-1:-1:-1::0;;;;;42235:79:0::2;:14;-1:-1:-1::0;;;;;42235:22:0::2;;42258:9;42276:15;-1:-1:-1::0;;;;;42276:20:0::2;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42235:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42235:79:0::2;;;42227:118;;;;-1:-1:-1::0;;;42227:118:0::2;;;;;;;:::i;:::-;42392:6;42364:24;42382:4;42364:9;:24::i;:::-;:34;;42356:79;;;;-1:-1:-1::0;;;42356:79:0::2;;;;;;;:::i;:::-;42446:17;42466:13;:6:::0;42477:1:::2;42466:10;:13::i;:::-;42446:33:::0;-1:-1:-1;42490:13:0::2;42506:21;:6:::0;42446:33;42506:10:::2;:21::i;:::-;42490:37;;42538:22;42570:9;-1:-1:-1::0;;;;;42563:27:0::2;;42599:4;42563:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42640:16;::::0;;42654:1:::2;42640:16:::0;;;;;::::2;::::0;;;42538:67;;-1:-1:-1;42616:21:0::2;::::0;42640:16;::::2;::::0;::::2;42616:21:::0;;42640:16:::2;::::0;::::2;;::::0;-1:-1:-1;42640:16:0::2;42616:40;;42685:4;42667;42672:1;42667:7;;;;;;;;;;;;;:23;-1:-1:-1::0;;;;;42667:23:0::2;;;-1:-1:-1::0;;;;;42667:23:0::2;;;::::0;::::2;42711:15;-1:-1:-1::0;;;;;42711:20:0::2;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42701:4;42706:1;42701:7;;;;;;;;;;;;;:32;-1:-1:-1::0;;;;;42701:32:0::2;;;-1:-1:-1::0;;;;;42701:32:0::2;;;::::0;::::2;42754:9;42744:4;42749:1;42744:7;;;;;;;;;;;;;:19;-1:-1:-1::0;;;;;42744:19:0::2;;;-1:-1:-1::0;;;;;42744:19:0::2;;;::::0;::::2;42774:60;42791:4;42806:15;42824:9;42774:8;:60::i;:::-;42845:135;::::0;-1:-1:-1;;;42845:135:0;;-1:-1:-1;;;;;42845:69:0;::::2;::::0;::::2;::::0;:135:::2;::::0;42929:9;;42940:1:::2;::::0;42943:4;;42957::::2;::::0;42964:15:::2;::::0;42845:135:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;42991:18;43012:62;43059:14;43019:9;-1:-1:-1::0;;;;;43012:27:0::2;;43048:4;43012:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46:::0;::::2;:62::i;:::-;42991:83;;43085:56;43102:4;43117:15;43135:5;43085:8;:56::i;:::-;43152:63;::::0;-1:-1:-1;;;43152:63:0;;-1:-1:-1;;;;;43152:25:0;::::2;::::0;::::2;::::0;:63:::2;::::0;43186:15;;43204:10;;43152:63:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;43226:104:0::2;::::0;-1:-1:-1;;;43226:104:0;;-1:-1:-1;;;;;43226:28:0;::::2;::::0;::::2;::::0;:104:::2;::::0;43263:4:::2;::::0;43269:9;;43279:5;;43285:10;;43296:1:::2;::::0;;;43263:4;;43314:15:::2;::::0;43226:104:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43341:45;43358:16;43376:9;43341:16;:45::i;:::-;-1:-1:-1::0;;29482:8:0::1;:16:::0;;-1:-1:-1;;;;29482:16:0::1;::::0;;-1:-1:-1;;;;;;;;41671:1723:0:o;30375:317::-;30441:7;30461:21;30485:11;:9;:11::i;:::-;30461:35;;30511:25;30528:7;30511:16;:25::i;:::-;30507:115;;;30546:75;30607:13;30546:56;30576:25;30593:7;30576:16;:25::i;:::-;30546;30563:7;30546:16;:25::i;30507:115::-;30640:44;30670:13;30640:25;30657:7;30640:16;:25::i;:44::-;30633:51;30375:317;-1:-1:-1;;;30375:317:0:o;10756:148::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;10847:6:::1;::::0;10826:40:::1;::::0;10863:1:::1;::::0;-1:-1:-1;;;;;10847:6:0::1;::::0;10826:40:::1;::::0;10863:1;;10826:40:::1;10877:6;:19:::0;;-1:-1:-1;;;;;;10877:19:0::1;::::0;;10756:148::o;38909:896::-;38977:30;38994:12;:10;:12::i;38977:30::-;38969:70;;;;-1:-1:-1;;;38969:70:0;;;;;;;:::i;:::-;39051:19;39072:15;39089:18;39109:11;39124:21;39137:7;39124:12;:21::i;:::-;39050:95;;;;;;;;39178:3;39164:10;:17;;39156:64;;;;-1:-1:-1;;;39156:64:0;;;;;;;:::i;:::-;39254:12;:10;:12::i;:::-;-1:-1:-1;;;;;39239:27:0;:11;-1:-1:-1;;;;;39239:27:0;;39231:76;;;;-1:-1:-1;;;39231:76:0;;;;;;;:::i;:::-;39337:4;39326:15;;;;39318:66;;;;-1:-1:-1;;;39318:66:0;;;;;;;:::i;:::-;39417:19;;:32;;39441:7;39417:23;:32::i;:::-;39395:19;:54;39491:41;39524:7;39491:14;;39506:12;:10;:12::i;:::-;-1:-1:-1;;;;;39491:28:0;;;;;;;;;;;;-1:-1:-1;39491:28:0;;;:32;:41::i;:::-;39460:14;:28;39475:12;:10;:12::i;:::-;-1:-1:-1;;;;;39460:28:0;-1:-1:-1;;;;;39460:28:0;;;;;;;;;;;;:72;;;;39574:41;39607:7;39574:14;:28;39589:12;:10;:12::i;:::-;-1:-1:-1;;;;;39574:28:0;;;;;;;;;;;;-1:-1:-1;39574:28:0;;;:32;:41::i;:::-;39543:14;:28;39558:12;:10;:12::i;:::-;-1:-1:-1;;;;;39543:28:0;-1:-1:-1;;;;;39543:28:0;;;;;;;;;;;;:72;;;;39662:1;39630:14;:28;39645:12;:10;:12::i;:::-;-1:-1:-1;;;;;39630:28:0;-1:-1:-1;;;;;39630:28:0;;;;;;;;;;;;;:33;39626:78;;39699:5;39665:17;:31;39683:12;:10;:12::i;:::-;-1:-1:-1;;;;;39665:31:0;;;;;;;;;;;;-1:-1:-1;39665:31:0;:39;;-1:-1:-1;;39665:39:0;;;;;;;;;;39626:78;39751:1;39715:10;39726:7;39715:19;;;;;;;;;;;;;;;;;;:33;;:37;;;;39792:5;39763:10;39774:7;39763:19;;;;;;;;;;;;;;;;;;;;;:26;;:34;;-1:-1:-1;;39763:34:0;;;;;;;;;;-1:-1:-1;;;;;38909:896:0:o;18092:120::-;18155:7;18182:15;18198:5;18182:22;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18182:22:0;;18092:120;-1:-1:-1;;18092:120:0:o;43840:84::-;29093:29;29109:12;:10;:12::i;29093:29::-;29085:52;;;;-1:-1:-1;;;29085:52:0;;;;;;;:::i;:::-;43901:8:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;43901:15:0::1;-1:-1:-1::0;;;;43901:15:0;;::::1;::::0;;;::::1;::::0;;43840:84::o;19750:92::-;19823:11;;-1:-1:-1;;;;;19823:11:0;19750:92;:::o;26799:369::-;-1:-1:-1;;;;;26954:19:0;;;26856:20;26954:19;;;:13;:19;;;;;:29;26856:20;;;;;;26925:59;;26948:4;;26954:29;26925:22;:59::i;:::-;-1:-1:-1;;;;;26995:19:0;;;;;;;:13;:19;;;;;;;;:29;;;:41;;;;27047:32;;;:47;;;;-1:-1:-1;27105:36:0;;;:55;;;;-1:-1:-1;;;26799:369:0:o;19640:104::-;19719:17;;-1:-1:-1;;;;;19719:17:0;19640:104;:::o;43932:167::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;44015:21:::1;44031:4;44015:15;:21::i;:::-;44007:43;;;;-1:-1:-1::0;;;44007:43:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44061:22:0::1;44086:5;44061:22:::0;;;:16:::1;:22;::::0;;;;:30;;-1:-1:-1;;44061:30:0::1;::::0;;43932:167::o;30704:191::-;30769:7;30789:21;30813:11;:9;:11::i;:::-;30789:35;;30842:44;30872:13;30842:25;30859:7;30842:16;:25::i;18218:308::-;18278:7;18287;18296;18305;18314;18323;18343:21;;:::i;:::-;-1:-1:-1;;;;;;;;;18367:19:0;;;;;;;:13;:19;;;;;;;;;18343:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18343:43:0;;-1:-1:-1;18343:43:0;;-1:-1:-1;18218:308:0:o;10546:79::-;10611:6;;-1:-1:-1;;;;;10611:6:0;10546:79;:::o;19848:90::-;19918:12;;-1:-1:-1;;;19918:12:0;;;;;19848:90::o;30106:257::-;30156:7;30176:21;30200:11;:9;:11::i;:::-;30176:35;;30229:126;30328:26;30338:15;:13;:15::i;30328:26::-;30229:94;30298:24;30316:4;30298:9;:24::i;:::-;30229:64;30250:42;30278:13;30250:23;:21;:23::i;:42::-;30229:16;:14;:16::i;:126::-;30222:133;;;30106:257;:::o;29768:101::-;29807:13;29840:21;:19;:21::i;31948:270::-;32041:4;32058:130;32067:12;:10;:12::i;:::-;32081:7;32090:97;32130:15;32090:97;;;;;;;;;;;;;;;;;:35;32104:12;:10;:12::i;:::-;32117:7;32090:13;:35::i;18652:85::-;18720:9;;-1:-1:-1;;;;;18720:9:0;18652:85;:::o;30903:167::-;30981:4;30998:42;31008:12;:10;:12::i;:::-;31022:9;31033:6;30998:9;:42::i;17815:122::-;-1:-1:-1;;;;;17906:23:0;17879:7;17906:23;;;;;;;;;;;;17815:122::o;20046:80::-;20111:7;;-1:-1:-1;;;20111:7:0;;;;;20046:80::o;17943:142::-;-1:-1:-1;;;;;18048:20:0;;;18021:7;18048:20;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;17943:142::o;20220:120::-;-1:-1:-1;;;;;20307:25:0;20283:4;20307:25;;;:16;:25;;;;;;;;;20220:120::o;19442:92::-;19515:11;;19442:92;:::o;18743:96::-;18818:13;;18743:96;:::o;43664:168::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;43745:21:::1;43761:4;43745:15;:21::i;:::-;43744:22;43736:48;;;;-1:-1:-1::0;;;43736:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43795:22:0::1;;::::0;;;:16:::1;:22;::::0;;;;:29;;-1:-1:-1;;43795:29:0::1;43820:4;43795:29;::::0;;43664:168::o;20875:390::-;20961:7;20970;20979;20999:17;21026:4;-1:-1:-1;;;;;21019:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21079:37;;-1:-1:-1;;;21079:37:0;;20999:46;;-1:-1:-1;21056:20:0;;21094:4;;21079:31;;:37;;21111:4;;21079:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21056:60;;21127:24;21169:9;-1:-1:-1;;;;;21154:36:0;;21191:4;21154:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21215:12;;;;-1:-1:-1;21247:9:0;;-1:-1:-1;20875:390:0;-1:-1:-1;;;;20875:390:0:o;19072:122::-;-1:-1:-1;;;;;19163:23:0;19136:7;19163:23;;;:14;:23;;;;;;;19072:122::o;19540:94::-;19614:12;;19540:94;:::o;43545:111::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;43623:25:::1;43643:4;43623:19;:25::i;:::-;43545:111:::0;:::o;19328:108::-;19409:19;;19328:108;:::o;36758:180::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;36839:15:::1;:13;:15::i;:::-;36838:16;36830:57;;;;-1:-1:-1::0;;;36830:57:0::1;;;;;;;:::i;:::-;36898:32;36919:10;36898:20;:32::i;38000:643::-:0;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;38121:15:::1;:13;:15::i;:::-;38120:16;38112:53;;;;-1:-1:-1::0;;;38112:53:0::1;;;;;;;:::i;:::-;38176:21;38200:11;:9;:11::i;:::-;38176:35:::0;-1:-1:-1;38222:19:0::1;38244:25;:6:::0;38176:35;38244:10:::1;:25::i;:::-;38296:47;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;38296:47:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;38338:4:::1;38296:47:::0;;;;;;38280:10:::1;:64:::0;;;;::::1;::::0;;-1:-1:-1;38280:64:0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;38280:64:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38280:64:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;38381:23;;:14:::1;:23:::0;;;;38296:47;;-1:-1:-1;38381:40:0::1;::::0;38296:47;38381:27:::1;:40::i;:::-;-1:-1:-1::0;;;;;38355:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;:66;;;;38432:17:::1;:26:::0;;;:33;;-1:-1:-1;;38432:33:0::1;38461:4;38432:33;::::0;;38498:19:::1;::::0;:36:::1;::::0;38522:11;38498:23:::1;:36::i;:::-;38476:19;:58:::0;38560:12:::1;::::0;:24:::1;::::0;38577:6;38560:16:::1;:24::i;:::-;38545:12;:39:::0;38600:35:::1;::::0;-1:-1:-1;;;;;38600:35:0;::::1;::::0;38617:1:::1;::::0;-1:-1:-1;;;;;;;;;;;38600:35:0;::::1;::::0;38628:6;;38600:35:::1;:::i;:::-;;;;;;;;10741:1;;38000:643:::0;;;:::o;44624:481::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;29444:8:::1;:15:::0;;-1:-1:-1;;;;29444:15:0::1;-1:-1:-1::0;;;29444:15:0::1;::::0;;44712:27:::2;44731:7:::0;44712:18:::2;:27::i;:::-;44704:54;;;;-1:-1:-1::0;;;44704:54:0::2;;;;;;;:::i;:::-;44786:11;::::0;;-1:-1:-1;;;;;44786:11:0;;::::2;44801:5;44769:29:::0;;;:16:::2;:29;::::0;;;;:37;;-1:-1:-1;;44769:37:0::2;::::0;;44848:11;;44838:22:::2;::::0;44848:11:::2;44838:9;:22::i;:::-;44817:43:::0;-1:-1:-1;44875:14:0;;44871:152:::2;;44916:11;::::0;44906:43:::2;::::0;-1:-1:-1;;;;;44916:11:0::2;44929:7:::0;44938:10;44906:9:::2;:43::i;:::-;44978:11;::::0;44969:42:::2;::::0;-1:-1:-1;;;;;44969:42:0;;::::2;::::0;44978:11:::2;::::0;-1:-1:-1;;;;;;;;;;;44969:42:0;::::2;::::0;45000:10;;44969:42:::2;:::i;:::-;;;;;;;;44871:152;-1:-1:-1::0;45033:11:0::2;:21:::0;;-1:-1:-1;;;;;45033:21:0;;::::2;-1:-1:-1::0;;;;;;45033:21:0;;::::2;::::0;::::2;::::0;;:11:::2;45065:25:::0;;;:16:::2;:25;::::0;;;;:32;;-1:-1:-1;;45065:32:0::2;45033:21:::0;45065:32:::2;::::0;;29482:8:::1;:16:::0;;-1:-1:-1;;;;29482:16:0::1;::::0;;44624:481::o;31078:144::-;31159:7;31186:28;31200:5;31206:7;31186:13;:28::i;45117:88::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;45183:7:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;45183:14:0::1;-1:-1:-1::0;;;;45183:14:0;;::::1;::::0;;;::::1;::::0;;45117:88::o;18532:114::-;-1:-1:-1;;;;;18616:22:0;18592:4;18616:22;;;:16;:22;;;;;;;;;18532:114::o;38655:246::-;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;38758:15:::1;:13;:15::i;:::-;38757:16;38749:53;;;;-1:-1:-1::0;;;38749:53:0::1;;;;;;;:::i;10910:244::-:0;10681:12;:10;:12::i;:::-;10671:6;;-1:-1:-1;;;;;10671:6:0;;;:22;;;10663:67;;;;-1:-1:-1;;;10663:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10999:22:0;::::1;10991:73;;;;-1:-1:-1::0;;;10991:73:0::1;;;;;;;:::i;:::-;11101:6;::::0;11080:38:::1;::::0;-1:-1:-1;;;;;11080:38:0;;::::1;::::0;11101:6:::1;::::0;11080:38:::1;::::0;11101:6:::1;::::0;11080:38:::1;11129:6;:17:::0;;-1:-1:-1;;;;;;11129:17:0::1;-1:-1:-1::0;;;;;11129:17:0;;;::::1;::::0;;;::::1;::::0;;10910:244::o;18845:221::-;18901:7;18910;18919;18928:4;18945:17;;:::i;:::-;18965:10;18976:3;18965:15;;;;;;;;;;;;;;;;;18945:35;;;;;;;;18965:15;;;;;;;;18945:35;;-1:-1:-1;;;;;18945:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18945:35:0;-1:-1:-1;18945:35:0;-1:-1:-1;18845:221:0;-1:-1:-1;;;18845:221:0:o;13480:94::-;-1:-1:-1;;11335:27:0;13480:94::o;7067:174::-;7186:20;7225:8;;;7067:174::o;5629:179::-;5687:7;5719:5;;;5743:6;;;;5735:46;;;;-1:-1:-1;;;5735:46:0;;;;;;;:::i;6404:132::-;6462:7;6489:39;6493:1;6496;6489:39;;;;;;;;;;;;;;;;;:3;:39::i;15326:96::-;12302:10;15326:96;:::o;6152:246::-;6210:7;6234:6;6230:47;;-1:-1:-1;6264:1:0;6257:8;;6230:47;6299:5;;;6303:1;6299;:5;:1;6323:5;;;;;:10;6315:56;;;;-1:-1:-1;;;6315:56:0;;;;;;;:::i;5814:136::-;5872:7;5899:43;5903:1;5906;5899:43;;;;;;;;;;;;;;;;;:3;:43::i;16090:100::-;12839:42;16090:100;:::o;13376:98::-;11274:14;13376:98;:::o;15770:96::-;12553:42;15770:96;:::o;14038:112::-;11420:3;14038:112;:::o;14502:100::-;11644:3;14502:100;:::o;14278:110::-;11589:4;14278:110;:::o;14394:102::-;11533:2;14394:102;:::o;16196:89::-;16272:5;;;;;;;;;;;;-1:-1:-1;;;16272:5:0;;;;16196:89;:::o;9862:106::-;9950:10;9862:106;:::o;32383:336::-;-1:-1:-1;;;;;32476:19:0;;32468:68;;;;-1:-1:-1;;;32468:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32555:21:0;;32547:68;;;;-1:-1:-1;;;32547:68:0;;;;;;;:::i;:::-;32626:37;32640:5;32647:7;32656:6;32626:13;:37::i;:::-;32695:7;-1:-1:-1;;;;;32679:32:0;32688:5;-1:-1:-1;;;;;32679:32:0;;32704:6;32679:32;;;;;;:::i;:::-;;;;;;;;32383:336;;;:::o;32727:3605::-;29367:10;:8;:10::i;:::-;29366:11;29358:30;;;;-1:-1:-1;;;29358:30:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32833:20:0;::::1;32825:70;;;;-1:-1:-1::0;;;32825:70:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32914:23:0;::::1;32906:71;;;;-1:-1:-1::0;;;32906:71:0::1;;;;;;;:::i;:::-;33005:1;32996:6;:10;32988:55;;;;-1:-1:-1::0;;;32988:55:0::1;;;;;;;:::i;:::-;33072:17;33082:6;33072:9;:17::i;:::-;33062:6;:27;;33054:61;;;;-1:-1:-1::0;;;33054:61:0::1;;;;;;;:::i;:::-;33144:25;33162:6;33144:17;:25::i;:::-;33134:6;:35;;33126:78;;;;-1:-1:-1::0;;;33126:78:0::1;;;;;;;:::i;:::-;33223:15;:13;:15::i;:::-;33215:47;;;;-1:-1:-1::0;;;33215:47:0::1;;;;;;;:::i;:::-;33283:49;33305:26;:24;:26::i;:::-;33283:17;:15;:17::i;:49::-;33277:3;:55;33273:74;;;33334:13;:11;:13::i;:::-;33358:21;33382:11;:9;:11::i;:::-;33358:35:::0;-1:-1:-1;33404:19:0::1;33426:25;:6:::0;33358:35;33426:10:::1;:25::i;:::-;33404:47;;33462:14;33491:11;:9;:11::i;:::-;33487:425;;;-1:-1:-1::0;33528:1:0::1;33487:425;;;33562:11;33592:23;33608:6;33592:15;:23::i;:::-;33588:252;;;33645:16;33654:6;33645:8;:16::i;:::-;33636:25;;33588:252;;;33687:26;33703:9;33687:15;:26::i;:::-;33683:157;;;33733:25;33748:9;33733:14;:25::i;:::-;33683:157;;;33814:9;::::0;33799:25:::1;::::0;-1:-1:-1;;;;;33814:9:0::1;33799:14;:25::i;:::-;33863:37;33874:6;33882:9;33893:6;33863:10;:37::i;:::-;33854:46;;33487:425;;34007:6;34017:1;34007:11;34003:2322;;;34036:22;34060:20:::0;34082:17:::1;34103:28;34116:6;34124;34103:12;:28::i;:::-;-1:-1:-1::0;;;;;34223:22:0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;34035:96;;-1:-1:-1;34035:96:0;;-1:-1:-1;34035:96:0;-1:-1:-1;34223:39:0::1;::::0;34250:11;34223:26:::1;:39::i;:::-;-1:-1:-1::0;;;;;34198:22:0;;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:64;;;;34305:25;;::::1;::::0;;;;:42:::1;::::0;34335:11;34305:29:::1;:42::i;:::-;-1:-1:-1::0;;;;;34277:25:0;::::1;:14;:25:::0;;;::::1;::::0;;;;;;:70;34396::::1;34432:33;:14:::0;34451:13;34432:18:::1;:33::i;:::-;34396:14;:31:::0;34411:15:::1;:13;:15::i;34396:70::-;34362:14;:31:::0;34377:15:::1;:13;:15::i;:::-;-1:-1:-1::0;;;;;34362:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34362:31:0;:104;34526:79:::1;34573:31;:12:::0;34590:13;34573:16:::1;:31::i;:::-;34526:14;:42:::0;34541:26:::1;:24;:26::i;34526:79::-;34481:14;:42:::0;34496:26:::1;:24;:26::i;:::-;-1:-1:-1::0;;;;;34481:42:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34481:42:0;:124;34635:12:::1;::::0;:27:::1;::::0;34652:9;34635:16:::1;:27::i;:::-;34620:12;:42;;;;34699:9;-1:-1:-1::0;;;;;34682:35:0::1;34691:6;-1:-1:-1::0;;;;;34682:35:0::1;-1:-1:-1::0;;;;;;;;;;;34710:6:0::1;34682:35;;;;;;:::i;:::-;;;;;;;;34757:15;:13;:15::i;:::-;-1:-1:-1::0;;;;;34737:51:0::1;34754:1;-1:-1:-1::0;;;;;34737:51:0::1;-1:-1:-1::0;;;;;;;;;;;34773:14:0::1;34737:51;;;;;;:::i;:::-;;;;;;;;34828:26;:24;:26::i;:::-;-1:-1:-1::0;;;;;34808:60:0::1;34825:1;-1:-1:-1::0;;;;;34808:60:0::1;-1:-1:-1::0;;;;;;;;;;;34855:12:0::1;34808:60;;;;;;:::i;:::-;;;;;;;;34003:2322;;;;;;34997:6;35007:1;34997:11;34993:1332;;;35026:16;35044:21:::0;35069:32:::1;35083:9;35094:6;35069:13;:32::i;:::-;35025:76;;;;35117:18;35137:23:::0;35164:21:::1;35178:6;35164:13;:21::i;:::-;35116:69:::0;;-1:-1:-1;35116:69:0;-1:-1:-1;35200:28:0::1;35231:36;35116:69:::0;35231:20:::1;:6:::0;35242:8;35231:10:::1;:20::i;:36::-;35200:67:::0;-1:-1:-1;35282:27:0::1;35312:39;35200:67:::0;35337:13;35312:24:::1;:39::i;:::-;-1:-1:-1::0;;;;;35391:22:0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;35282:69;;-1:-1:-1;35391:39:0::1;::::0;35418:11;35391:26:::1;:39::i;:::-;-1:-1:-1::0;;;;;35366:22:0;;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:64;;;;35473:25;;::::1;::::0;;;;:50:::1;::::0;35503:19;35473:29:::1;:50::i;:::-;-1:-1:-1::0;;;;;35445:25:0;;::::1;:14;:25:::0;;;::::1;::::0;;;;;;;:78;;;;35589:17:::1;::::0;;;::::1;35574:33:::0;;;;:54:::1;::::0;35612:15;35574:37:::1;:54::i;:::-;35553:17;::::0;-1:-1:-1;;;;;35553:17:0::1;35538:14;:33:::0;;;::::1;::::0;;;;;;:90;35658:12:::1;::::0;:26:::1;::::0;35675:8;35658:16:::1;:26::i;:::-;35643:12;:41:::0;35713:11:::1;::::0;:30:::1;::::0;35729:13;35713:15:::1;:30::i;:::-;35699:11;:44;;;;35780:9;-1:-1:-1::0;;;;;35763:49:0::1;35772:6;-1:-1:-1::0;;;;;35763:49:0::1;-1:-1:-1::0;;;;;;;;;;;35791:20:0::1;35763:49;;;;;;:::i;:::-;;;;;;;;35857:1;-1:-1:-1::0;;;;;35832:38:0::1;35841:6;-1:-1:-1::0;;;;;35832:38:0::1;-1:-1:-1::0;;;;;;;;;;;35861:8:0::1;35832:38;;;;;;:::i;:::-;;;;;;;;35907:17;::::0;35890:47:::1;::::0;-1:-1:-1;;;;;35907:17:0;;::::1;::::0;35890:47;::::1;::::0;-1:-1:-1;;;;;;;;;;;35890:47:0;::::1;::::0;35926:10;;35890:47:::1;:::i;:::-;;;;;;;;34993:1332;;;;;;;;;36081:6;36091:1;36081:11;36077:248;;;-1:-1:-1::0;;;;;36134:22:0;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:39:::1;::::0;36161:11;36134:26:::1;:39::i;:::-;-1:-1:-1::0;;;;;36109:22:0;;::::1;:14;:22:::0;;;::::1;::::0;;;;;;;:64;;;;36216:25;;::::1;::::0;;;;:42:::1;::::0;36246:11;36216:29:::1;:42::i;:::-;-1:-1:-1::0;;;;;36188:25:0;;::::1;:14;:25:::0;;;::::1;::::0;;;;;;;;:70;;;;36278:35;;;;::::1;::::0;-1:-1:-1;;;;;;;;;;;36278:35:0;::::1;::::0;36306:6;;36278:35:::1;:::i;:::-;;;;;;;;36077:248;29399:1;;;32727:3605:::0;;;:::o;5956:190::-;6042:7;6078:12;6070:6;;;;6062:29;;;;-1:-1:-1;;;6062:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;6114:5:0;;;5956:190::o;16389:88::-;13131:1;16389:88;:::o;15872:98::-;12645:42;15872:98;:::o;37197:795::-;37251:15;:13;:15::i;:::-;37250:16;37242:53;;;;-1:-1:-1;;;37242:53:0;;;;;;;:::i;:::-;37306:55;37319:26;:24;:26::i;:::-;37347:13;37306:12;:55::i;:::-;37372:26;:24;:26::i;:::-;-1:-1:-1;;;;;37372:35:0;:65;37408:28;:21;37434:1;37408:25;:28::i;:::-;37372:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37448:14;37465:46;37497:13;:11;:13::i;:::-;37465:27;:25;:27::i;:46::-;37448:63;;37522:19;37544:65;37582:26;:24;:26::i;:::-;37544:33;:21;37570:6;37544:25;:33::i;:65::-;37522:87;;37632:11;37623:6;:20;37620:175;;;37660:48;37681:1;37684:23;:6;37695:11;37684:10;:23::i;:::-;37660:12;:48::i;:::-;37756:1;;-1:-1:-1;;;;;;;;;;;37759:23:0;:6;37770:11;37759:10;:23::i;:::-;37728:55;;;;;;:::i;:::-;;;;;;;;37620:175;37805:40;37826:4;37833:11;37805:12;:40::i;:::-;37881:26;:24;:26::i;:::-;-1:-1:-1;;;;;37861:61:0;37878:1;-1:-1:-1;;;;;37861:61:0;-1:-1:-1;;;;;;;;;;;37908:13:0;37861:61;;;;;;:::i;:::-;;;;;;;;37938:46;;37966:4;;37955:1;;-1:-1:-1;;;;;;;;;;;37938:46:0;;;37972:11;;37938:46;:::i;40664:999::-;29444:8;:15;;-1:-1:-1;;;;29444:15:0;-1:-1:-1;;;29444:15:0;;;;40756:18:::1;:16;:18::i;:::-;40719:55;;40785:32;40820:19;:17;:19::i;:::-;40785:54;;40850:24;40971:1:::0;-1:-1:-1;;;;;40889:84:0::1;:14;-1:-1:-1::0;;;;;40889:22:0::1;;40920:15;-1:-1:-1::0;;;;;40920:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40953:4;40889:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40889:84:0::1;;40885:335;;;41009:14;-1:-1:-1::0;;;;;41009:25:0::1;;41057:15;-1:-1:-1::0;;;;;41057:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41090:4;41009:87;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40990:106;;40885:335;;;41148:14;-1:-1:-1::0;;;;;41148:22:0::1;;41179:4;41185:15;-1:-1:-1::0;;;;;41185:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41148:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41129:79;;40885:335;41230:19;41252:24;41270:4;41252:9;:24::i;:::-;41230:46;;41295:80;41312:4;41319:42;41363:11;41295:8;:80::i;:::-;41386:15;-1:-1:-1::0;;;;;41386:31:0::1;;41425:21;41456:4;41475:11;41488:1;41491::::0;41494:26:::1;:24;:26::i;:::-;41522:15;41386:152;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41549:67;41566:16;41592:15;-1:-1:-1::0;;;;;41592:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41549:16;:67::i;:::-;-1:-1:-1::0;41627:9:0::1;:28:::0;;-1:-1:-1;;;;;;41627:28:0::1;-1:-1:-1::0;;;;;41627:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;29482:8:0;:16;;-1:-1:-1;;;;29482:16:0;;;40664:999::o;27174:478::-;27262:21;27278:4;27262:15;:21::i;:::-;27261:22;27253:64;;;;-1:-1:-1;;;27253:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27328:22:0;;;;;;:16;:22;;;;;:29;;-1:-1:-1;;27328:29:0;27353:4;27328:29;;;;;;27368:15;:26;;;;;;;;;;;;;-1:-1:-1;;;;;;27368:26:0;;;;;;;27328:22;;27475:39;27345:4;27504:9;27475:22;:39::i;:::-;27547:97;;;;;;;;-1:-1:-1;;;;;27547:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27525:19;;;-1:-1:-1;27525:19:0;;;:13;:19;;;;;;;;:119;;;;-1:-1:-1;;;;;;27525:119:0;;;;;;;;;;;-1:-1:-1;27525:119:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27525:119:0;;;;;;;;;;-1:-1:-1;27174:478:0:o;25338:303::-;25413:21;25437:11;:9;:11::i;:::-;25413:35;-1:-1:-1;25459:19:0;25481:25;:6;25413:35;25481:10;:25::i;:::-;-1:-1:-1;;;;;25543:23:0;;:14;:23;;;;;;;;;;;25459:47;;-1:-1:-1;25543:40:0;;25459:47;25543:27;:40::i;:::-;-1:-1:-1;;;;;25517:23:0;;:14;:23;;;;;;;;;;:66;25609:12;;:24;;25626:6;25609:16;:24::i;:::-;25594:12;:39;-1:-1:-1;;;;25338:303:0:o;16291:92::-;16368:7;;;;;;;;;;;;-1:-1:-1;;;16368:7:0;;;;16291:92;:::o;27658:519::-;27729:21;27745:4;27729:15;:21::i;:::-;27721:70;;;;-1:-1:-1;;;27721:70:0;;;;;;;:::i;:::-;27807:9;27802:368;27826:15;:22;27822:26;;27802:368;;;27896:4;-1:-1:-1;;;;;27874:26:0;:15;27890:1;27874:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27874:18:0;:26;27870:289;;;27942:15;27958:22;;-1:-1:-1;;27958:26:0;;;27942:43;;;;;;;;;;;;;;;;27921:15;:18;;-1:-1:-1;;;;;27942:43:0;;;;27937:1;;27921:18;;;;;;;;;;;;;;;;;:64;;-1:-1:-1;;;;;27921:64:0;;;-1:-1:-1;;;;;;27921:64:0;;;;;;;28004:22;;;;;:16;:22;;;;;;;:30;;-1:-1:-1;;28004:30:0;;;28060:13;:19;;;;;;28053:26;;;;;;;27921:64;28053:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;28098:21;;;;;;;;;;;;;;;;-1:-1:-1;;28098:21:0;;;;;-1:-1:-1;;;;;;28098:21:0;;;;;;28138:5;;27870:289;27850:3;;27802:368;;25081:110;25155:11;:28;;-1:-1:-1;;;;;;25155:28:0;-1:-1:-1;;;;;25155:28:0;;;;;;;;;;25081:110::o;6542:189::-;6628:7;6663:12;6656:5;6648:28;;;;-1:-1:-1;;;6648:28:0;;;;;;;;:::i;:::-;;6687:9;6703:1;6699;:5;;;;;;;6542:189;-1:-1:-1;;;;;6542:189:0:o;25197:135::-;-1:-1:-1;;;;;25288:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;25197:135::o;25834:377::-;25877:17;:15;:17::i;:::-;25910:9;25905:299;25925:15;:22;25923:24;;25905:299;;;26023:13;:33;26037:15;26053:1;26037:18;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26037:18:0;-1:-1:-1;;;;;26023:33:0;-1:-1:-1;;;;;26023:33:0;;;;;;;;;;;;:46;;;25969:13;:33;25983:15;25999:1;25983:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25983:18:0;25969:33;;;;;;;;;;;;:51;;:100;;;;26156:15;:18;;26142:13;;25983:18;26156:15;26172:1;;26156:18;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26156:18:0;-1:-1:-1;;;;;26142:33:0;-1:-1:-1;;;;;26142:33:0;;;;;;;;;;;;:50;;;26084:13;:33;26098:15;26114:1;26098:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26098:18:0;26084:33;;;;;;;;;;;;:55;;:108;26098:18;25949:3;25905:299;;26322:471;-1:-1:-1;;;;;26487:19:0;;;26371:4;26487:19;;;:13;:19;;;;;:29;26371:4;;;;;;;;26458:59;;26481:4;;26487:29;26458:22;:59::i;:::-;-1:-1:-1;;;;;26554:19:0;;;;26528:11;26554:19;;;:13;:19;;;;;;;;:29;;;;;26594:41;;;;-1:-1:-1;26646:32:0;;:47;;;;-1:-1:-1;26704:36:0;:55;26542:41;;;;26322:471;-1:-1:-1;;;;26322:471:0:o;36340:410::-;36424:7;36461:1;36477:23;36493:6;36477:15;:23::i;:::-;36473:246;;;36521:6;36517:108;;;-1:-1:-1;36557:1:0;36517:108;;;-1:-1:-1;36608:1:0;36517:108;36473:246;;;36656:24;:22;:24::i;:::-;-1:-1:-1;;;;;36646:34:0;:6;-1:-1:-1;;;;;36646:34:0;;36642:77;;;-1:-1:-1;36706:1:0;36642:77;36736:6;36340:410;-1:-1:-1;;;;36340:410:0:o;21271:829::-;-1:-1:-1;;;;;21554:21:0;;21347:7;21554:21;;;:13;:21;;;;;:34;;;;21505:43;;;;21451:39;;;;21407:38;;;;;21347:7;;;;;;21406:183;;21554:34;;21406:143;;;;21496:3;;21406:85;;:44;:85::i;:183::-;21385:204;;21600:18;21646:56;21698:3;21646:47;21687:5;21647:34;:32;:34::i;21646:56::-;21633:10;:69;21629:324;;;21719:18;21740:26;21755:10;;21740:14;:26::i;:::-;21719:47;-1:-1:-1;21794:44:0;21832:5;21794:33;21805:21;21719:47;21832:5;21805:14;:21::i;:::-;21794:6;;:10;:33::i;:44::-;21781:57;;21629:324;;;;21884:57;21935:5;21884:46;21895:34;:32;:34::i;:::-;21884:6;;:10;:46::i;:57::-;21871:70;;21629:324;21971:55;22020:5;21971:44;21986:28;:26;:28::i;:::-;21971:10;;:14;:44::i;:55::-;22027:53;22074:5;22027:42;22042:26;:24;:26::i;:::-;22027:10;;:14;:42::i;:53::-;21963:129;;-1:-1:-1;21963:129:0;-1:-1:-1;22081:10:0;-1:-1:-1;;21271:829:0;;;;;:::o;22108:1298::-;22188:7;22197;22217:21;22241:11;:9;:11::i;:::-;22217:35;;22263:20;22298:26;22314:9;22298:15;:26::i;:::-;22294:512;;;-1:-1:-1;;;;;22508:24:0;;;;;;:13;:24;;;;;:42;;;;22461:41;;;;22400:46;;;;22357:37;;;;;22356:195;;:147;;22461:41;22356:147;;22452:3;;22356:91;;:43;:91::i;:195::-;22341:210;;22294:512;;;22765:9;;;-1:-1:-1;;;;;22765:9:0;22751:24;;;;:13;:24;;;;;:42;;;;22704:41;;;;22643:46;;;;22765:9;22600:37;;;;22599:195;;22751:42;;22599:147;;22704:41;22599:147;;22695:3;;22599:91;;:43;:91::i;:195::-;22584:210;;22294:512;22816:18;22864:58;22918:3;22865:47;22906:5;22865:36;:34;:36::i;22864:58::-;22849:12;:73;22845:493;;;22939:18;22960:30;22977:12;;22960:16;:30::i;:::-;22939:51;-1:-1:-1;23018:44:0;23056:5;23018:33;23029:21;22939:51;23056:5;23029:14;:21::i;23018:44::-;23005:57;;23094:56;23144:5;23094:45;23105:33;:31;:33::i;23094:56::-;23081:10;:69;23077:144;;;23165:56;23215:5;23165:45;23176:33;:31;:33::i;23165:56::-;23152:69;;23077:144;22845:493;;;;23267:59;23320:5;23267:48;23278:36;:34;:36::i;23267:59::-;23254:72;;22845:493;23356:10;23368:29;23356:10;23383:13;23368:14;:29::i;:::-;23348:50;;;;;;;22108:1298;;;;;:::o;23414:278::-;23475:7;23484;23504:21;23528:11;:9;:11::i;:::-;23504:35;;23550:18;23571:52;23617:5;23571:41;23582:29;:27;:29::i;:::-;23571:6;;:10;:41::i;:52::-;23550:73;-1:-1:-1;23550:73:0;23654:29;23550:73;23669:13;23654:14;:29::i;:::-;23634:50;;;;;;23414:278;;;:::o;13274:96::-;12982:5;13274:96;:::o;25754:74::-;25817:3;25801:13;:19;25754:74::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;827:241::-;;931:2;919:9;910:7;906:23;902:32;899:2;;;-1:-1;;937:12;899:2;85:6;72:20;97:33;124:5;97:33;:::i;1075:263::-;;1190:2;1178:9;1169:7;1165:23;1161:32;1158:2;;;-1:-1;;1196:12;1158:2;226:6;220:13;238:33;265:5;238:33;:::i;1345:366::-;;;1466:2;1454:9;1445:7;1441:23;1437:32;1434:2;;;-1:-1;;1472:12;1434:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1524:63;-1:-1;1624:2;1663:22;;72:20;97:33;72:20;97:33;:::i;:::-;1632:63;;;;1428:283;;;;;:::o;1718:491::-;;;;1856:2;1844:9;1835:7;1831:23;1827:32;1824:2;;;-1:-1;;1862:12;1824:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1914:63;-1:-1;2014:2;2053:22;;72:20;97:33;72:20;97:33;:::i;:::-;1818:391;;2022:63;;-1:-1;;;2122:2;2161:22;;;;616:20;;1818:391::o;2216:366::-;;;2337:2;2325:9;2316:7;2312:23;2308:32;2305:2;;;-1:-1;;2343:12;2305:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2395:63;2495:2;2534:22;;;;616:20;;-1:-1;;;2299:283::o;2589:491::-;;;;2727:2;2715:9;2706:7;2702:23;2698:32;2695:2;;;-1:-1;;2733:12;2695:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2785:63;2885:2;2924:22;;616:20;;-1:-1;2993:2;3032:22;;;616:20;;2689:391;-1:-1;;;2689:391::o;3087:235::-;;3188:2;3176:9;3167:7;3163:23;3159:32;3156:2;;;-1:-1;;3194:12;3156:2;360:6;347:20;372:30;396:5;372:30;:::i;3329:257::-;;3441:2;3429:9;3420:7;3416:23;3412:32;3409:2;;;-1:-1;;3447:12;3409:2;495:6;489:13;507:30;531:5;507:30;:::i;3593:241::-;;3697:2;3685:9;3676:7;3672:23;3668:32;3665:2;;;-1:-1;;3703:12;3665:2;-1:-1;616:20;;3659:175;-1:-1;3659:175::o;3841:263::-;;3956:2;3944:9;3935:7;3931:23;3927:32;3924:2;;;-1:-1;;3962:12;3924:2;-1:-1;764:13;;3918:186;-1:-1;3918:186::o;4111:366::-;;;4232:2;4220:9;4211:7;4207:23;4203:32;4200:2;;;-1:-1;;4238:12;4200:2;629:6;616:20;4290:63;;4390:2;4433:9;4429:22;72:20;97:33;124:5;97:33;:::i;4484:535::-;;;;4633:2;4621:9;4612:7;4608:23;4604:32;4601:2;;;-1:-1;;4639:12;4601:2;770:6;764:13;4691:74;;4802:2;4856:9;4852:22;764:13;4810:74;;4921:2;4975:9;4971:22;764:13;4929:74;;4595:424;;;;;:::o;18526:222::-;-1:-1;;;;;40024:54;;;;5418:37;;18653:2;18638:18;;18624:124::o;18755:333::-;-1:-1;;;;;40024:54;;;5418:37;;40024:54;;19074:2;19059:18;;5418:37;18910:2;18895:18;;18881:207::o;19095:1036::-;-1:-1;;;;;40024:54;;;5418:37;;40024:54;;;19599:2;19584:18;;5418:37;19682:2;19667:18;;18363:37;;;;19765:2;19750:18;;18363:37;;;;19856:3;19841:19;;6872:58;;;;40035:42;19933:19;;6872:58;40024:54;;;20032:3;20017:19;;5418:37;20116:3;20101:19;;18363:37;;;;19434:3;19419:19;;19405:726::o;20138:333::-;-1:-1;;;;;40024:54;;;;5418:37;;20457:2;20442:18;;18363:37;20293:2;20278:18;;20264:207::o;20478:828::-;-1:-1;;;;;40024:54;;;5418:37;;20934:2;20919:18;;18363:37;;;;21025:2;21010:18;;6872:58;;;;21116:2;21101:18;;6872:58;;;;40024:54;;;21207:3;21192:19;;5287:58;40035:42;21276:19;;18363:37;;;;20769:3;20754:19;;20740:566::o;21313:544::-;-1:-1;;;;;40024:54;;;;5418:37;;21683:2;21668:18;;18363:37;;;;21766:2;21751:18;;18363:37;39936:13;39929:21;21843:2;21828:18;;6381:34;21518:3;21503:19;;21489:368::o;21864:780::-;-1:-1;;;;;40024:54;;;;5418:37;;22296:2;22281:18;;18363:37;;;;22379:2;22364:18;;18363:37;;;;22462:2;22447:18;;18363:37;22545:3;22530:19;;18363:37;40035:42;22614:19;;18363:37;22131:3;22116:19;;22102:542::o;22651:210::-;39936:13;;39929:21;6381:34;;22772:2;22757:18;;22743:118::o;23426:264::-;6872:58;;;23574:2;23559:18;;23545:145::o;23697:310::-;;23844:2;;23865:17;23858:47;7262:5;39128:12;39544:6;23844:2;23833:9;23829:18;39532:19;-1:-1;41604:101;41618:6;41615:1;41612:13;41604:101;;;41685:11;;;;;41679:18;41666:11;;;39572:14;41666:11;41659:39;41633:10;;41604:101;;;41720:6;41717:1;41714:13;41711:2;;;-1:-1;39572:14;41776:6;23833:9;41767:16;;41760:27;41711:2;-1:-1;41892:7;41876:14;-1:-1;;41872:28;7420:39;;;;39572:14;7420:39;;23815:192;-1:-1;;;23815:192::o;24014:416::-;24214:2;24228:47;;;7696:2;24199:18;;;39532:19;-1:-1;;;39572:14;;;7712:45;7776:12;;;24185:245::o;24437:416::-;24637:2;24651:47;;;8027:2;24622:18;;;39532:19;8063:34;39572:14;;;8043:55;-1:-1;;;8118:12;;;8111:27;8157:12;;;24608:245::o;24860:416::-;25060:2;25074:47;;;8408:1;25045:18;;;39532:19;-1:-1;;;39572:14;;;8423:29;8471:12;;;25031:245::o;25283:416::-;25483:2;25497:47;;;8722:2;25468:18;;;39532:19;8758:26;39572:14;;;8738:47;8804:12;;;25454:245::o;25706:416::-;25906:2;25920:47;;;9055:2;25891:18;;;39532:19;9091:34;39572:14;;;9071:55;-1:-1;;;9146:12;;;9139:30;9188:12;;;25877:245::o;26129:416::-;26329:2;26343:47;;;9439:2;26314:18;;;39532:19;9475:34;39572:14;;;9455:55;-1:-1;;;9530:12;;;9523:26;9568:12;;;26300:245::o;26552:416::-;26752:2;26766:47;;;9819:2;26737:18;;;39532:19;-1:-1;;;39572:14;;;9835:34;9888:12;;;26723:245::o;26975:416::-;27175:2;27189:47;;;10139:2;27160:18;;;39532:19;10175:30;39572:14;;;10155:51;10225:12;;;27146:245::o;27398:416::-;27598:2;27612:47;;;10476:2;27583:18;;;39532:19;10512:29;39572:14;;;10492:50;10561:12;;;27569:245::o;27821:416::-;28021:2;28035:47;;;28006:18;;;39532:19;10848:34;39572:14;;;10828:55;10902:12;;;27992:245::o;28244:416::-;28444:2;28458:47;;;11153:2;28429:18;;;39532:19;11189:34;39572:14;;;11169:55;-1:-1;;;11244:12;;;11237:27;11283:12;;;28415:245::o;28667:416::-;28867:2;28881:47;;;11534:2;28852:18;;;39532:19;-1:-1;;;39572:14;;;11550:37;11606:12;;;28838:245::o;29090:416::-;29290:2;29304:47;;;11857:2;29275:18;;;39532:19;-1:-1;;;39572:14;;;11873:35;11927:12;;;29261:245::o;29513:416::-;29713:2;29727:47;;;29698:18;;;39532:19;12214:34;39572:14;;;12194:55;12268:12;;;29684:245::o;29936:416::-;30136:2;30150:47;;;12519:2;30121:18;;;39532:19;-1:-1;;;39572:14;;;12535:43;12597:12;;;30107:245::o;30359:416::-;30559:2;30573:47;;;12848:2;30544:18;;;39532:19;12884:34;39572:14;;;12864:55;-1:-1;;;12939:12;;;12932:29;12980:12;;;30530:245::o;30782:416::-;30982:2;30996:47;;;13231:2;30967:18;;;39532:19;-1:-1;;;39572:14;;;13247:34;13300:12;;;30953:245::o;31205:416::-;31405:2;31419:47;;;13551:2;31390:18;;;39532:19;13587:30;39572:14;;;13567:51;13637:12;;;31376:245::o;31628:416::-;31828:2;31842:47;;;13888:2;31813:18;;;39532:19;13924:34;39572:14;;;13904:55;-1:-1;;;13979:12;;;13972:28;14019:12;;;31799:245::o;32051:416::-;32251:2;32265:47;;;14270:2;32236:18;;;39532:19;-1:-1;;;39572:14;;;14286:33;14338:12;;;32222:245::o;32474:416::-;32674:2;32688:47;;;14589:2;32659:18;;;39532:19;14625:34;39572:14;;;14605:55;-1:-1;;;14680:12;;;14673:25;14717:12;;;32645:245::o;32897:416::-;33097:2;33111:47;;;33082:18;;;39532:19;15004:34;39572:14;;;14984:55;15058:12;;;33068:245::o;33320:416::-;33520:2;33534:47;;;15309:2;33505:18;;;39532:19;15345:32;39572:14;;;15325:53;15397:12;;;33491:245::o;33743:416::-;33943:2;33957:47;;;15648:2;33928:18;;;39532:19;15684:34;39572:14;;;15664:55;-1:-1;;;15739:12;;;15732:28;15779:12;;;33914:245::o;34166:416::-;34366:2;34380:47;;;16030:2;34351:18;;;39532:19;16066:33;39572:14;;;16046:54;16119:12;;;34337:245::o;34589:416::-;34789:2;34803:47;;;16370:2;34774:18;;;39532:19;16406:34;39572:14;;;16386:55;-1:-1;;;16461:12;;;16454:29;16502:12;;;34760:245::o;35012:416::-;35212:2;35226:47;;;16753:2;35197:18;;;39532:19;16789:34;39572:14;;;16769:55;-1:-1;;;16844:12;;;16837:28;16884:12;;;35183:245::o;35435:416::-;35635:2;35649:47;;;17135:2;35620:18;;;39532:19;17171:32;39572:14;;;17151:53;17223:12;;;35606:245::o;35858:416::-;36058:2;36072:47;;;17474:2;36043:18;;;39532:19;17510:34;39572:14;;;17490:55;-1:-1;;;17565:12;;;17558:30;17607:12;;;36029:245::o;36281:416::-;36481:2;36495:47;;;17858:2;36466:18;;;39532:19;17894:28;39572:14;;;17874:49;17942:12;;;36452:245::o;36704:416::-;36904:2;36918:47;;;18193:2;36889:18;;;39532:19;-1:-1;;;39572:14;;;18209:38;18266:12;;;36875:245::o;37356:832::-;;37653:3;37642:9;37638:19;18393:5;18370:3;18363:37;37826:2;41116:24;37826:2;37815:9;37811:18;6872:58;37653:3;37863:2;37852:9;37848:18;37841:48;37903:108;5811:5;39128:12;39544:6;39539:3;39532:19;39572:14;37642:9;39572:14;5823:93;;37826:2;5987:5;38982:14;5999:21;;-1:-1;6026:260;6051:6;6048:1;6045:13;6026:260;;;6112:13;;-1:-1;;;;;40024:54;5418:37;;39387:14;;;;5180;;;;40035:42;6066:9;6026:260;;;-1:-1;;;;;;;40024:54;;;;38090:2;38075:18;;5418:37;-1:-1;;;38173:3;38158:19;18363:37;37895:116;37624:564;-1:-1;;;37624:564::o;38195:444::-;18363:37;;;38542:2;38527:18;;18363:37;;;;38625:2;38610:18;;18363:37;38378:2;38363:18;;38349:290::o;38646:214::-;40240:4;40229:16;;;;18479:35;;38769:2;38754:18;;38740:120::o;41913:117::-;-1:-1;;;;;40024:54;;41972:35;;41962:2;;42021:1;;42011:12;42037:111;42118:5;39936:13;39929:21;42096:5;42093:32;42083:2;;42139:1;;42129:12

Swarm Source

ipfs://c801075779afd134169e01f47939ba0b0e2651e333b9d042d9e3967b7bd7030b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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