contract MNBToken is ERC20, Ownable {

  uint256 public constant INITIAL_SUPPLY = 1000000000 * (10 ** 18);

  /**
   * @dev Constructor that gives msg.sender all of existing tokens.
   */
  constructor() public ERC20("MediBeu Token", "MNB", 18) Ownable() {
    _mint(msg.sender, INITIAL_SUPPLY);
  }

  
  bool private _mintingFinished = false;

  event MintingFinished();

  modifier canMint() {
    require(!_mintingFinished);
    _;
  }

  /**
   * @dev Function to mint tokens
   * @param to The address that will receive the minted tokens.
   * @param value The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(address to, uint256 value) public onlyAdmin canMint returns (bool) {
    _mint(to, value);
    return true;
  }

  function finishMinting() public onlyAdmin canMint returns (bool) {
    _mintingFinished = true;
    emit MintingFinished();
    return true;
  }

  /**
   * @dev Burns a specific amount of tokens.
   * @param value The amount of token to be burned.
   */
  function burn(uint256 value) public onlyAdmin {
    _burn(msg.sender, value);
  }

  /**
   * @dev Burns a specific amount of tokens from the target address and decrements allowance
   * @param from address The address which you want to send tokens from
   * @param value uint256 The amount of token to be burned
   */
  function burnFrom(address from, uint256 value) public onlyAdmin {
    _burnFrom(from, value);
  }

  /**
  * @dev Transfer token for a specified address array
  * @param tos The address array to transfer to.
  * @param values The amount array to be transferred.
  */
  function multiTransfer(address[] tos, uint256[] values) public returns (bool) {
    require(tos.length>0 && tos.length==values.length);
    for (uint256 i = 0; i < tos.length; ++i) {
      _transfer(msg.sender, tos[i], values[i]);
    }
    return true;
  }

}
/**
 * @title MNB Token
 * @dev MNB Token include minting, burning function
 */
function mint(address to, uint256 value) public onlyAdmin canMint returns (bool) {
  _mint(to, value);
  return true;
}

/**
 * @dev Function to mint tokens
 * @param to The address that will receive the minted tokens.
 * @param value The amount of tokens to mint.
 * @return A boolean that indicates if the operation was successful.
 */