Descompactando arquivos SWF em C #

Aqui está uma versão c # de descompactação de SWF que usei para verificação de SWF

private byte[] SwfDecompress(byte[] data, out size)
{
var stream = new MemoryStream(data);

var first = stream.ReadByte();
if (first != 0x43) // C
{
throw new ArgumentException("Not compressed", "data");
}

if (stream.ReadByte() != 0x57) // W
{
throw new ArgumentException("Not SWF", "data");
}

if (stream.ReadByte() != 0x53) // S
{
throw new ArgumentException("Not SWF", "data");
}

var version = (byte) stream.ReadByte();
var integer = new byte[4];
integer
[0] = (byte) stream.ReadByte();
integer
[1] = (byte) stream.ReadByte();
integer
[2] = (byte) stream.ReadByte();
integer
[3] = (byte) stream.ReadByte();

size
= BitConverter.ToInt32(integer, 0);
var outStream = new MemoryStream();

outStream
.WriteByte(0x46);
outStream
.WriteByte(0x57);
outStream
.WriteByte(0x53);
outStream
.WriteByte(version);
outStream
.Write(integer, 0, 4);

var uncompressedInput = new Ionic.Zlib.ZlibStream(stream, CompressionMode.Decompress);
byte[] buffer = new byte[4096];
int read;
while ((read = uncompressedInput.Read(buffer, 0, buffer.Length)) > 0)
{
outStream
.Write(buffer, 0, read);
}

outStream
.Seek(0, SeekOrigin.Begin);
return outStream.ToArray();
}

Para a descompressão de fluxo ZLIB DotNetZip.

Para obter detalhes de implementação, consulte aqui: http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf-file-format-spec.pdf

0x43, 0x57, 0x53 (“CWS”). Um CWS indica que todo o arquivo após os primeiros 8 bytes (ou seja,
após o campo FileLength) foi compactado usando o padrão aberto ZLIB. O formato de dados
que a biblioteca ZLIB usa é descrito pelos documentos de solicitação de comentários (RFCs) 1950 a
1952. A compactação de arquivo CWS é permitida em SWF 6 ou posterior apenas