contract Owned {

    /// @dev `owner` is the only address that can call a function with this modifier
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    address public owner;
    address public newOwner;

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

    /// @notice The Constructor assigns the message sender to be `owner`
    constructor() public {
        owner = msg.sender;
    }

    /// @notice `owner` can step down and assign some other address to this role
    /// @param _newOwner The address of the new owner. 0x0 can be used to create
    ///  an unowned neutral vault, however that cannot be undone
    function changeOwner(address _newOwner) onlyOwner public returns(bool){
        require (_newOwner != address(0));
        
        newOwner = _newOwner;
        return true;
    }

    function acceptOwnership() public returns(bool) {
        require(newOwner != address(0));
        require(msg.sender == newOwner);

        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
        return true;
    }
}
function changeOwner(address _newOwner) onlyOwner public returns(bool){
    require (_newOwner != address(0));
        
    newOwner = _newOwner;
    return true;
}

/// @notice `owner` can step down and assign some other address to this role
/// @param _newOwner The address of the new owner. 0x0 can be used to create
///  an unowned neutral vault, however that cannot be undone