Esempio n. 1
0
        public static Stream EnsureUnpacked(Stream s)
        {
            var reader      = new StructReader(s, System.Text.Encoding.ASCII, true);
            var streamStart = s.Position;

            var version = reader.ReadSingle(); //read just version

            s.Position = streamStart;          //back to start for further processing
            if (version >= 1.44f)
            {
                var header = reader.ReadStruct <DLF_IO_HEADER>(); //read full header

                MemoryStream ms = new MemoryStream();

                StructWriter writer = new StructWriter(ms, System.Text.Encoding.ASCII, true);
                writer.WriteStruct(header); //write header

                byte[] restOfFile = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position));
                byte[] unpacked   = ArxIO.Unpack(restOfFile);

                writer.Write(unpacked); //write unpacked rest
                s.Dispose();            //close old stream
                ms.Position = 0;
                return(ms);
            }
            return(s); //no need to unpack, return input stream
        }
Esempio n. 2
0
        public static void SaveCache()
        {
            if (!CacheReady)
            {
                return;
            }
            try {
                TLBCache Cache = new TLBCache()
                {
                    Signature     = "TLBC",
                    Original      = Program.Cache.Keys.OfType <string>().ToArray(),
                    Translations  = Program.Cache.Values.OfType <string>().ToArray(),
                    ManualString  = ForceDialogues.Keys.OfType <string>().ToArray(),
                    ManualChecked = ForceDialogues.Values.OfType <bool>().ToArray()
                };

                if (File.Exists(CachePath))
                {
                    File.Delete(CachePath);
                }

                using (StructWriter Writer = new StructWriter(CachePath)) {
                    Writer.WriteStruct(ref Cache);
                    Writer.Close();
                }
            } catch { }

            SaveTask();
        }
        public static byte[] DoImplode(byte[] bytes)
        {
            MemoryStream output = new MemoryStream();

            var header = new ImplodeHeader();

            header.literalSize = ImplodeLiteralSize.Fixed;
            header.dictSize    = ImplodeDictSize.Size1024;

            using (var sw = new StructWriter(output, Encoding.UTF8, true))
            {
                sw.WriteStruct(header);
            }

            BitStream bits = new BitStream();

            for (int i = 0; i < bytes.Length; i++)
            {
                bits.WriteFixedLiteral(bytes[i]);
            }
            bits.WriteEOS();
            while (bits.ByteReady())
            {
                output.WriteByte(bits.GetByte());
            }
            output.WriteByte(bits.GetBytePadded());

            return(output.ToArray());
        }
Esempio n. 4
0
        ColumnWriterDetails GetStructColumnWriter()
        {
            var columnWriter = new StructWriter(_bufferFactory, 0);
            var state        = new List <object>();

            var structColumnType = new Protocol.ColumnType
            {
                Kind = Protocol.ColumnTypeKind.Struct
            };

            foreach (var column in _columnWriters)
            {
                structColumnType.FieldNames.Add(column.PropertyName);
                structColumnType.SubTypes.Add(column.ColumnWriter.ColumnId);
            }

            return(new ColumnWriterDetails
            {
                PropertyName = _typeName,
                ColumnWriter = columnWriter,
                AddValueToState = classInstance =>
                {
                    state.Add(classInstance);
                },
                WriteValuesFromState = () =>
                {
                    columnWriter.AddBlock(state);
                    state.Clear();
                },
                ColumnType = structColumnType
            });
        }
Esempio n. 5
0
        private void WriteString(StructWriter Stream, string Content)
        {
            byte[] Buffer = Encoding.UTF8.GetBytes(Content);
            WriteNum(Stream, Buffer.LongLength);

            Stream.Write(Buffer, 0, Buffer.Length);
        }
Esempio n. 6
0
        public byte[] Export(string[] Strings)
        {
            uint EntryLen = (uint)Tools.GetStructLength(new Entry());

            byte[] NewScript = new byte[this.Header.TextTableOffset];
            Array.Copy(Script, NewScript, NewScript.Length);
            MemoryStream StringBuffer = new MemoryStream();

            Entry[]      EntryArr = Entries.ToArray();
            StructWriter Writer   = new StructWriter(StringBuffer, Encoding.Unicode);
            uint         Length   = 0;

            for (int i = 0; i < Strings.Length; i++)
            {
                dynamic Struct = EntryArr[i];
                Struct.TextPos       = Length;
                Struct.TextUniLength = (uint)Strings[i].Length;
                Overwrite(ref NewScript, Tools.BuildStruct(ref Struct), Header.ByteCodeLength + Header.ByteCodeStart + (EntryLen * (uint)i));
                Length += Struct.TextUniLength + 1;
                Writer.Write(Strings[i], StringStyle.UCString);
            }
            Header.TextUniTableLength = (uint)StringBuffer.Length / 2;
            Header.TextTableLength    = (uint)StringBuffer.Length;
            dynamic H = Header;

            Tools.BuildStruct(ref H).CopyTo(NewScript, 0);
            NewScript = NewScript.Concat(StringBuffer.ToArray()).ToArray();
            Writer.Close();
            StringBuffer?.Close();
            return(NewScript);
        }
Esempio n. 7
0
        public static Stream EnsurePacked(Stream s)
        {
            s.Position = 0;
            StructReader reader = new StructReader(s);
            MemoryStream ms     = new MemoryStream();
            StructWriter writer = new StructWriter(ms, System.Text.Encoding.ASCII, true);

            var header = reader.ReadStruct <FTS_IO_UNIQUE_HEADER>();

            writer.WriteStruct(header);

            for (int i = 0; i < header.count; i++)
            {
                writer.WriteStruct(reader.ReadStruct <FTS_IO_UNIQUE_HEADER2>());
            }

            byte[] restOfFile = reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position));
            byte[] packed     = ArxIO.Pack(restOfFile);

            ms.Write(packed, 0, packed.Length);
            ms.Position = 0;

            s.Dispose();
            return(ms);
        }
Esempio n. 8
0
        public byte[] Export(string[] Content)
        {
            using (var Strm = new MemoryStream())
                using (StructWriter Writer = new StructWriter(Strm, Encoding: Encoding))
                {
                    var File = new TextDataFormat();
                    File.Content = Content;

                    File.Count   = Content.Length;
                    File.Offsets = new TextDataEntryOffset[File.Count];

                    var Offset = 16 + (16 * File.Count);

                    for (int i = 0; i < Content.Length; i++)
                    {
                        File.Offsets[i] = new TextDataEntryOffset()
                        {
                            Offset = Offset
                        };

                        Offset += Encoding.GetByteCount(Content[i] + '\x0');
                    }

                    Writer.WriteStruct(ref File);
                    Writer.Flush();

                    foreach (var String in Content)
                    {
                        Writer.WriteString(String, StringStyle.CString);
                    }


                    return(Strm.ToArray());
                }
        }
Esempio n. 9
0
        public byte[] Export(string[] Content)
        {
            var NewHeader = new HeaderFooter();

            Tools.CopyStruct(Header, ref NewHeader);

            using (MemoryStream OriScript = new MemoryStream(Script))
                using (MemoryStream Stream = new MemoryStream())
                    using (StructWriter Writer = new StructWriter(Stream, Header.Endian == 'B', Encoding)) {
                        NewHeader.StructOffset = 0;

                        OriScript.Position = Header.StructOffset;
                        byte[] StructData = new byte[Align(Header.StructCount * Header.StructSize)];
                        OriScript.Read(StructData, 0, StructData.Length);


                        NewHeader.TypesOffset = (uint)StructData.Length;

                        OriScript.Position = Header.TypesOffset;
                        byte[] TypeData = new byte[Align(Header.TypesCount * Tools.GetStructLength(new TypeDescriptor()))];
                        OriScript.Read(TypeData, 0, TypeData.Length);

                        NewHeader.StringOffset = (uint)(NewHeader.TypesOffset + TypeData.Length);

                        byte[] StrData;
                        using (MemoryStream StrStream = new MemoryStream())
                            using (StructWriter StrWriter = new StructWriter(StrStream, Writer.BigEndian, Encoding)) {
                                Dictionary <string, uint> OffsetMap = new Dictionary <string, uint>();
                                for (int i = 0; i < Content.Length; i++)
                                {
                                    if (OffsetMap.ContainsKey(Content[i]))
                                    {
                                        var Offset = OffsetMap[Content[i]];
                                        BitConverter.GetBytes(Offset).CopyTo(StructData, OffsetPos[i]);
                                    }
                                    else
                                    {
                                        BitConverter.GetBytes((uint)StrWriter.Position).CopyTo(StructData, OffsetPos[i]);
                                        OffsetMap[Content[i]] = (uint)StrWriter.Position;
                                        StrWriter.Write(Content[i], StringStyle.CString);
                                    }
                                }

                                StrWriter.Flush();

                                StrData = new byte[Align(StrStream.Length)];
                                StrStream.ToArray().CopyTo(StrData, 0);
                            }


                        Writer.Write(StructData);
                        Writer.Write(TypeData);
                        Writer.Write(StrData);
                        Writer.WriteStruct(ref NewHeader);
                        Writer.Flush();

                        return(Stream.ToArray());
                    }
        }
Esempio n. 10
0
 public void WriteTo(StructWriter writer)
 {
     writer.WriteStruct(header);
     for (int i = 0; i < paths.Length; i++)
     {
         writer.WriteStruct(paths[i]);
     }
 }
Esempio n. 11
0
        static public void Export(File[] Files, Stream Output, bool CloseStreams = true)
        {
            StructWriter Writer = new StructWriter(Output, Encoding: Encoding.Unicode);

            uint DataInfoLen = 0;

            foreach (File f in Files)
            {
                DataInfoLen += (uint)Tools.GetStructLength(f, Encoding.Unicode);
            }

            ArcHeader Header = new ArcHeader()
            {
                Count      = (uint)Files.LongLength,
                BaseOffset = DataInfoLen
            };

            Writer.WriteStruct(ref Header);

            uint Ptr = 0;

            for (uint i = 0; i < Files.LongLength; i++)
            {
                Files[i].Offset = Ptr;
                Files[i].Length = (uint)Files[i].Content.Length;

                Ptr += Files[i].Length;

                Writer.WriteStruct(ref Files[i]);
            }

            for (uint i = 0; i < Files.LongLength; i++)
            {
                int    Readed   = 0;
                uint   TotalLen = 0;
                byte[] Buffer   = new byte[1024 * 1024];
                do
                {
                    Readed = Files[i].Content.Read(Buffer, 0, Buffer.Length);
                    Output.Write(Buffer, 0, Readed);
                    TotalLen += (uint)Readed;
                } while (Readed > 0);
                Output.Flush();

                //System.Diagnostics.Debug.Assert(TotalLen == Files[i].Length);

                if (CloseStreams)
                {
                    Files[i].Content.Close();
                }
            }

            if (CloseStreams)
            {
                Writer.Close();
            }
        }
Esempio n. 12
0
        public static void Repack(File[] Files, Stream Output, bool CloseStreams = true)
        {
            if ((from x in Files where x.FileName == HeaderInfo select x).Count() != 1)
            {
                throw new Exception("Header Info Not Found");
            }

            byte[] HInfo = new byte[0x7F8];
            File   tmp   = (from x in Files where x.FileName == HeaderInfo select x).First();

            tmp.Content.Read(HInfo, 0, HInfo.Length);
            tmp.Content.Close();

            Files = (from x in Files where x.FileName != HeaderInfo select x).ToArray();

            StructWriter Writer = new StructWriter(Output, Encoding: Encoding.ASCII);
            PACHeader    Header = new PACHeader()
            {
                Signature = "PAC ",
                FileCount = (uint)Files.Length,
                Dummy     = HInfo
            };

            Writer.WriteStruct(ref Header);

            uint TotalHeaderLen = (uint)((Tools.GetStructLength(new File()) * Files.Length) + Tools.GetStructLength(Header));

            for (uint i = 0, x = 0; i < Files.Length; i++)
            {
                tmp = new File()
                {
                    FileName = Files[i].FileName,
                    Length   = (uint)Files[i].Content.Length,
                    Offset   = x + TotalHeaderLen
                };
                Writer.WriteStruct(ref tmp);

                x += tmp.Length;
            }


            for (uint i = 0; i < Files.Length; i++)
            {
                Files[i].Content.CopyTo(Writer.BaseStream);

                if (CloseStreams)
                {
                    Files[i].Content.Close();
                }
            }
            Writer.Flush();

            if (CloseStreams)
            {
                Writer.Close();
            }
        }
Esempio n. 13
0
        public void WriteTo(StructWriter writer)
        {
            writer.WriteStruct(data);

            for (int i = 0; i < linkedAnchors.Length; i++)
            {
                writer.Write(linkedAnchors[i]);
            }
        }
Esempio n. 14
0
 public void write(DataWriter i_writer)
 {
     i_writer.writeAscii(this.szName, 20);
     i_writer.writeShort(this.nParentNo);
     i_writer.writeShort(this.nChildNo);
     i_writer.writeByte(this.cbKind);
     i_writer.writeShort(this.unIKTarget);
     StructWriter.write(this.vec3Position, i_writer);
     return;
 }
Esempio n. 15
0
 public void write(DataWriter i_writer)
 {
     StructWriter.write(this.vec3Pos, i_writer);
     StructWriter.write(this.vec3Normal, i_writer);
     StructWriter.write(this.uvTex, i_writer);
     i_writer.writeUnsignedShort(this.unBoneNo[0]);
     i_writer.writeUnsignedShort(this.unBoneNo[1]);
     i_writer.write(this.cbWeight);
     i_writer.write(this.cbEdge);
     return;
 }
Esempio n. 16
0
        public static byte[] BuildStruct <T>(ref T Struct, bool BigEndian = false, Encoding Encoding = null)
        {
            MemoryStream Stream = new MemoryStream();
            StructWriter Writer = new StructWriter(Stream, BigEndian, Encoding);

            Writer.WriteStruct(ref Struct);
            byte[] Result = Stream.ToArray();
            Writer.Close();
            Stream?.Close();
            return(Result);
        }
Esempio n. 17
0
 public void write(DataWriter i_writer)
 {
     StructWriter.write(this.col4Diffuse, i_writer);
     i_writer.writeFloat(this.fShininess);
     StructWriter.write(this.col3Specular, i_writer);
     StructWriter.write(this.col3Ambient, i_writer);
     i_writer.writeByte(this.toon_index); // toon??.bmp // 0.bmp:0xFF, 1(01).bmp:0x00 ・・・ 10.bmp:0x09
     i_writer.writeByte(this.edge_flag);  // 輪郭、影
     i_writer.writeInt(this.ulNumIndices);
     i_writer.writeAscii(this.szTextureFileName, 20);
     return;
 }
Esempio n. 18
0
        public static Stream BuildEntries(NPK3Entry[] Entries)
        {
            Stream       Output = new MemoryStream();
            StructWriter Writer = new StructWriter(Output, Encoding: Encoding);

            for (int i = 0; i < Entries.Length; i++)
            {
                var Entry = Entries[i];
                Writer.WriteStruct(ref Entry);
            }
            Output.Position = 0;
            return(Output);
        }
Esempio n. 19
0
        private void SaveSettings()
        {
            Settings.Signature = Signature;
            Settings.Version   = SettingsVersion;

            Settings.Blacklist = Settings.Blacklist.Distinct().ToArray();

            using (Stream WriterStream = new StreamWriter(SettingsPath).BaseStream)
                using (StructWriter Writer = new StructWriter(WriterStream)) {
                    Writer.WriteStruct(ref Settings);
                    Writer.Close();
                }
        }
Esempio n. 20
0
        public void WriteTo(StructWriter writer)
        {
            writer.WriteStruct(sceneInfo);

            for (int i = 0; i < polygons.Length; i++)
            {
                writer.WriteStruct(polygons[i]);
            }

            for (int i = 0; i < anchors.Length; i++)
            {
                writer.Write(anchors[i]);
            }
        }
Esempio n. 21
0
        public void WriteTo(Stream s)
        {
            StructWriter writer = new StructWriter(s);

            writer.WriteStruct(header);

            for (int i = 0; i < uniqueHeaders.Length; i++)
            {
                writer.WriteStruct(uniqueHeaders[i]);
            }

            writer.WriteStruct(sceneHeader);

            for (int i = 0; i < textureContainers.Length; i++)
            {
                writer.WriteStruct(textureContainers[i]);
            }

            for (int z = 0; z < sceneHeader.sizez; z++)
            {
                for (int x = 0; x < sceneHeader.sizex; x++)
                {
                    int index = z * sceneHeader.sizex + x;
                    cells[index].WriteTo(writer);
                }
            }

            for (int i = 0; i < anchors.Length; i++)
            {
                anchors[i].WriteTo(writer);
            }

            for (int i = 0; i < portals.Length; i++)
            {
                writer.WriteStruct(portals[i]);
            }

            for (int i = 0; i < rooms.Length; i++)
            {
                rooms[i].WriteTo(writer);
            }

            for (int i = 0, index = 0; i < rooms.Length; i++)
            {
                for (int j = 0; j < rooms.Length; j++, index++)
                {
                    writer.WriteStruct(roomDistances[index]);
                }
            }
        }
Esempio n. 22
0
        public void WriteTo(StructWriter writer)
        {
            writer.WriteStruct(data);

            for (int i = 0; i < portals.Length; i++)
            {
                writer.Write(portals[i]);
            }

            for (int i = 0; i < polygons.Length; i++)
            {
                writer.WriteStruct(polygons[i]);
            }
        }
Esempio n. 23
0
        public void write(DataWriter i_writer)
        {
            i_writer.writeAscii(this.joint_name, 20);           // 諸データ:名称 // 右髪1
            i_writer.writeInt(this.joint_rigidbody_a);          // 諸データ:剛体A
            i_writer.writeInt(this.joint_rigidbody_b);          // 諸データ:剛体B
            StructWriter.write(this.joint_pos, i_writer);       // 諸データ:位置(x, y, z) // 諸データ:位置合せでも設定可
            StructWriter.write(this.joint_rot, i_writer);       // 諸データ:回転(rad(x), rad(y), rad(z))
            StructWriter.write(this.constrain_pos_1, i_writer); // 制限:移動1(x, y, z)
            StructWriter.write(this.constrain_pos_2, i_writer); // 制限:移動2(x, y, z)
            StructWriter.write(this.constrain_rot_1, i_writer); // 制限:回転1(rad(x), rad(y), rad(z))
            StructWriter.write(this.constrain_rot_2, i_writer); // 制限:回転2(rad(x), rad(y), rad(z))
            StructWriter.write(this.spring_pos, i_writer);      // ばね:移動(x, y, z)
            StructWriter.write(this.spring_rot, i_writer);      // ばね:回転(rad(x), rad(y), rad(z))

            return;
        }
Esempio n. 24
0
        public byte[] Export(StringEntry[] Strings)
        {
            ScriptHeader NewHeader = new ScriptHeader();

            Tools.CopyStruct(Header, ref NewHeader);

            MemoryStream UnkData    = new MemoryStream();
            MemoryStream OffsetData = new MemoryStream();
            MemoryStream StringData = new MemoryStream();

            MemoryStream Reader = new MemoryStream(Script);

            Reader.Seek(0x10, SeekOrigin.Begin);

            Algo.CopyStream(Reader, UnkData, NewHeader.UnkCount * 8);
            Reader.Close();

            StructWriter OffsetWriter = new StructWriter(OffsetData, false, Encoding);
            StructWriter StringWriter = new StructWriter(StringData, false, Encoding);


            for (uint i = 0; i < EntryCount; i++)
            {
                OffsetWriter.Write((uint)StringWriter.BaseStream.Length);
                StringWriter.WriteStruct(ref Strings[i]);
            }
            OffsetWriter.Seek(0, SeekOrigin.Begin);
            StringWriter.Seek(0, SeekOrigin.Begin);

            NewHeader.ScriptLength = (uint)(OffsetWriter.BaseStream.Length + StringWriter.BaseStream.Length + UnkData.Length);
            NewHeader.OffsetTable  = (uint)UnkData.Length;
            NewHeader.StringTable  = (uint)(UnkData.Length + OffsetData.Length);

            byte[] Output = new byte[0x10 + UnkData.Length + OffsetData.Length + StringData.Length];

            Tools.BuildStruct(ref NewHeader, false, Encoding).CopyTo(Output, 0);

            UnkData.ToArray().CopyTo(Output, 0x10);
            OffsetData.ToArray().CopyTo(Output, 0x10 + UnkData.Length);
            StringData.ToArray().CopyTo(Output, 0x10 + UnkData.Length + OffsetData.Length);

            UnkData.Close();
            StringWriter.Close();
            OffsetWriter.Close();

            return(Compress(Output));
        }
Esempio n. 25
0
        private void BuildStringData(string[] Strings, out byte[] StringTable, out int[] Offsets)
        {
            Offsets = new int[StrCount];
            MemoryStream StrData = new MemoryStream();
            StructWriter Writer  = new StructWriter(StrData);

            for (int i = 0; i < StrCount; i++)
            {
                Offsets[i] = (int)Writer.BaseStream.Length;
                StrEntry Entry = new StrEntry();
                Entry.Content = Strings[i];
                Writer.WriteStruct(ref Entry);
            }
            StringTable = StrData.ToArray();
            Writer.Close();
            StrData?.Close();
        }
Esempio n. 26
0
        internal static void SaveTask()
        {
            try {
                if (File.Exists(TaskPath))
                {
                    File.Delete(TaskPath);
                }

                if (TaskInfo.LastTaskPos > 0)
                {
                    using (StructWriter Writer = new StructWriter(TaskPath)) {
                        Writer.WriteStruct(ref TaskInfo);
                        Writer.Close();
                    }
                }
            } catch { }
        }
Esempio n. 27
0
        public void WriteTo(Stream s)
        {
            using (StructWriter writer = new StructWriter(s, System.Text.Encoding.ASCII, true))
            {
                writer.WriteStruct(header);

                for (int i = 0; i < scenes.Length; i++)
                {
                    writer.WriteStruct(scenes[i]);
                }

                for (int i = 0; i < inters.Length; i++)
                {
                    writer.WriteStruct(inters[i]);
                }

                if (header.lighting != 0)
                {
                    writer.WriteStruct(lightingHeader);

                    for (int i = 0; i < lightColors.Length; i++)
                    {
                        writer.Write(lightColors[i]);
                    }
                }

                for (int i = 0; i < lights.Length; i++)
                {
                    writer.WriteStruct(lights[i]);
                }

                for (int i = 0; i < fogs.Length; i++)
                {
                    writer.WriteStruct(fogs[i]);
                }

                //write back nodes data
                writer.Write(nodesData);

                for (int i = 0; i < paths.Length; i++)
                {
                    paths[i].WriteTo(writer);
                }
            }
        }
Esempio n. 28
0
        private void WritePadBytes(StructWriter sw, long curlen, long wantedlen)
        {
            long padlength = wantedlen - curlen;

            if (padlength <= 0)
            {
                return;
            }


            byte[] buffer = new byte[padlength];
            for (int padidx = 0; padidx < buffer.Length; padidx++)
            {
                buffer[padidx] = 0;
            }

            sw.Write(buffer);
        }
Esempio n. 29
0
        public void WriteTo(Stream s)
        {
            var writer = new StructWriter(s);

            writer.WriteStruct(header);

            for (int i = 0; i < lights.Length; i++)
            {
                writer.WriteStruct(lights[i]);
            }

            writer.WriteStruct(lightingHeader);

            for (int i = 0; i < lightColors.Length; i++)
            {
                writer.Write(lightColors[i]);
            }
        }
Esempio n. 30
0
        public FieldInvoke GetOffsetWork()
        {
            return(new FieldInvoke(
                       (Stream, FromReader, Struct) => {
                XBXHeader Header = Struct;

                uint Count = (Header.EntryLen * Header.EntriesCount);
                if (FromReader)
                {
                    StructReader Reader = new StructReader(Stream);
                    Header.Offsets = new uint[Count];
                    for (uint i = 0; i < Count; i++)
                    {
                        Header.Offsets[i] = Reader.ReadRawType(Const.UINT32);
                    }

                    Header.IsString = new bool[Header.EntryLen];
                    for (uint i = 0; i < Header.EntryLen; i++)
                    {
                        Header.IsString[i] = IsString(Stream, Header.Offsets[i] + Header.StrPos);
                    }
                }
                else
                {
                    for (uint i = 0, x = 0; i < Header.Offsets.Length; i++)
                    {
                        if (!Header.IsString[i % Header.EntryLen])
                        {
                            continue;
                        }

                        Header.Offsets[i] = x;
                        x += (uint)Encoding.GetByteCount(Header.Strings[i]) + 1;
                    }
                    StructWriter Writer = new StructWriter(Stream);
                    for (uint i = 0; i < Count; i++)
                    {
                        Writer.WriteRawType(Const.UINT32, Header.Offsets[i]);
                    }
                }

                return Header;
            }));
        }