<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _PPIGuessPayloadClass(p, **kargs):

 """ This function tells the PacketListField how it should extract the
 TLVs from the payload. We pass cls only the length string
 pfh_len says it needs. If a payload is returned, that means
 part of the sting was unused. This converts to a Raw layer, and
 the remainder of p is added as Raw's payload. If there is no
 payload, the remainder of p is added as out's payload.
 """

    if len(p) >= 4:
        t,pfh_len = struct.unpack("<HH", p[:4])
        # Find out if the value t is in the dict _ppi_types.
        # If not, return the default TLV class
        cls = getPPIType(t, "default")
        pfh_len += 4
        out = cls(p[:pfh_len], **kargs)
        if (out.payload):
            out.payload = conf.raw_layer(out.payload.load)
            if (len(p) > pfh_len):
                out.payload.payload = conf.padding_layer(p[pfh_len:])
        elif (len(p) > pfh_len):
            out.payload = conf.padding_layer(p[pfh_len:])
        
    else:
        out = conf.raw_layer(p, **kargs)
    return out