def self.decode(data)
offset = 0
version_major = data[offset, 1].unpack(PACK_CHAR).first
offset += 1
version_minor = data[offset, 1].unpack(PACK_CHAR).first
offset += 1
table_length = Table.length(data[offset, 4])
server_properties = Table.decode(data[offset, table_length + 4])
offset += table_length + 4
length = data[offset, 4].unpack(PACK_UINT32).first
offset += 4
mechanisms = data[offset, length]
offset += length
length = data[offset, 4].unpack(PACK_UINT32).first
offset += 4
locales = data[offset, length]
offset += length
self.new(version_major, version_minor, server_properties, mechanisms, locales)
end