val.ServiceLimit = limit
    val.ArgumentTable = args

function_names = {}

for i, val in enumerate(values):
    if not val.ServiceTable: continue
    remapped = [omap_rev.remap(f) for f in val.ServiceTable]
    for sym in gsyms.globals:
        if not hasattr(sym, 'offset'): continue
        try:
            virt_base = sects[sym.segment - 1].VirtualAddress
        except IndexError:
            continue
        off = sym.offset

        for j, f in enumerate(remapped):
            if f == virt_base + off:
                ordinal = i << 12 | j
                function_names[ordinal] = sym.name
                #print "Found %s for function %x" % (sym.name,ordinal)

for i, val in enumerate(values):
    if not val.ServiceTable: continue
    for j in range(val.ServiceLimit):
        ordinal = i << 12 | j
        print("Ordinal %#06x Name: %s Args: %d (%#x bytes) Offset: %#x" %
              (ordinal, undecorate(
                  function_names[ordinal])[0], val.ArgumentTable[j] / 4,
               val.ArgumentTable[j], val.ServiceTable[j]))
    #    print i, hex(f), hex(a)
    val.ServiceTable = functions
    val.ServiceLimit = limit
    val.ArgumentTable = args

function_names = {}

for i, val in enumerate(values):
    if not val.ServiceTable: continue
    remapped = [omap_rev.remap(f) for f in val.ServiceTable]
    for sym in gsyms.globals:
        if not hasattr(sym, 'offset'): continue
        try:
            virt_base = sects[sym.segment - 1].VirtualAddress
        except IndexError:
            continue
        off = sym.offset

        for j, f in enumerate(remapped):
            if f == virt_base + off:
                ordinal = i << 12 | j
                function_names[ordinal] = sym.name
                #print "Found %s for function %x" % (sym.name,ordinal)

for i, val in enumerate(values):
    if not val.ServiceTable: continue
    for j in range(val.ServiceLimit):
        ordinal = i << 12 | j
        print("Ordinal %#06x Name: %s Args: %d (%#x bytes) Offset: %#x" % (ordinal, undecorate(
            function_names[ordinal])[0], val.ArgumentTable[j] / 4, val.ArgumentTable[j], val.ServiceTable[j]))
for i, val in enumerate(values):
    if not val.ServiceTable:
        continue
    remapped = [omap_rev.remap(f) for f in val.ServiceTable]
    for sym in gsyms.globals:
        try:
            virt_base = sects[sym.segment - 1].VirtualAddress
        except IndexError:
            continue
        off = sym.offset

        for j, f in enumerate(remapped):
            if f == virt_base + off:
                ordinal = i << 12 | j
                function_names[ordinal] = sym.name
                # print "Found %s for function %x" % (sym.name,ordinal)

for i, val in enumerate(values):
    if not val.ServiceTable:
        continue
    for j in range(val.ServiceLimit):
        ordinal = i << 12 | j
        print "Ordinal %#06x Name: %s Args: %d (%#x bytes) Offset: %#x" % (
            ordinal,
            undecorate(function_names[ordinal])[0],
            val.ArgumentTable[j] / 4,
            val.ArgumentTable[j],
            val.ServiceTable[j],
        )
    val.ServiceTable = functions
    val.ServiceLimit = limit
    val.ArgumentTable = args

function_names = {}

for i,val in enumerate(values):
    if not val.ServiceTable: continue
    remapped = [omap_rev.remap(f) for f in val.ServiceTable]
    for sym in gsyms.globals:
        if not hasattr(sym, 'offset'): continue
        try:
            virt_base = sects[sym.segment-1].VirtualAddress
        except IndexError:
            continue
        off = sym.offset

        for j,f in enumerate(remapped):
            if f == virt_base+off:
                ordinal = i << 12 | j
                function_names[ordinal] = sym.name
                #print "Found %s for function %x" % (sym.name,ordinal)

for i,val in enumerate(values):
    if not val.ServiceTable: continue
    for j in range(val.ServiceLimit):
        ordinal = i << 12 | j
        print "Ordinal %#06x Name: %s Args: %d (%#x bytes) Offset: %#x" % (ordinal, undecorate(function_names[ordinal])[0],
                                                                       val.ArgumentTable[j] / 4, val.ArgumentTable[j],
                                                                       val.ServiceTable[j])
    #    print i, hex(f), hex(a)
    val.ServiceTable = functions
    val.ServiceLimit = limit
    val.ArgumentTable = args

function_names = {}

for i,val in enumerate(values):
    if not val.ServiceTable: continue
    remapped = [omap_rev.remap(f) for f in val.ServiceTable]
    for sym in gsyms.globals:
        try:
            virt_base = sects[sym.segment-1].VirtualAddress
        except IndexError:
            continue
        off = sym.offset

        for j,f in enumerate(remapped):
            if f == virt_base+off:
                ordinal = i << 12 | j
                function_names[ordinal] = sym.name
                #print "Found %s for function %x" % (sym.name,ordinal)

for i,val in enumerate(values):
    if not val.ServiceTable: continue
    for j in range(val.ServiceLimit):
        ordinal = i << 12 | j
        print "Ordinal %#06x Name: %s Args: %d (%#x bytes) Offset: %#x" % (ordinal, undecorate(function_names[ordinal])[0],
                                                                       val.ArgumentTable[j] / 4, val.ArgumentTable[j],
                                                                       val.ServiceTable[j])