docs: def Parse(self, cmd, args, stdout, stderr, return_val, time_taken,
              knowledge_base):
      """Parse the system profiler output. We get it in the form of a plist."""
      _ = stderr, time_taken, args, knowledge_base  # Unused
      self.CheckReturn(cmd, return_val)
  
      plist = biplist.readPlist(io.BytesIO(stdout))
  
      if len(plist) > 1:
        raise parser.ParseError("SPHardwareDataType plist has too many items.")
  
      hardware_list = plist[0]["_items"][0]
      serial_number = hardware_list.get("serial_number", None)
      system_product_name = hardware_list.get("machine_model", None)
      bios_version = hardware_list.get("boot_rom_version", None)
  
      yield rdf_client.HardwareInfo(
          serial_number=serial_number,
          bios_version=bios_version,
          system_product_name=system_product_name)