docs: def decode(stream, strict=True):
      """
      Decodes a SOL stream. L{strict} mode ensures that the sol stream is as spec
      compatible as possible.
  
      @return: A C{tuple} containing the C{root_name} and a C{dict} of name,
          value pairs.
      """
      if not isinstance(stream, util.BufferedByteStream):
          stream = util.BufferedByteStream(stream)
  
      # read the version
      version = stream.read(2)
  
      if version != HEADER_VERSION:
          raise pyamf.DecodeError('Unknown SOL version in header')
  
      # read the length
      length = stream.read_ulong()
  
      if strict and stream.remaining() != length:
          raise pyamf.DecodeError('Inconsistent stream header length')
  
      # read the signature
      signature = stream.read(10)
  
      if signature != HEADER_SIGNATURE:
          raise pyamf.DecodeError('Invalid signature')
  
      length = stream.read_ushort()
      root_name = stream.read_utf8_string(length)
  
      # read padding
      if stream.read(3) != PADDING_BYTE * 3:
          raise pyamf.DecodeError('Invalid padding read')
  
      decoder = pyamf.get_decoder(stream.read_uchar())
      decoder.stream = stream
  
      values = {}
  
      while 1:
          if stream.at_eof():
              break
  
          name = decoder.readString()
          value = decoder.readElement()
  
          # read the padding
          if stream.read(1) != PADDING_BYTE:
              raise pyamf.DecodeError('Missing padding byte')
  
          values[name] = value
  
      return (root_name, values)