public static void ReadSharedStrings(XmlNode sharedStrings, XmlRobloxFile file)
        {
            var error = CreateErrorHandler(nameof(ReadSharedStrings));

            if (sharedStrings.Name != "SharedStrings")
            {
                throw error("Provided XmlNode's class must be 'SharedStrings'!");
            }

            foreach (XmlNode sharedString in sharedStrings)
            {
                if (sharedString.Name == "SharedString")
                {
                    XmlNode hashNode = sharedString.Attributes.GetNamedItem("md5");

                    if (hashNode == null)
                    {
                        throw error("Got a SharedString without an 'md5' attribute!");
                    }

                    string key   = hashNode.InnerText;
                    string value = sharedString.InnerText.Replace("\n", "");

                    byte[] hash   = Convert.FromBase64String(key);
                    var    record = SharedString.FromBase64(value);

                    if (hash.Length != 16)
                    {
                        throw error($"SharedString base64 key '{key}' must align to byte[16]!");
                    }

                    if (key != record.Key)
                    {
                        SharedString.Register(key, record.SharedValue);
                        record.Key = key;
                    }

                    file.SharedStrings.Add(key);
                }
            }
        }