public static void Run(CommandLine.BuildArgs args)
        {
            Assert.IsNotNull(args, nameof(args));

            if (ValidateArgs(args) == false)
            {
                return;
            }

            if (args.Format == GameFormat.PSP)
            {
                Console.WriteLine("Building ISO");
                Console.WriteLine($"Source ISO: {args.SourceIsoPath}");
                Console.WriteLine($"Destination ISO: {args.DestinationIsoPath}");
                Console.WriteLine($"Translation Location: {args.TranslationPath}");
                Console.WriteLine();

                using (var iso = new Iso9660.IsoImage(args.SourceIsoPath))
                {
                    var filesystem = new IO.IsoFileSystem(iso, @"PSP_GAME\USRDIR");

                    var datapath_eboot = Path.Combine(args.TranslationPath, "EBOOT.BIN");
                    if (File.Exists(datapath_eboot) == true)
                    {
                        Console.WriteLine(@"EBOOT.BIN");

                        UpdateEboot(iso, datapath_eboot);
                    }

                    Run(GameFormat.PSP, filesystem, Encodings.ShiftJIS, args.TranslationPath);

                    FixFileReferences(iso, filesystem);

                    iso.GetPrimaryVolumeDescriptor().VolumeSpaceSize = iso.GetHighestSectorUsed() + 1;

                    Console.WriteLine();
                    Console.WriteLine("Writing ISO.");

                    iso.Save(args.DestinationIsoPath);
                }
            }

            if (args.Format == GameFormat.PC)
            {
                Console.WriteLine("Injecting Translation");
                Console.WriteLine($"Game Path: {args.GamePath}");
                Console.WriteLine($"Translation Location: {args.TranslationPath}");
                Console.WriteLine();

                var filesystem = new IO.DirectoryFileSystem(args.GamePath);

                Run(GameFormat.PC, filesystem, Encodings.Chinese, args.TranslationPath);
            }
        }
        static void UpdateFileData(Iso9660.IsoImage iso, Iso9660.FileSector file, Byte[] buffer)
        {
            Assert.IsNotNull(iso, nameof(iso));
            Assert.IsNotNull(file, nameof(file));
            Assert.IsNotNull(buffer, nameof(buffer));

            file.Record.DataLength = (UInt32)buffer.Length;
            file.SetData(buffer);

            var sectorsused = MathUtil.RoundUp(buffer.Length, 2048) / 2048;

            if (iso.CheckForRoom(file.Record, sectorsused) == false)
            {
                iso.ChangeFileSector(file, iso.GetHighestSectorUsed() + 1);
            }
        }