code: def _ReadPropertySet(self, property_set):
      
      # Combine the values of multiple property sections
      # but do not override properties that are already set.
      for property_section in property_set.sections:
        if property_section.class_identifier != self._CLASS_IDENTIFIER:
          continue
  
        for property_value in property_section.properties:
          property_name = self._PROPERTY_NAMES.get(
              property_value.identifier, None)
          if not property_name:
            property_name = '0x{0:04}'.format(property_value.identifier)
  
          value = self._GetValueAsObject(property_value)
          if self._PROPERTY_VALUE_MAPPINGS:
            value_callback_name = self._PROPERTY_VALUE_MAPPINGS.get(
                property_name, None)
            if value_callback_name:
              value_callback_method = getattr(self, value_callback_name, None)
              if value_callback_method:
                value = value_callback_method(value)
  
          if property_name in self._DATE_TIME_PROPERTIES:
            properties_dict = self.date_time_properties
            value = dfdatetime_filetime.Filetime(timestamp=value)
          else:
            properties_dict = self._properties
  
          if property_name not in properties_dict:
            properties_dict[property_name] = value
docs: Reads properties from a property set.
  
      Args:
        property_set (pyolecf.property_set): OLECF property set.