docs: def m2i(self, pkt, s):
          """
          ASN1F_SEQUENCE behaves transparently, with nested ASN1_objects being
          dissected one by one. Because we use obj.dissect (see loop below)
          instead of obj.m2i (as we trust dissect to do the appropriate set_vals)
          we do not directly retrieve the list of nested objects.
          Thus m2i returns an empty list (along with the proper remainder).
          It is discarded by dissect() and should not be missed elsewhere.
          """
          diff_tag, s = BER_tagging_dec(s, hidden_tag=self.ASN1_tag,
                                        implicit_tag=self.implicit_tag,
                                        explicit_tag=self.explicit_tag,
                                        safe=self.flexible_tag)
          if diff_tag is not None:
              if self.implicit_tag is not None:
                  self.implicit_tag = diff_tag
              elif self.explicit_tag is not None:
                  self.explicit_tag = diff_tag
          codec = self.ASN1_tag.get_codec(pkt.ASN1_codec)
          i, s, remain = codec.check_type_check_len(s)
          if len(s) == 0:
              for obj in self.seq:
                  obj.set_val(pkt, None)
          else:
              for obj in self.seq:
                  try:
                      s = obj.dissect(pkt, s)
                  except ASN1F_badsequence:
                      break
              if len(s) > 0:
                  raise BER_Decoding_Error("unexpected remainder", remaining=s)
          return [], remain