"""
	mnemonic Description				signed 	conditions
	JNE 	 Jump if not equal 			N/A		ZF = 0
	JNZ		 Jump if not zero			N/A		ZF = 0
	"""

    new_eip = If(state.zf == False, dst, state.eip + 1)
    state.eip = new_eip
    return state


if __name__ == "__main__":
    s = Solver()
    state = Registers()

    state.zf = False
    state.eip = 0x1234
    state = jnz(state, 'jnz 0x41414141')
    s.add(state.eip == 0x41414141)
    check = s.check()
    print('zf = False, eip = 0x1234, jnz 0x41414141, eip == 0x41414141?')
    print(check)
    s = Solver()
    state = Registers()
    state.zf = True
    state.eip = 0x41414141
    state = jnz(state, 'jnz 0x42424242')
    s.add(state.eip == 0x41414141)
    check = s.check()
    print('zf = True, eip = 0x41414141, jnz 0x42424242, eip == 0x41414141?')
    print(check)
	mnemonic Description				signed 	conditions
	JG   	 Jump if greater 
	JNLE 	 Jump if not less or equal	signed	ZF = 0 and SF = OF
	"""

    new_eip = If(And(state.zf == False, state.sf == state.of), dst,
                 state.eip + 1)
    state.eip = new_eip
    return state


if __name__ == "__main__":
    s = Solver()
    state = Registers()

    state.zf = False
    state.sf = True
    state.of = True
    state.eip = 0x1234
    print(
        'zf = False, sf = True, of = True, eip = 0x1234 => jg 0x41414141 => state.eip == 0x41414141?'
    )
    state = jg(state, 'jg 0x41414141')
    s.add(state.eip == 0x41414141)
    check = s.check()
    print(check)

    s = Solver()
    state = Registers()
    state.zf = False
    state.sf = True