ETH Price: $3,203.64 (+2.33%)

Token

Protocore (pCORE)
 

Overview

Max Total Supply

10,000 pCORE

Holders

51

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1 pCORE

Value
$0.00
0x73c4ec9a0a8f85c085eb9efb67bde1fee0c7f578
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Protocore

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, BSD-3-Clause license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-10-22
*/

pragma solidity 0.5.17;

   
/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) onlyOwner public {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
}

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}


/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) internal balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }
}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}


/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) internal allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));

    uint256 _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // require (_value <= _allowance);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    emit Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval (address _spender, uint _addedValue) public
    returns (bool success) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval (address _spender, uint _subtractedValue) public
    returns (bool success) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }
}


interface tokenRecipient { 
    function receiveTokens(address _from, uint256 _value, bytes calldata _extraData) external;
}

/**
 * @title Burnable Token
 * @dev Token that can be irreversibly burned (destroyed).
 */
contract BurnableToken is StandardToken {

    event Burn(address indexed burner, uint256 value);

    /**
     * @dev Burns a specific amount of tokens.
     * @param _value The amount of token to be burned.
     */
    function _burn(address burner, uint256 _value) internal {
        require(_value > 0);
        require(_value <= balances[burner]);
        // no need to require value <= totalSupply, since that would imply the
        // sender's balance is greater than the totalSupply, which *should* be an assertion failure

        balances[burner] = balances[burner].sub(_value);
        totalSupply = totalSupply.sub(_value);
        emit Transfer(burner, address(0), _value);
        emit Burn(burner, _value);
    }
    
    function burn(uint _value) public {
        _burn(msg.sender, _value);
    }
}

contract 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 migrator() external view returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}


contract Protocore is BurnableToken, Ownable {
    
    event LiquidityAddition(address indexed dst, uint value);
    event LPTokenClaimed(address dst, uint value);
    
    uint256 public contractStartTimestamp;
    
    address public feeDistributorAddress;
    address public reserveAddress;
    address public devAddress;
    
    uint public reserveFeePercentX100 = 20;
    uint public devFeePercentX100 = 10;
    uint public disburseFeePercentX100 = 100;
    
    uint public liquidityGenerationDuration = 3 days;
    uint public adminCanDrainContractAfter = 4 days;
    
    IUniswapV2Router02 public uniswapRouterV2;
    IUniswapV2Factory public uniswapFactory;
    uint256 public lastTotalSupplyOfLPTokens;

    address public tokenUniswapPair;
    
    mapping (address => bool) public voidFeeList;
    mapping (address => bool) public voidFeeRecipientList;
    
    uint256 public totalLPTokensMinted;
    uint256 public totalETHContributed;
    uint256 public LPperETHUnit;

    string public constant name = "Protocore";
    string public constant symbol = "pCORE";
    uint public constant decimals = 18;
    // there is no problem in using * here instead of .mul()
    uint256 public constant initialSupply = 10000 * (10 ** uint256(decimals));
    
    uint public limitBuyAmount = 50e18;
    bool public isLimitBuyOn = true;
    
    function setLimitBuyAmount(uint _limitBuyAmount) public onlyOwner {
        limitBuyAmount = _limitBuyAmount;
    }
    
    function turnLimitBuyOff() public onlyOwner {
        isLimitBuyOn = false;
    }
    function turnLimitBuyOn() public onlyOwner {
        isLimitBuyOn = true;
    }
    
    function canTransfer(address sender, address recipient, uint amount) public view returns(bool) {
        // if pair is sending (buys are happening)
        if ((isLimitBuyOn) && (sender == tokenUniswapPair) && (amount > limitBuyAmount)) {
            return false;
        }
        return true;
    }
    
    function setFeeDistributor(address _feeDistributorAddress) public onlyOwner {
        feeDistributorAddress = _feeDistributorAddress;
    }
    function setReserveAddress(address _reserveAddress) public onlyOwner {
        reserveAddress = _reserveAddress;
    }
    function setDevAddress(address _devAddress) public onlyOwner {
        devAddress = _devAddress;
    }
    
    function setDisburseFeePercentX100(uint _disburseFeePercentX100) public onlyOwner {
        disburseFeePercentX100 = _disburseFeePercentX100;
    }
    function setReserveFeePercentX100(uint _reserveFeePercentX100) public onlyOwner {
        reserveFeePercentX100 = _reserveFeePercentX100;
    }
    function setDevFeePercentX100(uint _devFeePercentX100) public onlyOwner {
        devFeePercentX100 = _devFeePercentX100;
    }
    
    function editVoidFeeList(address _address, bool _noFee) public onlyOwner {
        voidFeeList[_address] = _noFee;
    }
    function editVoidFeeRecipientList(address _address, bool _noFee) public onlyOwner {
        voidFeeRecipientList[_address] = _noFee;
    }
    
    // -------------- fee approver functions ---------------
    
    function sync() public {
        uint256 _LPSupplyOfPairTotal = ERC20(tokenUniswapPair).totalSupply();
        lastTotalSupplyOfLPTokens = _LPSupplyOfPairTotal;
    }
    
    function calculateAmountsAfterFee(        
        address sender, // unusused maby used future
        address recipient, // unusued maybe use din future
        uint256 amount
        ) private returns (uint256 _amountToReserve, uint256 _amountToDisburse, uint256 _amountToDev) 
        {

            uint256 _LPSupplyOfPairTotal = ERC20(tokenUniswapPair).totalSupply();

            if(sender == tokenUniswapPair) 
                require(lastTotalSupplyOfLPTokens <= _LPSupplyOfPairTotal, "Liquidity withdrawals forbidden");


            if(sender == feeDistributorAddress  
                || sender == tokenUniswapPair 
                || voidFeeList[sender]
                || voidFeeRecipientList[recipient]
                || sender == address(this)
                ) { // Dont have a fee when corevault is sending, or infinite loop
                                     // And when pair is sending ( buys are happening, no tax on it)
                _amountToReserve = 0;
                _amountToDisburse = 0;
                _amountToDev = 0;
            } 
            else {
                
                _amountToReserve = amount.mul(reserveFeePercentX100).div(10000);
                _amountToDisburse = amount.mul(disburseFeePercentX100).div(10000);
                _amountToDev = amount.mul(devFeePercentX100).div(10000);
                
            }


           lastTotalSupplyOfLPTokens = _LPSupplyOfPairTotal;
        }
    
    // --------------- end fee approver functions ---------------
    

    function createUniswapPairMainnet() public returns (address) {
        require(tokenUniswapPair == address(0), "Token: pool already created");
        tokenUniswapPair = uniswapFactory.createPair(
            address(uniswapRouterV2.WETH()),
            address(this)
        );
        return tokenUniswapPair;
    }
    
    
    
    // Constructors
    constructor (address router, address factory) public {
        totalSupply = initialSupply;
        balances[address(this)] = initialSupply; // Send all tokens to owner
        emit Transfer(address(0), address(this), initialSupply);
        
        contractStartTimestamp = now;
        
        uniswapRouterV2 = IUniswapV2Router02(router != address(0) ? router : 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // For testing
        uniswapFactory = IUniswapV2Factory(factory != address(0) ? factory : 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); // For testing
        createUniswapPairMainnet();
    }
    
    function transfer(address to, uint amount) public returns (bool) {
        // uint _amountToReserve = amount.mul(reserveFeePercentX100).div(10000);
        // uint _amountToDisburse = amount.mul(disburseFeePercentX100).div(10000);
        // uint _amountToDev = amount.mul(devFeePercentX100).div(10000);
        
        require(canTransfer(msg.sender, to, amount), "Limit buys are on!");
        
        (uint _amountToReserve, uint _amountToDisburse, uint _amountToDev) = calculateAmountsAfterFee(msg.sender, to, amount);
        
        
        uint _amountAfterFee = amount.sub(_amountToReserve).sub(_amountToDisburse).sub(_amountToDev);

        require(super.transfer(feeDistributorAddress, _amountToDisburse), "Cannot disburse rewards.");        
        require(super.transfer(reserveAddress, _amountToReserve), "Cannot send tokens to reserve!");
        require(super.transfer(devAddress, _amountToDev), "Cannot transfer dev fee!");

        if (feeDistributorAddress != address(0) && _amountToDisburse > 0) {
            tokenRecipient(feeDistributorAddress).receiveTokens(msg.sender, _amountToDisburse, "");
        }
        require(super.transfer(to, _amountAfterFee), "Cannot transfer tokens.");
        return true;
    }
    
    function transferFrom(address from, address to, uint amount) public returns (bool) {
        
        require(canTransfer(from, to, amount), "Limit buys are on!");
        
        require(to != address(0));
        // uint _amountToReserve = amount.mul(reserveFeePercentX100).div(10000);
        // uint _amountToDev = amount.mul(devFeePercentX100).div(10000);
        // uint _amountToDisburse = amount.mul(disburseFeePercentX100).div(10000);
        
        (uint _amountToReserve, uint _amountToDisburse, uint _amountToDev) = calculateAmountsAfterFee(from, to, amount);
        
        
        uint _amountAfterFee = amount.sub(_amountToReserve).sub(_amountToDisburse).sub(_amountToDev);
        
        uint256 _allowance = allowed[from][msg.sender];
    
        // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
        // require (_value <= _allowance);

        balances[from] = balances[from].sub(_amountAfterFee);
        balances[to] = balances[to].add(_amountAfterFee);
        
        balances[from] = balances[from].sub(_amountToDisburse);
        balances[feeDistributorAddress] = balances[feeDistributorAddress].add(_amountToDisburse);
        
        balances[from] = balances[from].sub(_amountToDev);
        balances[devAddress] = balances[devAddress].add(_amountToDev);
        
        balances[from] = balances[from].sub(_amountToReserve);
        balances[reserveAddress] = balances[reserveAddress].add(_amountToReserve);
        
        
        allowed[from][msg.sender] = _allowance.sub(amount);
        

        emit Transfer(from, feeDistributorAddress, _amountToDisburse);
        emit Transfer(from, reserveAddress, _amountToReserve);
        emit Transfer(from, devAddress, _amountToDev);
        emit Transfer(from, to, _amountAfterFee);
        
        if (feeDistributorAddress != address(0) && _amountToDisburse > 0) {
            tokenRecipient(feeDistributorAddress).receiveTokens(msg.sender, _amountToDisburse, "");
        }
        return true;
    }
    
    // --------------- Liquidity Generation Event Scripts ---------------
    
    //// Liquidity generation logic
    /// Steps - All tokens tat will ever exist go to this contract
    /// This contract accepts ETH as payable
    /// ETH is mapped to people
    /// When liquidity generationevent is over veryone can call
    /// the mint LP function
    // which will put all the ETH and tokens inside the uniswap contract
    /// without any involvement
    /// This LP will go into this contract
    /// And will be able to proportionally be withdrawn baed on ETH put in
    /// A emergency drain function allows the contract owner to drain all ETH and tokens from this contract
    /// After the liquidity generation event happened. In case something goes wrong, to send ETH back


    string public liquidityGenerationParticipationAgreement = "I agree that the developers and affiliated parties of the Protocore team are not responsible for my funds";

    function liquidityGenerationOngoing() public view returns (bool) {
        return contractStartTimestamp.add(liquidityGenerationDuration) > block.timestamp;
    }
    function canAdminDrainContract() public view returns (bool) {
        return contractStartTimestamp.add(adminCanDrainContractAfter) < block.timestamp;
    }
    
    // Emergency drain in case of a bug
    // Adds all funds to owner to refund people
    // Designed to be as simple as possible
    function emergencyDrain24hAfterLiquidityGenerationEventIsDone() public onlyOwner {
        require(canAdminDrainContract(), "Liquidity generation grace period still ongoing"); // About 24h after liquidity generation happens
        (bool success, ) = msg.sender.call.value(address(this).balance)("");
        require(success, "Transfer failed.");
        emit Transfer(address(this), msg.sender, balances[address(this)]);
        balances[msg.sender] = balances[address(this)];
        balances[address(this)] = 0;
    }
    
    bool public LPGenerationCompleted;
    // Sends all avaibile balances and mints LP tokens
    // Possible ways this could break addressed
    // 1) Multiple calls and resetting amounts - addressed with boolean
    // 2) Failed WETH wrapping/unwrapping addressed with checks
    // 3) Failure to create LP tokens, addressed with checks
    // 4) Unacceptable division errors . Addressed with multiplications by 1e18
    // 5) Pair not set - impossible since its set in constructor
    function addLiquidityToUniswapPROTOCORExWETHPair() public onlyOwner {
        require(liquidityGenerationOngoing() == false, "Liquidity generation onging");
        require(LPGenerationCompleted == false, "Liquidity generation already finished");
        totalETHContributed = address(this).balance;
        IUniswapV2Pair pair = IUniswapV2Pair(tokenUniswapPair);
        
        //Wrap eth
        address WETH = uniswapRouterV2.WETH();
        IWETH(WETH).deposit.value(totalETHContributed)();
        require(address(this).balance == 0 , "Transfer Failed");
        IWETH(WETH).transfer(address(pair),totalETHContributed);
        emit Transfer(address(this), address(pair), balances[address(this)]);
        balances[address(pair)] = balances[address(this)];
        balances[address(this)] = 0;
        pair.mint(address(this));
        totalLPTokensMinted = pair.balanceOf(address(this));
        
        require(totalLPTokensMinted != 0 , "LP creation failed");
        LPperETHUnit = totalLPTokensMinted.mul(1e18).div(totalETHContributed); // 1e18x for  change
        
        require(LPperETHUnit != 0 , "LP creation failed");
        LPGenerationCompleted = true;
        sync();
    }
    
    mapping (address => uint)  public ethContributed;
    // Possible ways this could break addressed
    // 1) No ageement to terms - added require
    // 2) Adding liquidity after generaion is over - added require
    // 3) Overflow from uint - impossible there isnt that much ETH aviable
    // 4) Depositing 0 - not an issue it will just add 0 to tally
    function addLiquidity(bool agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement) public payable {
        require(liquidityGenerationOngoing(), "Liquidity Generation Event over");
        require(agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement, "No agreement provided");
        ethContributed[msg.sender] += msg.value; // Overflow protection from safemath is not neded here
        totalETHContributed = totalETHContributed.add(msg.value); // for front end display during LGE. This resets with definietly correct balance while calling pair.
        emit LiquidityAddition(msg.sender, msg.value);
    }

    // Possible ways this could break addressed
    // 1) Accessing before event is over and resetting eth contributed -- added require
    // 2) No uniswap pair - impossible at this moment because of the LPGenerationCompleted bool
    // 3) LP per unit is 0 - impossible checked at generation function
    function claimLPTokens() public {
        require(LPGenerationCompleted, "Event not over yet");
        require(ethContributed[msg.sender] > 0 , "Nothing to claim, move along");
        IUniswapV2Pair pair = IUniswapV2Pair(tokenUniswapPair);
        uint256 amountLPToTransfer = ethContributed[msg.sender].mul(LPperETHUnit).div(1e18);
        pair.transfer(msg.sender, amountLPToTransfer); // stored as 1e18x value for change
        ethContributed[msg.sender] = 0;
        emit LPTokenClaimed(msg.sender, amountLPToTransfer);
    }
    
    // --------------- End Liquidity Generation Event Scripts ---------------
    
    // token recovery function
    function transferAnyERC20Token(address _tokenAddress, address _to, uint _amount) public onlyOwner {
        require(_tokenAddress != tokenUniswapPair, "Admin Cannot transfer out pCORE/WETH LP Tokens from this contract!");
        require(canAdminDrainContract(), "Liquidity generation grace period still ongoing");
        ERC20(_tokenAddress).transfer(_to, _amount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"payable":false,"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":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LPTokenClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LiquidityAddition","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"},{"constant":true,"inputs":[],"name":"LPGenerationCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LPperETHUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"agreesToTermsOutlinedInLiquidityGenerationParticipationAgreement","type":"bool"}],"name":"addLiquidity","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"addLiquidityToUniswapPROTOCORExWETHPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"adminCanDrainContractAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"canAdminDrainContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"canTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimLPTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"createUniswapPairMainnet","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devFeePercentX100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"disburseFeePercentX100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_noFee","type":"bool"}],"name":"editVoidFeeList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_noFee","type":"bool"}],"name":"editVoidFeeRecipientList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"emergencyDrain24hAfterLiquidityGenerationEventIsDone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeDistributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isLimitBuyOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTotalSupplyOfLPTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"limitBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"liquidityGenerationDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"liquidityGenerationOngoing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"liquidityGenerationParticipationAgreement","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reserveAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reserveFeePercentX100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_devFeePercentX100","type":"uint256"}],"name":"setDevFeePercentX100","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_disburseFeePercentX100","type":"uint256"}],"name":"setDisburseFeePercentX100","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeDistributorAddress","type":"address"}],"name":"setFeeDistributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_limitBuyAmount","type":"uint256"}],"name":"setLimitBuyAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_reserveAddress","type":"address"}],"name":"setReserveAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_reserveFeePercentX100","type":"uint256"}],"name":"setReserveFeePercentX100","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenUniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalETHContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalLPTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"turnLimitBuyOff","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"turnLimitBuyOn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"uniswapRouterV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voidFeeList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voidFeeRecipientList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040526014600855600a6009556064600a556203f480600b5562054600600c556802b5e3af16b18800006016556001601760006101000a81548160ff0219169083151502179055506040518060a0016040528060698152602001620059cb60699139601890805190602001906200007a929190620005ff565b503480156200008857600080fd5b5060405162005a3438038062005a3483398181016040526040811015620000ae57600080fd5b81019080805190602001909291908051906020019092919050505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a0a612710026000819055506012600a0a61271002600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a0a612710026040518082815260200191505060405180910390a342600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200022b57737a250d5630b4cf539739df2c5dacb4c659f2488d6200022d565b815b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620002be57735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f620002c0565b805b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003106200031960201b60201c565b505050620006ae565b60008073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620003df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f6b656e3a20706f6f6c20616c72656164792063726561746564000000000081525060200191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c65396600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200048657600080fd5b505afa1580156200049b573d6000803e3d6000fd5b505050506040513d6020811015620004b257600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200055a57600080fd5b505af11580156200056f573d6000803e3d6000fd5b505050506040513d60208110156200058657600080fd5b8101908080519060200190929190505050601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200064257805160ff191683800117855562000673565b8280016001018555821562000673579182015b828111156200067257825182559160200191906001019062000655565b5b50905062000682919062000686565b5090565b620006ab91905b80821115620006a75760008160009055506001016200068d565b5090565b90565b61530d80620006be6000396000f3fe60806040526004361061038b5760003560e01c806392f61930116101dc578063da620cd711610102578063f28a2143116100a0578063f5f8155e1161006f578063f5f8155e1461137d578063f79ed94b146113a8578063f96f5b35146113ff578063fff6cae9146114645761038b565b8063f28a214314611269578063f2fde38b146112a4578063f322de78146112f5578063f40c1510146113205761038b565b8063e0dc1756116100dc578063e0dc175614611141578063e46638e61461117c578063e7d9a0eb1461120f578063eadf46971461123e5761038b565b8063da620cd714611051578063dd62ed3e14611081578063dfbb4322146111065761038b565b8063b6f5265a1161017a578063d0d41fe111610149578063d0d41fe114610ea9578063d231303d14610efa578063d493b9ac14610f63578063d73dd62314610fde5761038b565b8063b6f5265a14610d81578063bc70cd8c14610d98578063c8c0e7e414610def578063ccfc2e8d14610e585761038b565b8063a51748a1116101b6578063a51748a114610c5b578063a9059cbb14610c86578063abc1fecb14610cf9578063b237e8e114610d565761038b565b806392f6193014610b7157806395d89b4114610b9c5780639786207c14610c2c5761038b565b80634d332457116102c157806373996c031161025f57806387d9c50d1161022e57806387d9c50d14610a1c5780638bdb2afa14610a335780638da5cb5b14610a8a5780638e8e292514610ae15761038b565b806373996c031461094857806375b208bc146109835780637988d865146109da5780637e5d9835146109f15761038b565b806360a025901161029b57806360a025901461081657806366188463146108455780636a2f796c146108b857806370a08231146108e35761038b565b80634d332457146107515780634f1a0f7d146107a8578063596fa9e3146107bf5761038b565b806323b872dd1161032e578063378dc3dc11610308578063378dc3dc1461067d57806338af6632146106a85780633ad10ef6146106bf57806342966c68146107165761038b565b806323b872dd14610594578063313ce5671461062757806331a22a20146106525761038b565b806314673d311161036a57806314673d31146104be57806314b8fecc1461050f57806318160ddd1461053e57806323399434146105695761038b565b80622b13291461039057806306fdde03146103bb578063095ea7b31461044b575b600080fd5b34801561039c57600080fd5b506103a561147b565b6040518082815260200191505060405180910390f35b3480156103c757600080fd5b506103d0611481565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104105780820151818401526020810190506103f5565b50505050905090810190601f16801561043d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561045757600080fd5b506104a46004803603604081101561046e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114ba565b604051808215151515815260200191505060405180910390f35b3480156104ca57600080fd5b5061050d600480360360208110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115ac565b005b34801561051b57600080fd5b5061052461164a565b604051808215151515815260200191505060405180910390f35b34801561054a57600080fd5b5061055361165d565b6040518082815260200191505060405180910390f35b34801561057557600080fd5b5061057e611663565b6040518082815260200191505060405180910390f35b3480156105a057600080fd5b5061060d600480360360608110156105b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611669565b604051808215151515815260200191505060405180910390f35b34801561063357600080fd5b5061063c61213f565b6040518082815260200191505060405180910390f35b34801561065e57600080fd5b50610667612144565b6040518082815260200191505060405180910390f35b34801561068957600080fd5b5061069261214a565b6040518082815260200191505060405180910390f35b3480156106b457600080fd5b506106bd612156565b005b3480156106cb57600080fd5b506106d461249d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072257600080fd5b5061074f6004803603602081101561073957600080fd5b81019080803590602001909291905050506124c3565b005b34801561075d57600080fd5b506107666124d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107b457600080fd5b506107bd6124f6565b005b3480156107cb57600080fd5b506107d46127f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082257600080fd5b5061082b61281e565b604051808215151515815260200191505060405180910390f35b34801561085157600080fd5b5061089e6004803603604081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061283e565b604051808215151515815260200191505060405180910390f35b3480156108c457600080fd5b506108cd612acf565b6040518082815260200191505060405180910390f35b3480156108ef57600080fd5b506109326004803603602081101561090657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ad5565b6040518082815260200191505060405180910390f35b34801561095457600080fd5b506109816004803603602081101561096b57600080fd5b8101908080359060200190929190505050612b1e565b005b34801561098f57600080fd5b50610998612b82565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e657600080fd5b506109ef612e61565b005b3480156109fd57600080fd5b50610a06612ed8565b6040518082815260200191505060405180910390f35b348015610a2857600080fd5b50610a31612ede565b005b348015610a3f57600080fd5b50610a48612f55565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a9657600080fd5b50610a9f612f7b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aed57600080fd5b50610af6612fa1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b36578082015181840152602081019050610b1b565b50505050905090810190601f168015610b635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b7d57600080fd5b50610b8661303f565b6040518082815260200191505060405180910390f35b348015610ba857600080fd5b50610bb1613045565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bf1578082015181840152602081019050610bd6565b50505050905090810190601f168015610c1e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c3857600080fd5b50610c4161307e565b604051808215151515815260200191505060405180910390f35b348015610c6757600080fd5b50610c70613091565b6040518082815260200191505060405180910390f35b348015610c9257600080fd5b50610cdf60048036036040811015610ca957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613097565b604051808215151515815260200191505060405180910390f35b348015610d0557600080fd5b50610d5460048036036040811015610d1c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613505565b005b348015610d6257600080fd5b50610d6b6135ba565b6040518082815260200191505060405180910390f35b348015610d8d57600080fd5b50610d966135c0565b005b348015610da457600080fd5b50610dad613daf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dfb57600080fd5b50610e3e60048036036020811015610e1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613dd5565b604051808215151515815260200191505060405180910390f35b348015610e6457600080fd5b50610ea760048036036020811015610e7b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613df5565b005b348015610eb557600080fd5b50610ef860048036036020811015610ecc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e93565b005b348015610f0657600080fd5b50610f4960048036036020811015610f1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f31565b604051808215151515815260200191505060405180910390f35b348015610f6f57600080fd5b50610fdc60048036036060811015610f8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613f51565b005b348015610fea57600080fd5b506110376004803603604081101561100157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614177565b604051808215151515815260200191505060405180910390f35b61107f6004803603602081101561106757600080fd5b81019080803515159060200190929190505050614373565b005b34801561108d57600080fd5b506110f0600480360360408110156110a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614519565b6040518082815260200191505060405180910390f35b34801561111257600080fd5b5061113f6004803603602081101561112957600080fd5b81019080803590602001909291905050506145a0565b005b34801561114d57600080fd5b5061117a6004803603602081101561116457600080fd5b8101908080359060200190929190505050614604565b005b34801561118857600080fd5b506111f56004803603606081101561119f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614668565b604051808215151515815260200191505060405180910390f35b34801561121b57600080fd5b506112246146fa565b604051808215151515815260200191505060405180910390f35b34801561124a57600080fd5b5061125361471a565b6040518082815260200191505060405180910390f35b34801561127557600080fd5b506112a26004803603602081101561128c57600080fd5b8101908080359060200190929190505050614720565b005b3480156112b057600080fd5b506112f3600480360360208110156112c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614784565b005b34801561130157600080fd5b5061130a6148d8565b6040518082815260200191505060405180910390f35b34801561132c57600080fd5b5061137b6004803603604081101561134357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506148de565b005b34801561138957600080fd5b50611392614993565b6040518082815260200191505060405180910390f35b3480156113b457600080fd5b506113bd614999565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561140b57600080fd5b5061144e6004803603602081101561142257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506149bf565b6040518082815260200191505060405180910390f35b34801561147057600080fd5b506114796149d7565b005b60135481565b6040518060400160405280600981526020017f50726f746f636f7265000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461160657600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601960009054906101000a900460ff1681565b60005481565b60145481565b6000611676848484614668565b6116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c696d6974206275797320617265206f6e21000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561172257600080fd5b6000806000611732878787614a88565b92509250925060006117718261176385611755888b614e3290919063ffffffff16565b614e3290919063ffffffff16565b614e3290919063ffffffff16565b90506000600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061184682600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118db82600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061197084600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a278460016000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b60016000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ade83600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b958360016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c4c85600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d038560016000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b60016000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d7b8782614e3290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156120545750600084115b1561212f57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638bc1e07633866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001806020018281038252600081526020016020019350505050600060405180830381600087803b15801561211657600080fd5b505af115801561212a573d6000803e3d6000fd5b505050505b6001955050505050509392505050565b601281565b60155481565b6012600a0a6127100281565b601960009054906101000a900460ff166121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4576656e74206e6f74206f76657220796574000000000000000000000000000081525060200191505060405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161228d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4e6f7468696e6720746f20636c61696d2c206d6f766520616c6f6e670000000081525060200191505060405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000612324670de0b6b3a7640000612316601554601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e6590919063ffffffff16565b614e9490919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156123ad57600080fd5b505af11580156123c1573d6000803e3d6000fd5b505050506040513d60208110156123d757600080fd5b8101908080519060200190929190505050506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f586e28f4f60b4d906fc69694ea6d7fe5c5668730ce3286d7af8eca868f3c27603382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124cd3382614ead565b50565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461255057600080fd5b6125586146fa565b6125ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615243602f913960400191505060405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d806000811461260d576040519150601f19603f3d011682016040523d82523d6000602084013e612612565b606091505b5050905080612689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616e73666572206661696c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600042612838600b54600454614e4990919063ffffffff16565b11905090565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561294f576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129e3565b6129628382614e3290919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60045481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7857600080fd5b8060168190555050565b60008073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f6b656e3a20706f6f6c20616c72656164792063726561746564000000000081525060200191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c65396600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612ced57600080fd5b505afa158015612d01573d6000803e3d6000fd5b505050506040513d6020811015612d1757600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015612dbe57600080fd5b505af1158015612dd2573d6000803e3d6000fd5b505050506040513d6020811015612de857600080fd5b8101908080519060200190929190505050601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ebb57600080fd5b6001601760006101000a81548160ff021916908315150217905550565b60085481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f3857600080fd5b6000601760006101000a81548160ff021916908315150217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60188054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130375780601f1061300c57610100808354040283529160200191613037565b820191906000526020600020905b81548152906001019060200180831161301a57829003601f168201915b505050505081565b600f5481565b6040518060400160405280600581526020017f70434f524500000000000000000000000000000000000000000000000000000081525081565b601760009054906101000a900460ff1681565b600c5481565b60006130a4338484614668565b613116576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c696d6974206275797320617265206f6e21000000000000000000000000000081525060200191505060405180910390fd5b6000806000613126338787614a88565b92509250925060006131658261315785613149888b614e3290919063ffffffff16565b614e3290919063ffffffff16565b614e3290919063ffffffff16565b9050613193600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461506e565b613205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43616e6e6f7420646973627572736520726577617264732e000000000000000081525060200191505060405180910390fd5b613231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561506e565b6132a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f43616e6e6f742073656e6420746f6b656e7320746f207265736572766521000081525060200191505060405180910390fd5b6132cf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361506e565b613341576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43616e6e6f74207472616e73666572206465762066656521000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156133a05750600083115b1561347b57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638bc1e07633856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001806020018281038252600081526020016020019350505050600060405180830381600087803b15801561346257600080fd5b505af1158015613476573d6000803e3d6000fd5b505050505b613485878261506e565b6134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74207472616e7366657220746f6b656e732e00000000000000000081525060200191505060405180910390fd5b600194505050505092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461355f57600080fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461361a57600080fd5b6000151561362661281e565b15151461369b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c69717569646974792067656e65726174696f6e206f6e67696e67000000000081525060200191505060405180910390fd5b60001515601960009054906101000a900460ff16151514613707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806152b46025913960400191505060405180910390fd5b476014819055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561379f57600080fd5b505afa1580156137b3573d6000803e3d6000fd5b505050506040513d60208110156137c957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db06014546040518263ffffffff1660e01b81526004016000604051808303818588803b15801561382657600080fd5b505af115801561383a573d6000803e3d6000fd5b5050505050600047146138b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572204661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb836014546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561393e57600080fd5b505af1158015613952573d6000803e3d6000fd5b505050506040513d602081101561396857600080fd5b8101908080519060200190929190505050508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16636a627842306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015613b6557600080fd5b505af1158015613b79573d6000803e3d6000fd5b505050506040513d6020811015613b8f57600080fd5b8101908080519060200190929190505050508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613c1e57600080fd5b505afa158015613c32573d6000803e3d6000fd5b505050506040513d6020811015613c4857600080fd5b810190808051906020019092919050505060138190555060006013541415613cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c50206372656174696f6e206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b613d09601454613cfb670de0b6b3a7640000601354614e6590919063ffffffff16565b614e9490919063ffffffff16565b60158190555060006015541415613d88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c50206372656174696f6e206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b6001601960006101000a81548160ff021916908315150217905550613dab6149d7565b5050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613e4f57600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613eed57600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613fab57600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260428152602001806152726042913960600191505060405180910390fd5b61405a6146fa565b6140af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615243602f913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561413657600080fd5b505af115801561414a573d6000803e3d6000fd5b505050506040513d602081101561416057600080fd5b810190808051906020019092919050505050505050565b600061420882600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b61437b61281e565b6143ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4c69717569646974792047656e65726174696f6e204576656e74206f7665720081525060200191505060405180910390fd5b80614460576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f2061677265656d656e742070726f7669646564000000000000000000000081525060200191505060405180910390fd5b34601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506144c234601454614e4990919063ffffffff16565b6014819055503373ffffffffffffffffffffffffffffffffffffffff167f20b711375edba008429d2f91787c68aa13aab7f267c346bf91be1a104d8b7b8b346040518082815260200191505060405180910390a250565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146145fa57600080fd5b8060088190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461465e57600080fd5b8060098190555050565b6000601760009054906101000a900460ff1680156146d35750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156146e0575060165482115b156146ee57600090506146f3565b600190505b9392505050565b600042614714600c54600454614e4990919063ffffffff16565b10905090565b600a5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461477a57600080fd5b80600a8190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146147de57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561481857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461493857600080fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a6020528060005260406000206000915090505481565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614a4157600080fd5b505afa158015614a55573d6000803e3d6000fd5b505050506040513d6020811015614a6b57600080fd5b8101908080519060200190929190505050905080600f8190555050565b600080600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614af657600080fd5b505afa158015614b0a573d6000803e3d6000fd5b505050506040513d6020811015614b2057600080fd5b81019080805190602001909291905050509050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415614c025780600f541115614c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4c6971756964697479207769746864726177616c7320666f7262696464656e0081525060200191505060405180910390fd5b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480614cab5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b80614cff5750601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80614d535750601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80614d8957503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b15614d9f57600093506000925060009150614e21565b614dc8612710614dba60085488614e6590919063ffffffff16565b614e9490919063ffffffff16565b9350614df3612710614de5600a5488614e6590919063ffffffff16565b614e9490919063ffffffff16565b9250614e1e612710614e1060095488614e6590919063ffffffff16565b614e9490919063ffffffff16565b91505b80600f819055505093509350939050565b600082821115614e3e57fe5b818303905092915050565b600080828401905083811015614e5b57fe5b8091505092915050565b60008082840290506000841480614e84575082848281614e8157fe5b04145b614e8a57fe5b8091505092915050565b600080828481614ea057fe5b0490508091505092915050565b60008111614eba57600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115614f0657600080fd5b614f5881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fb081600054614e3290919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156150a957600080fd5b6150fb82600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061519082600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509291505056fe4c69717569646974792067656e65726174696f6e20677261636520706572696f64207374696c6c206f6e676f696e6741646d696e2043616e6e6f74207472616e73666572206f75742070434f52452f57455448204c5020546f6b656e732066726f6d207468697320636f6e7472616374214c69717569646974792067656e65726174696f6e20616c72656164792066696e6973686564a265627a7a723158207fa63cd0b2b4b99f6c8f9343eda15f2d9047ccae57aa1ea60066af80ed41ac1264736f6c634300051100324920616772656520746861742074686520646576656c6f7065727320616e6420616666696c69617465642070617274696573206f66207468652050726f746f636f7265207465616d20617265206e6f7420726573706f6e7369626c6520666f72206d792066756e64730000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f

Deployed Bytecode

0x60806040526004361061038b5760003560e01c806392f61930116101dc578063da620cd711610102578063f28a2143116100a0578063f5f8155e1161006f578063f5f8155e1461137d578063f79ed94b146113a8578063f96f5b35146113ff578063fff6cae9146114645761038b565b8063f28a214314611269578063f2fde38b146112a4578063f322de78146112f5578063f40c1510146113205761038b565b8063e0dc1756116100dc578063e0dc175614611141578063e46638e61461117c578063e7d9a0eb1461120f578063eadf46971461123e5761038b565b8063da620cd714611051578063dd62ed3e14611081578063dfbb4322146111065761038b565b8063b6f5265a1161017a578063d0d41fe111610149578063d0d41fe114610ea9578063d231303d14610efa578063d493b9ac14610f63578063d73dd62314610fde5761038b565b8063b6f5265a14610d81578063bc70cd8c14610d98578063c8c0e7e414610def578063ccfc2e8d14610e585761038b565b8063a51748a1116101b6578063a51748a114610c5b578063a9059cbb14610c86578063abc1fecb14610cf9578063b237e8e114610d565761038b565b806392f6193014610b7157806395d89b4114610b9c5780639786207c14610c2c5761038b565b80634d332457116102c157806373996c031161025f57806387d9c50d1161022e57806387d9c50d14610a1c5780638bdb2afa14610a335780638da5cb5b14610a8a5780638e8e292514610ae15761038b565b806373996c031461094857806375b208bc146109835780637988d865146109da5780637e5d9835146109f15761038b565b806360a025901161029b57806360a025901461081657806366188463146108455780636a2f796c146108b857806370a08231146108e35761038b565b80634d332457146107515780634f1a0f7d146107a8578063596fa9e3146107bf5761038b565b806323b872dd1161032e578063378dc3dc11610308578063378dc3dc1461067d57806338af6632146106a85780633ad10ef6146106bf57806342966c68146107165761038b565b806323b872dd14610594578063313ce5671461062757806331a22a20146106525761038b565b806314673d311161036a57806314673d31146104be57806314b8fecc1461050f57806318160ddd1461053e57806323399434146105695761038b565b80622b13291461039057806306fdde03146103bb578063095ea7b31461044b575b600080fd5b34801561039c57600080fd5b506103a561147b565b6040518082815260200191505060405180910390f35b3480156103c757600080fd5b506103d0611481565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104105780820151818401526020810190506103f5565b50505050905090810190601f16801561043d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561045757600080fd5b506104a46004803603604081101561046e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114ba565b604051808215151515815260200191505060405180910390f35b3480156104ca57600080fd5b5061050d600480360360208110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115ac565b005b34801561051b57600080fd5b5061052461164a565b604051808215151515815260200191505060405180910390f35b34801561054a57600080fd5b5061055361165d565b6040518082815260200191505060405180910390f35b34801561057557600080fd5b5061057e611663565b6040518082815260200191505060405180910390f35b3480156105a057600080fd5b5061060d600480360360608110156105b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611669565b604051808215151515815260200191505060405180910390f35b34801561063357600080fd5b5061063c61213f565b6040518082815260200191505060405180910390f35b34801561065e57600080fd5b50610667612144565b6040518082815260200191505060405180910390f35b34801561068957600080fd5b5061069261214a565b6040518082815260200191505060405180910390f35b3480156106b457600080fd5b506106bd612156565b005b3480156106cb57600080fd5b506106d461249d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072257600080fd5b5061074f6004803603602081101561073957600080fd5b81019080803590602001909291905050506124c3565b005b34801561075d57600080fd5b506107666124d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107b457600080fd5b506107bd6124f6565b005b3480156107cb57600080fd5b506107d46127f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082257600080fd5b5061082b61281e565b604051808215151515815260200191505060405180910390f35b34801561085157600080fd5b5061089e6004803603604081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061283e565b604051808215151515815260200191505060405180910390f35b3480156108c457600080fd5b506108cd612acf565b6040518082815260200191505060405180910390f35b3480156108ef57600080fd5b506109326004803603602081101561090657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ad5565b6040518082815260200191505060405180910390f35b34801561095457600080fd5b506109816004803603602081101561096b57600080fd5b8101908080359060200190929190505050612b1e565b005b34801561098f57600080fd5b50610998612b82565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e657600080fd5b506109ef612e61565b005b3480156109fd57600080fd5b50610a06612ed8565b6040518082815260200191505060405180910390f35b348015610a2857600080fd5b50610a31612ede565b005b348015610a3f57600080fd5b50610a48612f55565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a9657600080fd5b50610a9f612f7b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aed57600080fd5b50610af6612fa1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b36578082015181840152602081019050610b1b565b50505050905090810190601f168015610b635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b7d57600080fd5b50610b8661303f565b6040518082815260200191505060405180910390f35b348015610ba857600080fd5b50610bb1613045565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bf1578082015181840152602081019050610bd6565b50505050905090810190601f168015610c1e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c3857600080fd5b50610c4161307e565b604051808215151515815260200191505060405180910390f35b348015610c6757600080fd5b50610c70613091565b6040518082815260200191505060405180910390f35b348015610c9257600080fd5b50610cdf60048036036040811015610ca957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613097565b604051808215151515815260200191505060405180910390f35b348015610d0557600080fd5b50610d5460048036036040811015610d1c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613505565b005b348015610d6257600080fd5b50610d6b6135ba565b6040518082815260200191505060405180910390f35b348015610d8d57600080fd5b50610d966135c0565b005b348015610da457600080fd5b50610dad613daf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dfb57600080fd5b50610e3e60048036036020811015610e1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613dd5565b604051808215151515815260200191505060405180910390f35b348015610e6457600080fd5b50610ea760048036036020811015610e7b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613df5565b005b348015610eb557600080fd5b50610ef860048036036020811015610ecc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e93565b005b348015610f0657600080fd5b50610f4960048036036020811015610f1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f31565b604051808215151515815260200191505060405180910390f35b348015610f6f57600080fd5b50610fdc60048036036060811015610f8657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613f51565b005b348015610fea57600080fd5b506110376004803603604081101561100157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614177565b604051808215151515815260200191505060405180910390f35b61107f6004803603602081101561106757600080fd5b81019080803515159060200190929190505050614373565b005b34801561108d57600080fd5b506110f0600480360360408110156110a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614519565b6040518082815260200191505060405180910390f35b34801561111257600080fd5b5061113f6004803603602081101561112957600080fd5b81019080803590602001909291905050506145a0565b005b34801561114d57600080fd5b5061117a6004803603602081101561116457600080fd5b8101908080359060200190929190505050614604565b005b34801561118857600080fd5b506111f56004803603606081101561119f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614668565b604051808215151515815260200191505060405180910390f35b34801561121b57600080fd5b506112246146fa565b604051808215151515815260200191505060405180910390f35b34801561124a57600080fd5b5061125361471a565b6040518082815260200191505060405180910390f35b34801561127557600080fd5b506112a26004803603602081101561128c57600080fd5b8101908080359060200190929190505050614720565b005b3480156112b057600080fd5b506112f3600480360360208110156112c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614784565b005b34801561130157600080fd5b5061130a6148d8565b6040518082815260200191505060405180910390f35b34801561132c57600080fd5b5061137b6004803603604081101561134357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506148de565b005b34801561138957600080fd5b50611392614993565b6040518082815260200191505060405180910390f35b3480156113b457600080fd5b506113bd614999565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561140b57600080fd5b5061144e6004803603602081101561142257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506149bf565b6040518082815260200191505060405180910390f35b34801561147057600080fd5b506114796149d7565b005b60135481565b6040518060400160405280600981526020017f50726f746f636f7265000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461160657600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601960009054906101000a900460ff1681565b60005481565b60145481565b6000611676848484614668565b6116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c696d6974206275797320617265206f6e21000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561172257600080fd5b6000806000611732878787614a88565b92509250925060006117718261176385611755888b614e3290919063ffffffff16565b614e3290919063ffffffff16565b614e3290919063ffffffff16565b90506000600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061184682600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118db82600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061197084600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a278460016000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b60016000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ade83600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b958360016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c4c85600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d038560016000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b60016000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d7b8782614e3290919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156120545750600084115b1561212f57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638bc1e07633866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001806020018281038252600081526020016020019350505050600060405180830381600087803b15801561211657600080fd5b505af115801561212a573d6000803e3d6000fd5b505050505b6001955050505050509392505050565b601281565b60155481565b6012600a0a6127100281565b601960009054906101000a900460ff166121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4576656e74206e6f74206f76657220796574000000000000000000000000000081525060200191505060405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161228d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4e6f7468696e6720746f20636c61696d2c206d6f766520616c6f6e670000000081525060200191505060405180910390fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000612324670de0b6b3a7640000612316601554601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e6590919063ffffffff16565b614e9490919063ffffffff16565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156123ad57600080fd5b505af11580156123c1573d6000803e3d6000fd5b505050506040513d60208110156123d757600080fd5b8101908080519060200190929190505050506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f586e28f4f60b4d906fc69694ea6d7fe5c5668730ce3286d7af8eca868f3c27603382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124cd3382614ead565b50565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461255057600080fd5b6125586146fa565b6125ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615243602f913960400191505060405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d806000811461260d576040519150601f19603f3d011682016040523d82523d6000602084013e612612565b606091505b5050905080612689576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616e73666572206661696c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600042612838600b54600454614e4990919063ffffffff16565b11905090565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561294f576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129e3565b6129628382614e3290919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60045481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7857600080fd5b8060168190555050565b60008073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f6b656e3a20706f6f6c20616c72656164792063726561746564000000000081525060200191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c65396600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612ced57600080fd5b505afa158015612d01573d6000803e3d6000fd5b505050506040513d6020811015612d1757600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015612dbe57600080fd5b505af1158015612dd2573d6000803e3d6000fd5b505050506040513d6020811015612de857600080fd5b8101908080519060200190929190505050601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ebb57600080fd5b6001601760006101000a81548160ff021916908315150217905550565b60085481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f3857600080fd5b6000601760006101000a81548160ff021916908315150217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60188054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130375780601f1061300c57610100808354040283529160200191613037565b820191906000526020600020905b81548152906001019060200180831161301a57829003601f168201915b505050505081565b600f5481565b6040518060400160405280600581526020017f70434f524500000000000000000000000000000000000000000000000000000081525081565b601760009054906101000a900460ff1681565b600c5481565b60006130a4338484614668565b613116576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c696d6974206275797320617265206f6e21000000000000000000000000000081525060200191505060405180910390fd5b6000806000613126338787614a88565b92509250925060006131658261315785613149888b614e3290919063ffffffff16565b614e3290919063ffffffff16565b614e3290919063ffffffff16565b9050613193600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461506e565b613205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43616e6e6f7420646973627572736520726577617264732e000000000000000081525060200191505060405180910390fd5b613231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561506e565b6132a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f43616e6e6f742073656e6420746f6b656e7320746f207265736572766521000081525060200191505060405180910390fd5b6132cf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361506e565b613341576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43616e6e6f74207472616e73666572206465762066656521000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156133a05750600083115b1561347b57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638bc1e07633856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001806020018281038252600081526020016020019350505050600060405180830381600087803b15801561346257600080fd5b505af1158015613476573d6000803e3d6000fd5b505050505b613485878261506e565b6134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74207472616e7366657220746f6b656e732e00000000000000000081525060200191505060405180910390fd5b600194505050505092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461355f57600080fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461361a57600080fd5b6000151561362661281e565b15151461369b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c69717569646974792067656e65726174696f6e206f6e67696e67000000000081525060200191505060405180910390fd5b60001515601960009054906101000a900460ff16151514613707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806152b46025913960400191505060405180910390fd5b476014819055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561379f57600080fd5b505afa1580156137b3573d6000803e3d6000fd5b505050506040513d60208110156137c957600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db06014546040518263ffffffff1660e01b81526004016000604051808303818588803b15801561382657600080fd5b505af115801561383a573d6000803e3d6000fd5b5050505050600047146138b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572204661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb836014546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561393e57600080fd5b505af1158015613952573d6000803e3d6000fd5b505050506040513d602081101561396857600080fd5b8101908080519060200190929190505050508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16636a627842306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015613b6557600080fd5b505af1158015613b79573d6000803e3d6000fd5b505050506040513d6020811015613b8f57600080fd5b8101908080519060200190929190505050508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613c1e57600080fd5b505afa158015613c32573d6000803e3d6000fd5b505050506040513d6020811015613c4857600080fd5b810190808051906020019092919050505060138190555060006013541415613cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c50206372656174696f6e206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b613d09601454613cfb670de0b6b3a7640000601354614e6590919063ffffffff16565b614e9490919063ffffffff16565b60158190555060006015541415613d88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c50206372656174696f6e206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b6001601960006101000a81548160ff021916908315150217905550613dab6149d7565b5050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613e4f57600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613eed57600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613fab57600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260428152602001806152726042913960600191505060405180910390fd5b61405a6146fa565b6140af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180615243602f913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561413657600080fd5b505af115801561414a573d6000803e3d6000fd5b505050506040513d602081101561416057600080fd5b810190808051906020019092919050505050505050565b600061420882600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b61437b61281e565b6143ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4c69717569646974792047656e65726174696f6e204576656e74206f7665720081525060200191505060405180910390fd5b80614460576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f2061677265656d656e742070726f7669646564000000000000000000000081525060200191505060405180910390fd5b34601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506144c234601454614e4990919063ffffffff16565b6014819055503373ffffffffffffffffffffffffffffffffffffffff167f20b711375edba008429d2f91787c68aa13aab7f267c346bf91be1a104d8b7b8b346040518082815260200191505060405180910390a250565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146145fa57600080fd5b8060088190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461465e57600080fd5b8060098190555050565b6000601760009054906101000a900460ff1680156146d35750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156146e0575060165482115b156146ee57600090506146f3565b600190505b9392505050565b600042614714600c54600454614e4990919063ffffffff16565b10905090565b600a5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461477a57600080fd5b80600a8190555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146147de57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561481857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461493857600080fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a6020528060005260406000206000915090505481565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614a4157600080fd5b505afa158015614a55573d6000803e3d6000fd5b505050506040513d6020811015614a6b57600080fd5b8101908080519060200190929190505050905080600f8190555050565b600080600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015614af657600080fd5b505afa158015614b0a573d6000803e3d6000fd5b505050506040513d6020811015614b2057600080fd5b81019080805190602001909291905050509050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415614c025780600f541115614c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4c6971756964697479207769746864726177616c7320666f7262696464656e0081525060200191505060405180910390fd5b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480614cab5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b80614cff5750601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80614d535750601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80614d8957503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b15614d9f57600093506000925060009150614e21565b614dc8612710614dba60085488614e6590919063ffffffff16565b614e9490919063ffffffff16565b9350614df3612710614de5600a5488614e6590919063ffffffff16565b614e9490919063ffffffff16565b9250614e1e612710614e1060095488614e6590919063ffffffff16565b614e9490919063ffffffff16565b91505b80600f819055505093509350939050565b600082821115614e3e57fe5b818303905092915050565b600080828401905083811015614e5b57fe5b8091505092915050565b60008082840290506000841480614e84575082848281614e8157fe5b04145b614e8a57fe5b8091505092915050565b600080828481614ea057fe5b0490508091505092915050565b60008111614eba57600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115614f0657600080fd5b614f5881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fb081600054614e3290919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a25050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156150a957600080fd5b6150fb82600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e3290919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061519082600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4990919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509291505056fe4c69717569646974792067656e65726174696f6e20677261636520706572696f64207374696c6c206f6e676f696e6741646d696e2043616e6e6f74207472616e73666572206f75742070434f52452f57455448204c5020546f6b656e732066726f6d207468697320636f6e7472616374214c69717569646974792067656e65726174696f6e20616c72656164792066696e6973686564a265627a7a723158207fa63cd0b2b4b99f6c8f9343eda15f2d9047ccae57aa1ea60066af80ed41ac1264736f6c63430005110032

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f

-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f


Deployed Bytecode Sourcemap

16573:15416:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17477:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17477:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17595:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17595:41:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17595:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5637:192;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5637:192:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5637:192:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18740:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18740:120:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18740:120:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;27894:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27894:33:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2017:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2017:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17518:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17518:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23794:2097;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23794:2097:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23794:2097:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17689:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17689:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17559:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17559:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17792:73;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17792:73:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30934:540;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30934:540:0;;;:::i;:::-;;16881:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16881:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8247:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8247:78:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8247:78:0;;;;;;;;;;;;;;;;;:::i;:::-;;17316:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17316:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27355:527;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27355:527:0;;;:::i;:::-;;17173:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17173:41:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26880:164;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26880:164:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6828:426;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6828:426:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6828:426:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16752:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16752:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3195:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3195:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3195:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17963:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17963:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17963:117:0;;;;;;;;;;;;;;;;;:::i;:::-;;21526:324;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21526:324:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18181:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18181:81:0;;;:::i;:::-;;16919:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16919:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18092:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18092:83:0;;;:::i;:::-;;17221:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17221:39:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1055:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1055:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26706:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26706:165:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;26706:165:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17267:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17267:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17643:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17643:39:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17643:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17919:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17919:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17113:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17113:47:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22522:1260;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22522:1260:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22522:1260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19429:122;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19429:122:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19429:122:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17878:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17878:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28386:1221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28386:1221:0;;;:::i;:::-;;16802:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16802:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17360:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17360:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17360:44:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18593:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18593:141:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18593:141:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18866:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18866:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18866:104:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17411:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17411:53:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17411:53:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31603:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31603:377:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31603:377:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6542:280;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6542:280:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6542:280:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29982:637;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29982:637:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;6156:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6156:138:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6156:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19137:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19137:145:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19137:145:0;;;;;;;;;;;;;;;;;:::i;:::-;;19288:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19288:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19288:129:0;;;;;;;;;;;;;;;;;:::i;:::-;;18274:307;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18274:307:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18274:307:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27050:158;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27050:158:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17005:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17005:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18982:149;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18982:149:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18982:149:0;;;;;;;;;;;;;;;;;:::i;:::-;;1674:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1674:178:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1674:178:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17058:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17058:48:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19557:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19557:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19557:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16964:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16964:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16845:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16845:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;29619:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29619:48:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29619:48:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19777:169;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19777:169:0;;;:::i;:::-;;17477:34;;;;:::o;17595:41::-;;;;;;;;;;;;;;;;;;;:::o;5637:192::-;5704:4;5749:6;5717:7;:19;5725:10;5717:19;;;;;;;;;;;;;;;:29;5737:8;5717:29;;;;;;;;;;;;;;;:38;;;;5788:8;5767:38;;5776:10;5767:38;;;5798:6;5767:38;;;;;;;;;;;;;;;;;;5819:4;5812:11;;5637:192;;;;:::o;18740:120::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;18837:15;18820:14;;:32;;;;;;;;;;;;;;;;;;18740:120;:::o;27894:33::-;;;;;;;;;;;;;:::o;2017:26::-;;;;:::o;17518:34::-;;;;:::o;23794:2097::-;23871:4;23906:29;23918:4;23924:2;23928:6;23906:11;:29::i;:::-;23898:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24001:1;23987:16;;:2;:16;;;;23979:25;;;;;;24266:21;24289:22;24313:17;24334:42;24359:4;24365:2;24369:6;24334:24;:42::i;:::-;24265:111;;;;;;24407:20;24430:69;24486:12;24430:51;24463:17;24430:28;24441:16;24430:6;:10;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;:55;;:69;;;;:::i;:::-;24407:92;;24520:18;24541:7;:13;24549:4;24541:13;;;;;;;;;;;;;;;:25;24555:10;24541:25;;;;;;;;;;;;;;;;24520:46;;24758:35;24777:15;24758:8;:14;24767:4;24758:14;;;;;;;;;;;;;;;;:18;;:35;;;;:::i;:::-;24741:8;:14;24750:4;24741:14;;;;;;;;;;;;;;;:52;;;;24819:33;24836:15;24819:8;:12;24828:2;24819:12;;;;;;;;;;;;;;;;:16;;:33;;;;:::i;:::-;24804:8;:12;24813:2;24804:12;;;;;;;;;;;;;;;:48;;;;24890:37;24909:17;24890:8;:14;24899:4;24890:14;;;;;;;;;;;;;;;;:18;;:37;;;;:::i;:::-;24873:8;:14;24882:4;24873:14;;;;;;;;;;;;;;;:54;;;;24972;25008:17;24972:8;:31;24981:21;;;;;;;;;;;24972:31;;;;;;;;;;;;;;;;:35;;:54;;;;:::i;:::-;24938:8;:31;24947:21;;;;;;;;;;;24938:31;;;;;;;;;;;;;;;:88;;;;25064:32;25083:12;25064:8;:14;25073:4;25064:14;;;;;;;;;;;;;;;;:18;;:32;;;;:::i;:::-;25047:8;:14;25056:4;25047:14;;;;;;;;;;;;;;;:49;;;;25130:38;25155:12;25130:8;:20;25139:10;;;;;;;;;;;25130:20;;;;;;;;;;;;;;;;:24;;:38;;;;:::i;:::-;25107:8;:20;25116:10;;;;;;;;;;;25107:20;;;;;;;;;;;;;;;:61;;;;25206:36;25225:16;25206:8;:14;25215:4;25206:14;;;;;;;;;;;;;;;;:18;;:36;;;;:::i;:::-;25189:8;:14;25198:4;25189:14;;;;;;;;;;;;;;;:53;;;;25280:46;25309:16;25280:8;:24;25289:14;;;;;;;;;;;25280:24;;;;;;;;;;;;;;;;:28;;:46;;;;:::i;:::-;25253:8;:24;25262:14;;;;;;;;;;;25253:24;;;;;;;;;;;;;;;:73;;;;25385:22;25400:6;25385:10;:14;;:22;;;;:::i;:::-;25357:7;:13;25365:4;25357:13;;;;;;;;;;;;;;;:25;25371:10;25357:25;;;;;;;;;;;;;;;:50;;;;25450:21;;;;;;;;;;;25435:56;;25444:4;25435:56;;;25473:17;25435:56;;;;;;;;;;;;;;;;;;25522:14;;;;;;;;;;;25507:48;;25516:4;25507:48;;;25538:16;25507:48;;;;;;;;;;;;;;;;;;25586:10;;;;;;;;;;;25571:40;;25580:4;25571:40;;;25598:12;25571:40;;;;;;;;;;;;;;;;;;25642:2;25627:35;;25636:4;25627:35;;;25646:15;25627:35;;;;;;;;;;;;;;;;;;25720:1;25687:35;;:21;;;;;;;;;;;:35;;;;:60;;;;;25746:1;25726:17;:21;25687:60;25683:179;;;25779:21;;;;;;;;;;;25764:51;;;25816:10;25828:17;25764:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25764:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25764:86:0;;;;25683:179;25879:4;25872:11;;;;;;;23794:2097;;;;;:::o;17689:34::-;17721:2;17689:34;:::o;17559:27::-;;;;:::o;17792:73::-;17721:2;17841;:23;17832:5;:33;17792:73;:::o;30934:540::-;30985:21;;;;;;;;;;;30977:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31077:1;31048:14;:26;31063:10;31048:26;;;;;;;;;;;;;;;;:30;31040:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31123:19;31160:16;;;;;;;;;;;31123:54;;31188:26;31217:54;31266:4;31217:44;31248:12;;31217:14;:26;31232:10;31217:26;;;;;;;;;;;;;;;;:30;;:44;;;;:::i;:::-;:48;;:54;;;;:::i;:::-;31188:83;;31282:4;:13;;;31296:10;31308:18;31282:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31282:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31282:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31282:45:0;;;;;;;;;;;;;;;;;31403:1;31374:14;:26;31389:10;31374:26;;;;;;;;;;;;;;;:30;;;;31420:46;31435:10;31447:18;31420:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;30934:540;;:::o;16881:25::-;;;;;;;;;;;;;:::o;8247:78::-;8292:25;8298:10;8310:6;8292:5;:25::i;:::-;8247:78;:::o;17316:31::-;;;;;;;;;;;;;:::o;27355:527::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;27455:23;:21;:23::i;:::-;27447:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27590:12;27608:10;:15;;27630:21;27608:48;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;27589:67:0;;;27675:7;27667:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27743:10;27719:60;;27736:4;27719:60;;;27755:8;:23;27772:4;27755:23;;;;;;;;;;;;;;;;27719:60;;;;;;;;;;;;;;;;;;27813:8;:23;27830:4;27813:23;;;;;;;;;;;;;;;;27790:8;:20;27799:10;27790:20;;;;;;;;;;;;;;;:46;;;;27873:1;27847:8;:23;27864:4;27847:23;;;;;;;;;;;;;;;:27;;;;1498:1;27355:527::o;17173:41::-;;;;;;;;;;;;;:::o;26880:164::-;26939:4;27021:15;26963:55;26990:27;;26963:22;;:26;;:55;;;;:::i;:::-;:73;26956:80;;26880:164;:::o;6828:426::-;6917:12;6938:13;6954:7;:19;6962:10;6954:19;;;;;;;;;;;;;;;:29;6974:8;6954:29;;;;;;;;;;;;;;;;6938:45;;7013:8;6994:16;:27;6990:168;;;7064:1;7032:7;:19;7040:10;7032:19;;;;;;;;;;;;;;;:29;7052:8;7032:29;;;;;;;;;;;;;;;:33;;;;6990:168;;;7120:30;7133:16;7120:8;:12;;:30;;;;:::i;:::-;7088:7;:19;7096:10;7088:19;;;;;;;;;;;;;;;:29;7108:8;7088:29;;;;;;;;;;;;;;;:62;;;;6990:168;7190:8;7169:61;;7178:10;7169:61;;;7200:7;:19;7208:10;7200:19;;;;;;;;;;;;;;;:29;7220:8;7200:29;;;;;;;;;;;;;;;;7169:61;;;;;;;;;;;;;;;;;;7244:4;7237:11;;;6828:426;;;;:::o;16752:37::-;;;;:::o;3195:109::-;3251:15;3282:8;:16;3291:6;3282:16;;;;;;;;;;;;;;;;3275:23;;3195:109;;;:::o;17963:117::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;18057:15;18040:14;:32;;;;17963:117;:::o;21526:324::-;21578:7;21634:1;21606:30;;:16;;;;;;;;;;;:30;;;21598:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21698:14;;;;;;;;;;;:25;;;21746:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21746:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21746:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21746:22:0;;;;;;;;;;;;;;;;21792:4;21698:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21698:110:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21698:110:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21698:110:0;;;;;;;;;;;;;;;;21679:16;;:129;;;;;;;;;;;;;;;;;;21826:16;;;;;;;;;;;21819:23;;21526:324;:::o;18181:81::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;18250:4;18235:12;;:19;;;;;;;;;;;;;;;;;;18181:81::o;16919:38::-;;;;:::o;18092:83::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;18162:5;18147:12;;:20;;;;;;;;;;;;;;;;;;18092:83::o;17221:39::-;;;;;;;;;;;;;:::o;1055:20::-;;;;;;;;;;;;;:::o;26706:165::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17267:40::-;;;;:::o;17643:39::-;;;;;;;;;;;;;;;;;;;:::o;17919:31::-;;;;;;;;;;;;;:::o;17113:47::-;;;;:::o;22522:1260::-;22581:4;22856:35;22868:10;22880:2;22884:6;22856:11;:35::i;:::-;22848:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22936:21;22959:22;22983:17;23004:48;23029:10;23041:2;23045:6;23004:24;:48::i;:::-;22935:117;;;;;;23083:20;23106:69;23162:12;23106:51;23139:17;23106:28;23117:16;23106:6;:10;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;:55;;:69;;;;:::i;:::-;23083:92;;23196:56;23211:21;;;;;;;;;;;23234:17;23196:14;:56::i;:::-;23188:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23308:48;23323:14;;;;;;;;;;;23339:16;23308:14;:48::i;:::-;23300:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23410:40;23425:10;;;;;;;;;;;23437:12;23410:14;:40::i;:::-;23402:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23529:1;23496:35;;:21;;;;;;;;;;;:35;;;;:60;;;;;23555:1;23535:17;:21;23496:60;23492:179;;;23588:21;;;;;;;;;;;23573:51;;;23625:10;23637:17;23573:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23573:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23573:86:0;;;;23492:179;23689:35;23704:2;23708:15;23689:14;:35::i;:::-;23681:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23770:4;23763:11;;;;;;22522:1260;;;;:::o;19429:122::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;19537:6;19513:11;:21;19525:8;19513:21;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;19429:122;;:::o;17878:34::-;;;;:::o;28386:1221::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;28505:5;28473:37;;:28;:26;:28::i;:::-;:37;;;28465:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28586:5;28561:30;;:21;;;;;;;;;;;:30;;;28553:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28666:21;28644:19;:43;;;;28698:19;28735:16;;;;;;;;;;;28698:54;;28793:12;28808:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28808:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28808:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28808:22:0;;;;;;;;;;;;;;;;28793:37;;28847:4;28841:19;;;28867;;28841:48;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28841:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28841:48:0;;;;;28933:1;28908:21;:26;28900:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28972:4;28966:20;;;28995:4;29001:19;;28966:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28966:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28966:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28966:55:0;;;;;;;;;;;;;;;;;29069:4;29037:63;;29054:4;29037:63;;;29076:8;:23;29093:4;29076:23;;;;;;;;;;;;;;;;29037:63;;;;;;;;;;;;;;;;;;29137:8;:23;29154:4;29137:23;;;;;;;;;;;;;;;;29111:8;:23;29128:4;29111:23;;;;;;;;;;;;;;;:49;;;;29197:1;29171:8;:23;29188:4;29171:23;;;;;;;;;;;;;;;:27;;;;29209:4;:9;;;29227:4;29209:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29209:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29209:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29209:24:0;;;;;;;;;;;;;;;;;29266:4;:14;;;29289:4;29266:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29266:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29266:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29266:29:0;;;;;;;;;;;;;;;;29244:19;:51;;;;29347:1;29324:19;;:24;;29316:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29398:54;29432:19;;29398:29;29422:4;29398:19;;:23;;:29;;;;:::i;:::-;:33;;:54;;;;:::i;:::-;29383:12;:69;;;;29518:1;29502:12;;:17;;29494:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29578:4;29554:21;;:28;;;;;;;;;;;;;;;;;;29593:6;:4;:6::i;:::-;1498:1;;28386:1221::o;16802:36::-;;;;;;;;;;;;;:::o;17360:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;18593:141::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;18704:22;18680:21;;:46;;;;;;;;;;;;;;;;;;18593:141;:::o;18866:104::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;18951:11;18938:10;;:24;;;;;;;;;;;;;;;;;;18866:104;:::o;17411:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;31603:377::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;31737:16;;;;;;;;;;;31720:33;;:13;:33;;;;31712:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31843:23;:21;:23::i;:::-;31835:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31935:13;31929:29;;;31959:3;31964:7;31929:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31929:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31929:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31929:43:0;;;;;;;;;;;;;;;;;31603:377;;;:::o;6542:280::-;6626:12;6679:46;6713:11;6679:7;:19;6687:10;6679:19;;;;;;;;;;;;;;;:29;6699:8;6679:29;;;;;;;;;;;;;;;;:33;;:46;;;;:::i;:::-;6647:7;:19;6655:10;6647:19;;;;;;;;;;;;;;;:29;6667:8;6647:29;;;;;;;;;;;;;;;:78;;;;6758:8;6737:61;;6746:10;6737:61;;;6768:7;:19;6776:10;6768:19;;;;;;;;;;;;;;;:29;6788:8;6768:29;;;;;;;;;;;;;;;;6737:61;;;;;;;;;;;;;;;;;;6812:4;6805:11;;6542:280;;;;:::o;29982:637::-;30109:28;:26;:28::i;:::-;30101:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30192:64;30184:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30323:9;30293:14;:26;30308:10;30293:26;;;;;;;;;;;;;;;;:39;;;;;;;;;;;30420:34;30444:9;30420:19;;:23;;:34;;;;:::i;:::-;30398:19;:56;;;;30589:10;30571:40;;;30601:9;30571:40;;;;;;;;;;;;;;;;;;29982:637;:::o;6156:138::-;6230:17;6263:7;:15;6271:6;6263:15;;;;;;;;;;;;;;;:25;6279:8;6263:25;;;;;;;;;;;;;;;;6256:32;;6156:138;;;;:::o;19137:145::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;19252:22;19228:21;:46;;;;19137:145;:::o;19288:129::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;19391:18;19371:17;:38;;;;19288:129;:::o;18274:307::-;18363:4;18437:12;;;;;;;;;;;18436:46;;;;;18465:16;;;;;;;;;;;18455:26;;:6;:26;;;18436:46;:75;;;;;18496:14;;18487:6;:23;18436:75;18432:120;;;18535:5;18528:12;;;;18432:120;18569:4;18562:11;;18274:307;;;;;;:::o;27050:158::-;27104:4;27185:15;27128:54;27155:26;;27128:22;;:26;;:54;;;;:::i;:::-;:72;27121:79;;27050:158;:::o;17005:40::-;;;;:::o;18982:149::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;19100:23;19075:22;:48;;;;18982:149;:::o;1674:178::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;1771:1;1751:22;;:8;:22;;;;1743:31;;;;;;1814:8;1786:37;;1807:5;;;;;;;;;;;1786:37;;;;;;;;;;;;1838:8;1830:5;;:16;;;;;;;;;;;;;;;;;;1674:178;:::o;17058:48::-;;;;:::o;19557:140::-;1485:5;;;;;;;;;;;1471:19;;:10;:19;;;1463:28;;;;;;19683:6;19650:20;:30;19671:8;19650:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19557:140;;:::o;16964:34::-;;;;:::o;16845:29::-;;;;;;;;;;;;;:::o;29619:48::-;;;;;;;;;;;;;;;;;:::o;19777:169::-;19811:28;19848:16;;;;;;;;;;;19842:35;;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19842:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19842:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19842:37:0;;;;;;;;;;;;;;;;19811:68;;19918:20;19890:25;:48;;;;19777:169;:::o;19958:1481::-;20167:24;20193:25;20220:20;20269:28;20306:16;;;;;;;;;;;20300:35;;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20300:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20300:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20300:37:0;;;;;;;;;;;;;;;;20269:68;;20367:16;;;;;;;;;;;20357:26;;:6;:26;;;20354:142;;;20440:20;20411:25;;:49;;20403:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20354:142;20528:21;;;;;;;;;;;20518:31;;:6;:31;;;:80;;;;20582:16;;;;;;;;;;;20572:26;;:6;:26;;;20518:80;:121;;;;20620:11;:19;20632:6;20620:19;;;;;;;;;;;;;;;;;;;;;;;;;20518:121;:173;;;;20660:20;:31;20681:9;20660:31;;;;;;;;;;;;;;;;;;;;;;;;;20518:173;:217;;;;20730:4;20712:23;;:6;:23;;;20518:217;20515:847;;;20958:1;20939:20;;20998:1;20978:21;;21033:1;21018:16;;20515:847;;;21126:44;21164:5;21126:33;21137:21;;21126:6;:10;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;21107:63;;21209:45;21248:5;21209:34;21220:22;;21209:6;:10;;:34;;;;:::i;:::-;:38;;:45;;;;:::i;:::-;21189:65;;21288:40;21322:5;21288:29;21299:17;;21288:6;:10;;:29;;;;:::i;:::-;:33;;:40;;;;:::i;:::-;21273:55;;20515:847;21407:20;21379:25;:48;;;;19958:1481;;;;;;;;:::o;577:113::-;635:7;663:1;658;:6;;651:14;;;;683:1;679;:5;672:12;;577:113;;;;:::o;696:133::-;754:7;770:9;786:1;782;:5;770:17;;806:1;801;:6;;794:14;;;;822:1;815:8;;;696:133;;;;:::o;148:147::-;206:7;222:9;238:1;234;:5;222:17;;258:1;253;:6;:20;;;;272:1;267;263;:5;;;;;;:10;253:20;246:28;;;;288:1;281:8;;;148:147;;;;:::o;301:270::-;359:7;450:9;466:1;462;:5;;;;;;450:17;;564:1;557:8;;;301:270;;;;:::o;7718:517::-;7802:1;7793:6;:10;7785:19;;;;;;7833:8;:16;7842:6;7833:16;;;;;;;;;;;;;;;;7823:6;:26;;7815:35;;;;;;8063:28;8084:6;8063:8;:16;8072:6;8063:16;;;;;;;;;;;;;;;;:20;;:28;;;;:::i;:::-;8044:8;:16;8053:6;8044:16;;;;;;;;;;;;;;;:47;;;;8116:23;8132:6;8116:11;;:15;;:23;;;;:::i;:::-;8102:11;:37;;;;8180:1;8155:36;;8164:6;8155:36;;;8184:6;8155:36;;;;;;;;;;;;;;;;;;8212:6;8207:20;;;8220:6;8207:20;;;;;;;;;;;;;;;;;;7718:517;;:::o;2639:347::-;2702:4;2738:1;2723:17;;:3;:17;;;;2715:26;;;;;;2837:32;2862:6;2837:8;:20;2846:10;2837:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;2814:8;:20;2823:10;2814:20;;;;;;;;;;;;;;;:55;;;;2892:25;2910:6;2892:8;:13;2901:3;2892:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;2876:8;:13;2885:3;2876:13;;;;;;;;;;;;;;;:41;;;;2950:3;2929:33;;2938:10;2929:33;;;2955:6;2929:33;;;;;;;;;;;;;;;;;;2976:4;2969:11;;2639:347;;;;:::o

Swarm Source

bzzr://7fa63cd0b2b4b99f6c8f9343eda15f2d9047ccae57aa1ea60066af80ed41ac12
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.