contract MutableToken is StandardToken, Ownable {
  event Mint(address indexed to, uint256 amount, uint256 balance, uint256 totalSupply);
  event Burn(address indexed burner, uint256 value, uint256 balance, uint256 totalSupply);

  address master;

  function setContractMaster(address _newMaster) onlyOwner public {
    require(_newMaster != address(0));
    require(EmojiToken(_newMaster).isEmoji());
    master = _newMaster;
  }

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(address _to, uint256 _amount) public returns (bool) {
    require(master == msg.sender);
    totalSupply_ = totalSupply_.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    Mint(_to, _amount, balances[_to], totalSupply_);
    Transfer(address(0), _to, _amount);
    return true;
  }

  /**
   * @dev Burns a specific amount of tokens.
   * @param _value The amount of token to be burned.
   */
  function burn(uint256 _value, address _owner) public {
    require(master == msg.sender);
    require(_value <= balances[_owner]);
    // 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

    address burner = _owner;
    balances[burner] = balances[burner].sub(_value);
    totalSupply_ = totalSupply_.sub(_value);
    Burn(burner, _value, balances[burner], totalSupply_);
  }

}
function burn(uint256 _value, address _owner) public {
    require(master == msg.sender);
    require(_value <= balances[_owner]);
    // 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

    address burner = _owner;
    balances[burner] = balances[burner].sub(_value);
    totalSupply_ = totalSupply_.sub(_value);
    Burn(burner, _value, balances[burner], totalSupply_);
  }
/**
 * @dev Burns a specific amount of tokens.
 * @param _value The amount of token to be burned.
 */