contract OceanToken is StandardToken, Ownable {
  event Airdrop(address indexed _to, uint256 _amount);

  string public constant name = 'The Ocean Token';
  string public constant symbol = 'OCEAN';
  uint8 public constant decimals = 18;

  OceanTokenTransferManager public transferManagerContract;

  /**
   * @dev Airdrop the specified amount to the address
   * @param _to The address that will receive the airdropped tokens.
   * @param _requestedAmount The amount of tokens to airdrop.
   * @return A boolean that indicates if the operation was successful.
   */
  function airdrop(address _to, uint256 _requestedAmount) onlyOwner public returns (bool) {
    uint256 _amountToDrop = _requestedAmount;

    totalSupply_ = totalSupply_.add(_amountToDrop);
    balances[_to] = balances[_to].add(_amountToDrop);
    emit Airdrop(_to, _amountToDrop);
    emit Transfer(address(0), _to, _amountToDrop);

    return true;
  }

  /**
   * @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));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    // trading possible when at least one from list [_from, _to] is whitelisted
    require(transferManagerContract.canTransferFrom(_from, _to));

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

  function setTransferManagerContract(OceanTokenTransferManager _transferManagerContract) onlyOwner public {
    transferManagerContract = _transferManagerContract;
  }
}
function airdrop(address _to, uint256 _requestedAmount) onlyOwner public returns (bool) {
  uint256 _amountToDrop = _requestedAmount;

  totalSupply_ = totalSupply_.add(_amountToDrop);
  balances[_to] = balances[_to].add(_amountToDrop);
  emit Airdrop(_to, _amountToDrop);
  emit Transfer(address(0), _to, _amountToDrop);

  return true;
}

/**
 * @dev Airdrop the specified amount to the address
 * @param _to The address that will receive the airdropped tokens.
 * @param _requestedAmount The amount of tokens to airdrop.
 * @return A boolean that indicates if the operation was successful.
 */