contract PausableToken is StandardToken, Pausable {
    mapping (address => bool) frozenAccount;
    event FrozenFunds(address target, bool frozen);

    /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens
    /// @param target Address to be frozen
    /// @param freeze either to freeze it or not
    function freezeAccount(address target, bool freeze) onlyOwner public returns(bool){
        frozenAccount[target] = freeze;
        emit FrozenFunds(target, freeze);
        return true;
    }
     
  function transfer(address _to, uint256 _value)public whenNotPaused returns (bool) {
     require(!frozenAccount[msg.sender], "Sending Tokens from frozen account restricted!");
    return super.transfer(_to, _value);
  }

  function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {
   require(!frozenAccount[_from], "Sending Tokens from frozen account restricted!");
    return super.transferFrom(_from, _to, _value);
  }
  
  function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) {
    return super.approve(_spender, _value);
  }

  function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) {
    return super.increaseApproval(_spender, _addedValue);
  }

  function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) {
    return super.decreaseApproval(_spender, _subtractedValue);
  }
}
function freezeAccount(address target, bool freeze) onlyOwner public returns(bool){
    frozenAccount[target] = freeze;
    emit FrozenFunds(target, freeze);
    return true;
}

/// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens
/// @param target Address to be frozen
/// @param freeze either to freeze it or not