private static bool ExtractResource(string cachePath, uint index, IReadOnlyList<string> args)
 {
     if (args.Count != 5)
         return false;
     uint compressedSize;
     if (!uint.TryParse(args[3], NumberStyles.HexNumber, null, out compressedSize))
         return false;
     var outPath = args[4];
     try
     {
         using (var stream = File.OpenRead(cachePath))
         {
             var cache = new ResourceCache(stream);
             using (var outStream = File.Open(outPath, FileMode.Create, FileAccess.Write))
             {
                 cache.Decompress(stream, (int)index, compressedSize, outStream);
                 Console.WriteLine("Wrote 0x{0:X} bytes to {1}.", outStream.Position, outPath);
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("Failed to extract resource: {0}", ex.Message);
     }
     return true;
 }
 private static bool ImportResource(string cachePath, uint index, IReadOnlyList<string> args)
 {
     if (args.Count != 4)
         return false;
     var inPath = args[3];
     try
     {
         using (var stream = File.Open(cachePath, FileMode.Open, FileAccess.ReadWrite))
         {
             var cache = new ResourceCache(stream);
             var data = File.ReadAllBytes(inPath);
             var compressedSize = cache.Compress(stream, (int)index, data);
             Console.WriteLine("Imported 0x{0:X} bytes.", data.Length);
             Console.WriteLine("Compressed size = 0x{0:X}", compressedSize);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("Failed to import resource: {0}", ex.Message);
     }
     return true;
 }