#!/usr/bin/env python
from sys import argv

def f1(input): # 0x00437890
  input = input[:0x10].ljust(0x10,chr(0x3))
  for j in range(1,len(input)):
    c = (ord(input[j-1]) + ord(input[j])) % 128
    if c == 0:
      c = 3
    input = input[:j] + chr(c) + input[j+1:]
  return input

def f2(input): # 0x00437710
  out = ''
  for i in range(len(input)):
    c = (ord(input[i])>>4) + ord('A') # nibbles left
    d = (ord(input[i]) & 0xF) + ord('A') # nibbles right
    out += chr(c) + chr(d)
  return out

def f3(input): # 0x00437AA0
  return input[::-1]

if __name__=='__main__':
  input = argv[1]
  print "input: %s (%i)" % (input, len(input))
  v1 = f1(input)
  print "f1: %r %s" % (v1, v1.encode("hex"))
  v2 = f2(v1)
  print "f2: %r %s" % (v2, v2.encode("hex"))
  v3 = f3(v2)
  print "f3: %r %s" % (v3, v3.encode("hex"))
  print v3