<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parse_list_parts(data, bucket_name, object_name, upload_id):
 """ Parser for list parts response. :param data: Response data for list parts. :param bucket_name: Response for the bucket. :param object_name: Response for the object. :param upload_id: Upload id of object name for the active multipart session. :return: Replies back three distinctive components. - List of :class:`UploadPart <UploadPart>`. - True if list is truncated, False otherwise. - Next part marker for the next request if the list was truncated. """

    root = S3Element.fromstring('ListPartsResult', data)

    is_truncated = root.get_child_text('IsTruncated').lower() == 'true'
    part_marker = root.get_child_text('NextPartNumberMarker', strict=False)
    parts = [
        UploadPart(bucket_name, object_name, upload_id,
                   part.get_int_elem('PartNumber'),
                   part.get_etag_elem(),
                   part.get_localized_time_elem('LastModified'),
                   part.get_int_elem('Size'))
        for part in root.findall('Part')
    ]

    return parts, is_truncated, part_marker