[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\ntab_size = 4\n\n[*.cs]\ncsharp_new_line_before_open_brace = all\ncsharp_new_line_before_else = true\ncsharp_new_line_before_catch = true\ncsharp_new_line_before_finally = true\ncsharp_new_line_between_query_expression_clauses = true\ncsharp_indent_case_contents = true\ncsharp_indent_switch_labels = true\ncsharp_indent_labels = one_less_than_current\ncsharp_indent_block_contents = true\ncsharp_indent_braces = false\ncsharp_indent_case_contents_when_block = false\ncsharp_indent_case_contents_when_block = false\ncsharp_space_after_keywords_in_control_flow_statements = true\ncsharp_space_before_colon_in_inheritance_clause = true\ncsharp_space_after_colon_in_inheritance_clause = true\ncsharp_space_around_binary_operators = before_and_after\ncsharp_space_between_method_declaration_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_empty_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_name_and_open_parenthesis = false\ncsharp_space_between_method_call_parameter_list_parentheses = false\ncsharp_space_between_method_call_empty_parameter_list_parentheses = false\ncsharp_space_between_method_call_name_and_opening_parenthesis = false\ncsharp_space_after_comma = true\ncsharp_space_before_comma = false\ncsharp_space_after_dot = false\ncsharp_space_before_dot = false\ncsharp_space_after_semicolon_in_for_statement = true\ncsharp_space_before_semicolon_in_for_statement = false\ncsharp_space_around_declaration_statements = false\ncsharp_space_before_open_square_brackets = false\ncsharp_space_between_empty_square_brackets = false\ncsharp_space_between_square_brackets = false\ncsharp_preserve_single_line_statements = false\ncsharp_preserve_single_line_blocks = true\ncsharp_using_directive_placement = outside_namespace:silent\ncsharp_prefer_simple_using_statement = true:suggestion\ncsharp_prefer_braces = true:silent\ncsharp_style_namespace_declarations = block_scoped:silent\ncsharp_style_prefer_method_group_conversion = true:silent\ncsharp_style_expression_bodied_methods = false:silent\ncsharp_style_expression_bodied_constructors = false:silent\ncsharp_style_expression_bodied_operators = false:silent\ncsharp_style_expression_bodied_properties = true:silent\ncsharp_style_expression_bodied_indexers = true:silent\ncsharp_style_expression_bodied_accessors = true:silent\ncsharp_style_expression_bodied_lambdas = true:silent\ncsharp_style_expression_bodied_local_functions = false:silent\n\n[*.{cs,vb}]\n#### Naming styles ####\n\n# Naming rules\n\ndotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion\ndotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface\ndotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i\n\ndotnet_naming_rule.types_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.types_should_be_pascal_case.symbols = types\ndotnet_naming_rule.types_should_be_pascal_case.style = pascal_case\n\ndotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members\ndotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case\n\n# Symbol specifications\n\ndotnet_naming_symbols.interface.applicable_kinds = interface\ndotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.interface.required_modifiers = \n\ndotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum\ndotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.types.required_modifiers = \n\ndotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method\ndotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.non_field_members.required_modifiers = \n\n# Naming styles\n\ndotnet_naming_style.begins_with_i.required_prefix = I\ndotnet_naming_style.begins_with_i.required_suffix = \ndotnet_naming_style.begins_with_i.word_separator = \ndotnet_naming_style.begins_with_i.capitalization = pascal_case\n\ndotnet_naming_style.pascal_case.required_prefix = \ndotnet_naming_style.pascal_case.required_suffix = \ndotnet_naming_style.pascal_case.word_separator = \ndotnet_naming_style.pascal_case.capitalization = pascal_case\n\ndotnet_naming_style.pascal_case.required_prefix = \ndotnet_naming_style.pascal_case.required_suffix = \ndotnet_naming_style.pascal_case.word_separator = \ndotnet_naming_style.pascal_case.capitalization = pascal_case\ndotnet_style_operator_placement_when_wrapping = beginning_of_line\ntab_width = 4\n"
  },
  {
    "path": ".gitattributes",
    "content": "*.sln    text merge=union\n*.csproj text merge=union\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [Xeeynamo]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.md",
    "content": "---\nname: Bug report\nabout: Used when a user wants to report a bug\ntitle: GAME NAME - BRIEF EXPLAINATION\nlabels: enhancement\nassignees: Xeeynamo\n\n---\n\n* Game name: -\n* Platform: - (eg. PC, PS2, etc.)\n\nExplain which action you were trying to perform before facing the bug and error message.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.md",
    "content": "---\nname: Feature request\nabout: Used when a user wants to request a feature\ntitle: GAME NAME - BRIEF EXPLAINATION\nlabels: enhancement\nassignees: Xeeynamo\n\n---\n\n* Game name: -\n* Platform: - (eg. PC, PS2, etc.)\n\n--- insert your feature request description here---\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/ff7r-missing-item-name-request.md",
    "content": "---\nname: FF7R Missing item name request\nabout: Used when a user wants to add a missing item name\ntitle: FF7R Missing item name request\nlabels: ff7r-item\nassignees: Xeeynamo\n\n---\n\nItem name: `eg. Hi-Potion`\n\n\nPLEAE REMOVE THE FOLLOWING TEXT BEFORE SUBMITTING THE ISSUE:\n\nBefore opening this issue, please be 100% sure that the item you are reporting is the correct one. \nTo prove the item name, you can set a specific amount and see if in-game the value is there, or you set the amount of all your inventory to 0 but this item. The in-game inventory should be empty and the only item is the one you were searching for.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/ff7r-teleport-coordinates-request.md",
    "content": "---\nname: FF7R Teleport coordinates request\nabout: Used when a user wants to add a specific location with coordinates\ntitle: FF7R Teleport coordinates request\nlabels: ff7r-location\nassignees: Xeeynamo\n\n---\n\nChapter: `1-18`\n\nCoordinates: `0, 0, 0`\n\nOut of bounds: `yes|no`\n\nShort description: Please describe here\n\n\nPLEAE REMOVE THE FOLLOWING TEXT BEFORE SUBMITTING THE ISSUE:\n\nPlease also attach a screenshot, if possible, of the location you decided to request. You can find the coordinates to paste here on the Teleport window.\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where the package manifests are located.\n# Please see the documentation for all configuration options:\n# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates\n\nversion: 2\nupdates:\n  - package-ecosystem: \"nuget\" # See documentation for possible values\n    directory: \"/\" # Location of package manifests\n    schedule:\n      interval: \"daily\"\n"
  },
  {
    "path": ".github/workflows/format-code.yml",
    "content": "name: Format code\non:\n  push:\n  pull_request:\njobs:\n  format-code:\n    runs-on: ubuntu-latest\n    container:\n      image: mcr.microsoft.com/dotnet/sdk:latest\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v2\n      - name: Download formatting tool\n        run: dotnet tool install -g dotnet-format\n      - name: Format source code\n        run: |\n          export PATH=\"$PATH:/github/home/.dotnet/tools\"\n          dotnet format\n      - name: Check if files have been modified\n        id: git-check\n        run: echo ::set-output name=modified::$(if git diff-index --quiet HEAD --; then echo \"false\"; else echo \"true\"; fi)\n      - name: Push changes\n        if: steps.git-check.outputs.modified == 'true'\n        run: |\n          git config --global user.name 'Formatting bot'\n          git config --global user.email 'xeeynamo@users.noreply.github.com'\n          git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}\n          git commit -am \"Format code\"\n          git push\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Tests\n\non:\n  push:\n    branches:\n      - master\n  pull_request:\n    types: [assigned, opened, synchronize, reopened]\n\njobs:\n  run-tests:\n    runs-on: ubuntu-latest\n    container:\n      image: mcr.microsoft.com/dotnet/sdk:6.0\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v2\n        with:\n          submodules: recursive\n      - name: Execute test suite\n        run: dotnet test KHSave.Tests\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015/2017 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# Visual Studio 2017 auto generated files\nGenerated\\ Files/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# Benchmark Results\nBenchmarkDotNet.Artifacts/\n\n# .NET Core\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n**/Properties/launchSettings.json\n\n# StyleCop\nStyleCopReport.xml\n\n# Files built by Visual Studio\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.iobj\n*.pch\n*.pdb\n*.ipdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# Visual Studio Trace Files\n*.e2e\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# AxoCover is a Code Coverage Tool\n.axoCover/*\n!.axoCover/settings.json\n\n# Visual Studio code coverage results\n*.coverage\n*.coveragexml\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# Note: Comment the next line if you want to checkin your web deploy settings,\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/[Pp]ackages/*\n# except build/, which is used as an MSBuild target.\n!**/[Pp]ackages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/[Pp]ackages/repositories.config\n# NuGet v3's project.json files produces more ignorable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n*.appx\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\norleans.codegen.cs\n\n# Including strong name files can present a security risk \n# (https://github.com/github/gitignore/pull/2483#issue-259490424)\n#*.snk\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\nServiceFabricBackup/\n*.rptproj.bak\n\n# SQL Server files\n*.mdf\n*.ldf\n*.ndf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n*.rptproj.rsuser\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\nnode_modules/\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)\n*.vbw\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n\n# CodeRush\n.cr/\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc\n\n# Cake - Uncomment if you are using it\n# tools/**\n# !tools/packages.config\n\n# Tabs Studio\n*.tss\n\n# Telerik's JustMock configuration file\n*.jmconfig\n\n# BizTalk build output\n*.btp.cs\n*.btm.cs\n*.odx.cs\n*.xsd.cs\n\n# OpenCover UI analysis results\nOpenCover/\n\n# Azure Stream Analytics local run output \nASALocalRun/\n\n# MSBuild Binary and Structured Log\n*.binlog\n\n# NVidia Nsight GPU debugger configuration file\n*.nvuser\n\n# MFractors (Xamarin productivity tool) working folder \n.mfractor/\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"XeEngine.Tools.Public\"]\n\tpath = XeEngine.Tools.Public\n\turl = https://github.com/xeeynamo/XeEngine.Tools.Public\n[submodule \"Xe.ReleaseUpdater\"]\n\tpath = Xe.ReleaseUpdater\n\turl = https://github.com/Xeeynamo/Xe.ReleaseUpdater.git\n"
  },
  {
    "path": "CNAME",
    "content": "kingdomsaveeditor.xee.dev"
  },
  {
    "path": "KH3SaveEditor.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.0.32014.148\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor\", \"KHSave.SaveEditor\\KHSave.SaveEditor.csproj\", \"{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.Tests\", \"KHSave.Tests\\KHSave.Tests.csproj\", \"{A0A13F70-E37B-4D86-824C-61F3483A2CF8}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave\", \"KHSave\\KHSave.csproj\", \"{66531854-A216-4F15-ABE5-F723EA257BF2}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"XeEngine.Tools.Public\", \"XeEngine.Tools.Public\", \"{F556CBD8-76F3-45A3-9619-8FB81FA64C22}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xe\", \"XeEngine.Tools.Public\\Xe\\Xe.csproj\", \"{61D2474A-EDC5-4792-A4E6-7E935856617A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xe.Drawing\", \"XeEngine.Tools.Public\\Xe.Drawing\\Xe.Drawing.csproj\", \"{9ECB58D2-3790-4693-8A40-FF2584F263E6}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xe.Tools\", \"XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\", \"{2F15C257-7E50-42B5-ADB4-7534B88F466B}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xe.Tools.Wpf\", \"XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\", \"{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Documentation\", \"Documentation\", \"{ABFEAC30-491D-4FDE-A90C-C8E6107F67D5}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tREADME.md = README.md\n\tEndProjectSection\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Xe.ReleaseUpdater\", \"Xe.ReleaseUpdater\", \"{A69D32C8-AA20-4871-858F-31D84193FA1C}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xe.VersionCheck\", \"Xe.ReleaseUpdater\\Xe.VersionCheck\\Xe.VersionCheck.csproj\", \"{F37CC0C9-BFE1-4563-87D8-960FE630E601}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Xe.Http\", \"Xe.ReleaseUpdater\\Xe.Http\\Xe.Http.csproj\", \"{52E2ACD1-845A-41DC-8318-22A0A7274677}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.Lib02\", \"KHSave.Lib02\\KHSave.Lib02.csproj\", \"{FE823BD9-B309-49E6-85F1-ADAE55752B72}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.Lib3\", \"KHSave.Lib3\\KHSave.Lib3.csproj\", \"{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.Kh3\", \"KHSave.SaveEditor.Kh3\\KHSave.SaveEditor.Kh3.csproj\", \"{873CD9B2-3984-44DD-A077-B5093714EC56}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.Common\", \"KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\", \"{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.Kh02\", \"KHSave.SaveEditor.Kh02\\KHSave.SaveEditor.Kh02.csproj\", \"{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.Lib2\", \"KHSave.Lib2\\KHSave.Lib2.csproj\", \"{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.Kh2\", \"KHSave.SaveEditor.Kh2\\KHSave.SaveEditor.Kh2.csproj\", \"{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.Archives\", \"KHSave.Archives\\KHSave.Archives.csproj\", \"{93FD8BB6-B750-4BD3-8143-043286DA1E22}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.LibRecom\", \"KHSave.LibRecom\\KHSave.LibRecom.csproj\", \"{E277131E-3A87-4087-821A-D1E54D3A4FA9}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.KhRecom\", \"KHSave.SaveEditor.KhRecom\\KHSave.SaveEditor.KhRecom.csproj\", \"{947C9653-C8D7-4D95-BE62-8101A3C9D824}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.LibFf7Remake\", \"KHSave.LibFf7Remake\\KHSave.LibFf7Remake.csproj\", \"{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.Ff7Remake\", \"KHSave.SaveEditor.Ff7Remake\\KHSave.SaveEditor.Ff7Remake.csproj\", \"{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.Kh1\", \"KHSave.SaveEditor.Kh1\\KHSave.SaveEditor.Kh1.csproj\", \"{E168AAE0-7730-45FD-A059-6994DB237C85}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.Lib1\", \"KHSave.Lib1\\KHSave.Lib1.csproj\", \"{34CAFA86-2B8D-41D0-8218-5FEC87170E45}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.LibBbs\", \"KHSave.LibBbs\\KHSave.LibBbs.csproj\", \"{1A3285D7-5DC5-4135-9F38-503D6DB6469A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.KhBbs\", \"KHSave.SaveEditor.KhBbs\\KHSave.SaveEditor.KhBbs.csproj\", \"{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Tooling.MemoryWatcher\", \"Tooling.MemoryWatcher\\Tooling.MemoryWatcher.csproj\", \"{58B80047-B051-49F8-99E0-2FC3FB34F39A}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.LibPersona5\", \"KHSave.LibPersona5\\KHSave.LibPersona5.csproj\", \"{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.Persona5\", \"KHSave.SaveEditor.Persona5\\KHSave.SaveEditor.Persona5.csproj\", \"{55C8BE35-B770-4FFF-92F8-1FD1792150F7}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.LibDDD\", \"KHSave.LibDDD\\KHSave.LibDDD.csproj\", \"{BABA96A7-BEF2-450E-8502-11D36163B691}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.KhDDD\", \"KHSave.SaveEditor.KhDDD\\KHSave.SaveEditor.KhDDD.csproj\", \"{F85D2EEC-5C85-4443-B046-769F511ACB6F}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{112978EC-90BA-40A5-80D3-6457DD67CB64}\"\n\tProjectSection(SolutionItems) = preProject\n\t\t.editorconfig = .editorconfig\n\tEndProjectSection\nEndProject\nProject(\"{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}\") = \"WindowsStoreSubmission\", \"WindowsStoreSubmission\\WindowsStoreSubmission.wapproj\", \"{080A374C-D430-4FCB-96B8-889FDEBF58F2}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.LibPersona3\", \"KHSave.LibPersona3\\KHSave.LibPersona3.csproj\", \"{17C5019E-53C9-4566-BAA0-9E2E139D6529}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"KHSave.SaveEditor.Persona3\", \"KHSave.SaveEditor.Persona3\\KHSave.SaveEditor.Persona3.csproj\", \"{EA92AA97-BC63-4691-8483-39E9643D2086}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|ARM64 = Debug|ARM64\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|ARM64 = Release|ARM64\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|x64.Build.0 = Release|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|x86.Build.0 = Release|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|x64.Build.0 = Release|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|x86.Build.0 = Release|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Release|x64.Build.0 = Release|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{66531854-A216-4F15-ABE5-F723EA257BF2}.Release|x86.Build.0 = Release|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|x64.Build.0 = Release|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|x86.Build.0 = Release|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|x64.Build.0 = Release|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|x86.Build.0 = Release|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Release|x64.Build.0 = Release|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{873CD9B2-3984-44DD-A077-B5093714EC56}.Release|x86.Build.0 = Release|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|x64.Build.0 = Release|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|x86.Build.0 = Release|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|x64.Build.0 = Release|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|x86.Build.0 = Release|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|x64.Build.0 = Release|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|x86.Build.0 = Release|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|x64.Build.0 = Release|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|x86.Build.0 = Release|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|x64.Build.0 = Release|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|x86.Build.0 = Release|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|x64.Build.0 = Release|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|x86.Build.0 = Release|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|x64.Build.0 = Release|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|x86.Build.0 = Release|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|x64.Build.0 = Release|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|x86.Build.0 = Release|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|x64.Build.0 = Release|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|x86.Build.0 = Release|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Release|x64.Build.0 = Release|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{E168AAE0-7730-45FD-A059-6994DB237C85}.Release|x86.Build.0 = Release|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|x64.Build.0 = Release|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|x86.Build.0 = Release|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|x64.Build.0 = Release|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|x86.Build.0 = Release|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|x64.Build.0 = Release|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|x86.Build.0 = Release|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|x64.Build.0 = Release|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|x86.Build.0 = Release|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|x64.Build.0 = Release|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|x86.Build.0 = Release|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|x64.Build.0 = Release|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|x86.Build.0 = Release|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Release|x64.Build.0 = Release|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{BABA96A7-BEF2-450E-8502-11D36163B691}.Release|x86.Build.0 = Release|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|x64.Build.0 = Release|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|x86.Build.0 = Release|Any CPU\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM64.Deploy.0 = Debug|ARM64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x64.Build.0 = Debug|x64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x86.Build.0 = Debug|x86\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|Any CPU.Deploy.0 = Release|Any CPU\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM.Build.0 = Release|ARM\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM64.Deploy.0 = Release|ARM64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x64.ActiveCfg = Release|x64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x64.Build.0 = Release|x64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x64.Deploy.0 = Release|x64\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x86.ActiveCfg = Release|x86\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x86.Build.0 = Release|x86\n\t\t{080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x86.Deploy.0 = Release|x86\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|x64.Build.0 = Release|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|x86.Build.0 = Release|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|ARM64.ActiveCfg = Debug|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|ARM64.Build.0 = Debug|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Release|ARM64.ActiveCfg = Release|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Release|ARM64.Build.0 = Release|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Release|x64.Build.0 = Release|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{EA92AA97-BC63-4691-8483-39E9643D2086}.Release|x86.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{61D2474A-EDC5-4792-A4E6-7E935856617A} = {F556CBD8-76F3-45A3-9619-8FB81FA64C22}\n\t\t{9ECB58D2-3790-4693-8A40-FF2584F263E6} = {F556CBD8-76F3-45A3-9619-8FB81FA64C22}\n\t\t{2F15C257-7E50-42B5-ADB4-7534B88F466B} = {F556CBD8-76F3-45A3-9619-8FB81FA64C22}\n\t\t{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393} = {F556CBD8-76F3-45A3-9619-8FB81FA64C22}\n\t\t{F37CC0C9-BFE1-4563-87D8-960FE630E601} = {A69D32C8-AA20-4871-858F-31D84193FA1C}\n\t\t{52E2ACD1-845A-41DC-8318-22A0A7274677} = {A69D32C8-AA20-4871-858F-31D84193FA1C}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {BEB14EB2-578B-40D4-88D1-5B497F2967F4}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "KHSave/Attributes/AbilityAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class AbilityAttribute : InfoAttribute\n    {\n        public AbilityAttribute(string name = null) :\n            base(name)\n        { }\n    }\n\n    public class AbilityActionAttribute : AbilityAttribute\n    {\n        public AbilityActionAttribute(string name = null) :\n            base(name)\n        { }\n    }\n\n    public class AbilityMobilityAttribute : AbilityAttribute\n    {\n        public AbilityMobilityAttribute(string name = null) :\n            base(name)\n        { }\n    }\n\n    public class AbilitySupportAttribute : AbilityAttribute\n    {\n        public AbilitySupportAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/AccessoryAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class AccessoryAttribute : InfoAttribute\n    {\n        public AccessoryAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/ArmorAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class ArmorAttribute : InfoAttribute\n    {\n        public ArmorAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/BoostAttribute.cs",
    "content": "namespace KHSave.Attributes\n{\n    public class BoostAttribute : TentAttribute\n    {\n        public BoostAttribute(string name = null) : base(name) { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/CombatStyleAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class CombatStyleAttribute : InfoAttribute\n    {\n        public CombatStyleAttribute(string name) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/CommandAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class CommandAttribute : InfoAttribute\n    {\n        public CommandAttribute(string name = null) :\n            base(name)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/ConsumableAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class ConsumableAttribute : InfoAttribute\n    {\n        public ConsumableAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/FoodAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class FoodAttribute : InfoAttribute\n    {\n        public FoodAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/FormAttribute.cs",
    "content": "namespace KHSave.Attributes\n{\n    public class FormAttribute : KeyItemAttribute\n    {\n        public FormAttribute(string name = null) : base(name) { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/GummiBlockAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Attributes\n{\n    public class GummiBlockAttribute : InfoAttribute\n    {\n        public GummiBlockAttribute(string name = null) : base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/InfoAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Extensions;\nusing KHSave.Services;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace KHSave.Attributes\n{\n    public class InfoAttribute : Attribute\n    {\n        private static CacheService<string> cache = new CacheService<string>();\n\n        public string Info { get; }\n\n        public InfoAttribute()\n        { }\n\n        public InfoAttribute(string info)\n        {\n            Info = info;\n        }\n\n        public static string GetInfo(object value) => cache.Get(value, x =>\n            value.GetAttribute<InfoAttribute>()?.Info ?? x?.ToString() ?? \"<null>\");\n\n        public static string[] GetItemTypes(object value)\n        {\n            var memberValue = value.ToString();\n            var memberInfo = value.GetType().GetMember(memberValue).FirstOrDefault();\n\n            if (memberInfo != null)\n            {\n                return memberInfo.CustomAttributes\n                    .Select(x => GetTypeRecursive(x.AttributeType))\n                    .SelectMany(x => x)\n                    .Where(x => x != null)\n                    .Select(x =>\n                    {\n                        var name = x.Name;\n                        var indexAttributeStr = name.IndexOf(\"Attribute\");\n                        return indexAttributeStr > 0 ? name.Substring(0, indexAttributeStr) : null;\n                    }).Where(x => !string.IsNullOrEmpty(x)).ToArray();\n            }\n\n            return new string[0];\n        }\n\n        private static IEnumerable<Type> GetTypeRecursive(Type type) =>\n            new Type[] { type, }.Concat(type != null ? GetTypeRecursive(type.BaseType) : new Type[] { });\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/IngredientAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class IngredientAttribute : InfoAttribute\n    {\n        public IngredientAttribute(string name) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/KeyItemAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class KeyItemAttribute : InfoAttribute\n    {\n        public KeyItemAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/KeybladeAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class KeybladeAttribute : InfoAttribute\n    {\n        public KeybladeAttribute(string name) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/LinkAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class LinkAttribute : InfoAttribute\n    {\n        public LinkAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/MagicAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class MagicAttribute : InfoAttribute\n    {\n        public MagicAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/ManuscriptAttribute.cs",
    "content": "namespace KHSave.Attributes\n{\n    public class ManuscriptAttribute : InfoAttribute\n    {\n        public ManuscriptAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/MapAttribute.cs",
    "content": "namespace KHSave.Attributes\n{\n    public class MapAttribute : KeyItemAttribute\n    {\n        public MapAttribute(string name = null) : base(name) { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/MapInfo.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.Linq;\n\nnamespace KHSave.Attributes\n{\n    public class MapInfoAttribute : InfoAttribute\n    {\n        public string Id { get; set; }\n\n        public MapInfoAttribute(string id, string name) :\n            base(string.IsNullOrEmpty(name) ? id : name)\n        {\n            Id = id;\n        }\n\n        public static string GetMapId(object value)\n        {\n            var memberValue = value.ToString();\n            var memberInfo = value.GetType().GetMember(memberValue).FirstOrDefault();\n\n            if (memberInfo != null)\n            {\n                if (memberInfo.GetCustomAttributes(typeof(MapInfoAttribute), false)\n                        .FirstOrDefault() is MapInfoAttribute attribute && !string.IsNullOrEmpty(attribute.Info))\n                {\n                    return attribute.Id;\n                }\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/MateriaAttribute.cs",
    "content": "namespace KHSave.Attributes\n{\n    public class MateriaAttribute : MagicAttribute\n    {\n        public MateriaAttribute(string name = null) :\n            base(name)\n        {\n\n        }\n    }\n\n    public class MagicMateriaAttribute : MateriaAttribute\n    {\n        public MagicMateriaAttribute(string name = null) :\n            base(name)\n        {\n\n        }\n    }\n\n    public class CommandMateriaAttribute : MateriaAttribute\n    {\n        public CommandMateriaAttribute(string name = null) :\n            base(name)\n        {\n\n        }\n    }\n\n    public class SupportMateriaAttribute : MateriaAttribute\n    {\n        public SupportMateriaAttribute(string name = null) :\n            base(name)\n        {\n\n        }\n    }\n\n    public class CompleteMateriaAttribute : MateriaAttribute\n    {\n        public CompleteMateriaAttribute(string name = null) :\n            base(name)\n        {\n\n        }\n    }\n\n    public class SummonMateriaAttribute : MateriaAttribute\n    {\n        public SummonMateriaAttribute(string name = null) :\n            base(name)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/MogItemAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class MogItemAttribute : InfoAttribute\n    {\n        public MogItemAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/MoneyAttribute.cs",
    "content": "namespace KHSave.Attributes\n{\n    public class MoneyAttribute : InfoAttribute\n    {\n        public MoneyAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/RecipeAttribute.cs",
    "content": "namespace KHSave.Attributes\n{\n    public class RecipeAttribute : MogItemAttribute\n    {\n        public RecipeAttribute(string name = null) : base(name) { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/ReportAttribute.cs",
    "content": "namespace KHSave.Attributes\n{\n    public class ReportAttribute : KeyItemAttribute\n    {\n        public ReportAttribute(string name = null) : base(name) { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/ShieldAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class ShieldAttribute : InfoAttribute\n    {\n        public ShieldAttribute(string name) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/SnackAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class SnackAttribute : InfoAttribute\n    {\n        public SnackAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/StaffAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class StaffAttribute : InfoAttribute\n    {\n        public StaffAttribute(string name) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/SummonAttribute.cs",
    "content": "namespace KHSave.Attributes\n{\n    public class SummonAttribute : KeyItemAttribute\n    {\n        public SummonAttribute(string name = null) : base(name) { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/SynthesisAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class SynthesisAttribute : InfoAttribute\n    {\n        public SynthesisAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/TentAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class TentAttribute : InfoAttribute\n    {\n        public TentAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/TrackAttribute.cs",
    "content": "namespace KHSave.Attributes\n{\n    public class TrackAttribute : InfoAttribute\n    {\n        public TrackAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/UnusedAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Services;\nusing System;\nusing System.Linq;\n\nnamespace KHSave.Attributes\n{\n    public class UnusedAttribute : Attribute\n    {\n        private static CacheService<bool> cache = new CacheService<bool>();\n\n        public static bool IsUnused(object value) => cache.Get(value, x =>\n        {\n            var memberValue = value.ToString();\n            var memberInfo = value\n                .GetType()\n                .GetMember(memberValue)\n                .FirstOrDefault();\n\n            if (memberInfo != null)\n            {\n                if (memberInfo.GetCustomAttributes(typeof(UnusedAttribute), false).Length > 0)\n                    return true;\n                if (memberInfo.GetCustomAttributes(typeof(InfoAttribute), false).Length > 0)\n                    return false;\n            }\n\n            return true;\n        });\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/WeaponAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Attributes\n{\n    public class WeaponAttribute : InfoAttribute\n    {\n        public WeaponAttribute(string name = null) :\n            base(name)\n        { }\n    }\n\n    public class WeaponCloudAttribute : WeaponAttribute\n    {\n        public WeaponCloudAttribute(string name = null) :\n            base(name)\n        { }\n    }\n\n    public class WeaponBarretAttribute : WeaponAttribute\n    {\n        public WeaponBarretAttribute(string name = null) :\n            base(name)\n        { }\n    }\n\n    public class WeaponTifaAttribute : WeaponAttribute\n    {\n        public WeaponTifaAttribute(string name = null) :\n            base(name)\n        { }\n    }\n\n    public class WeaponAerithAttribute : WeaponAttribute\n    {\n        public WeaponAerithAttribute(string name = null) :\n            base(name)\n        { }\n    }\n\n    public class WeaponYuffieAttribute : WeaponAttribute\n    {\n        public WeaponYuffieAttribute(string name = null) :\n            base(name)\n        { }\n    }\n\n    public class WeaponSononAttribute : WeaponAttribute\n    {\n        public WeaponSononAttribute(string name = null) :\n            base(name)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave/Attributes/WorldInfoAttribute.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Extensions;\n\nnamespace KHSave.Attributes\n{\n    public class WorldAttribute : InfoAttribute\n    {\n        public string Id { get; set; }\n\n        public WorldAttribute(string id, string name) :\n            base(name)\n        {\n            Id = id;\n        }\n\n        public static string GetWorldId(object value) =>\n            value.GetAttribute<WorldAttribute>()?.Id;\n    }\n}\n"
  },
  {
    "path": "KHSave/Extensions/AttributeExtensions.cs",
    "content": "using KHSave.Services;\nusing System;\nusing System.Linq;\n\nnamespace KHSave.Extensions\n{\n    public static class AttributeExtensions\n    {\n        private static CacheService<Attribute> cache = new CacheService<Attribute>();\n\n        public static T GetAttribute<T>(this object value) where T : Attribute => (T)cache.Get(value, x =>\n        {\n            var memberValue = x.ToString();\n            var memberInfo = x.GetType().GetMember(memberValue).FirstOrDefault();\n\n            if (memberInfo != null)\n            {\n                if (memberInfo.GetCustomAttributes(typeof(T), false)\n                        .FirstOrDefault() is T attribute)\n                    return attribute;\n            }\n\n            return null;\n        });\n    }\n}\n"
  },
  {
    "path": "KHSave/Extensions/BitExtensions.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Extensions\n{\n    public static class BitExtensions\n    {\n        public static bool GetFlag(this int value, int bit)\n        {\n            return (value & (1 << bit)) != 0;\n        }\n\n        public static int SetFlag(this int value, int bit, bool set)\n        {\n            if (set)\n            {\n                value |= 1 << bit;\n            }\n            else\n            {\n                value &= ~(1 << bit);\n            }\n\n            return value;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave/Extensions/DateTimeExtensions.cs",
    "content": "using System;\n\nnamespace KHSave.Extensions\n{\n    public static class DateTimeExtensions\n    {\n        private static DateTime _baseDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);\n\n        public static DateTime FromUnixEpoch(this int timestamp) =>\n            FromUnixEpoch((uint)timestamp);\n\n        public static DateTime FromUnixEpoch(this uint timestamp) =>\n            _baseDateTime.AddSeconds(timestamp);\n\n        public static uint ToUnixEpoch(this DateTime dateTime) =>\n            (uint)((dateTime.Ticks - _baseDateTime.Ticks) / TimeSpan.TicksPerSecond);\n    }\n}\n"
  },
  {
    "path": "KHSave/KHSave.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave/Services/CacheService.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace KHSave.Services\n{\n    public class CacheService<T>\n    {\n        private Dictionary<object, T> _cache = new Dictionary<object, T>();\n\n        public T Get(object value, Func<object, T> getter)\n        {\n            if (_cache.TryGetValue(value, out var response))\n                return (T)response;\n\n            response = getter(value);\n            _cache.Add(value, response);\n\n            return (T)response;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave/Services/TransferServiceLL.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace KHSave.Services\n{\n    public static class TransferServiceLL\n    {\n        public static Dictionary<Type, Action<object, object, PropertyInfo>> DefaultMappings =\n            new Dictionary<Type, Action<object, object, PropertyInfo>>()\n            {\n                [typeof(byte[])] = new Action<object, object, PropertyInfo>((dst, src, prop) => CopyArray<byte>(dst, src, prop)),\n                [typeof(short[])] = new Action<object, object, PropertyInfo>((dst, src, prop) => CopyArray<short>(dst, src, prop)),\n                [typeof(ushort[])] = new Action<object, object, PropertyInfo>((dst, src, prop) => CopyArray<ushort>(dst, src, prop)),\n                [typeof(int[])] = new Action<object, object, PropertyInfo>((dst, src, prop) => CopyArray<int>(dst, src, prop)),\n                [typeof(uint[])] = new Action<object, object, PropertyInfo>((dst, src, prop) => CopyArray<uint>(dst, src, prop)),\n                [typeof(float[])] = new Action<object, object, PropertyInfo>((dst, src, prop) => CopyArray<float>(dst, src, prop)),\n            };\n\n        public static void CopySave<T>(object dst, object src, Dictionary<Type, Action<object, object, PropertyInfo>> mappings) where T : class =>\n            CopySave(typeof(T), dst, src, mappings);\n\n        public static void CopySave(Type type, object dst, object src, Dictionary<Type, Action<object, object, PropertyInfo>> mappings)\n        {\n            foreach (var property in type.GetProperties().Where(x => x.GetMethod != null))\n            {\n                if (mappings.TryGetValue(property.PropertyType, out var action))\n                    action(dst, src, property);\n                else if (property.PropertyType.IsPrimitive || property.PropertyType.IsEnum)\n                {\n                    if (property.SetMethod != null)\n                        property?.SetValue(dst, property.GetValue(src));\n                }\n                else if (property.PropertyType.IsArray || property.PropertyType.IsAssignableFrom(typeof(IList)))\n                {\n                    var dstList = property.GetValue(dst) as IList;\n                    var srcList = property.GetValue(src) as IList;\n                    if (dstList != null && srcList != null)\n                    {\n                        var length = Math.Min(dstList.Count, srcList.Count);\n                        var itemType = property.PropertyType.IsArray ?\n                            property.PropertyType.GetElementType() :\n                            property.PropertyType.GetGenericArguments().FirstOrDefault();\n                        for (var i = 0; i < length; i++)\n                        {\n                            if (dstList[i] != null && srcList[i] != null)\n                                CopySave(itemType, dstList[i], srcList[i], mappings);\n                        }\n\n                        if (property.SetMethod != null)\n                            property.SetValue(dst, dstList);\n                    }\n                }\n                else if (property.PropertyType.IsInterface || property.PropertyType.IsClass)\n                {\n                    CopySave(property.PropertyType, property.GetValue(dst), property.GetValue(src), mappings);\n                }\n            }\n        }\n\n        public static void CopyArray<T>(object dst, object src, PropertyInfo prop)\n        {\n            var srcValue = prop.GetValue(src) as T[];\n            var dstValue = prop.GetValue(dst) as T[];\n            if (dstValue != null)\n                Array.Copy(srcValue, dstValue, Math.Min(srcValue.Length, dstValue.Length));\n            else\n                dstValue = srcValue;\n\n            prop.SetValue(dst, dstValue);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave/StreamHelpers.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.IO;\nusing System.Text;\n\nnamespace KHSave\n{\n    public static class StreamHelpers\n    {\n        public static T FromBegin<T>(this T stream) where T : Stream => stream.SetPosition(0);\n\n        public static T SetPosition<T>(this T stream, int position) where T : Stream\n        {\n            stream.Seek(position, SeekOrigin.Begin);\n            return stream;\n        }\n\n        public static bool ReadFlag(this BinaryReader reader, int offset, int bit)\n        {\n            reader.BaseStream.Seek(offset, SeekOrigin.Begin);\n            return reader.ReadByte().HasFlag(bit);\n        }\n\n        public static int ReadInt32(this BinaryReader reader, int offset)\n        {\n            reader.BaseStream.Seek(offset, SeekOrigin.Begin);\n            return reader.ReadInt32();\n        }\n\n        public static byte[] ReadBytes(this Stream stream) =>\n            stream.ReadBytes((int)(stream.Length - stream.Position));\n\n        public static byte[] ReadBytes(this Stream stream, int length)\n        {\n            var data = new byte[length];\n            stream.Read(data, 0, length);\n            return data;\n        }\n\n        public static byte[] ReadAllBytes(this Stream stream)\n        {\n            var data = stream.SetPosition(0).ReadBytes();\n            stream.Position = 0;\n            return data;\n        }\n\n        public static string ReadString(this BinaryReader reader, int length)\n        {\n            var data = reader.ReadBytes(length);\n            var terminatorIndex = Array.FindIndex(data, x => x == 0);\n            return Encoding.UTF8.GetString(data, 0, terminatorIndex);\n        }\n\n        public static string ReadString(this BinaryReader reader, int offset, int length)\n        {\n            reader.BaseStream.Seek(offset, SeekOrigin.Begin);\n            return reader.ReadString(length);\n        }\n\n        public static bool HasFlag(this byte c, int offset)\n        {\n            return (c & (1 << offset)) != 0;\n        }\n\n        public static void Write(this BinaryWriter writer, string str, int length)\n        {\n            var data = Encoding.UTF8.GetBytes(str);\n            if (data.Length <= length)\n            {\n                writer.Write(data, 0, data.Length);\n                int remainsBytes = length = data.Length;\n                if (remainsBytes > 0)\n                {\n                    writer.Write(new byte[remainsBytes]);\n                }\n            }\n            else\n            {\n                writer.Write(data, 0, length);\n            }\n        }\n\n        public static void Copy(this Stream source, Stream destination, int length, int bufferSize = 65536)\n        {\n            int read;\n            byte[] buffer = new byte[Math.Min(length, bufferSize)];\n\n            while ((read = source.Read(buffer, 0, Math.Min(length, bufferSize))) != 0)\n            {\n                destination.Write(buffer, 0, read);\n                length -= read;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/ArchiveFactories.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Archives.Factories;\nusing System.IO;\n\nnamespace KHSave.Archives\n{\n    public static class ArchiveFactories\n    {\n        public static readonly IArchiveFactory Ps4Kh1 = new Ps4Kh1Factory();\n        public static readonly IArchiveFactory Ps4Kh2 = new Ps4Kh2Factory();\n        public static readonly IArchiveFactory Ps4KhRecom = new Ps4KhRecomFactory();\n        public static readonly IArchiveFactory Ps4KhDdd = new Ps4KhDddFactory();\n        public static readonly IArchiveFactory PcKh1 = new PcKh1Factory();\n        public static readonly IArchiveFactory PcKh2 = new PcKh2Factory();\n        public static readonly IArchiveFactory PcKhRecom = new PcKhRecomFactory();\n        public static readonly IArchiveFactory PcKhBbs = new PcKhBbsactory();\n        public static readonly IArchiveFactory PcKhDdd = new PcKhDddFactory();\n\n        public static readonly IArchiveFactory Ps2Psu = new Ps2PsuFactory();\n        public static readonly IArchiveFactory Ps2Cbs = new Ps2CbsFactory();\n\n        public static readonly IArchiveFactory Ps3Psv = new Ps3PsvFactory();\n\n        public static bool TryGetFactory(Stream stream, out IArchiveFactory archiveFactory)\n        {\n            if (Ps4Kh1.IsValid(stream))\n                archiveFactory = Ps4Kh1;\n            else if (Ps4Kh2.IsValid(stream))\n                archiveFactory = Ps4Kh2;\n            else if (Ps4KhRecom.IsValid(stream))\n                archiveFactory = Ps4KhRecom;\n            else if (Ps4KhDdd.IsValid(stream))\n                archiveFactory = Ps4KhDdd;\n            else if (PcKh1.IsValid(stream))\n                archiveFactory = PcKh1;\n            else if (PcKh2.IsValid(stream))\n                archiveFactory = PcKh2;\n            else if (PcKhRecom.IsValid(stream))\n                archiveFactory = PcKhRecom;\n            else if (PcKhBbs.IsValid(stream))\n                archiveFactory = PcKhBbs;\n            else if (PcKhDdd.IsValid(stream))\n                archiveFactory = PcKhDdd;\n            else if (Ps2Psu.IsValid(stream))\n                archiveFactory = Ps2Psu;\n            else if (Ps2Cbs.IsValid(stream))\n                archiveFactory = Ps2Cbs;\n            else if (Ps3Psv.IsValid(stream))\n                archiveFactory = Ps3Psv;\n            else\n                archiveFactory = null;\n\n            return archiveFactory != null;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/PcKh1Factory.cs",
    "content": "using System.IO;\n\nnamespace KHSave.Archives.Factories\n{\n    internal class PcKh1Factory : IArchiveFactory\n    {\n        private const int EntryCount = 200;\n        private const int Stride = 0x16C40;\n        private const int Size = 0x11EB09D;\n\n        public string Name => \"PC KH1FM\";\n\n        public string Description => \"Kingdom Hearts Final Mix (PC)\";\n\n        public IArchive Create() => new PcSaveArchive(EntryCount, Stride);\n\n        public IArchiveEntry CreateEntry() => new PcSaveArchive.Entry();\n\n        public bool IsValid(Stream stream) => stream.Length == Size;\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = PcSaveArchive.Read(stream, EntryCount, Stride);\n            archive.Name = Description;\n\n            return archive;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/PcKh2Factory.cs",
    "content": "using System.IO;\n\nnamespace KHSave.Archives.Factories\n{\n    internal class PcKh2Factory : IArchiveFactory\n    {\n        private const int EntryCount = 100;\n        private const int Stride = 0x10FC0;\n        private const int Size = 0x6BED08;\n\n        public string Name => \"PC KH2FM\";\n\n        public string Description => \"Kingdom Hearts II Final Mix (PC)\";\n\n        public IArchive Create() => new PcSaveArchive(EntryCount, Stride);\n\n        public IArchiveEntry CreateEntry() => new PcSaveArchive.Entry();\n\n        public bool IsValid(Stream stream) => stream.Length == Size;\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = PcSaveArchive.Read(stream, EntryCount, Stride);\n            archive.Name = Description;\n\n            return archive;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/PcKhBbsFactory.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.IO;\n\nnamespace KHSave.Archives.Factories\n{\n    public class PcKhBbsactory : IArchiveFactory\n    {\n        private const int EntryCount = 100;\n        private const int Stride = 0x13C00;\n        private const int Size = 0x7D3B94;\n\n        public string Name => \"PC KHBBS\";\n\n        public string Description => \"Kingdom Hearts Birth By Sleep (PC)\";\n\n        public IArchive Create() =>\n            new PcSaveArchive(EntryCount, Stride);\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = PcSaveArchive.Read(stream, EntryCount, Stride);\n            archive.Name = Description;\n\n            return archive;\n        }\n\n        public bool IsValid(Stream stream) => stream.Length == Size;\n\n        public IArchiveEntry CreateEntry() => new PcSaveArchive.Entry();\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/PcKhDddFactory.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.IO;\n\nnamespace KHSave.Archives.Factories\n{\n    public class PcKhDddFactory : IArchiveFactory\n    {\n        private const int EntryCount = 100;\n        private const int Stride = 0x16600;\n        private const int Size = 0x8DAE8F;\n\n        public string Name => \"PC KHDDD\";\n\n        public string Description => \"Kingdom Hearts Dream Drop Distance (PC)\";\n\n        public IArchive Create() =>\n            new PcSaveArchive(EntryCount, Stride);\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = PcSaveArchive.Read(stream, EntryCount, Stride);\n            archive.Name = Description;\n\n            return archive;\n        }\n\n        public bool IsValid(Stream stream) => stream.Length == Size;\n\n        public IArchiveEntry CreateEntry() => new PcSaveArchive.Entry();\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/PcKhRecomFactory.cs",
    "content": "using System.IO;\n\nnamespace KHSave.Archives.Factories\n{\n    internal class PcKhRecomFactory : IArchiveFactory\n    {\n        private const int EntryCount = 100;\n        private const int Stride = 0x3a30;\n        private const int Size = 0x188F5F;\n\n        public string Name => \"PC RECOM\";\n\n        public string Description => \"Kingdom Hearts Re: Chain of Memories (PC)\";\n\n        public IArchive Create() => new PcSaveArchive(EntryCount, Stride);\n\n        public IArchiveEntry CreateEntry() => new PcSaveArchive.Entry();\n\n        public bool IsValid(Stream stream) => stream.Length == Size;\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = PcSaveArchive.Read(stream, EntryCount, Stride);\n            archive.Name = Description;\n\n            return archive;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/Ps2CbsFactory.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace KHSave.Archives.Factories\n{\n    public class Ps2CbsFactory : IArchiveFactory\n    {\n        public string Name => throw new NotImplementedException();\n\n        public string Description => throw new NotImplementedException();\n\n        public IArchive Create()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IArchiveEntry CreateEntry()\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool IsValid(Stream stream)\n        {\n            var currentPosition = stream.Position;\n            stream.Position = 0;\n\n            var result = BitConverter.ToUInt32(stream.ReadBytes(4));\n            stream.SetPosition((int)currentPosition);\n            return result == 0x00554643;\n        }\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = Ps2CbsArchive.Read(stream, 10);\n            return archive;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/Ps2PsuFactory.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace KHSave.Archives.Factories\n{\n    public class Ps2PsuFactory : IArchiveFactory\n    {\n        public string Name => throw new NotImplementedException();\n\n        public string Description => throw new NotImplementedException();\n\n        public IArchive Create()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IArchiveEntry CreateEntry()\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool IsValid(Stream stream)\n        {\n            var currentPosition = stream.Position;\n            stream.Position = 0x240;\n            var b1 = stream.ReadByte();\n\n            stream.Position = 0x440;\n            var b2 = stream.ReadByte();\n            var b3 = stream.ReadByte();\n\n            stream.SetPosition((int)currentPosition);\n            return stream.Length > 0x600 &&\n                (byte)b1 == '.' && (byte)b2 == '.' && (byte)b3 == '.';\n        }\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = Ps2PsuArchive.Read(stream, 10);\n            return archive;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/Ps3PsvFactory.cs",
    "content": "using System;\nusing System.IO;\n\nnamespace KHSave.Archives.Factories\n{\n    public class Ps3PsvFactory : IArchiveFactory\n    {\n        public string Name => throw new NotImplementedException();\n\n        public string Description => throw new NotImplementedException();\n\n        public IArchive Create()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IArchiveEntry CreateEntry()\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool IsValid(Stream stream)\n        {\n            var currentPosition = stream.Position;\n            stream.Position = 0;\n\n            var result = BitConverter.ToUInt32(stream.ReadBytes(4));\n            stream.SetPosition((int)currentPosition);\n            return result == 0x50535600;\n        }\n\n        public IArchive Read(Stream stream)\n        {\n            return Ps3PsvArchive.Read(stream);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/Ps4Kh1Factory.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.IO;\n\nnamespace KHSave.Archives.Factories\n{\n    internal class Ps4Kh1Factory : IArchiveFactory\n    {\n        private const int EntryCount = 200;\n        private const int Stride = 0x16C40;\n        private const int Size = 0x11cd800;\n\n        public string Name => \"PS4 KH1\";\n\n        public string Description => \"Kingdom Hearts Final Mix (PS4)\";\n\n        public IArchive Create() =>\n            new Ps4SaveArchive(EntryCount, Stride);\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = Ps4SaveArchive.Read(stream, EntryCount, Stride);\n            archive.Name = Description;\n\n            return archive;\n        }\n\n        public bool IsValid(Stream stream) => stream.Length == Size;\n\n        public IArchiveEntry CreateEntry() => new Ps4SaveArchive.Entry();\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/Ps4Kh2Factory.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.IO;\n\nnamespace KHSave.Archives.Factories\n{\n    internal class Ps4Kh2Factory : IArchiveFactory\n    {\n        private const int EntryCount = 100;\n        private const int Stride = 0x10FC0;\n        private const int Size = 0x6a4c00;\n\n        public string Name => \"PS4 KH2\";\n\n        public string Description => \"Kingdom Hearts II Final Mix (PS4)\";\n\n        public IArchive Create() =>\n            new Ps4SaveArchive(EntryCount, Stride);\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = Ps4SaveArchive.Read(stream, EntryCount, Stride);\n            archive.Name = Description;\n\n            return archive;\n        }\n\n        public bool IsValid(Stream stream) => stream.Length == Size;\n\n        public IArchiveEntry CreateEntry() => new Ps4SaveArchive.Entry();\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/Ps4KhDddFactory.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.IO;\n\nnamespace KHSave.Archives.Factories\n{\n    public class Ps4KhDddFactory : IArchiveFactory\n    {\n        private const int EntryCount = 100;\n        private const int Stride = 0x16600;\n        private const int Size = 0x8bfc00;\n\n        public string Name => \"PS4 KHDDD\";\n\n        public string Description => \"Kingdom Hearts Dream Drop Distance (PS4)\";\n\n        public IArchive Create() =>\n            new Ps4SaveArchive(EntryCount, Stride);\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = Ps4SaveArchive.Read(stream, EntryCount, Stride);\n            archive.Name = Description;\n\n            return archive;\n        }\n\n        public bool IsValid(Stream stream) => stream.Length == Size;\n\n        public IArchiveEntry CreateEntry() => new Ps4SaveArchive.Entry();\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Factories/Ps4KhRecomFactory.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.IO;\n\nnamespace KHSave.Archives.Factories\n{\n    public class Ps4KhRecomFactory : IArchiveFactory\n    {\n        private const int EntryCount = 100;\n        private const int Stride = 0x3a30;\n        private const int Size = 0x16e000;\n\n        public string Name => \"PS4 RECOM\";\n\n        public string Description => \"Kingdom Hearts Re: Chain of Memories (PS4)\";\n\n        public IArchive Create() =>\n            new Ps4SaveArchive(EntryCount, Stride);\n\n        public IArchive Read(Stream stream)\n        {\n            var archive = Ps4SaveArchive.Read(stream, EntryCount, Stride);\n            archive.Name = Description;\n\n            return archive;\n        }\n\n        public bool IsValid(Stream stream) => stream.Length == Size;\n\n        public IArchiveEntry CreateEntry() => new Ps4SaveArchive.Entry();\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/IArchive.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace KHSave.Archives\n{\n    public interface IArchive\n    {\n        string Name { get; }\n\n        int MaxEntryCount { get; }\n\n        IList<IArchiveEntry> Entries { get; }\n\n        void Write(Stream stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/IArchiveEntry.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\n\nnamespace KHSave.Archives\n{\n    public interface IArchiveEntry\n    {\n        string Name { get; set; }\n        DateTime DateCreated { get; set; }\n        int FlagCreated { get; set; }\n        DateTime DateModified { get; set; }\n        int FlagModified { get; set; }\n        byte[] Data { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/IArchiveFactory.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.IO;\n\nnamespace KHSave.Archives\n{\n    public interface IArchiveFactory\n    {\n        string Name { get; }\n\n        string Description { get; }\n\n        IArchive Create();\n\n        IArchive Read(Stream stream);\n\n        bool IsValid(Stream stream);\n\n        IArchiveEntry CreateEntry();\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/KHSave.Archives.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"SharpZipLib\" Version=\"1.3.3\" />\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.Archives/PcSaveArchive.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Archives\n{\n    internal class PcSaveArchive : IArchive\n    {\n        public class Entry : IArchiveEntry\n        {\n            private static readonly long UnixTimeBase = new DateTime(1970, 1, 1).Ticks;\n\n            [Data(Count = 0x40)] public string Name { get; set; }\n            [Data(0x40)] public int RawDateCreated { get; set; }\n            [Data(0x44)] public int FlagCreated { get; set; }\n            [Data(0x48)] public int RawDateModified { get; set; }\n            [Data(0x4c)] public int FlagModified { get; set; }\n            [Data(0x50)] public int Length { get; set; }\n            [Data(0x54)] public int SomeKindOfFlag { get; set; }\n            [Data(0x58, Count = 0x100)] public byte[] Padding { get; set; }\n\n            public DateTime DateCreated { get => Map(RawDateCreated); set => RawDateCreated = Map(value); }\n            public DateTime DateModified { get => Map(RawDateModified); set => RawDateModified = Map(value); }\n\n            public byte[] Data { get; set; }\n\n            private static DateTime Map(int ticks) => new DateTime(ticks * TimeSpan.TicksPerSecond + UnixTimeBase);\n            private static int Map(DateTime dateTime) => (int)((dateTime.Ticks - UnixTimeBase) / TimeSpan.TicksPerSecond);\n        }\n\n        private const int PngHeaderLength = 0x70;\n        private const int EncryptedLength = 0xF0;\n        private const int KeyLength = 0x10;\n        private const int KeyOffset = EncryptedLength - KeyLength;\n        private const int EntryLength = 0x158;\n\n        private readonly int _stride;\n        private readonly byte[] _encryptionKey;\n\n        private byte[] _pngHeader;\n        private byte[] _pngFooter;\n\n        internal PcSaveArchive(int entryCount, int stride)\n        {\n            MaxEntryCount = entryCount;\n            _stride = stride;\n            _encryptionKey = new byte[KeyLength];\n            Entries = new List<IArchiveEntry>(MaxEntryCount);\n        }\n\n        private PcSaveArchive(Stream stream, int entryCount, int stride)\n        {\n            MaxEntryCount = entryCount;\n            _stride = stride;\n\n            _pngHeader = new byte[PngHeaderLength];\n            stream.Read(_pngHeader);\n\n            var entryData = new byte[entryCount * EntryLength];\n            stream.Read(entryData);\n\n            _encryptionKey = new byte[KeyLength];\n            Array.Copy(entryData, KeyOffset, _encryptionKey, 0, KeyLength);\n            for (var i = 0; i < EncryptedLength; i++)\n                entryData[i] ^= _encryptionKey[i & 15];\n\n            var entryStream = new MemoryStream(entryData);\n            Entries = Enumerable.Range(0, entryCount)\n                .Select(i => BinaryMapping.ReadObject<Entry>(entryStream, i * EntryLength))\n                .ToArray();\n\n            var baseOffset = stream.Position;\n            foreach (var entry in Entries.Cast<Entry>())\n            {\n                entry.Data = new byte[entry.Length];\n                stream.Read(entry.Data, 0, entry.Length);\n\n                baseOffset += _stride;\n                stream.Position = baseOffset;\n            }\n\n            var remainingByteCount = stream.Length - stream.Position;\n            _pngFooter = new byte[remainingByteCount];\n            stream.Read(_pngFooter);\n        }\n\n        public string Name { get; internal set; } = \"Kingdom Hearts PC Save Archive\";\n        public int MaxEntryCount { get; }\n        public IList<IArchiveEntry> Entries { get; }\n\n        public void Write(Stream stream)\n        {\n            var entries = Entries\n                .Select(x => new Entry\n                {\n                    Name = x.Name,\n                    DateCreated = x.DateCreated,\n                    FlagCreated = x.FlagCreated,\n                    DateModified = x.DateModified,\n                    FlagModified = x.FlagModified,\n                    Length = x.Data.Length,\n                    Data = x.Data,\n                    Padding = new byte[0x100]\n                })\n            .Take(MaxEntryCount)\n            .ToList();\n\n            while (entries.Count < MaxEntryCount)\n                entries.Add(new Entry\n                {\n                    Name = string.Empty,\n                    Data = new byte[0]\n                });\n\n            stream.Position = 0;\n            stream.Write(_pngHeader);\n\n            var entryData = new byte[entries.Count * EntryLength];\n            using var entryStream = new MemoryStream(entryData);\n            foreach (var entry in entries)\n                BinaryMapping.WriteObject(entryStream, entry, (int)entryStream.Position);\n\n            for (var i = 0; i < EncryptedLength; i++)\n                entryData[i] ^= _encryptionKey[i & 15];\n            stream.Write(entryData);\n\n            var baseOffset = (int)stream.Position;\n            foreach (var entry in entries)\n            {\n                stream.Write(entry.Data, 0, (int)entry.Length);\n\n                var padding = _stride - entry.Length;\n                while (--padding > 0)\n                    stream.WriteByte(0);\n\n                baseOffset += _stride;\n                stream.Position = baseOffset;\n            }\n\n            stream.Write(_pngFooter);\n        }\n\n        public static PcSaveArchive Read(Stream stream, int entryCount, int stride) =>\n            new PcSaveArchive(stream, entryCount, stride);\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Ps2CbsArchive.cs",
    "content": "// https://github.com/root670/PS2SaveUtility/blob/master/src/CBSFile.cpp\n\nusing ICSharpCode.SharpZipLib.Zip.Compression.Streams;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Archives\n{\n    public class Ps2CbsArchive : IArchive\n    {\n        private class Header\n        {\n            [Data(Count = 4)] public uint Magic { get; set; }\n            [Data] public uint Unk1 { get; set; }\n            [Data] public uint DataOffset { get; set; }\n            [Data] public uint DecompressedSize { get; set; }\n            [Data] public uint CompressedSize { get; set; }\n            [Data(Count = 32)] public string Name { get; set; }\n            [Data] public sceMcStDateTime Created { get; set; }\n            [Data] public sceMcStDateTime Modified { get; set; }\n            [Data] public uint Unk2 { get; set; }\n            [Data] public uint Mode { get; set; }\n            [Data(Count = 16)] public byte[] Unk3 { get; set; }\n            [Data(Count = 72)] public string Title { get; set; }\n            [Data(Count = 132)] public string Description { get; set; }\n        }\n        public class Entry : IArchiveEntry\n        {\n            [Data] public sceMcStDateTime Created { get; set; }\n            [Data] public sceMcStDateTime Modified { get; set; }\n            [Data] public uint Length { get; set; }\n            [Data] public uint Mode { get; set; }\n            [Data(Count = 8)] public byte[] Unk1 { get; set; }\n            [Data(Count = 32)] public string Name { get; set; }\n\n            public byte[] Data { get; set; }\n            public DateTime DateCreated { get => Map(Created); set => throw new NotImplementedException(); }\n            public int FlagCreated { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }\n            public DateTime DateModified { get => Map(Modified); set => throw new NotImplementedException(); }\n            public int FlagModified { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }\n\n            private static DateTime Map(sceMcStDateTime date) => new(date.Year, date.Month, date.Day, date.Hour, date.Min, date.Sec);\n        }\n\n        internal Ps2CbsArchive(int entryCount)\n        {\n            MaxEntryCount = entryCount;\n            Entries = new List<IArchiveEntry>(MaxEntryCount);\n        }\n\n        private Ps2CbsArchive(Stream stream, int entryCount)\n        {\n            MaxEntryCount = entryCount;\n            Entries = new List<IArchiveEntry>(MaxEntryCount);\n\n            var header = BinaryMapping.ReadObject<Header>(stream);\n            var len = stream.Length - stream.Position;\n            var buff = new byte[len];\n            stream.Read(buff, 0, (int)len);\n\n            rc4Crypt(buff, (int)len);\n\n            using var decompressedStream = new MemoryStream(Decompress(buff, (int)header.DecompressedSize));\n            long offset = 0;\n            while (offset < (header.DecompressedSize - 64))\n            {\n                var entry = BinaryMapping.ReadObject<Entry>(decompressedStream);\n\n                entry.Data = new byte[entry.Length];\n                decompressedStream.Read(entry.Data, 0, (int)entry.Length);\n\n                offset = decompressedStream.Position;\n                Entries.Add(entry);\n            }\n        }\n\n        public string Name => \"PS2 CBS Archive\";\n\n        public int MaxEntryCount { get; }\n\n        public IList<IArchiveEntry> Entries { get; }\n\n        public void Write(Stream stream)\n        {\n            throw new NotImplementedException();\n        }\n\n        public static Ps2CbsArchive Read(Stream stream, int entryCount) =>\n            new Ps2CbsArchive(stream, entryCount);\n\n        private static byte[] Decompress(byte[] buffer, int length)\n        {\n            using var compressedStream = new MemoryStream(buffer);\n            using var inflater = new InflaterInputStream(compressedStream);\n\n            var decomp = new byte[length];\n            inflater.Read(decomp);\n\n            return decomp;\n        }\n\n        private static void rc4Crypt(byte[] buf, int bufLen)\n        {\n            byte j = 0;\n            byte k = 0;\n            byte temp;\n            byte[] s = new byte[]\n            {\n                0x5f, 0x1f, 0x85, 0x6f, 0x31, 0xaa, 0x3b, 0x18,\n                0x21, 0xb9, 0xce, 0x1c, 0x07, 0x4c, 0x9c, 0xb4,\n                0x81, 0xb8, 0xef, 0x98, 0x59, 0xae, 0xf9, 0x26,\n                0xe3, 0x80, 0xa3, 0x29, 0x2d, 0x73, 0x51, 0x62,\n                0x7c, 0x64, 0x46, 0xf4, 0x34, 0x1a, 0xf6, 0xe1,\n                0xba, 0x3a, 0x0d, 0x82, 0x79, 0x0a, 0x5c, 0x16,\n                0x71, 0x49, 0x8e, 0xac, 0x8c, 0x9f, 0x35, 0x19,\n                0x45, 0x94, 0x3f, 0x56, 0x0c, 0x91, 0x00, 0x0b,\n                0xd7, 0xb0, 0xdd, 0x39, 0x66, 0xa1, 0x76, 0x52,\n                0x13, 0x57, 0xf3, 0xbb, 0x4e, 0xe5, 0xdc, 0xf0,\n                0x65, 0x84, 0xb2, 0xd6, 0xdf, 0x15, 0x3c, 0x63,\n                0x1d, 0x89, 0x14, 0xbd, 0xd2, 0x36, 0xfe, 0xb1,\n                0xca, 0x8b, 0xa4, 0xc6, 0x9e, 0x67, 0x47, 0x37,\n                0x42, 0x6d, 0x6a, 0x03, 0x92, 0x70, 0x05, 0x7d,\n                0x96, 0x2f, 0x40, 0x90, 0xc4, 0xf1, 0x3e, 0x3d,\n                0x01, 0xf7, 0x68, 0x1e, 0xc3, 0xfc, 0x72, 0xb5,\n                0x54, 0xcf, 0xe7, 0x41, 0xe4, 0x4d, 0x83, 0x55,\n                0x12, 0x22, 0x09, 0x78, 0xfa, 0xde, 0xa7, 0x06,\n                0x08, 0x23, 0xbf, 0x0f, 0xcc, 0xc1, 0x97, 0x61,\n                0xc5, 0x4a, 0xe6, 0xa0, 0x11, 0xc2, 0xea, 0x74,\n                0x02, 0x87, 0xd5, 0xd1, 0x9d, 0xb7, 0x7e, 0x38,\n                0x60, 0x53, 0x95, 0x8d, 0x25, 0x77, 0x10, 0x5e,\n                0x9b, 0x7f, 0xd8, 0x6e, 0xda, 0xa2, 0x2e, 0x20,\n                0x4f, 0xcd, 0x8f, 0xcb, 0xbe, 0x5a, 0xe0, 0xed,\n                0x2c, 0x9a, 0xd4, 0xe2, 0xaf, 0xd0, 0xa9, 0xe8,\n                0xad, 0x7a, 0xbc, 0xa8, 0xf2, 0xee, 0xeb, 0xf5,\n                0xa6, 0x99, 0x28, 0x24, 0x6c, 0x2b, 0x75, 0x5d,\n                0xf8, 0xd3, 0x86, 0x17, 0xfb, 0xc0, 0x7b, 0xb3,\n                0x58, 0xdb, 0xc7, 0x4b, 0xff, 0x04, 0x50, 0xe9,\n                0x88, 0x69, 0xc9, 0x2a, 0xab, 0xfd, 0x5b, 0x1b,\n                0x8a, 0xd9, 0xec, 0x27, 0x44, 0x0e, 0x33, 0xc8,\n                0x6b, 0x93, 0x32, 0x48, 0xb6, 0x30, 0x43, 0xa5\n            };\n\n            for (int i = 0; i < bufLen; i++)\n            {\n                j += 1;\n                k += s[j];\n\n                temp = s[j];\n                s[j] = s[k];\n                s[k] = temp;\n\n                buf[i] ^= s[(s[j] + s[k]) & 0xFF];\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Ps2PsuArchive.cs",
    "content": "// https://github.com/root670/PS2SaveUtility/blob/master/src/PSUFile.cpp\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Archives\n{\n    public class Ps2PsuArchive : IArchive\n    {\n        private const int Alignment = 1024;\n\n        public class Entry : IArchiveEntry\n        {\n            [Data] public uint Mode { get; set; }\n            [Data] public uint Length { get; set; }\n            [Data] public sceMcStDateTime Created { get; set; }\n            [Data] public uint Cluster { get; set; }\n            [Data] public uint DirIndex { get; set; }\n            [Data] public sceMcStDateTime Modified { get; set; }\n            [Data] public uint Attr { get; set; }\n            [Data(Count = 28)] public byte[] Padding { get; set; }\n            [Data(Count = 32)] public string Name { get; set; }\n            [Data(Count = 0x1A0)] public byte[] Padding2 { get; set; }\n\n            public byte[] Data { get; set; }\n\n            public DateTime DateCreated { get => Map(Created); set => throw new NotImplementedException(); }\n            public int FlagCreated { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }\n            public DateTime DateModified { get => Map(Modified); set => throw new NotImplementedException(); }\n            public int FlagModified { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }\n\n            private static DateTime Map(sceMcStDateTime date) => new(date.Year, date.Month, date.Day, date.Hour, date.Min, date.Sec);\n        }\n\n        internal Ps2PsuArchive(int entryCount)\n        {\n            MaxEntryCount = entryCount;\n            Entries = new List<IArchiveEntry>(MaxEntryCount);\n        }\n\n        private Ps2PsuArchive(Stream stream, int entryCount)\n        {\n            MaxEntryCount = entryCount;\n            Entries = new List<IArchiveEntry>(MaxEntryCount);\n\n            var header = BinaryMapping.ReadObject<Entry>(stream);\n            for (int i = 0; i < header.Length; i++)\n            {\n                var file = BinaryMapping.ReadObject<Entry>(stream);\n                file.Data = new byte[file.Length];\n                stream.Read(file.Data, 0, (int)file.Length);\n\n                var offset_shift = file.Length % Alignment;\n                var pos2 = offset_shift > 0 ? stream.Position + Alignment - offset_shift : stream.Position;\n\n                stream.Position = pos2;\n\n                Entries.Add(file);\n            }\n        }\n\n        public string Name => \"PS2 PSU Archive\";\n\n        public int MaxEntryCount { get; }\n\n        public IList<IArchiveEntry> Entries { get; }\n\n        public void Write(Stream stream)\n        {\n            throw new NotImplementedException();\n        }\n\n        public static Ps2PsuArchive Read(Stream stream, int entryCount) =>\n            new Ps2PsuArchive(stream, entryCount);\n    }\n\n    public class sceMcStDateTime\n    {\n        [Data] public byte Resv2 { get; set; }\n        [Data] public byte Sec { get; set; }\n        [Data] public byte Min { get; set; }\n        [Data] public byte Hour { get; set; }\n        [Data] public byte Day { get; set; }\n        [Data] public byte Month { get; set; }\n        [Data] public ushort Year { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Ps3PsvArchive.cs",
    "content": "// https://github.com/PMStanley/PSV-Exporter/blob/master/PSVFormat.pas\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Archives\n{\n    public class Ps3PsvArchive : IArchive\n    {\n        private class Header\n        {\n            [Data] public uint Magic { get; set; }\n            [Data] public int Padding { get; set; }\n            [Data(Count = 0x14)] public byte[] KeySeed { get; set; }\n            [Data(Count = 0x14)] public byte[] Signature { get; set; }\n            [Data(Count = 8)] public byte[] Padding2 { get; set; }\n            [Data] public int HeaderSize { get; set; }\n            [Data] public int SaveType { get; set; }\n        }\n        private class Ps2Header\n        {\n            [Data] public int DisplaySize { get; set; }\n            [Data] public int SysPos { get; set; }\n            [Data] public int SysSize { get; set; }\n            [Data] public int Icon1Pos { get; set; }\n            [Data] public int Icon1Size { get; set; }\n            [Data] public int Icon2Pos { get; set; }\n            [Data] public int Icon2Size { get; set; }\n            [Data] public int Icon3Pos { get; set; }\n            [Data] public int Icon3Size { get; set; }\n            [Data] public int NumFiles { get; set; }\n        }\n        private class Ps2MainDirInfo\n        {\n            [Data] public sceMcStDateTime Created { get; set; }\n            [Data] public sceMcStDateTime Modified { get; set; }\n            [Data] public int NumFilesInDir { get; set; }\n            [Data] public int Attr { get; set; }\n            [Data(Count = 32)] public string Name { get; set; }\n        }\n        private class Ps2FileEntry : IArchiveEntry\n        {\n            [Data] public sceMcStDateTime Created { get; set; }\n            [Data] public sceMcStDateTime Modified { get; set; }\n            [Data] public int Size { get; set; }\n            [Data] public int Attr { get; set; }\n            [Data(Count = 32)] public string Name { get; set; }\n            [Data] public int Offset { get; set; }\n\n            public byte[] Data { get; set; }\n\n            public DateTime DateCreated { get => Map(Created); set => throw new NotImplementedException(); }\n            public int FlagCreated { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }\n            public DateTime DateModified { get => Map(Modified); set => throw new NotImplementedException(); }\n            public int FlagModified { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }\n\n            private static DateTime Map(sceMcStDateTime date) => new(date.Year, date.Month, date.Day, date.Hour, date.Min, date.Sec);\n        }\n\n        internal Ps3PsvArchive()\n        {\n            Entries = new List<IArchiveEntry>(MaxEntryCount);\n        }\n\n        private Ps3PsvArchive(Stream stream)\n        {\n            Entries = new List<IArchiveEntry>(MaxEntryCount);\n\n            var header = BinaryMapping.ReadObject<Header>(stream);\n\n            //psv could also store ps1 saves\n            //i'm ignoring that fact right now and only implement the ps2 side\n            if (header.SaveType == 1)\n                return;\n\n            var ps2Header = BinaryMapping.ReadObject<Ps2Header>(stream);\n            stream.Position += 0x38;\n\n            var entries = Enumerable.Range(0, ps2Header.NumFiles)\n                .Select(x => BinaryMapping.ReadObject<Ps2FileEntry>(stream, (int)stream.Position))\n                .ToArray();\n\n            foreach (var entry in entries)\n            {\n                stream.Position = entry.Offset;\n                entry.Data = new byte[entry.Size];\n                stream.Read(entry.Data, 0, entry.Size);\n            }\n\n            Entries = entries;\n        }\n\n        public string Name => \"PS3 PSV\";\n\n        public int MaxEntryCount { get; }\n\n        public IList<IArchiveEntry> Entries { get; }\n\n        public void Write(Stream stream)\n        {\n            throw new NotImplementedException();\n        }\n\n        public static Ps3PsvArchive Read(Stream stream) =>\n            new Ps3PsvArchive(stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.Archives/Ps4SaveArchive.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Archives\n{\n    internal class Ps4SaveArchive : IArchive\n    {\n        private const int Alignment = 0x400;\n\n        public class Entry : IArchiveEntry\n        {\n            private static readonly long UnixTimeBase = new DateTime(1970, 1, 1).Ticks;\n\n            [Data(Count = 0x40)] public string Name { get; set; }\n            [Data(0x40)] public int RawDateCreated { get; set; }\n            [Data(0x44)] public int FlagCreated { get; set; }\n            [Data(0x48)] public int RawDateModified { get; set; }\n            [Data(0x4c)] public int FlagModified { get; set; }\n            [Data(0x50)] public int Length { get; set; }\n            [Data(0x54)] public int SomeKindOfFlag { get; set; }\n\n            public DateTime DateCreated { get => Map(RawDateCreated); set => RawDateCreated = Map(value); }\n            public DateTime DateModified { get => Map(RawDateModified); set => RawDateModified = Map(value); }\n\n            public byte[] Data { get; set; }\n\n            private static DateTime Map(int ticks) => new DateTime(ticks * TimeSpan.TicksPerSecond + UnixTimeBase);\n            private static int Map(DateTime dateTime) => (int)((dateTime.Ticks - UnixTimeBase) / TimeSpan.TicksPerSecond);\n        }\n\n        private readonly int _stride;\n\n        internal Ps4SaveArchive(int entryCount, int stride)\n        {\n            MaxEntryCount = entryCount;\n            _stride = stride;\n            Entries = new List<IArchiveEntry>(MaxEntryCount);\n        }\n\n        private Ps4SaveArchive(Stream stream, int entryCount, int stride)\n        {\n            MaxEntryCount = entryCount;\n            _stride = stride;\n            var entries = Enumerable.Range(0, entryCount)\n                .Select(x => BinaryMapping.ReadObject<Entry>(stream, (int)stream.Position))\n                .ToArray();\n\n            var baseOffset = stream.Position;\n            foreach (var entry in entries)\n            {\n                stream.Position = baseOffset;\n                entry.Data = new byte[entry.Length];\n                stream.Read(entry.Data, 0, (int)entry.Length);\n\n                baseOffset += _stride;\n            }\n\n            Entries = entries;\n        }\n\n        public string Name { get; internal set; } = \"PS4 Save Archive\";\n        public int MaxEntryCount { get; }\n        public IList<IArchiveEntry> Entries { get; }\n\n        public void Write(Stream stream)\n        {\n            var entries = Entries\n                .Select(x => new Entry\n                {\n                    Name = x.Name,\n                    DateCreated = x.DateCreated,\n                    FlagCreated = x.FlagCreated,\n                    DateModified = x.DateModified,\n                    FlagModified = x.FlagModified,\n                    Length = x.Data.Length,\n                    Data = x.Data\n                })\n                .Take(MaxEntryCount)\n                .ToList();\n\n            while (entries.Count < MaxEntryCount)\n                entries.Add(new Entry\n                {\n                    Name = string.Empty,\n                    Data = new byte[0]\n                });\n\n            stream.Position = 0;\n            foreach (var entry in entries)\n            {\n                BinaryMapping.WriteObject(stream, entry, (int)stream.Position);\n            }\n\n            var baseOffset = (int)stream.Position;\n            foreach (var entry in entries)\n            {\n                stream.Position = baseOffset;\n                baseOffset += _stride;\n\n                stream.Write(entry.Data, 0, (int)entry.Length);\n\n                var padding = _stride - entry.Length;\n                while (--padding > 0)\n                    stream.WriteByte(0);\n            }\n\n            stream.SetLength(baseOffset + Alignment - (baseOffset % Alignment));\n        }\n\n        public static Ps4SaveArchive Read(Stream stream, int entryCount, int stride) =>\n            new Ps4SaveArchive(stream, entryCount, stride);\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib02/KHSave.Lib02.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.Lib02/Models/Objective.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Trssv.Models\n{\n    public class Objective\n    {\n        // bit 0: unlocked\n        // bit 4: unread\n        [Data] public short Flags { get; set; }\n        [Data] public short Progress { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib02/Models/PlayableCharacter.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Trssv.Models\n{\n    public class PlayableCharacter\n    {\n        [Data(0, 0x200)] public byte[] Data { get; set; }\n        [Data(0x08C)] public int Hp { get; set; }\n        [Data(0x090)] public int Mp { get; set; }\n        [Data(0x094)] public int Focus { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib02/Models/Slot.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Trssv.Types;\nusing System.Collections.Generic;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Trssv.Models\n{\n    public class Slot\n    {\n        [Data(0, 0x3B40)] public byte[] Data { get; set; }\n\n        //[Data(0x00)] public bool IsDataExists { get; set; } // Bit 0\n        //[Data(0x00)] public bool SaveClear { get; set; } // Bit 2\n        [Data(0x04)] public DifficultyType Difficulty { get; set; }\n\n        [Data(0x18)] public int Experience { get; set; }\n        [Data(0x20)] public byte Level { get; set; }\n        [Data(0x24)] public LocationType Location { get; set; }\n\n        [Data(0x30)] public int EnemiesDefeated { get; set; }\n        [Data(0x34)] public int StyleChangesPerformed { get; set; }\n        [Data(0x3C)] public int MagicFiragaUses { get; set; }\n        [Data(0x44)] public int MagicBlizzardUses { get; set; }\n        [Data(0x4C)] public int MagicThundagaUses { get; set; }\n        [Data(0x54)] public int MagicUnknown1Uses { get; set; }\n        [Data(0x5C)] public int MagicUnknown2Uses { get; set; }\n        [Data(0x64)] public int MagicCuragaUses { get; set; }\n\n        [Data(0xA30, 52, 4)] public List<Objective> Objectives { get; set; }\n\n        [Data(0x2384, 5, 0x200)] public List<PlayableCharacter> Pc { get; set; }\n\n        [Data(0x2e10)] public int StoryProgression { get; set; }\n\n        [Data(0x3324, 0x100)] public string MapPath { get; set; }\n        [Data(0x3424, 0x40)] public string MapSpawn { get; set; }\n        [Data(0x3464, 0x100)] public string PlayerScript { get; set; }\n        [Data(0x3564, 0x100)] public string PlayerCharacter { get; set; }\n        [Data(0x3664, 0x100)] public string SupportCharacter { get; set; }\n\n        [Data(0x3a78)] public CommandType Shortcut1Circle { get; set; }\n        [Data(0x3a7c)] public CommandType Shortcut1Triangle { get; set; }\n        [Data(0x3a80)] public CommandType Shortcut1Square { get; set; }\n        [Data(0x3a84)] public CommandType Shortcut1Cross { get; set; }\n        [Data(0x3a88)] public CommandType Shortcut2Circle { get; set; }\n        [Data(0x3a8c)] public CommandType Shortcut2Triangle { get; set; }\n        [Data(0x3a90)] public CommandType Shortcut2Square { get; set; }\n        [Data(0x3a94)] public CommandType Shortcut2Cross { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib02/SaveKh02.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Trssv.Models;\nusing System.Collections.Generic;\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Trssv\n{\n    public class SaveKh02\n    {\n        [Data(0, 0x1725B0)] public byte[] Data { get; set; }\n\n        [Data(0x10)] public bool IsVibrationEnable { get; set; }\n        [Data] public bool InvertCameraVertical { get; set; }\n        [Data] public bool InvertCameraHorizontal { get; set; }\n        [Data] public bool IsMapVisible { get; set; }\n        [Data] public bool IsSubtitlesVisible { get; set; }\n        [Data] public bool Unk10_Bit5 { get; set; }\n        [Data] public bool CanEarnExp { get; set; }\n\n        [Data(0x14)] public int CameraSpeed { get; set; }\n\n        [Data(0x18)] public int Brightness { get; set; }\n\n        [Data(0x1C)] public int TheaterModeWatched { get; set; }\n\n        [Data(0x38)] public int TheaterMode { get; set; }\n\n        [Data(0xB0, 100, 0x3B40)] public List<Slot> Slots { get; set; }\n\n        public static bool IsValid(Stream stream)\n        {\n            var prevPosition = stream.Position;\n            var magicCode = new BinaryReader(stream).ReadInt32();\n            stream.Position = prevPosition;\n\n            return magicCode == 0x45564153; // SAVE\n        }\n\n        public void Write(Stream stream) => BinaryMapping.WriteObject(stream, this);\n\n        public static SaveKh02 Read(Stream stream) => BinaryMapping.ReadObject<SaveKh02>(stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib02/Types/CommandType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Trssv.Types\n{\n    public enum CommandType\n    {\n        [Info(\"Empty\")] Empty = 0,\n        [Info(\"Counter Blast\")] CounterBlast = 26,\n        [Info(\"Attack\")] Attack = 46,\n        [Info(\"Magic\")] Magic = 49,\n        [Magic(\"Firaga\")] Firaga = 51,\n        [Magic(\"Firaja\")] Firaja = 52,\n        [Magic(\"Blizzaga\")] Blizzaga = 55,\n        [Magic(\"Blizzaja\")] Blizzaja = 56,\n        [Magic(\"Thundaga\")] Thundaga = 59,\n        [Magic(\"Thundaja\")] Thundaja = 60,\n        [Magic(\"Curaga\")] Curaga = 71,\n        [Info(\"Items\")] Items = 77,\n        [Consumable(\"Potion\")] Potion,\n        [Consumable(\"Hi-Potion\")] HiPotion,\n        [Consumable(\"Mega-Potion\")] MegaPotion,\n        [Consumable(\"Ether\")] Ether,\n        [Consumable(\"Mega-Ether\")] MegaEther,\n        [Consumable(\"Elixir\")] Elixir,\n        [Consumable(\"Megalixir\")] Megalixir,\n        [Info(\"Talk\")] Talk = 88,\n        [Info(\"Open\")] Open,\n        [Info(\"Examine\")] Examine,\n        [Info(\"Spellweaver\")] Spellweaver = 112,\n        [Info(\"Wayfinder\")] Wayfinder,\n        [Info(\"Finish Spellweaver\")] Finish1 = 134,\n        [Info(\"Finish Wayfinder\")] Finish2,\n        [Info(\"Wayfinder (final boss)\")] WayfinderAlt = 167,\n        [Info(\"Prism Rain\")] PrismRain = 210,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib02/Types/DifficultyType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Trssv.Types\n{\n    public enum DifficultyType : byte\n    {\n        [Info] Beginner,\n        [Info] Normal,\n        [Info] Proud,\n        [Info] Critical\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib02/Types/LocationType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Trssv.Types\n{\n    public enum LocationType : byte\n    {\n        [Info(\"Main Road\")] Location00,\n        [Info(\"Castle Town (variant #1)\")] Location01,\n        [Info(\"Castle Town (variant #2)\")] Location02,\n        [Info(\"Castle Town (variant #3)\")] Location03,\n        [Info(\"The World Within (variant #1)\")] Location04,\n        [Info(\"The World Within (variant #2)\")] Location05,\n        [Info(\"The World Within (variant #3)\")] Location06,\n        [Info(\"The World Within (variant #4)\")] Location07,\n        [Info(\"The World Within (variant #5)\")] Location08,\n        [Info(\"The World Within (variant #6)\")] Location09,\n        [Info(\"The World Within (variant #7)\")] Location0a,\n        [Info(\"The World Within (variant #8)\")] Location0b,\n        [Info(\"The World Within (variant #9)\")] Location0c,\n        [Info(\"The World Within (variant #10)\")] Location0d,\n        [Info(\"The World Within (variant #11)\")] Location0e,\n        [Info(\"The World Within (variant #12)\")] Location0f,\n        [Info(\"The World Within (variant #13)\")] Location10,\n        [Info(\"The World Within (variant #14)\")] Location11,\n        [Info(\"The World Within (variant #15)\")] Location12,\n        [Info(\"Uncertain Path\")] Location13,\n        [Info(\"Rocky Path (variant #1)\")] Location14,\n        [Info(\"Rocky Path (variant #2)\")] Location15,\n        [Info(\"Path's End\")] Location16,\n        [Info(\"Depths of Darkness (variant #1)\")] Location17,\n        [Info(\"Depths of Darkness (variant #2)\")] Location18,\n        [Info(\"Destiny Islands\")] Location19,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib02/Types/MapType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Trssv.Types\n{\n    public enum MapType\n    {\n        [MapInfo(\"dw_01\", \"Main Road\")] dw_01,\n        [MapInfo(\"dw_02\", \"Castle Town\")] dw_02,\n        [MapInfo(\"dw_03\", \"The World Within\")] dw_03,\n        [MapInfo(\"dw_04\", \"Inside the mirror (Road)\")] dw_04,\n        [MapInfo(\"dw_05\", \"Inside the mirror (Colums)\")] dw_05,\n        [MapInfo(\"dw_06\", \"Inside the mirror (Dwarf)\")] dw_06,\n        [MapInfo(\"dw_07\", \"Inside the mirror (Battle)\")] dw_07,\n        [MapInfo(\"dw_08\", \"Forest of Thorns\")] dw_08,\n        [MapInfo(\"dw_09\", \"Depths of Darkness\")] dw_09,\n        [MapInfo(\"dw_10\", \"Destiny Island\")] dw_10,\n        [MapInfo(\"dw_11\", \"Boss Rush (vs. Darkside)\")] dw_11,\n        [MapInfo(\"dw_12\", \"Boss Rush (Columns room)\")] dw_12,\n        [MapInfo(\"dw_58\", \"Opening\")] dw_58,\n        [MapInfo(\"dw_59\", \"dw59 (infinite loading screen)\")] dw_59,\n        [MapInfo(\"dw_60\", \"Ending\")] dw_60,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib02/Types/SpawnType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Trssv.Types\n{\n    public enum SpawnType\n    {\n        [Info] dw_01_Lv_AutoSave_01,\n        [Info] dw_01_Lv_AutoSave_02,\n        [Info] dw_01_Lv_AutoSave_03,\n        [Info] dw_01_Lv_AutoSave_04,\n        [Info] dw_01_Lv_AutoSave_05,\n        [Info] dw_01_Lv_AutoSave_06,\n        [Info] dw_01_Lv_Debug_01,\n        [Info] dw_01_Lv_Debug_02,\n        [Info] dw_01_Lv_Debug_03,\n        [Info] dw_01_Lv_Skip_dw004,\n        [Info] dw_01_Lv_Skip_dw005,\n        [Info] dw_01_Lv_Skip_dw006,\n        [Info] dw_01_Lv_Skip_dw007,\n        [Info] dw_01_Lv_Skip_dw008,\n        [Info] dw_01_Lv_Start_01,\n        [Info] dw_01_Lv_Start_04,\n        [Info] dw_01_Lv_Start_05,\n        [Info] dw_02_Lv_AutoSave_01,\n        [Info] dw_02_Lv_AutoSave_02,\n        [Info] dw_02_Lv_AutoSave_03,\n        [Info] dw_02_Lv_AutoSave_04,\n        [Info] dw_02_Lv_AutoSave_05,\n        [Info] dw_02_Lv_AutoSave_06,\n        [Info] dw_02_Lv_AutoSave_07,\n        [Info] dw_02_Lv_Debug_01,\n        [Info] dw_02_Lv_Debug_02,\n        [Info] dw_02_Lv_Debug_03,\n        [Info] dw_02_Lv_Debug_04,\n        [Info] dw_02_Lv_Debug_ReStart,\n        [Info] dw_02_Lv_Retry_01,\n        [Info] dw_02_Lv_Save_01,\n        [Info] dw_02_Lv_Skip_dw011,\n        [Info] dw_02_Lv_Skip_dw012,\n        [Info] dw_02_Lv_Start_01,\n        [Info] dw_02_Lv_Start_02,\n        [Info] dw_02_Lv_Start_03,\n        [Info] dw_03_Lv_AutoSave,\n        [Info] dw_03_Lv_AutoSave_01,\n        [Info] dw_03_Lv_AutoSave_02,\n        [Info] dw_03_Lv_AutoSave_03,\n        [Info] dw_03_Lv_AutoSave_04,\n        [Info] dw_03_Lv_AutoSave_05,\n        [Info] dw_03_Lv_AutoSave_06,\n        [Info] dw_03_Lv_AutoSave_07,\n        [Info] dw_03_Lv_AutoSave_08,\n        [Info] dw_03_Lv_AutoSave_09,\n        [Info] dw_03_Lv_ChallengeClear,\n        [Info] dw_03_Lv_Clear_dw_04,\n        [Info] dw_03_Lv_Clear_dw_05,\n        [Info] dw_03_Lv_Clear_dw_06,\n        [Info] dw_03_Lv_Debug_01,\n        [Info] dw_03_Lv_Save_01,\n        [Info] dw_03_Lv_Start,\n        [Info] dw_03_Lv_Start_01,\n        [Info] dw_03_Lv_Start_02,\n        [Info] dw_03_Lv_Start_03,\n        [Info] dw_03_Lv_Start_04,\n        [Info] dw_03_Lv_Start_05,\n        [Info] dw_03_Lv_Start_06,\n        [Info] dw_03_Lv_Start_07,\n        [Info] dw_03_Lv_Start_08,\n        [Info] dw_03_Lv_Start_09,\n        [Info] dw_04_Lv_AutoSave_01,\n        [Info] dw_04_Lv_AutoSave_02,\n        [Info] dw_04_Lv_Start_01,\n        [Info] dw_04_Lv_Start_02,\n        [Info] dw_04_Lv_Start_03,\n        [Info] dw_04_Lv_Start_04,\n        [Info] dw_05_Lv_AutoSave_01,\n        [Info] dw_05_Lv_AutoSave_02,\n        [Info] dw_05_Lv_Returned_01,\n        [Info] dw_05_Lv_Returned_02,\n        [Info] dw_05_Lv_Returned_03,\n        [Info] dw_05_Lv_Returned_04,\n        [Info] dw_05_Lv_Start_01,\n        [Info] dw_05_Lv_Start_02,\n        [Info] dw_05_Lv_Start_03,\n        [Info] dw_05_Lv_Start_04,\n        [Info] dw_05_Normal,\n        [Info] dw_06_Lv_AutoSave_01,\n        [Info] dw_06_Lv_AutoSave_02,\n        [Info] dw_06_Lv_AutoSave_03,\n        [Info] dw_06_Lv_Restart_A1,\n        [Info] dw_06_Lv_Restart_A2,\n        [Info] dw_06_Lv_Restart_B,\n        [Info] dw_06_Lv_Restart_C,\n        [Info] dw_06_Lv_Restart_D,\n        [Info] dw_06_Lv_Restart_E,\n        [Info] dw_06_Lv_Restart_F,\n        [Info] dw_06_Lv_Start_01,\n        [Info] dw_08_debug_Start_01,\n        [Info] dw_08_debug_Start_02,\n        [Info] dw_08_debug_Start_03,\n        [Info] dw_08_debug_Start_04,\n        // [Info] dw_08_Lv_Save_03,\n        [Info] dw_09_Lv_AutoSave_02,\n        [Info] dw_09_Lv_Retry_01,\n        [Info] dw_09_Lv_Save_01,\n        [Info] dw_09_Lv_skip_dw025,\n        [Info] dw_09_Lv_skip_dw026,\n        [Info] dw_09_Lv_Start_01,\n        [Info] dw_09_Lv_Start_02,\n        [Info] dw_10_Bt_Start_02,\n        [Info] dw_11_Lv_Start_01,\n        [Info] dw_12_Lv_Start_01,\n        [Info] dw_52_Lv_Start_01,\n        [Info] dw_53_Lv_Start_01,\n        [Info] dw_59_Lv_Start_01,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Attributes/ArmorGummiAttribute.cs",
    "content": "using KHSave.Attributes;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Lib1.Attributes\n{\n    public class ArmorGummiAttribute : GummiBlockAttribute\n    {\n        public ArmorGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max,\n            int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ,\n                armor, max, price, sell, description)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Attributes/BlueprintGummiAttribute.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib1.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Lib1.Attributes\n{\n    public class BlueprintGummiAttribute : InfoAttribute\n    {\n        public GameTypes GameType { get; set; }\n        public BlueprintGummiAttribute(string info, GameTypes gameType) : base(info)\n        {\n            GameType = gameType;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Attributes/CockpitGummiAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Lib1.Attributes\n{\n    public class CockpitGummiAttribute : GummiBlockAttribute\n    {\n        public CockpitGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max,\n            int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ,\n                armor, max, price, sell, description)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Attributes/EngineGummiAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Lib1.Attributes\n{\n    public class EngineGummiAttribute : GummiBlockAttribute\n    {\n        public int TopSpeed { get; set; }\n        public int LowSpeed { get; set; }\n        public int Horsepower { get; set; }\n\n        public EngineGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, int topSpeed, int lowSpeed,\n            int horsepower, int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ,\n                armor, max, price, sell, description)\n        {\n            TopSpeed = topSpeed;\n            LowSpeed = lowSpeed;\n            Horsepower = horsepower;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Attributes/ExtraGummiAttribute.cs",
    "content": "using KHSave.Attributes;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Lib1.Attributes\n{\n    public class ExtraGummiAttribute : InfoAttribute\n    {\n        public int Max { get; set; }\n        public int Price { get; set; }\n        public int Sell { get; set; }\n        public string Description { get; set; }\n\n        public ExtraGummiAttribute(string info, int max, int price = 0, int sell = 0, string description = null) : base(info)\n        {\n            Max = max;\n            Price = price;\n            Sell = sell;\n            Description = description;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Attributes/GummiBlockAttribute.cs",
    "content": "using KHSave.Attributes;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Lib1.Attributes\n{\n    public class GummiBlockAttribute : InfoAttribute\n    {\n        public int SizeX { get; set; }\n        public int SizeY { get; set; }\n        public int SizeZ { get; set; }\n        public int Armor { get; set; }\n        public int Max { get; set; }\n        public int Price { get; set; }\n        public int Sell { get; set; }\n        public string Description { get; set; }\n\n        public GummiBlockAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max,\n            int price = 0, int sell = 0, string description = null) : base(info)\n        {\n            SizeX = sizeX;\n            SizeY = sizeY;\n            SizeZ = sizeZ;\n            Armor = armor;\n            Max = max;\n            Price = price;\n            Sell = sell;\n            Description = description;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Attributes/SpecialGummiAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Lib1.Attributes\n{\n    public class SpecialGummiAttribute : GummiBlockAttribute\n    {\n        public float EnergyUse { get; set; }\n        public SpecialGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, float energyUse,\n            int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ,\n                armor, max, price, sell, description)\n        {\n            EnergyUse = energyUse;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Attributes/WeaponGummiAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Lib1.Attributes\n{\n    public class WeaponGummiAttribute : GummiBlockAttribute\n    {\n        public int Power { get; set; }\n        public float PowerUse { get; set; }\n        public WeaponGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, int power, float powerUse,\n            int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ,\n                armor, max, price, sell, description)\n        {\n            Power = power;\n            PowerUse = powerUse;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Attributes/WingGummiAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace KHSave.Lib1.Attributes\n{\n    public class WingGummiAttribute : GummiBlockAttribute\n    {\n        public int Handling { get; set; }\n        public WingGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, int handling,\n            int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ,\n                armor, max, price, sell, description)\n        {\n            Handling = handling;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Constants.cs",
    "content": "namespace KHSave.Lib1\n{\n    public class Constants\n    {\n        public const uint MagicCodeFm = 0x05;\n        public const uint MagicCodeEverythingElse = 0x04;\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/ISaveKh1.cs",
    "content": "using KHSave.Lib1.Types;\nusing KHSave.Lib1.Models;\nusing System.IO;\n\nnamespace KHSave.Lib1\n{\n    public interface ISaveKh1\n    {\n        bool IsFinalMix { get; }\n\n        uint MagicCode { get; set; }\n        byte[] SharedAbilities { get; }\n        CommandType ShortcutCircle { get; set; }\n        CommandType ShortcutTriangle { get; set; }\n        CommandType ShortcutSquare { get; set; }\n        uint Munny { get; set; }\n        byte Difficulty { get; set; }\n        PlayableCharacterType PlayableCharacter { get; set; }\n        PlayableCharacterType CompanionCharacter1 { get; set; }\n        PlayableCharacterType CompanionCharacter2 { get; set; }\n        PlayableCharacterType CompanionCharacter3 { get; set; }\n        byte[] InventoryCount { get; set; }\n        Character[] Characters { get; set; }\n        WorldType World { get; set; }\n        uint Room { get; set; }\n        uint SpawnLocation { get; set; }\n\n        void Write(Stream stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/KHSave.Lib1.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.Lib1/Models/Character.cs",
    "content": "using KHSave.Lib1.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib1.Models\n{\n    public class Character\n    {\n        [Data] public byte Level { get; set; }\n        [Data] public byte HpCur { get; set; }\n        [Data] public byte HpMax { get; set; }\n        [Data] public byte MpCur { get; set; }\n        [Data] public byte MpMax { get; set; }\n        [Data] public byte ApMax { get; set; }\n        [Data] public byte Strength { get; set; }\n        [Data] public byte Defense { get; set; }\n        [Data(Count = 16)] public byte[] Unk08 { get; set; }\n        [Data] public byte AccessoryCount { get; set; }\n        [Data(Count = 8)] public byte[] Accessories { get; set; }\n        [Data] public byte ItemCount { get; set; }\n        [Data(Count = 0xC)] public byte[] Items { get; set; }\n        [Data] public int Unk2e { get; set; }\n        [Data] public EquipmentType Weapon { get; set; }\n        [Data] public byte Unk33 { get; set; }\n        [Data] public byte Unk34 { get; set; }\n        [Data] public byte Unk35 { get; set; }\n        [Data] public byte Unk36 { get; set; }\n        [Data] public byte Unk37 { get; set; }\n        [Data] public int Unk38 { get; set; }\n        [Data] public int Experience { get; set; }\n        [Data(Count = 0x30)] public byte[] Abilities { get; set; }\n        [Data(0x70, BitIndex = 0)] public bool FireAvailable { get; set; }\n        [Data(0x70, BitIndex = 1)] public bool BlizzardAvailable { get; set; }\n        [Data(0x70, BitIndex = 2)] public bool ThunderAvailable { get; set; }\n        [Data(0x70, BitIndex = 3)] public bool CureAvailable { get; set; }\n        [Data(0x70, BitIndex = 4)] public bool GravityAvailable { get; set; }\n        [Data(0x70, BitIndex = 5)] public bool StopAvailable { get; set; }\n        [Data(0x70, BitIndex = 6)] public bool AeroAvailable { get; set; }\n        [Data(0x71)] public byte Unk71 { get; set; }\n        [Data(0x72)] public byte Unk72 { get; set; }\n        [Data(0x73)] public byte Unk73 { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Models/GummiBlock.cs",
    "content": "using KHSave.Lib1.Types;\nusing System;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib1.Models\n{\n    public class GummiBlock\n    {\n        //0xYX with Y and X having a value between 0-9, A-F will place the block outside the editor\n        [Data] public byte BlockPositionYX { get; set; }\n        //Range 0-9\n        [Data] public byte BlockPositionZ { get; set; }\n        [Data] public byte Unknown2 { get; set; }\n        [Data] public byte Unknown3 { get; set; }\n        [Data] public GummiBlocksType BlockID { get; set; }\n        [Data] public byte Unknown4 { get; set; }\n        [Data] public byte Unknown5 { get; set; }\n        [Data] public byte Unknown6 { get; set; }\n        [Data] public byte ColorID { get; set; }\n        [Data] public byte Unknown7 { get; set; }\n        [Data] public byte Unknown8 { get; set; }\n        [Data] public byte Unknown9 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Models/Gummiship.cs",
    "content": "using KHSave.Lib1.Types;\nusing System.Threading;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib1.Models\n{\n    public class Gummiship\n    {\n        [Data] public byte BlocksUsed { get; set; }\n        //probably the other statistics\n        [Data(Count = 75)] public byte[] Unk01 { get; set; }\n        [Data(Count = 10)] public byte[] ShipName { get; set; }\n        [Data(Count = 22)] public byte[] Unk02 { get; set; }\n        [Data(Count = 200)] public GummiBlock[] GummiBlocks { get; set; }\n        [Data(Count = 1466)] public byte[] Unk03 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/SaveKh1.EU.cs",
    "content": "using KHSave.Lib1.Models;\nusing KHSave.Lib1.Types;\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib1\n{\n    public partial class SaveKh1\n    {\n        public class SaveEU : ISaveKh1\n        {\n            public bool IsFinalMix => false;\n\n            [Data(0, 0x16C00)] public byte[] Data { get; set; }\n            [Data(0)] public uint MagicCode { get; set; }\n            [Data(Count = 10, Stride = 0x74)] public Character[] Characters { get; set; }\n\n            [Data(0x48E)] public PlayableCharacterType PlayableCharacter { get; set; }\n            [Data(0x48F)] public PlayableCharacterType CompanionCharacter1 { get; set; }\n            [Data(0x490)] public PlayableCharacterType CompanionCharacter2 { get; set; }\n            [Data(0x491)] public PlayableCharacterType CompanionCharacter3 { get; set; }\n\n            [Data(0x499, Count = 0x100)] public byte[] InventoryCount { get; set; }\n\n            [Data(0x599, Count = 4)] public byte[] SharedAbilities { get; set; }\n\n            [Data(0x82C)] public CommandType ShortcutTriangle { get; set; }\n            [Data(0x82D)] public CommandType ShortcutCircle { get; set; }\n            [Data(0x82E)] public CommandType ShortcutSquare { get; set; }\n\n            [Data(0x2040)] public WorldType World { get; set; }\n            [Data(0x2044)] public uint Room { get; set; }\n            [Data(0x2048)] public uint SpawnLocation { get; set; }\n\n\n            //Gummiships\n            [Data(0x241C, Count = 10)] public Gummiship[] Gummiships { get; set; }\n\n            //Needs testing\n            [Data(0x16A30)] public int AutoLock { get; set; }\n            [Data(0x16A34)] public int TargetLock { get; set; }\n            [Data(0x16A38)] public int Camera { get; set; }\n            [Data(0x16A40)] public int Vibration { get; set; }\n            [Data(0x16A44)] public int Sound { get; set; }\n\n\n            [Data(0x16418)] public byte Difficulty { get; set; }\n\n            [Data(0x1641C)] public uint Munny { get; set; }\n\n            public void Write(Stream stream) =>\n                BinaryMapping.WriteObject(stream.FromBegin(), this);\n        }\n    }\n}\n\n"
  },
  {
    "path": "KHSave.Lib1/SaveKh1.FinalMix.cs",
    "content": "using KHSave.Lib1.Models;\nusing KHSave.Lib1.Types;\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib1\n{\n    public partial class SaveKh1\n    {\n        public class SaveFinalMix : ISaveKh1\n        {\n            public bool IsFinalMix => true;\n\n            [Data(0, 0x16C00)] public byte[] Data { get; set; }\n\n            [Data(0)] public uint MagicCode { get; set; }\n            [Data(Count = 10, Stride = 0x74)] public Character[] Characters { get; set; }\n\n            [Data(0x48E)] public PlayableCharacterType PlayableCharacter { get; set; }\n            [Data(0x48F)] public PlayableCharacterType CompanionCharacter1 { get; set; }\n            [Data(0x490)] public PlayableCharacterType CompanionCharacter2 { get; set; }\n            [Data(0x491)] public PlayableCharacterType CompanionCharacter3 { get; set; }\n\n            [Data(0x499, Count = 0x100)] public byte[] InventoryCount { get; set; }\n\n            [Data(0x599, Count = 4)] public byte[] SharedAbilities { get; set; }\n\n            [Data(0x844)] public CommandType ShortcutCircle { get; set; }\n            [Data(0x845)] public CommandType ShortcutTriangle { get; set; }\n            [Data(0x846)] public CommandType ShortcutSquare { get; set; }\n\n            [Data(0x2040)] public WorldType World { get; set; }\n            [Data(0x2044)] public uint Room { get; set; }\n            [Data(0x2048)] public uint SpawnLocation { get; set; }\n\n            [Data(0x16400)] public int AutoLock { get; set; }\n            [Data(0x16404)] public int TargetLock { get; set; }\n            [Data(0x16408)] public int Camera { get; set; }\n            [Data(0x16410)] public int Vibration { get; set; }\n            [Data(0x16414)] public int Sound { get; set; }\n\n            [Data(0x1641C)] public uint Munny { get; set; }\n            [Data(0x1642C)] public byte Difficulty { get; set; }\n\n            public void Write(Stream stream) =>\n                BinaryMapping.WriteObject(stream.FromBegin(), this);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/SaveKh1.cs",
    "content": "using System;\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib1\n{\n    public partial class SaveKh1\n    {\n\n        internal static IBinaryMapping Mapper;\n\n        static SaveKh1()\n        {\n            Mapper = MappingConfiguration\n                .DefaultConfiguration()\n                .ForType<TimeSpan>(\n                    x => new TimeSpan(0, 0, 0, x.Reader.ReadInt32(), 0),\n                    x => x.Writer.Write((int)((TimeSpan)x.Item).TotalSeconds)\n                )\n                .Build();\n        }\n\n        public static bool IsValid(Stream stream)\n        {\n            var prevPosition = stream.Position;\n            var magicCode = new BinaryReader(stream).ReadUInt32();\n            stream.Position = prevPosition;\n\n            switch (magicCode)\n            {\n                case Constants.MagicCodeFm:\n                case Constants.MagicCodeEverythingElse:\n                    return true;\n                default:\n                    return false;\n            }\n        }\n\n        public static uint GetGameVersion(Stream stream)\n        {\n            if (!IsValid(stream))\n                return 0;\n\n            var prevPosition = stream.Position;\n            stream.Position = 0;\n            var version = new BinaryReader(stream).ReadUInt32();\n            stream.Position = prevPosition;\n\n            return version;\n        }\n\n        private static TSaveKh1 Read<TSaveKh1>(Stream stream)\n            where TSaveKh1 : class, ISaveKh1 =>\n            BinaryMapping.ReadObject<TSaveKh1>(stream.SetPosition(0));\n\n        public static ISaveKh1 Read(Stream stream)\n        {\n            switch (GetGameVersion(stream))\n            {\n                case Constants.MagicCodeFm:\n                    return Read<SaveFinalMix>(stream);\n                case Constants.MagicCodeEverythingElse:\n                    return Read<SaveEU>(stream);\n                default:\n                    throw new NotSupportedException(\"The version is not supported.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Types/AbilityType.cs",
    "content": "// https://pastebin.com/ZH0L3XXi\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib1.Types\n{\n    public enum AbilityType : byte\n    {\n        [Info] Empty,\n        [Ability(\"High Jump\")] HighJump = 0x01,\n        [Ability(\"Mermaid Kick\")] MermaidKick = 0x02,\n        [Ability(\"Glide\")] Glide = 0x03,\n        [Ability(\"Superglide\")] Superglide = 0x04,\n        [Ability(\"Treasure Magnet\")] TreasureMagnet = 0x05,\n        [Ability(\"Combo Plus\")] ComboPlus = 0x06,\n        [Ability(\"Air Combo Plus\")] AirComboPlus = 0x07,\n        [Ability(\"Critical Plus\")] CriticalPlus = 0x08,\n        [Ability(\"Second Wind\")] SecondWind = 0x09,\n        [Ability(\"Scan\")] Scan = 0x0A,\n        [Ability(\"Sonic Blade\")] SonicBlade = 0x0B,\n        [Ability(\"Ars Arcanum\")] ArsArcanum = 0x0C,\n        [Ability(\"Strike Raid\")] StrikeRaid = 0x0D,\n        [Ability(\"Ragnarok\")] Ragnarok = 0x0E,\n        [Ability(\"Trinity Limit\")] TrinityLimit = 0x0F,\n        [Ability(\"Cheer\")] Cheer = 0x10,\n        [Ability(\"Vortex\")] Vortex = 0x11,\n        [Ability(\"Aerial Sweep\")] AerialSweep = 0x12,\n        [Ability(\"Counterattack\")] Counterattack = 0x13,\n        [Ability(\"Blitz\")] Blitz = 0x14,\n        [Ability(\"Guard\")] Guard = 0x15,\n        [Ability(\"Dodge Roll\")] DodgeRoll = 0x16,\n        [Ability(\"MP Haste\")] MPHaste = 0x17,\n        [Ability(\"MP Rage\")] MPRage = 0x18,\n        [Ability(\"Second Chance\")] SecondChance = 0x19,\n        [Ability(\"Berserk\")] Berserk = 0x1A,\n        [Ability(\"Jackpot\")] Jackpot = 0x1B,\n        [Ability(\"Lucky Strike\")] LuckyStrike = 0x1C,\n        [Ability(\"Charge\")] Charge = 0x1D,\n        [Ability(\"Rocket\")] Rocket = 0x1E,\n        [Ability(\"Tornado\")] Tornado = 0x1F,\n        [Ability(\"MP Gift\")] MPGift = 0x20,\n        [Ability(\"Raging Boar\")] RagingBoar = 0x21,\n        [Ability(\"Asp's Bite\")] AspsBite = 0x22,\n        [Ability(\"Healing Herb\")] HealingHerb = 0x23,\n        [Ability(\"Wind Armor\")] WindArmor = 0x24,\n        [Ability(\"Crescent\")] Crescent = 0x25,\n        [Ability(\"Sandstorm\")] Sandstorm = 0x26,\n        [Ability(\"Applause!\")] Applause = 0x27,\n        [Ability(\"Blazing Fury\")] BlazingFury = 0x28,\n        [Ability(\"Icy Terror\")] IcyTerror = 0x29,\n        [Ability(\"Bolts Of Sorrow\")] BoltsOfSorrow = 0x2A,\n        [Ability(\"Ghostly Scream\")] GhostlyScream = 0x2B,\n        [Ability(\"Hummingbird\")] Hummingbird = 0x2C,\n        [Ability(\"Time-Out\")] TimeOut = 0x2D,\n        [Ability(\"Storm's Eye\")] StormsEye = 0x2E,\n        [Ability(\"Ferocious Lunge\")] FerociousLunge = 0x2F,\n        [Ability(\"Furious Bellow\")] FuriousBellow = 0x30,\n        [Ability(\"Spiral Wave\")] SpiralWave = 0x31,\n        [Ability(\"Thunder Potion\")] ThunderPotion = 0x32,\n        [Ability(\"Cure Potion\")] CurePotion = 0x33,\n        [Ability(\"Aero Potion\")] AeroPotion = 0x34,\n        [Ability(\"Slapshot\")] Slapshot = 0x35,\n        [Ability(\"Sliding Dash\")] SlidingDash = 0x36,\n        [Ability(\"Hurricane Blast\")] HurricaneBlast = 0x37,\n        [Ability(\"Ripple Drive\")] RippleDrive = 0x38,\n        [Ability(\"Stun Impact\")] StunImpact = 0x39,\n        [Ability(\"Gravity Break\")] GravityBreak = 0x3A,\n        [Ability(\"Zantetsuken\")] Zantetsuken = 0x3B,\n        [Ability(\"Tech Boost\")] TechBoost = 0x3C,\n        [Ability(\"Encounter Plus\")] EncounterPlus = 0x3D,\n        [Ability(\"Leaf Bracer\")] LeafBracer = 0x3E,\n        [Ability(\"Evolution\")] Evolution = 0x3F,\n        [Ability(\"EXP Zero\")] EXPZero = 0x40,\n        [Ability(\"Combo Master\")] ComboMaster = 0x41,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Types/CommandType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib1.Types\n{\n    public enum CommandType : byte\n    {\n        [Magic] Fire,\n        [Magic] Blizzard,\n        [Magic] Thunder,\n        [Magic] Cure,\n        [Magic] Gravity,\n        [Magic] Stop,\n        [Magic] Aero,\n        Empty = 0xFF\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Types/DifficultyType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib1.Types\n{\n    public enum Difficulty : byte\n    {\n        [Info(\"Normal\")] Normal,\n        [Info(\"Expert\")] Expert\n    }\n    public enum DifficultyFm : byte\n    {\n        [Info(\"Final Mix: Beginner Mode\")] Beginner,\n        [Info(\"Final Mix Mode\")] Standard,\n        [Info(\"Final Mix: Proud Mode\")] Proud\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Types/EquipmentType.cs",
    "content": "// https://pastebin.com/dfARF8ui\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib1.Types\n{\n    public enum EquipmentType : byte\n    {\n        [Info] Empty,\n        [Consumable(\"Potion\")] Potion,\n        [Consumable(\"Hi-Potion\")] HiPotion,\n        [Consumable(\"Ether\")] Ether,\n        [Consumable(\"Elixir\")] Elixir,\n        [Unused] BO5,\n        [Consumable(\"Mega-Potion\")] MegaPotion,\n        [Consumable(\"Mega-Ether\")] MegaEther,\n        [Consumable(\"Megalixir\")] Megalixir,\n        [Synthesis(\"Fury Stone\")] FuryStone,\n        [Synthesis(\"Power Stone\")] PowerStone,\n        [Synthesis(\"Energy Stone\")] EnergyStone,\n        [Synthesis(\"Blazing Stone\")] BlazingStone,\n        [Synthesis(\"Frost Stone\")] FrostStone,\n        [Synthesis(\"Lightning Stone\")] LightningStone,\n        [Synthesis(\"Dazzling Stone\")] DazzlingStone,\n        [Synthesis(\"Stormy Stone\")] StormyStone,\n        [Accessory(\"Protect Chain\")] ProtectChain,\n        [Accessory(\"Protera Chain\")] ProteraChain,\n        [Accessory(\"Protega Chain\")] ProtegaChain,\n        [Accessory(\"Fire Ring\")] FireRing,\n        [Accessory(\"Fira Ring\")] FiraRing,\n        [Accessory(\"Firaga Ring\")] FiragaRing,\n        [Accessory(\"Blizzard Ring\")] BlizzardRing,\n        [Accessory(\"Blizzara Ring\")] BlizzaraRing,\n        [Accessory(\"Blizzaga Ring\")] BlizzagaRing,\n        [Accessory(\"Thunder Ring\")] ThunderRing,\n        [Accessory(\"Thundara Ring\")] ThundaraRing,\n        [Accessory(\"Thundaga Ring\")] ThundagaRing,\n        [Accessory(\"Ability Stud\")] AbilityStud,\n        [Accessory(\"Guard Earring\")] GuardEarring,\n        [Accessory(\"Master Earring\")] MasterEarring,\n        [Accessory(\"Chaos Ring\")] ChaosRing,\n        [Accessory(\"Dark Ring\")] DarkRing,\n        [Accessory(\"Element Ring\")] ElementRing,\n        [Accessory(\"Three Stars\")] ThreeStars,\n        [Accessory(\"Power Chain\")] PowerChain,\n        [Accessory(\"Golem Chain\")] GolemChain,\n        [Accessory(\"Titan Chain\")] TitanChain,\n        [Accessory(\"Energy Bangle\")] EnergyBangle,\n        [Accessory(\"Angel Bangle\")] AngelBangle,\n        [Accessory(\"Gaia Bangle\")] GaiaBangle,\n        [Accessory(\"Magic Armlet\")] MagicArmlet,\n        [Accessory(\"Rune Armlet\")] RuneArmlet,\n        [Accessory(\"Atlas Armlet\")] AtlasArmlet,\n        [Accessory(\"Heartguard\")] Heartguard,\n        [Accessory(\"Ribbon\")] Ribbon,\n        [Accessory(\"Crystal Crown\")] CrystalCrown,\n        [Accessory(\"Brave Warrior\")] BraveWarrior,\n        [Accessory(\"Ifrit's Horn\")] IfritsHorn,\n        [Accessory(\"Inferno Band\")] InfernoBand,\n        [Accessory(\"White Fang\")] WhiteFang,\n        [Accessory(\"Ray of Light\")] RayofLight,\n        [Accessory(\"Holy Circlet\")] HolyCirclet,\n        [Accessory(\"Raven's Claw\")] RavensClaw,\n        [Accessory(\"Omega Arts\")] OmegaArts,\n        [Accessory(\"EXP Earring\")] EXPEarring,\n        [Unused] A41,\n        [Accessory(\"EXP Ring\")] EXPRing,\n        [Accessory(\"EXP Bracelet\")] EXPBracelet,\n        [Accessory(\"EXP Necklace\")] EXPNecklace,\n        [Accessory(\"Firagun Band\")] FiragunBand,\n        [Accessory(\"Blizzagun Band\")] BlizzagunBand,\n        [Accessory(\"Thundagun Band\")] ThundagunBand,\n        [Accessory(\"Ifrit Belt\")] IfritBelt,\n        [Accessory(\"Shiva Belt\")] ShivaBelt,\n        [Accessory(\"Ramuh Belt\")] RamuhBelt,\n        [Accessory(\"Moogle Badge\")] MoogleBadge,\n        [Accessory(\"Cosmic Arts\")] CosmicArts,\n        [Accessory(\"Royal Crown\")] RoyalCrown,\n        [Accessory(\"Prime Cap\")] PrimeCap,\n        [Accessory(\"Obsidian Ring\")] ObsidianRing,\n        [Unused] A56,\n        [Unused] A57,\n        [Unused] A58,\n        [Unused] A59,\n        [Unused] A60,\n        [Unused] A61,\n        [Unused] A62,\n        [Unused] A63,\n        [Unused] A64,\n        [Keyblade(\"Kingdom Key\")] KingdomKey,\n        [Keyblade(\"Dream Sword\")] DreamSword,\n        [Keyblade(\"Dream Shield (Sora)\")] DreamShieldSora,\n        [Keyblade(\"Dream Rod (Sora)\")] DreamRodSora,\n        [Keyblade(\"Wooden Sword\")] WoodenSword,\n        [Keyblade(\"Jungle King\")] JungleKing,\n        [Keyblade(\"Three Wishes\")] ThreeWishes,\n        [Keyblade(\"Fairy Harp\")] FairyHarp,\n        [Keyblade(\"Pumpkinhead\")] Pumpkinhead,\n        [Keyblade(\"Crabclaw\")] Crabclaw,\n        [Keyblade(\"Divine Rose\")] DivineRose,\n        [Keyblade(\"Spellbinder\")] Spellbinder,\n        [Keyblade(\"Olympia\")] Olympia,\n        [Keyblade(\"Lionheart\")] Lionheart,\n        [Keyblade(\"Metal Chocobo\")] MetalChocobo,\n        [Keyblade(\"Oathkeeper\")] Oathkeeper,\n        [Keyblade(\"Oblivion\")] Oblivion,\n        [Keyblade(\"Lady Luck\")] LadyLuck,\n        [Keyblade(\"Wishing Star\")] WishingStar,\n        [Keyblade(\"Ultima Weapon\")] UltimaWeapon,\n        [Keyblade(\"Diamond Dust\")] DiamondDust,\n        [Keyblade(\"One-Winged Angel\")] OneWingedAngel,\n        [Staff(\"Mage's Staff\")] MagesStaff,\n        [Staff(\"Morning Star\")] MorningStar,\n        [Staff(\"Shooting Star\")] ShootingStar,\n        [Staff(\"Magus Staff\")] MagusStaff,\n        [Staff(\"Wisdom Staff\")] WisdomStaff,\n        [Staff(\"Warhammer\")] Warhammer,\n        [Staff(\"Silver Mallet\")] SilverMallet,\n        [Staff(\"Grand Mallet\")] GrandMallet,\n        [Staff(\"Lord Fortune\")] LordFortune,\n        [Staff(\"Violetta\")] Violetta,\n        [Staff(\"Dream Rod (Donald)\")] DreamRodDonald,\n        [Staff(\"Save the Queen\")] SavetheQueen,\n        [Staff(\"Wizard's Relic\")] WizardsRelic,\n        [Staff(\"Meteor Strike\")] MeteorStrike,\n        [Staff(\"Fantasista\")] Fantasista,\n        [Staff(\"???? (Donald Weapon)\")] DonaldWeapon,\n        [Shield(\"Knight's Shield\")] KnightsShield,\n        [Shield(\"Mythril Shield\")] MythrilShield,\n        [Shield(\"Onyx Shield\")] OnyxShield,\n        [Shield(\"Stout Shield\")] StoutShield,\n        [Shield(\"Golem Shield\")] GolemShield,\n        [Shield(\"Adamant Shield\")] AdamantShield,\n        [Shield(\"Smasher\")] Smasher,\n        [Shield(\"Gigas Fist\")] GigasFist,\n        [Shield(\"Genji Shield\")] GenjiShield,\n        [Shield(\"Herc's Shield\")] HercsShield,\n        [Shield(\"Dream Shield (Goofy)\")] DreamShieldGoofy,\n        [Shield(\"Save the King\")] SavetheKing,\n        [Shield(\"Defender\")] Defender,\n        [Shield(\"Mighty Shield\")] MightyShield,\n        [Shield(\"Seven Elements\")] SevenElements,\n        [Shield(\"???? (Goofy Weapon)\")] GoofyWeapon,\n        [Weapon(\"Spear\")] Spear,\n        [Weapon(\"No Weapon (Pooh)\")] NoWeaponPooh,\n        [Weapon(\"Scimitar\")] Scimitar,\n        [Weapon(\"No Weapon (Ariel)\")] NoWeaponAriel,\n        [Weapon(\"No Weapon (Jack)\")] NoWeaponJack,\n        [Weapon(\"Dagger\")] Dagger,\n        [Weapon(\"Claws\")] Claws,\n        [Boost(\"Tent\")] Tent,\n        [Boost(\"Camping Set\")] CampingSet,\n        [Boost(\"Cottage\")] Cottage,\n        [Unused] C04,\n        [Unused] C05,\n        [Unused] C06,\n        [Unused] C07,\n        [Report(\"Ansem's Report 11\")] AnsemsReport11,\n        [Report(\"Ansem's Report 12\")] AnsemsReport12,\n        [Report(\"Ansem's Report 13\")] AnsemsReport13,\n        [Boost(\"Power Up\")] PowerUp,\n        [Boost(\"Defense Up\")] DefenseUp,\n        [Boost(\"AP Up\")] APUp,\n        [Synthesis(\"Serenity Power\")] SerenityPower,\n        [Synthesis(\"Dark Matter\")] DarkMatter,\n        [Synthesis(\"Mythril Stone\")] MythrilStone,\n        [Recipe(\"Fire Arts\")] FireArts,\n        [Recipe(\"Blizzard Arts\")] BlizzardArts,\n        [Recipe(\"Thunder Arts\")] ThunderArts,\n        [Recipe(\"Cure Arts\")] CureArts,\n        [Recipe(\"Gravity Arts\")] GravityArts,\n        [Recipe(\"Stop Arts\")] StopArts,\n        [Recipe(\"Aero Arts\")] AeroArts,\n        [Recipe(\"Shiitank Rank\")] ShiitankRank,\n        [Recipe(\"Matsutake Rank\")] MatsutakeRank,\n        [Recipe(\"Mystery Mold\")] MysteryMold,\n        [Report(\"Ansem's Report 1\")] AnsemsReport1,\n        [Report(\"Ansem's Report 2\")] AnsemsReport2,\n        [Report(\"Ansem's Report 3\")] AnsemsReport3,\n        [Report(\"Ansem's Report 4\")] AnsemsReport4,\n        [Report(\"Ansem's Report 5\")] AnsemsReport5,\n        [Report(\"Ansem's Report 6\")] AnsemsReport6,\n        [Report(\"Ansem's Report 7\")] AnsemsReport7,\n        [Report(\"Ansem's Report 8\")] AnsemsReport8,\n        [Report(\"Ansem's Report 9\")] AnsemsReport9,\n        [Report(\"Ansem's Report 10\")] AnsemsReport10,\n        [KeyItem(\"Khama Vol. 8\")] KhamaVol8,\n        [KeyItem(\"Salegg Vol. 6\")] SaleggVol6,\n        [KeyItem(\"Azal Vol. 3\")] AzalVol3,\n        [KeyItem(\"Mava Vol. 3\")] MavaVol3,\n        [KeyItem(\"Mava Vol. 6\")] MavaVol6,\n        [KeyItem(\"Theon Vol. 6\")] TheonVol6,\n        [KeyItem(\"Nahara Vol. 5\")] NaharaVol5,\n        [KeyItem(\"Hafet Vol. 4\")] HafetVol4,\n        [KeyItem(\"Empty Bottle\")] EmptyBottle,\n        [KeyItem(\"Old Book\")] OldBook,\n        [KeyItem(\"Emblem Piece\")] EmblemPiece,\n        [KeyItem(\"Emblem Piece 2\")] EmblemPiece2,\n        [KeyItem(\"Emblem Piece 3\")] EmblemPiece3,\n        [KeyItem(\"Emblem Piece 4\")] EmblemPiece4,\n        [KeyItem(\"Log\")] Log,\n        [KeyItem(\"Cloth\")] Cloth,\n        [KeyItem(\"Rope\")] Rope,\n        [KeyItem(\"Seagull Egg\")] SeagullEgg,\n        [KeyItem(\"Fish\")] Fish,\n        [KeyItem(\"Mushroom\")] Mushroom,\n        [KeyItem(\"Coconut\")] Coconut,\n        [KeyItem(\"Drinking Water\")] DrinkingWater,\n        [KeyItem(\"Navi-G Piece 1\")] NaviGPiece1,\n        [KeyItem(\"Navi-G Piece 2\")] NaviGPiece2,\n        [KeyItem(\"Navi-Gummi 1\")] NaviGummi1,\n        [KeyItem(\"Navi-G Piece 3\")] NaviGPiece3,\n        [KeyItem(\"Navi-G Piece 4\")] NaviGPiece4,\n        [KeyItem(\"Navi-Gummi 2\")] NaviGummi2,\n        [Summon(\"Watergleam\")] Watergleam,\n        [Summon(\"Naturespark\")] Naturespark,\n        [Summon(\"Fireglow\")] Fireglow,\n        [Summon(\"Earthshine\")] Earthshine,\n        [KeyItem(\"Crystal Trident\")] CrystalTrident,\n        [KeyItem(\"Postcard\")] Postcard,\n        [KeyItem(\"Torn Page 1\")] TornPage1,\n        [KeyItem(\"Torn Page 2\")] TornPage2,\n        [KeyItem(\"Torn Page 3\")] TornPage3,\n        [KeyItem(\"Torn Page 4\")] TornPage4,\n        [KeyItem(\"Torn Page 5\")] TornPage5,\n        [KeyItem(\"Slide 1\")] Slide1,\n        [KeyItem(\"Slide 2\")] Slide2,\n        [KeyItem(\"Slide 3\")] Slide3,\n        [KeyItem(\"Slide 4\")] Slide4,\n        [KeyItem(\"Slide 5\")] Slide5,\n        [KeyItem(\"Slide 6\")] Slide6,\n        [KeyItem(\"Footprints\")] Footprints,\n        [KeyItem(\"Claw Marks\")] ClawMarks,\n        [KeyItem(\"Stench\")] Stench,\n        [KeyItem(\"Antenna\")] Antenna,\n        [KeyItem(\"Forget-Me-Not\")] ForgetMeNot,\n        [KeyItem(\"Jack-In-The-Box\")] JackInTheBox,\n        [KeyItem(\"Entry Pass\")] EntryPass,\n        [KeyItem(\"Hero License\")] HeroLicense,\n        [Synthesis(\"Pretty Stone\")] PrettyStone,\n        [Unused] N41,\n        [Synthesis(\"Lucid Shard\")] LucidShard,\n        [Synthesis(\"Lucid Gem\")] LucidGem,\n        [Synthesis(\"Lucid Crystal\")] LucidCrystal,\n        [Synthesis(\"Spirit Shard\")] SpiritShard,\n        [Synthesis(\"Spirit Gem\")] SpiritGem,\n        [Synthesis(\"Power Shard\")] PowerShard,\n        [Synthesis(\"Power Gem\")] PowerGem,\n        [Synthesis(\"Power Crystal\")] PowerCrystal,\n        [Synthesis(\"Blaze Shard\")] BlazeShard,\n        [Synthesis(\"Blaze Gem\")] BlazeGem,\n        [Synthesis(\"Frost Shard\")] FrostShard,\n        [Synthesis(\"Frost Gem\")] FrostGem,\n        [Synthesis(\"Thunder Shard\")] ThunderShard,\n        [Synthesis(\"Thunder Gem\")] ThunderGem,\n        [Synthesis(\"Shiny Crystal\")] ShinyCrystal,\n        [Synthesis(\"Bright Shard\")] BrightShard,\n        [Synthesis(\"Bright Gem\")] BrightGem,\n        [Synthesis(\"Bright Crystal\")] BrightCrystal,\n        [Synthesis(\"Mystery Goo\")] MysteryGoo,\n        [Synthesis(\"Gale\")] Gale,\n        [Synthesis(\"Mythril Shard\")] MythrilShard,\n        [Synthesis(\"Mythril\")] Mythril,\n        [Synthesis(\"Orichalcum\")] Orichalcum\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Types/GameTypes.cs",
    "content": "using System;\n\nnamespace KHSave.Lib1.Types\n{\n    [Flags]\n    public enum GameTypes\n    {\n        None,\n        Jp = 1,\n        EuUs = 2,\n        Fm = 4,\n        All = Jp | EuUs | Fm\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Types/GummiBlocksType.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib1.Attributes;\n\nnamespace KHSave.Lib1.Types\n{\n    public enum GummiBlocksType : byte\n    {\n        [CockpitGummi(\"Cure-G\", 2, 2, 2, 200, 1)] CureG = 0x1,\n        [CockpitGummi(\"Curaga-G\", 2, 2, 2, 200, 1, 500)] CuragaG,\n        [CockpitGummi(\"Life-G\", 2, 2, 2, 200, 1, 750)] LifeG,\n        [CockpitGummi(\"Full-Life-G\", 2, 2, 2, 200, 1)] FullLifeG,\n        [EngineGummi(\"Fire-G\", 1, 1, 1, 10, 6, 80, 60, 10, 120)] FireG,\n        [EngineGummi(\"Fira-G\", 1, 1, 2, 20, 6, 90, 70, 20, 250)] FiraG,\n        [EngineGummi(\"Firaga-G\", 2, 2, 2, 30, 4, 100, 80, 30, 500)] FiragaG,\n        [EngineGummi(\"Flara-G\", 1, 1, 3, 40, 4, 110, 90, 50, 1000)] FlaraG,\n        [EngineGummi(\"Holy-G\", 2, 2, 2, 1500, 2, 120, 100, 80, 1500)] HolyG,\n        [ArmorGummi(\"Protect-G (Cube)\", 1, 1, 1, 5, 99, 20, 2)] ProtectGCube,\n        [ArmorGummi(\"Protect-G (Triangular Prism)\", 1, 1, 1, 3, 99, 20, 2)] ProtectGTriangularPrism,\n        [ArmorGummi(\"Protect-G (Pyramid)\", 1, 1, 1, 3, 99, 20, 2)] ProtectGPyramid,\n        [ArmorGummi(\"Protect-G (Cylinder)\", 1, 1, 1, 4, 30, 20, 2)] ProtectGCylinder,\n        [ArmorGummi(\"Protect-G (Half-Cylinder)\", 1, 1, 1, 4, 30, 20, 2)] ProtectGHalfCylinder,\n        [ArmorGummi(\"Protect-G (Quarter-Sphere)\", 1, 1, 1, 3, 10, 20, 2)] ProtectGQuarterSphere,\n        [ArmorGummi(\"Protect-G (Unproportional Cylinder)\", 1, 1, 1, 3, 10, 20, 2)] ProtectGUnproportionalCylinder,\n        [ArmorGummi(\"Protect-G (Half-Sphere)\", 1, 1, 1, 3, 10, 20, 2)] ProtectGHalfSphere,\n        [ArmorGummi(\"Shell-G (Cube)\", 1, 1, 1, 10, 99, 0, 3)] ShellGCube,\n        [ArmorGummi(\"Shell-G (Triangular Prism)\", 1, 1, 1, 5, 99, 0, 3)] ShellGTriangularPrism,\n        [ArmorGummi(\"Shell-G (Pyramid)\", 1, 1, 1, 5, 99, 0, 3)] ShellGPyramid,\n        [ArmorGummi(\"Shell-G (Cylinder)\", 1, 1, 1, 7, 20, 0, 3)] ShellGCylinder,\n        [ArmorGummi(\"Shell-G (Half-Cylinder)\", 1, 1, 1, 7, 20, 0, 3)] ShellGHalfCylinder,\n        [ArmorGummi(\"Shell-G (Quarter-Sphere)\", 1, 1, 1, 5, 8, 0, 3)] ShellGQuarterSphere,\n        [ArmorGummi(\"Shell-G (Unproportional Cylinder)\", 1, 1, 1, 5, 8, 0, 3)] ShellG1UnproportionalCylinder,\n        [ArmorGummi(\"Shell-G (Half-Sphere)\", 1, 1, 1, 5, 8, 0, 3)] ShellGHalfSphere,\n        [ArmorGummi(\"Dispel-G (Cube)\", 1, 1, 1, 15, 99, 0, 4)] DispelGCube,\n        [ArmorGummi(\"Dispel-G (Triangular Prism)\", 1, 1, 1, 7, 99, 0, 4)] DispelGTriangularPrism,\n        [ArmorGummi(\"Dispel-G (Pyramid)\", 1, 1, 1, 7, 99, 0, 4)] DispelGPyramid,\n        [ArmorGummi(\"Dispel-G (Cylinder)\", 1, 1, 1, 12, 10, 0, 4)] DispelGCylinder,\n        [ArmorGummi(\"Dispel-G (Half-Cylinder)\", 1, 1, 1, 12, 10, 0, 4)] DispelGHalfCylinder,\n        [ArmorGummi(\"Dispel-G (Quarter-Sphere)\", 1, 1, 1, 7, 6, 0, 4)] DispelGQuarterSphere,\n        [ArmorGummi(\"Dispel-G (Unproportional Cylinder)\", 1, 1, 1, 7, 6, 0, 4)] DispelGUnproportionalCylinder,\n        [ArmorGummi(\"Dispel-G (Half-Sphere)\", 1, 1, 1, 7, 6, 0, 4)] DispelGHalfSphere,\n        [WingGummi(\"Aerora-G (L)\", 1, 1, 2, 15, 30, 105, 40, 2)] AeroraGL,\n        [WingGummi(\"Aerora-G (R)\", 1, 1, 2, 15, 30, 105, 40, 2)] AeroraGR,\n        [WingGummi(\"Aeroga-G (L)\", 1, 1, 3, 12, 20, 110, 0, 3)] AerogaGL,\n        [WingGummi(\"Aeroga-G (R)\", 1, 1, 3, 12, 20, 110, 0, 3)] AerogaGR,\n        [WingGummi(\"Tornado-G (L)\", 2, 1, 2, 10, 10, 120, 0, 5)] TornadoGL,\n        [WingGummi(\"Tornado-G (R)\", 2, 1, 2, 10, 10, 120, 0, 5)] TornadoGR,\n        [WingGummi(\"Float-G (L)\", 1, 1, 3, 8, 10, 110, 0, 4)] FloatGL,\n        [WingGummi(\"Float-G (R)\", 1, 1, 3, 8, 10, 110, 0, 4)] FloatGR,\n        [WingGummi(\"Aero-G (L)\", 1, 1, 1, 5, 99, 98, 20, 1)] AeroGL,\n        [WingGummi(\"Aero-G (R)\", 1, 1, 1, 5, 99, 98, 20, 1)] AeroGR,\n        [WingGummi(\"Aero-G (Half-Triangle)\", 1, 1, 1, 5, 99, 98, 20, 1)] AeroGHalfTriangle,\n        [SpecialGummi(\"Drain-G (L)\", 4, 1, 1, 15, 4, 1, 500)] DrainGL,\n        [SpecialGummi(\"Drain-G (R)\", 4, 1, 1, 15, 4, 1, 500)] DrainGR,\n        [SpecialGummi(\"Osmose-G (L)\", 4, 1, 1, 15, 2, 1, 1000)] OsmoseGL,\n        [SpecialGummi(\"Osmose-G (R)\", 4, 1, 1, 15, 2, 1, 1000)] OsmoseGR,\n        [SpecialGummi(\"Transform-G\", 1, 1, 1, 10, 1, 1)] TransformG,\n        [SpecialGummi(\"Warp-G (You can't select this block in the editor normally)\", 1, 1, 1, 0, 1, 0)] WarpG,\n        [SpecialGummi(\"Scan-G (Uni-Directional)\", 1, 2, 1, 15, 2, 0, 250)] ScanG1,\n        [SpecialGummi(\"Scan-G (All-Directional)\", 1, 2, 1, 15, 2, 0, 500)] ScanG2,\n        [SpecialGummi(\"Haste-G\", 1, 1, 2, 30, 2, 0, 1000)] HasteG,\n        [SpecialGummi(\"Haste2-G\", 1, 1, 2, 30, 2, 0, 1500)] Haste2G,\n        [SpecialGummi(\"Shield-G\", 1, 1, 2, 10, 1, 0, 500)] ShieldG,\n        [SpecialGummi(\"Shield2-G\", 1, 1, 2, 10, 1, 0, 1500)] Shield2G,\n        [SpecialGummi(\"Ensuna-G (Circle)\", 1, 1, 1, 10, 6, 0, 400)] EnsunaGCircle,\n        [SpecialGummi(\"Ensuna-G (Square)\", 1, 1, 1, 10, 10, 0, 250)] EnsunaGSquare,\n        [WeaponGummi(\"Thunder-G\", 1, 1, 2, 25, 10, 50, 0, 500)] ThunderG,\n        [WeaponGummi(\"Thundara-G\", 1, 1, 2, 30, 8, 75, 0, 1000)] ThundaraG,\n        [WeaponGummi(\"Thundaga-G\", 1, 1, 3, 35, 6, 100, 0, 1500)] ThundagaG,\n        [WeaponGummi(\"Comet-G\", 1, 1, 2, 30, 8, 100, 0.1f, 500)] CometG,\n        [WeaponGummi(\"Meteor-G\", 1, 1, 2, 35, 6, 300, 0.1f, 1500)] MeteorG,\n        [WeaponGummi(\"Ultima-G\", 1, 1, 3, 40, 4, 1000, 0.1f, 2500)] UltimaG,\n\n\n        //Other Gummi items that aren't blocks\n        [ExtraGummi(\"Spray\", 1, 250, 0, \"Adds color to gummi blocks.\")] Spray,\n        [ExtraGummi(\"Pallete\", 1, 400, 0, \"Provides a variety of paint colors.\")] Pallete,\n        [ExtraGummi(\"Sys.UP1\", 1, 400, 0, \"Assembly area (8).\")] SysUP1,\n        [ExtraGummi(\"Sys.UP2\", 1, 750, 0, \"Assembly area (10).\")] SysUP2,\n        [ExtraGummi(\"Com. LV1\", 1, 0, 0, \"1 blueprint. 100 blocks. Power level 3.\")] ComLV1,\n        [ExtraGummi(\"Com. LV2\", 1, 500, 0, \"5 blueprints. 150 blocks. Power level 5.\")] ComLV2,\n        [ExtraGummi(\"Com. LV3\", 1, 1000, 0, \"10 blueprints. 200 blocks. Power level 8.\")] ComLV3,\n        [BlueprintGummi(\"Kingdom\", GameTypes.All)] Kingdom,\n        [BlueprintGummi(\"Hyperion\", GameTypes.All)] Hyperion,\n        [BlueprintGummi(\"Geppetto\", GameTypes.All)] Geppetto,\n        [BlueprintGummi(\"Cid\", GameTypes.All)] Cid,\n        [BlueprintGummi(\"Leon\", GameTypes.All)] Leon,\n        [BlueprintGummi(\"Yuffie\", GameTypes.All)] Yuffie,\n        [BlueprintGummi(\"Aerith\", GameTypes.All)] Aerith,\n        [BlueprintGummi(\"Cactuar\", GameTypes.All)] Cactuar,\n        [BlueprintGummi(\"Chocobo\", GameTypes.All)] Chocobo,\n        [BlueprintGummi(\"Cindy\", GameTypes.All)] Cindy,\n        [BlueprintGummi(\"Shiva\", GameTypes.All)] Shiva,\n        [BlueprintGummi(\"Lamia\", GameTypes.All)] Lamia,\n        [BlueprintGummi(\"Sandy\", GameTypes.All)] Sandy,\n        [BlueprintGummi(\"Sylph\", GameTypes.All)] Sylph,\n        [BlueprintGummi(\"Carbuncle\", GameTypes.All)] Carbuncle,\n        [BlueprintGummi(\"Mindy\", GameTypes.All)] Mindy,\n        Unknown58,\n        [BlueprintGummi(\"Bomb\", GameTypes.All)] Bomb,\n        [BlueprintGummi(\"Remora\", GameTypes.All)] Remora,\n        [BlueprintGummi(\"Ahriman\", GameTypes.All)] Ahriman,\n        [BlueprintGummi(\"Imp\", GameTypes.All)] Imp,\n        [BlueprintGummi(\"Siren\", GameTypes.All)] Siren,\n        [BlueprintGummi(\"Stingray\", GameTypes.All)] Stingray,\n        Unknown5f,\n        [BlueprintGummi(\"Adamant\", GameTypes.All)] Adamant,\n        Unknown61,\n        [BlueprintGummi(\"Ifrit\", GameTypes.All)] Ifrit,\n        Unknown63,\n        Unknown64,\n        Unknown65,\n        Unknown66,\n        [BlueprintGummi(\"Deathguise\", GameTypes.All)] Deathguise\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Types/PlayableCharacterType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib1.Types\n{\n    public enum PlayableCharacterType : byte\n    {\n        [Info] Sora,\n        [Info] Donald,\n        [Info] Goofy,\n        [Info] Tarzan,\n        [Info(\"Pooh (not playable)\")] Pooh,\n        [Info] Aladdin,\n        [Info] Ariel,\n        [Info] Jack,\n        [Info(\"Peter Pan\")] PeterPan,\n        [Info] Beast,\n        [Info] Empty = 0xFF\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib1/Types/WorldType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib1.Types\n{\n    public enum WorldType : uint\n    {\n        [Info(\"Dive into the Heart\")] DiveIntoHeart = 0x00,\n        [Info(\"Destiny Island\")] DestinyIsland = 0x01,\n        [Info(\"Disney Castle\")] DisneyCastle = 0x02,\n        [Info(\"Traverse Town\")] TraverseTown = 0x03,\n        [Info(\"Wonderland\")] Wonderland = 0x04,\n        [Info(\"Deep Jungle\")] DeepJungle = 0x05,\n        [Info(\"100 Acre Wood\")] HundredAcreWood = 0x06,\n        [Unused] Crash07 = 0x07,\n        [Info(\"Agrabah\")] Agrahbah = 0x08,\n        [Info(\"Atlantica\")] Atlantica = 0x09,\n        [Info(\"Halloween Town\")] HalloweenTown = 0x0a,\n        [Info(\"Olympus Coliseum\")] OlympusColiseum = 0x0b,\n        [Info(\"Monstro\")] Monstro = 0x0c,\n        [Info(\"Neverland\")] Neverland = 0x0d,\n        [Unused] Crash0e = 0x0e,\n        [Info(\"Hollow Bastion\")] HollowBastion = 0x0f,\n        [Info(\"End of the world\")] Endoftheworld = 0x10,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Constants.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib2.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace KHSave.Lib2\n{\n    public class Constants\n    {\n        public const uint MagicCodeJp = 0x4a32484b;\n        public const uint MagicCodeUs = 0x5532484b;\n        public const uint MagicCodeEu = 0x4532484b;\n\n        public const int WorldCount = 19;\n        public static readonly string[] WorldNames = Enum\n            .GetValues(typeof(WorldType))\n            .Cast<WorldType>()\n            .Select(x => InfoAttribute.GetInfo(x))\n            .ToArray();\n\n        public static readonly Dictionary<int, string> Progress = new Dictionary<int, string>()\n        {\n            [0x0000] = \"ZZ_START\",\n            [0x0001] = \"ZZ_E_003_A17_IN\",\n            [0x0002] = \"ZZ_E_005_A10_IN\",\n            [0x0003] = \"ZZ_E_009_END\",\n            [0x0004] = \"ZZ_E_010_END\",\n            [0x0005] = \"ZZ_E_012_END\",\n            [0x0006] = \"ZZ_E_013_END\",\n            [0x0007] = \"ZZ_E_014_END\",\n            [0x0008] = \"ZZ_E_015_END\",\n            [0x0009] = \"ZZ_E_018_END\",\n            [0x000A] = \"ZZ_E_021_END\",\n            [0x000B] = \"ZZ_S_BTL_SEIFER\",\n            [0x000C] = \"ZZ_START2\",\n            [0x000D] = \"ZZ_SCENARIO_1_OPEN\",\n            [0x000E] = \"ZZ_SCENARIO_1_START\",\n            [0x000F] = \"ZZ_ALL_WORLD_LV99\",\n            [0x0010] = \"ZZ_NEW_MICKEY_COME\",\n            [0x0011] = \"ZZ_ALL_WORLD_LV60\",\n            [0x0403] = \"ES_999_END\",\n            [0x0404] = \"ES_EH_eh21_ms107\",\n            [0x0405] = \"ES_995_END\",\n            [0x0406] = \"ES_996_END\",\n            [0x0407] = \"ES_997_END\",\n            [0x0408] = \"ES_998_END\",\n            [0x0409] = \"ES_FM_URA_MOVIE\",\n            [0x040A] = \"ES_FM_URA_MOVIE_COMP\",\n            [0x0800] = \"TT_START_1\",\n            [0x0814] = \"TT_INIT\",\n            [0x0815] = \"TT_SCENARIO_1_OPEN\",\n            [0x0816] = \"TT_MOVIE_101_END_L\",\n            [0x0817] = \"TT_SCENARIO_1_START\",\n            [0x0818] = \"TT_101_END_L\",\n            [0x0819] = \"TT_102_END_L\",\n            [0x081A] = \"TT_103_END_L\",\n            [0x081B] = \"TT_104_END_L\",\n            [0x081C] = \"TT_105_END_L\",\n            [0x081D] = \"TT_106_END_L\",\n            [0x081E] = \"TT_107_END_L\",\n            [0x081F] = \"TT_108_END_L\",\n            [0x0820] = \"TT_109_END_L\",\n            [0x0821] = \"TT_110_END_L\",\n            [0x0822] = \"TT_111_END_L\",\n            [0x0823] = \"TT_112_END_L\",\n            [0x0824] = \"TT_113_END_L\",\n            [0x0825] = \"TT_114_END\",\n            [0x0826] = \"TT_115_END_L\",\n            [0x0827] = \"TT_116_END_L\",\n            [0x0828] = \"TT_117_END_L\",\n            [0x0829] = \"TT_118_END_L\",\n            [0x082A] = \"TT_119_END_L\",\n            [0x082B] = \"TT_SCENARIO_1_END\",\n            [0x082C] = \"TT_MOVIE_201_END_L\",\n            [0x082D] = \"TT_SCENARIO_2_OPEN\",\n            [0x082E] = \"TT_201_END_L\",\n            [0x082F] = \"TT_SCENARIO_2_START\",\n            [0x0830] = \"TT_202_END_L\",\n            [0x0831] = \"TT_203_END_L\",\n            [0x0832] = \"TT_204_END_L\",\n            [0x0833] = \"TT_205_END\",\n            [0x0834] = \"TT_206_END\",\n            [0x0835] = \"TT_207_END_L\",\n            [0x0836] = \"TT_208_END\",\n            [0x0837] = \"TT_209_END\",\n            [0x0838] = \"TT_210_END_L\",\n            [0x0839] = \"TT_211_END_L\",\n            [0x083A] = \"TT_SCENARIO_2_END\",\n            [0x083B] = \"TT_MOVIE_301_END_L\",\n            [0x083C] = \"TT_SCENARIO_3_OPEN\",\n            [0x083D] = \"TT_301_END_L\",\n            [0x083E] = \"TT_SCENARIO_3_START\",\n            [0x083F] = \"TT_302_END_L\",\n            [0x0840] = \"TT_303_END_L\",\n            [0x0841] = \"TT_304_END_L\",\n            [0x0842] = \"TT_305_END\",\n            [0x0843] = \"TT_306_END\",\n            [0x0844] = \"TT_307_END\",\n            [0x0845] = \"TT_308_END_L\",\n            [0x0846] = \"TT_309_END_L\",\n            [0x0847] = \"TT_310_END_L\",\n            [0x0848] = \"TT_311_END\",\n            [0x0849] = \"TT_312_END_L\",\n            [0x084A] = \"TT_313_END_L\",\n            [0x084B] = \"TT_314_END\",\n            [0x084C] = \"TT_315_END_L\",\n            [0x084D] = \"TT_316_END_L\",\n            [0x084E] = \"TT_317_END_L\",\n            [0x084F] = \"TT_318_END_L\",\n            [0x0850] = \"TT_319_END_L\",\n            [0x0851] = \"TT_SCENARIO_3_END\",\n            [0x0852] = \"TT_MOVIE_401_END_L\",\n            [0x0853] = \"TT_SCENARIO_4_OPEN\",\n            [0x0854] = \"TT_401_END_L\",\n            [0x0855] = \"TT_SCENARIO_4_START\",\n            [0x0856] = \"TT_402_END\",\n            [0x0857] = \"TT_403_END\",\n            [0x0858] = \"TT_404_END\",\n            [0x0859] = \"TT_405_END\",\n            [0x085A] = \"TT_406_LOSE_L\",\n            [0x085B] = \"TT_406_END_L\",\n            [0x085C] = \"TT_407_END\",\n            [0x085D] = \"TT_408_LOSE_L\",\n            [0x085E] = \"TT_408_END_L\",\n            [0x085F] = \"TT_409_END_L\",\n            [0x0860] = \"TT_410_END_L\",\n            [0x0861] = \"TT_411_END\",\n            [0x0862] = \"TT_412_END_L\",\n            [0x0863] = \"TT_413_END_L\",\n            [0x0864] = \"TT_414_END_L\",\n            [0x0865] = \"TT_415_END_L\",\n            [0x0866] = \"TT_SCENARIO_4_END\",\n            [0x0867] = \"TT_501_END_L\",\n            [0x0868] = \"TT_SCENARIO_5_OPEN\",\n            [0x0869] = \"TT_502_END_L\",\n            [0x086A] = \"TT_SCENARIO_5_START\",\n            [0x086B] = \"TT_503_END\",\n            [0x086C] = \"TT_504_END_L\",\n            [0x086D] = \"TT_505_END_L\",\n            [0x086E] = \"TT_MISTERY_A_END\",\n            [0x086F] = \"TT_MISTERY_B_END\",\n            [0x0870] = \"TT_MISTERY_C_END\",\n            [0x0871] = \"TT_MISTERY_D_END\",\n            [0x0872] = \"TT_506_END_L\",\n            [0x0873] = \"TT_507_END\",\n            [0x0874] = \"TT_508_END_L\",\n            [0x0875] = \"TT_509_END_L\",\n            [0x0876] = \"TT_510_END\",\n            [0x0877] = \"TT_511_END_L\",\n            [0x0878] = \"TT_512_END_L\",\n            [0x0879] = \"TT_513_END_L\",\n            [0x087A] = \"TT_514_END\",\n            [0x087B] = \"TT_515_END_L\",\n            [0x087C] = \"TT_SCENARIO_5_END\",\n            [0x087D] = \"TT_MOVIE_601_END_L\",\n            [0x087E] = \"TT_SCENARIO_6_OPEN\",\n            [0x087F] = \"TT_601_END_L\",\n            [0x0880] = \"TT_602_END_L\",\n            [0x0881] = \"TT_603_END\",\n            [0x0882] = \"TT_604_END_L\",\n            [0x0883] = \"TT_605_END\",\n            [0x0884] = \"TT_606_END\",\n            [0x0885] = \"TT_607_END\",\n            [0x0886] = \"TT_608_END_L\",\n            [0x0887] = \"TT_609_END\",\n            [0x0888] = \"TT_610_END\",\n            [0x0889] = \"TT_611_END_L\",\n            [0x088A] = \"TT_612_END\",\n            [0x088B] = \"TT_613_END_L\",\n            [0x088C] = \"TT_614_END_L\",\n            [0x088D] = \"TT_615_END_L\",\n            [0x088E] = \"TT_615_OUT\",\n            [0x088F] = \"TT_616_END\",\n            [0x0890] = \"TT_617_END\",\n            [0x0891] = \"TT_618_END\",\n            [0x0892] = \"TT_SCENARIO_6_END\",\n            [0x0893] = \"TT_701_END_L\",\n            [0x0894] = \"TT_SCENARIO_7_OPEN\",\n            [0x0895] = \"TT_702_END_L\",\n            [0x0896] = \"TT_SCENARIO_7_START\",\n            [0x0898] = \"TT_704_END\",\n            [0x0899] = \"TT_705_END\",\n            [0x089A] = \"TT_706_END\",\n            [0x089B] = \"TT_707_END_L\",\n            [0x089C] = \"TT_708_END_L\",\n            [0x089D] = \"TT_709_END\",\n            [0x089E] = \"TT_710_END\",\n            [0x089F] = \"TT_711_END_L\",\n            [0x08A0] = \"TT_SCENARIO_7_END\",\n            [0x08A1] = \"TT_801_END_L\",\n            [0x08A2] = \"TT_SCENARIO_8_OPEN\",\n            [0x08A3] = \"TT_802_END\",\n            [0x08A4] = \"TT_803_END_L\",\n            [0x08A5] = \"TT_MS802_CLEAR_L\",\n            [0x08A6] = \"TT_804_END_L\",\n            [0x08A7] = \"TT_805_END\",\n            [0x08A8] = \"TT_806_END\",\n            [0x08A9] = \"TT_807_END\",\n            [0x08AA] = \"TT_808_END\",\n            [0x08AB] = \"TT_809_END\",\n            [0x08AC] = \"TT_810_END_L\",\n            [0x08AD] = \"TT_SCENARIO_8_END\",\n            [0x08AE] = \"TT_901_END_L\",\n            [0x08AF] = \"TT_SCENARIO_9_OPEN\",\n            [0x08B0] = \"TT_902_END_L\",\n            [0x08B1] = \"TT_SCENARIO_9_START\",\n            [0x08B3] = \"TT_903_END\",\n            [0x08B4] = \"TT_904_END_L\",\n            [0x08B6] = \"TT_905_END\",\n            [0x08B7] = \"TT_906_END_L\",\n            [0x08B8] = \"TT_907_END_L\",\n            [0x08B9] = \"TT_SCENARIO_9_END\",\n            [0x08BA] = \"TT_001_END_L\",\n            [0x08BB] = \"TT_SCENARIO_10_OPEN\",\n            [0x08BC] = \"TT_002_END\",\n            [0x08BD] = \"TT_003_END_L\",\n            [0x08BF] = \"TT_004_END\",\n            [0x08C0] = \"TT_005_END\",\n            [0x08C1] = \"TT_006_END\",\n            [0x08C2] = \"TT_007_END\",\n            [0x08C3] = \"TT_008_END_L\",\n            [0x08C6] = \"TT_009_END\",\n            [0x08C7] = \"TT_010_END\",\n            [0x08C8] = \"TT_011_END_L\",\n            [0x08C9] = \"TT_012_END_L\",\n            [0x08CA] = \"TT_013_END\",\n            [0x08CB] = \"TT_SCENARIO_10_END\",\n            [0x08CC] = \"TT_tt20_ms603_end_l\",\n            [0x08CD] = \"TT_908_END_L\",\n            [0x08CE] = \"TT_ROXAS2_START\",\n            [0x08CF] = \"TT_ROXAS2_END Let Roxas to equip two keyblades\",\n            [0x08D0] = \"TT_ROXAS_END\",\n            [0x08D1] = \"TT_SORA_OLD_END Use KH1 Sora\",\n            [0x08D2] = \"TT_tt06_work_letter_END\",\n            [0x08D3] = \"TT_tt06_work_baggage_END\",\n            [0x08D4] = \"TT_FM_KINOKO_LAR_PLAYED\",\n            [0x08D5] = \"TT_tt07_work_poster_END\",\n            [0x08D6] = \"TT_tt07_work_cook_END\",\n            [0x08D7] = \"TT_FM_KINOKO_AXE_PLAYED\",\n            [0x08D8] = \"TT_tt07_work_clean_END\",\n            [0x08D9] = \"TT_tt07_work_worm_END\",\n            [0x08DA] = \"TT_tt06_work_perform_END\",\n            [0x08DB] = \"TT_ROXAS_START\",\n            [0x08DC] = \"TT_FM_AXE_RE_CLEAR\",\n            [0x08DD] = \"TT_206_END_work01\",\n            [0x08DE] = \"TT_FM_091_END\",\n            [0x08DF] = \"TT_206_END_work03\",\n            [0x08E0] = \"TT_206_END_work02_01\",\n            [0x08E1] = \"TT_206_END_work02_02\",\n            [0x08E2] = \"TT_206_END_work02_03\",\n            [0x08E3] = \"TT_MIX_SHOP_OPEN\",\n            [0x08E4] = \"TT_MISTERY_A_LOSE\",\n            [0x08E5] = \"TT_MISTERY_B_LOSE\",\n            [0x08E6] = \"TT_MISTERY_C_LOSE\",\n            [0x08E7] = \"TT_MISTERY_D_LOSE\",\n            [0x08E9] = \"TT_STRUGGLE_ON2\",\n            [0x08EA] = \"TT_STRUGGLE_ON3\",\n            [0x08EB] = \"TT_702_OUT\",\n            [0x08EC] = \"TT_START_01\",\n            [0x08ED] = \"TT_START_02\",\n            [0x08EE] = \"TT_SCENARIO_10_START\",\n            [0x08EF] = \"TT_PLAY_STRUGGLE_01\",\n            [0x08F0] = \"TT_PLAY_STRUGGLE_02\",\n            [0x08F1] = \"TT_PLAY_STRUGGLE_03\",\n            [0x08F2] = \"TT_TT21_REAL\",\n            [0x08F3] = \"TT_TT21_FAKE\",\n            [0x08F4] = \"TT_FM_COM_OBJ_OFF\",\n            [0x08F5] = \"TT_FM_KINOKO_SAI_PLAYED\",\n            [0x08F6] = \"TT_STRUGGLE_ON\",\n            [0x08F7] = \"TT_BATTLE2_OPEN\",\n            [0x08F8] = \"TT_113_IN\",\n            [0x08F9] = \"TT_TT29_OUT\",\n            [0x08FA] = \"TT_TT30_OUT\",\n            [0x08FB] = \"TT_REAL_TT_EVENT\",\n            [0x08FC] = \"TT_REAL_TT_FREE\",\n            [0x08FD] = \"TT_FAKE_TT_EVENT\",\n            [0x08FE] = \"TT_FAKE_TT_FREE\",\n            [0x08FF] = \"TT_MISTERY_C_OUT\",\n            [0x0C00] = \"DI_START\",\n            [0x0C01] = \"DI_555_END\",\n            [0x1000] = \"HB_START\",\n            [0x1001] = \"HB_101_END\",\n            [0x1002] = \"HB_102_END\",\n            [0x1003] = \"HB_103_END\",\n            [0x1004] = \"HB_104_END\",\n            [0x1006] = \"HB_106_END\",\n            [0x1007] = \"HB_107_END\",\n            [0x1009] = \"HB_START1_2\",\n            [0x100A] = \"HB_201_END\",\n            [0x100B] = \"HB_202_END\",\n            [0x100C] = \"HB_203_END\",\n            [0x100D] = \"HB_204_END\",\n            [0x100E] = \"HB_205_END\",\n            [0x100F] = \"HB_206_END\",\n            [0x1010] = \"HB_207_END\",\n            [0x1011] = \"HB_208_END\",\n            [0x1012] = \"HB_209_END\",\n            [0x1013] = \"HB_tr_107_END\",\n            [0x1014] = \"HB_301_END\",\n            [0x1015] = \"HB_302_END\",\n            [0x1016] = \"HB_303_END\",\n            [0x1017] = \"HB_304_END\",\n            [0x1018] = \"HB_tr_117_END\",\n            [0x1019] = \"HB_401_END\",\n            [0x101A] = \"HB_402_END\",\n            [0x101C] = \"HB_404_END\",\n            [0x101E] = \"HB_406_END\",\n            [0x101F] = \"HB_407_END\",\n            [0x1021] = \"HB_409_END\",\n            [0x1022] = \"HB_410_END\",\n            [0x1023] = \"HB_411_END\",\n            [0x1026] = \"HB_413_END\",\n            [0x1027] = \"HB_414_END\",\n            [0x1028] = \"HB_415_END\",\n            [0x1029] = \"HB_416_END\",\n            [0x102B] = \"HB_418_END\",\n            [0x102C] = \"HB_START2\",\n            [0x102D] = \"HB_START_wi_dc\",\n            [0x102E] = \"HB_801_END\",\n            [0x102F] = \"HB_dc_108_END\",\n            [0x1030] = \"HB_802_END\",\n            [0x1031] = \"HB_START_pooh\",\n            [0x1032] = \"HB_901_END\",\n            [0x1033] = \"HB_902_END\",\n            [0x1034] = \"HB_po_004_END\",\n            [0x1035] = \"HB_903_END\",\n            [0x1036] = \"HB_904_END\",\n            [0x1038] = \"HB_905_END\",\n            [0x1039] = \"HB_po_008_END\",\n            [0x103B] = \"HB_907_END\",\n            [0x103C] = \"HB_hb09_ms101\",\n            [0x103D] = \"HB_hb08_ms102\",\n            [0x1040] = \"HB_hb04_ms403\",\n            [0x1043] = \"HB_hb09_ms901\",\n            [0x1045] = \"HB_210_END\",\n            [0x1046] = \"HB_HB_EVENT_403\",\n            [0x1047] = \"HB_hb16_ms404a\",\n            [0x1048] = \"HB_hb16_ms404b\",\n            [0x1049] = \"HB_hb16_ms404c\",\n            [0x104A] = \"HB_hb16_ms404d\",\n            [0x104B] = \"HB_417_END\",\n            [0x104C] = \"HB_508_END\",\n            [0x104D] = \"HB_TR_202_END\",\n            [0x104E] = \"HB_501_END\",\n            [0x1051] = \"HB_TR_tr04_ms202\",\n            [0x1052] = \"HB_503_END\",\n            [0x1053] = \"HB_TR_tr09_ms205\",\n            [0x1054] = \"HB_504_END\",\n            [0x1055] = \"HB_505_END\",\n            [0x1056] = \"HB_506_END\",\n            [0x105A] = \"HB_hb17_ms405\",\n            [0x105B] = \"HB_INIT\",\n            [0x105C] = \"HB_SCENARIO_1_OPEN\",\n            [0x105D] = \"HB_SCENARIO_1_START\",\n            [0x105E] = \"HB_SCENARIO_1_END\",\n            [0x105F] = \"HB_SCENARIO_2_OPEN\",\n            [0x1060] = \"HB_SCENARIO_2_START\",\n            [0x1061] = \"HB_SCENARIO_2_END\",\n            [0x1062] = \"HB_SCENARIO_5_OPEN\",\n            [0x1063] = \"HB_SCENARIO_5_START\",\n            [0x1064] = \"HB_509_END\",\n            [0x1065] = \"HB_hb09_ms501\",\n            [0x1066] = \"HB_511_END\",\n            [0x1068] = \"HB_513_END\",\n            [0x1069] = \"HB_514_END\",\n            [0x106B] = \"HB_516_END\",\n            [0x106C] = \"HB_517_END\",\n            [0x106D] = \"HB_518_END\",\n            [0x106E] = \"HB_519_END\",\n            [0x106F] = \"HB_520_END\",\n            [0x1070] = \"HB_dc_END\",\n            [0x1071] = \"HB_SCENARIO_3_OPEN\",\n            [0x1072] = \"HB_SCENARIO_3_START\",\n            [0x1073] = \"HB_SCENARIO_3_END\",\n            [0x1074] = \"HB_SCENARIO_4_OPEN\",\n            [0x1075] = \"HB_SCENARIO_4_START\",\n            [0x1076] = \"HB_SCENARIO_4_END\",\n            [0x1077] = \"HB_SCENARIO_5_END\",\n            [0x1078] = \"HB_109_END\",\n            [0x1079] = \"HB_110_END\",\n            [0x107A] = \"HB_hb18_ms402\",\n            [0x107B] = \"HB_419_END\",\n            [0x107C] = \"HB_601_END\",\n            [0x107D] = \"HB_hb01_ms601\",\n            [0x107E] = \"HB_604_ON\",\n            [0x107F] = \"HB_607_END\",\n            [0x1080] = \"HB_605_END\",\n            [0x1081] = \"HB_421_END\",\n            [0x1082] = \"HB_422_END\",\n            [0x1083] = \"HB_NEW_MICKEY_START\",\n            [0x1084] = \"HB_POOH_CLEAR\",\n            [0x1086] = \"HB_hb20_ms401\",\n            [0x1087] = \"HB_202_ON\",\n            [0x1088] = \"HB_203_ON\",\n            [0x108A] = \"HB_hb_event_502\",\n            [0x108B] = \"HB_hb_event_507\",\n            [0x108C] = \"HB_RTN_ON\",\n            [0x108D] = \"HB_TRON_OUT\",\n            [0x108E] = \"HB_TRON_IN\",\n            [0x108F] = \"HB_TR05_HIDDEN_ON\",\n            [0x1090] = \"HB_TR05_HIDDEN_OFF\",\n            [0x1091] = \"HB_TR08_HIDDEN_ON\",\n            [0x1092] = \"HB_TR08_HIDDEN_OFF\",\n            [0x1095] = \"HB_hb_event_512\",\n            [0x1096] = \"HB_hb_event_515\",\n            [0x1097] = \"HB_RTN_ON_OFF\",\n            [0x1098] = \"HB_420_END\",\n            [0x1099] = \"HB_607_OUT\",\n            [0x109A] = \"HB_CLOUD_ON\",\n            [0x109B] = \"HB_FM_COM_VEX_END\",\n            [0x109C] = \"HB_FM_COM_LEX_END\",\n            [0x109D] = \"HB_FM_COM_LAR_END\",\n            [0x109E] = \"HB_FM_COM_ZEX_END\",\n            [0x109F] = \"HB_FM_COM_MAR_END\",\n            [0x10A1] = \"HB_ROXAS_KINOKO_ON\",\n            [0x10A3] = \"HB_FM_711_END\",\n            [0x10A4] = \"HB_FM_MAP1_ROCK_OFF\",\n            [0x10A5] = \"HB_FM_TSUURO1_CLEAR\",\n            [0x10A7] = \"HB_FM_TSUURO2_CLEAR\",\n            [0x10A8] = \"HB_FM_13TSUURO_READY\",\n            [0x10A9] = \"HB_FM_712_END\",\n            [0x10AA] = \"HB_FM_13TSUURO1_CLEAR\",\n            [0x10AB] = \"HB_FM_13TSUURO2_CLEAR\",\n            [0x10AC] = \"HB_FM_13TSUURO3_CLEAR\",\n            [0x10B0] = \"HB_FM_VEX_RE_CLEAR\",\n            [0x10B1] = \"HB_FM_LEX_RE_CLEAR\",\n            [0x10B2] = \"HB_FM_ZEX_RE_CLEAR\",\n            [0x10B5] = \"HB_FM_DEM_RE_CLEAR\",\n            [0x10B7] = \"HB_FM_MAR_RE_CLEAR\",\n            [0x10B8] = \"HB_FM_LAR_RE_CLEAR\",\n            [0x10BA] = \"HB_FM_13TSUURO_OUT\",\n            [0x10BB] = \"HB_FM_713_END\",\n            [0x10BC] = \"HB_FM_714_END\",\n            [0x10BD] = \"HB_ROXAS_KINOKO_CLEAR\",\n            [0x10BE] = \"HB_FM_13TSUURO1_CLEAR_OUT\",\n            [0x10BF] = \"HB_FM_13TSUURO2_CLEAR_OUT\",\n            [0x10C0] = \"HB_FM_TSUURO1_CLEAR_EXIT\",\n            [0x10C1] = \"HB_FM_TSUURO2_CLEAR_EXIT\",\n            [0x10C2] = \"HB_FM_13RE_COMPLETE\",\n            [0x10C3] = \"HB_FM_KINOKO_DEM_PLAYED\",\n            [0x10C4] = \"HB_FM_KINOKO_ROX_PLAYED\",\n            [0x1400] = \"BB_START\",\n            [0x1401] = \"BB_101_END\",\n            [0x1402] = \"BB_102_END\",\n            [0x1405] = \"BB_bb05_ms104a\",\n            [0x1406] = \"BB_bb05_ms104b\",\n            [0x1407] = \"BB_124_END\",\n            [0x1408] = \"BB_108_END\",\n            [0x1409] = \"BB_104_END\",\n            [0x140A] = \"BB_bb15_ms203\",\n            [0x140B] = \"BB_INIT\",\n            [0x140C] = \"BB_SCENARIO_1_OPEN\",\n            [0x140D] = \"BB_SCENARIO_1_START\",\n            [0x140E] = \"BB_114_END\",\n            [0x140F] = \"BB_SCENARIO_1_END\",\n            [0x1410] = \"BB_SCENARIO_2_OPEN\",\n            [0x1411] = \"BB_SCENARIO_2_START\",\n            [0x1412] = \"BB_SCENARIO_2_END\",\n            [0x1415] = \"BB_119_END\",\n            [0x1418] = \"BB_START2\",\n            [0x1419] = \"BB_201_END\",\n            [0x141C] = \"BB_204_END\",\n            [0x141D] = \"BB_205_END\",\n            [0x141F] = \"BB_207_END\",\n            [0x1421] = \"BB_208_OUT\",\n            [0x1422] = \"BB_210_END\",\n            [0x1424] = \"BB_FM_COM_OBJ_OFF\",\n            [0x1425] = \"BB_213_END\",\n            [0x1426] = \"BB_214_END\",\n            [0x1427] = \"BB_FM_XAL_RE_CLEAR\",\n            [0x1428] = \"BB_216_END\",\n            [0x1429] = \"BB_bb01_ms101\",\n            [0x142A] = \"BB_bb11_ms102\",\n            [0x142B] = \"BB_bb03_ms103\",\n            [0x142D] = \"BB_FM_KINOKO_XAL_PLAYED\",\n            [0x1432] = \"BB_105_END\",\n            [0x1433] = \"BB_106_END\",\n            [0x1434] = \"BB_107_END\",\n            [0x1436] = \"BB_110_END\",\n            [0x1437] = \"BB_111_END\",\n            [0x1438] = \"BB_112_END\",\n            [0x1439] = \"BB_113_END\",\n            [0x143B] = \"BB_116_END\",\n            [0x143C] = \"BB_117_END\",\n            [0x143D] = \"BB_118_END\",\n            [0x1443] = \"BB_202_END\",\n            [0x1447] = \"BB_208_END\",\n            [0x1448] = \"BB_209_END\",\n            [0x144A] = \"BB_212_END\",\n            [0x144E] = \"BB_111_OUT\",\n            [0x144F] = \"BB_bb04_ms201\",\n            [0x1450] = \"BB_bb00_ms202\",\n            [0x1452] = \"BB_107_OUT\",\n            [0x1453] = \"BB_113_OUT\",\n            [0x1454] = \"BB_117_OUT\",\n            [0x1455] = \"BB_bb00_ms202_OUT\",\n            [0x1800] = \"HE_START\",\n            [0x1801] = \"HE_101_END\",\n            [0x1804] = \"HE_104_END\",\n            [0x1806] = \"HE_HE_EvEMT_106\",\n            [0x1807] = \"HE_START2A\",\n            [0x1808] = \"HE_108_END\",\n            [0x1809] = \"HE_START2B\",\n            [0x180E] = \"HE_HE_EvENT_114\",\n            [0x180F] = \"HE_115_END\",\n            [0x1811] = \"HE_117_END\",\n            [0x1813] = \"HE_HE_EvENT_119\",\n            [0x1814] = \"HE_120_END\",\n            [0x1816] = \"HE_122_END\",\n            [0x1817] = \"HE_he00_ms104a\",\n            [0x1818] = \"HE_123_END\",\n            [0x1819] = \"HE_ms104a_FAILED\",\n            [0x181A] = \"HE_he00_ms104b\",\n            [0x181B] = \"HE_ms104b_FAILED\",\n            [0x181C] = \"HE_HE_EvENT_127\",\n            [0x181D] = \"HE_INIT\",\n            [0x181E] = \"HE_129_END\",\n            [0x181F] = \"HE_SCENARIO_1_OPEN\",\n            [0x1820] = \"HE_SCENARIO_1_START\",\n            [0x1821] = \"HE_132_END\",\n            [0x1822] = \"HE_SCENARIO_1_END\",\n            [0x1823] = \"HE_SCENARIO_2_OPEN\",\n            [0x1824] = \"HE_135_END\",\n            [0x1825] = \"HE_SCENARIO_2_START\",\n            [0x1826] = \"HE_SCENARIO_2_END\",\n            [0x1827] = \"HE_138_END\",\n            [0x1829] = \"HE_W_COL_ON\",\n            [0x182F] = \"HE_he18_ms108\",\n            [0x1831] = \"HE_205_END\",\n            [0x1833] = \"HE_HE_EVENT_102\",\n            [0x1834] = \"HE_HE_EVENT_118\",\n            [0x1835] = \"HE_HE_EVENT_216\",\n            [0x1836] = \"HE_NO_AURON01_START\",\n            [0x1837] = \"HE_NO_AURON01_END\",\n            [0x1838] = \"HE_HE_EvENT_210\",\n            [0x1839] = \"HE_211_END\",\n            [0x183A] = \"HE_NO_AURON02_START\",\n            [0x183B] = \"HE_213_END\",\n            [0x183C] = \"HE_NO_AURON02_END\",\n            [0x183D] = \"HE_214_END\",\n            [0x183E] = \"HE_he_colosseum_1_CLEAR\",\n            [0x1840] = \"HE_he_colosseum_2_CLEAR\",\n            [0x1841] = \"HE_he_colosseum_3_CLEAR\",\n            [0x1843] = \"HE_103_END\",\n            [0x1844] = \"HE_he_colosseum_4_CLEAR\",\n            [0x1845] = \"HE_105_END\",\n            [0x1846] = \"HE_107_END\",\n            [0x1847] = \"HE_he_colosseum_5_CLEAR\",\n            [0x1848] = \"HE_109_END\",\n            [0x1849] = \"HE_he06_ms101\",\n            [0x184A] = \"HE_112_END\",\n            [0x184B] = \"HE_he05_ms102\",\n            [0x184C] = \"HE_113_END\",\n            [0x184D] = \"HE_he_colosseum_6_CLEAR\",\n            [0x184E] = \"HE_he07_ms103\",\n            [0x184F] = \"HE_he_colosseum_7_CLEAR\",\n            [0x1851] = \"HE_he_colosseum_8_CLEAR\",\n            [0x1852] = \"HE_121_END\",\n            [0x1853] = \"HE_he19_ms204\",\n            [0x1854] = \"HE_140_END\",\n            [0x1855] = \"HE_he19_ms205\",\n            [0x1857] = \"HE_125_END\",\n            [0x1858] = \"HE_126_END\",\n            [0x1859] = \"HE_128_END\",\n            [0x185B] = \"HE_he17_ms105\",\n            [0x185C] = \"HE_131_END\",\n            [0x185E] = \"HE_he08_ms106\",\n            [0x185F] = \"HE_134_END\",\n            [0x1861] = \"HE_he08_ms107\",\n            [0x1862] = \"HE_137_END\",\n            [0x1865] = \"HE_201_END\",\n            [0x1866] = \"HE_201202_END\",\n            [0x1867] = \"HE_202_END\",\n            [0x186D] = \"HE_207_END\",\n            [0x186E] = \"HE_208_END\",\n            [0x186F] = \"HE_209_END\",\n            [0x1872] = \"HE_HADES_ON\",\n            [0x1873] = \"HE_125_OUT\",\n            [0x1874] = \"HE_125_In\",\n            [0x1875] = \"HE_FM_COM_OBJ_OFF\",\n            [0x1876] = \"HE_FM_KINOKO_ZEX_PLAYED\",\n            [0x1877] = \"HE_217_END\",\n            [0x1878] = \"HE_he09_ms201\",\n            [0x1879] = \"HE_he09_ms202\",\n            [0x187A] = \"HE_he06_ms203\",\n            [0x187D] = \"HE_203_END\",\n            [0x187E] = \"HE_204_LOSE\",\n            [0x187F] = \"HE_206_LOSE\",\n            [0x1C00] = \"AL_START\",\n            [0x1C01] = \"AL_CARPET_01_JUMP\",\n            [0x1C02] = \"AL_102_END_L\",\n            [0x1C03] = \"AL_CARPET_01_END\",\n            [0x1C04] = \"AL_CARPET_02_END_L\",\n            [0x1C05] = \"AL_CARPET_03_JUMP\",\n            [0x1C06] = \"AL_106_END\",\n            [0x1C07] = \"AL_CARPET_03_END\",\n            [0x1C09] = \"AL_109_END\",\n            [0x1C0A] = \"AL_CARPET_04_JUMP\",\n            [0x1C0B] = \"AL_CARPET_04_END\",\n            [0x1C0C] = \"AL_110_END\",\n            [0x1C0D] = \"AL_CARPET_05_END_L\",\n            [0x1C12] = \"AL_115_END_L\",\n            [0x1C13] = \"AL_116_END\",\n            [0x1C14] = \"AL_117_END\",\n            [0x1C15] = \"AL_START2\",\n            [0x1C16] = \"AL_201_END\",\n            [0x1C19] = \"AL_INIT\",\n            [0x1C1A] = \"AL_SCENARIO_1_OPEN\",\n            [0x1C1B] = \"AL_SCENARIO_1_START\",\n            [0x1C1C] = \"AL_SCENARIO_1_END\",\n            [0x1C1D] = \"AL_SCENARIO_2_OPEN\",\n            [0x1C1E] = \"AL_SCENARIO_2_START\",\n            [0x1C1F] = \"AL_207_END\",\n            [0x1C20] = \"AL_SCENARIO_2_END\",\n            [0x1C21] = \"AL_ESCAPE_END_L\",\n            [0x1C22] = \"AL_111_END_L\",\n            [0x1C23] = \"AL_101_END\",\n            [0x1C24] = \"AL_103_END\",\n            [0x1C25] = \"AL_104_END\",\n            [0x1C26] = \"AL_105_END\",\n            [0x1C27] = \"AL_107_END\",\n            [0x1C28] = \"AL_108_END\",\n            [0x1C29] = \"AL_109_OUT\",\n            [0x1C2A] = \"AL_GIMMICK_PRE\",\n            [0x1C2B] = \"AL_GIMMICK_START\",\n            [0x1C2C] = \"AL_GIMMICK_CLEAR\",\n            [0x1C2D] = \"AL_TRAP_CLEAR\",\n            [0x1C2E] = \"AL_TRAP_DOOR\",\n            [0x1C2F] = \"AL_112_END\",\n            [0x1C30] = \"AL_113_END\",\n            [0x1C31] = \"AL_114_END\",\n            [0x1C32] = \"AL_202_END\",\n            [0x1C33] = \"AL_203_END\",\n            [0x1C34] = \"AL_204_END\",\n            [0x1C36] = \"AL_205_END\",\n            [0x1C38] = \"AL_206_END\",\n            [0x1C39] = \"AL_212_END\",\n            [0x1C3A] = \"AL_208_END\",\n            [0x1C3B] = \"AL_209_END_L\",\n            [0x1C3C] = \"AL_210_END\",\n            [0x1C47] = \"AL_152_END\",\n            [0x1C4A] = \"AL_CARPET_05_CLEAR\",\n            [0x1C4B] = \"AL_CARPET_06_CLEAR\",\n            [0x1C4C] = \"AL_al14_ms202_free\",\n            [0x1C4D] = \"AL_al13_trap_free\",\n            [0x1C4E] = \"AL_212_OUT\",\n            [0x1C4F] = \"AL_CARPET_05_OUT\",\n            [0x1C50] = \"AL_FM_COM_OBJ_OFF\",\n            [0x1C51] = \"AL_FM_KINOKO_LEX_PLAYED\",\n            [0x2000] = \"MU_START\",\n            [0x2001] = \"MU_102_END\",\n            [0x2002] = \"MU_119_END\",\n            [0x2003] = \"MU_119_OUT\",\n            [0x2008] = \"MU_INIT\",\n            [0x2009] = \"MU_SCENARIO_1_START\",\n            [0x200A] = \"MU_SCENARIO_1_OPEN\",\n            [0x200B] = \"MU_SCENARIO_1_END\",\n            [0x200C] = \"MU_SCENARIO_2_START\",\n            [0x200D] = \"MU_SCENARIO_2_OPEN\",\n            [0x200E] = \"MU_114_END\",\n            [0x200F] = \"MU_SCENARIO_2_END\",\n            [0x2010] = \"MU_116_END_L\",\n            [0x2012] = \"MU_118_END_L\",\n            [0x2013] = \"MU_START2\",\n            [0x2015] = \"MU_202_END\",\n            [0x2017] = \"MU_204_END_L\",\n            [0x2018] = \"MU_MULAN_START\",\n            [0x2019] = \"MU_206_END\",\n            [0x201B] = \"MU_208_END_L\",\n            [0x201E] = \"MU_211_END_L\",\n            [0x2020] = \"MU_213_END\",\n            [0x2021] = \"MU_MS103A_CLEAR_END\",\n            [0x2022] = \"MU_215_END_L\",\n            [0x2023] = \"MU_216_END\",\n            [0x2024] = \"MU_101_END\",\n            [0x2025] = \"MU_103_END\",\n            [0x2026] = \"MU_104_END_L\",\n            [0x202C] = \"MU_MS103A_CLEAR\",\n            [0x2030] = \"MU_MS103C_CLEAR\",\n            [0x2031] = \"MU_MS103B_CLEAR_END\",\n            [0x2032] = \"MU_MS103_COMPLETE\",\n            [0x2033] = \"MU_105_END\",\n            [0x2034] = \"MU_106_END\",\n            [0x2035] = \"MU_107_END_L\",\n            [0x2036] = \"MU_108_END\",\n            [0x2037] = \"MU_109_END\",\n            [0x2038] = \"MU_110_END_L\",\n            [0x2039] = \"MU_111_END\",\n            [0x203A] = \"MU_112_END\",\n            [0x203B] = \"MU_113_END_L\",\n            [0x203C] = \"MU_114_OUT\",\n            [0x203D] = \"MU_115_END\",\n            [0x203E] = \"MU_116_OUT\",\n            [0x203F] = \"MU_117_END\",\n            [0x2040] = \"MU_201_END\",\n            [0x2041] = \"MU_203_END\",\n            [0x2042] = \"MU_205_END\",\n            [0x2043] = \"MU_207_END\",\n            [0x2044] = \"MU_207A_END\",\n            [0x2045] = \"MU_209_END\",\n            [0x2046] = \"MU_210A_END\",\n            [0x2047] = \"MU_210_END\",\n            [0x2049] = \"MU_212_END\",\n            [0x204A] = \"MU_214_END\",\n            [0x204E] = \"MU_MS103B_CLEAR\",\n            [0x2055] = \"MU_202_OUT\",\n            [0x2057] = \"MU_113_OUT\",\n            [0x2058] = \"MU_FM_KINOKO_VEX_PLAYED\",\n            [0x2400] = \"PO_START\",\n            [0x2401] = \"PO_001_END\",\n            [0x2402] = \"PO_003_END\",\n            [0x2403] = \"PO_004_END\",\n            [0x2404] = \"PO_HB_BATTLE_END\",\n            [0x2405] = \"PO_005_END\",\n            [0x2406] = \"PO_007_END\",\n            [0x2407] = \"PO_008_END\",\n            [0x2408] = \"PO_PAGE_1\",\n            [0x2409] = \"PO_101_END\",\n            [0x240A] = \"PO_102_END\",\n            [0x240B] = \"PO_103_END\",\n            [0x240E] = \"PO_MS101_END_L\",\n            [0x240F] = \"PO_105_END\",\n            [0x2410] = \"PO_PAGE_2\",\n            [0x2411] = \"PO_201_END\",\n            [0x2412] = \"PO_202_END\",\n            [0x2413] = \"PO_203_END\",\n            [0x2416] = \"PO_MS201_END_L\",\n            [0x2417] = \"PO_205_END\",\n            [0x2418] = \"PO_PAGE_3\",\n            [0x2419] = \"PO_301_END\",\n            [0x241A] = \"PO_302_END\",\n            [0x241B] = \"PO_303_END\",\n            [0x241E] = \"PO_MS301_END_L\",\n            [0x241F] = \"PO_305_END\",\n            [0x2420] = \"PO_PAGE_4\",\n            [0x2421] = \"PO_401_END\",\n            [0x2422] = \"PO_402_END\",\n            [0x2425] = \"PO_MS401_END_L\",\n            [0x2426] = \"PO_404_END\",\n            [0x2427] = \"PO_PAGE_5\",\n            [0x2428] = \"PO_501_END\",\n            [0x2429] = \"PO_502_END\",\n            [0x242C] = \"PO_MS501_END_L\",\n            [0x242D] = \"PO_504_END\",\n            [0x2434] = \"PO_106_END\",\n            [0x2435] = \"PO_206_END\",\n            [0x2436] = \"PO_307_END\",\n            [0x2437] = \"PO_405_END\",\n            [0x2438] = \"PO_INIT\",\n            [0x2439] = \"PO_SCENARIO_0_START\",\n            [0x243A] = \"PO_SCENARIO_0_OPEN\",\n            [0x243B] = \"PO_SCENARIO_0_END\",\n            [0x243C] = \"PO_SCENARIO_1_START\",\n            [0x243D] = \"PO_SCENARIO_1_OPEN\",\n            [0x243E] = \"PO_SCENARIO_1_END\",\n            [0x243F] = \"PO_SCENARIO_2_START\",\n            [0x2440] = \"PO_SCENARIO_2_OPEN\",\n            [0x2441] = \"PO_SCENARIO_3_END\",\n            [0x2442] = \"PO_SCENARIO_3_START\",\n            [0x2443] = \"PO_SCENARIO_3_OPEN\",\n            [0x2444] = \"PO_SCENARIO_4_START\",\n            [0x2445] = \"PO_SCENARIO_4_OPEN\",\n            [0x2446] = \"PO_SCENARIO_4_END\",\n            [0x2447] = \"PO_SCENARIO_5_START\",\n            [0x2448] = \"PO_SCENARIO_5_OPEN\",\n            [0x2449] = \"PO_SCENARIO_5_END\",\n            [0x244A] = \"PO_SCENARIO_2_END\",\n            [0x2450] = \"PO_402_END_L\",\n            [0x2451] = \"PO_402_END_ON\",\n            [0x2452] = \"PO_FREE_ON\",\n            [0x2453] = \"PO_FREE_OFF\",\n            [0x2800] = \"LK_START\",\n            [0x2801] = \"LK_101_END\",\n            [0x2802] = \"LK_102_END\",\n            [0x2803] = \"LK_103_END\",\n            [0x2804] = \"LK_104_END\",\n            [0x2805] = \"LK_lk05_ms101\",\n            [0x2806] = \"LK_106_END\",\n            [0x2807] = \"LK_107_END\",\n            [0x2808] = \"LK_108_END\",\n            [0x2809] = \"LK_109_END\",\n            [0x280A] = \"LK_110_END\",\n            [0x280B] = \"LK_111_END\",\n            [0x280C] = \"LK_112_END\",\n            [0x280D] = \"LK_113_END\",\n            [0x280E] = \"LK_114_END\",\n            [0x280F] = \"LK_115_END\",\n            [0x2810] = \"LK_116_END\",\n            [0x2811] = \"LK_117_END\",\n            [0x2812] = \"LK_118_END\",\n            [0x2813] = \"LK_119_END\",\n            [0x2814] = \"LK_lk02_ms102\",\n            [0x2815] = \"LK_121_END\",\n            [0x2816] = \"LK_lk14_ms103\",\n            [0x2818] = \"LK_START2\",\n            [0x2819] = \"LK_201_END\",\n            [0x281A] = \"LK_202_END\",\n            [0x281B] = \"LK_203_END\",\n            [0x281C] = \"LK_204_END\",\n            [0x281D] = \"LK_205_END\",\n            [0x281E] = \"LK_206_END\",\n            [0x2820] = \"LK_208_END\",\n            [0x2821] = \"LK_209_END\",\n            [0x2822] = \"LK_210_END\",\n            [0x2823] = \"LK_211_END\",\n            [0x2825] = \"LK_212_END\",\n            [0x2827] = \"LK_123_END\",\n            [0x2828] = \"LK_lk05_ms201\",\n            [0x282A] = \"LK_INIT\",\n            [0x282B] = \"LK_SCENARIO_1_OPEN\",\n            [0x282C] = \"LK_SCENARIO_1_START\",\n            [0x282D] = \"LK_SCENARIO_1_END\",\n            [0x282E] = \"LK_SCENARIO_2_OPEN\",\n            [0x282F] = \"LK_SCENARIO_2_START\",\n            [0x2830] = \"LK_SCENARIO_2_END\",\n            [0x2831] = \"LK_214_END\",\n            [0x2832] = \"LK_lk06_ms100\",\n            [0x2833] = \"LK_lk15_ms202\",\n            [0x2C00] = \"LM_START\",\n            [0x2C01] = \"LM_101_END\",\n            [0x2C02] = \"LM_102_END\",\n            [0x2C03] = \"LM_103_END_L\",\n            [0x2C04] = \"LM_START_1\",\n            [0x2C08] = \"LM_107_END\",\n            [0x2C09] = \"LM_108_END\",\n            [0x2C0A] = \"LM_START_2\",\n            [0x2C0B] = \"LM_201_END\",\n            [0x2C0C] = \"LM_202_END\",\n            [0x2C0D] = \"LM_203_END_L\",\n            [0x2C0E] = \"LM_204_END\",\n            [0x2C0F] = \"LM_205_END\",\n            [0x2C10] = \"LM_START_3\",\n            [0x2C11] = \"LM_301_END\",\n            [0x2C12] = \"LM_302_END_L\",\n            [0x2C13] = \"LM_303_END\",\n            [0x2C14] = \"LM_START_4\",\n            [0x2C15] = \"LM_401_END\",\n            [0x2C16] = \"LM_402_END\",\n            [0x2C17] = \"LM_403_END\",\n            [0x2C18] = \"LM_404_END\",\n            [0x2C1A] = \"LM_405_END\",\n            [0x2C1B] = \"LM_406_END\",\n            [0x2C1D] = \"LM_408_END\",\n            [0x2C1F] = \"LM_START_5\",\n            [0x2C20] = \"LM_501_END\",\n            [0x2C21] = \"LM_502_END_L\",\n            [0x2C22] = \"LM_104_END_L\",\n            [0x2C23] = \"LM_105_END\",\n            [0x2C24] = \"LM_106_END_L\",\n            [0x2C25] = \"LM_109_END\",\n            [0x2C26] = \"LM_GET_ITEM_2\",\n            [0x2C27] = \"LM_GET_ITEM_3\",\n            [0x2C28] = \"LM_GET_ITEM_4\",\n            [0x2C29] = \"LM_407_END\",\n            [0x2C2A] = \"LM_409_END_L\",\n            [0x2C2B] = \"LM_410_END\",\n            [0x2C2C] = \"LM_411_END\",\n            [0x2C2D] = \"LM_GET_ITEM_5\",\n            [0x2C2E] = \"LM_INIT\",\n            [0x2C2F] = \"LM_SCENARIO_1_START\",\n            [0x2C30] = \"LM_SCENARIO_1_OPEN\",\n            [0x2C31] = \"LM_SCENARIO_1_END\",\n            [0x2C32] = \"LM_SCENARIO_2_START\",\n            [0x2C33] = \"LM_SCENARIO_2_OPEN\",\n            [0x2C34] = \"LM_SCENARIO_2_END\",\n            [0x2C35] = \"LM_SCENARIO_3_START\",\n            [0x2C36] = \"LM_SCENARIO_3_OPEN\",\n            [0x2C37] = \"LM_SCENARIO_3_END\",\n            [0x2C38] = \"LM_SCENARIO_4_START\",\n            [0x2C39] = \"LM_SCENARIO_4_OPEN\",\n            [0x2C3A] = \"LM_SCENARIO_4_END\",\n            [0x2C3B] = \"LM_SCENARIO_5_START\",\n            [0x2C3C] = \"LM_SCENARIO_5_OPEN\",\n            [0x2C3D] = \"LM_SCENARIO_5_END\",\n            [0x2C3E] = \"LM_lm04_ms103_failed\",\n            [0x2C3F] = \"LM_lm01_ms201_failed\",\n            [0x2C40] = \"LM_lm03_ms301_failed\",\n            [0x2C41] = \"LM_lm09_ms401_failed\",\n            [0x2C42] = \"LM_lm04_ms501_failed\",\n            [0x2C43] = \"LM_lm04_ms103_FREE\",\n            [0x2C44] = \"LM_lm01_ms201_FREE\",\n            [0x2C45] = \"LM_lm03_ms301_FREE\",\n            [0x2C46] = \"LM_lm09_ms401_FREE\",\n            [0x2C47] = \"LM_lm04_ms501_FREE\",\n            [0x2C48] = \"LM_lm02_ms102_failed\",\n            [0x3000] = \"DC_DC_OPEN_L\",\n            [0x3001] = \"DC_START\",\n            [0x3002] = \"DC_102_END\",\n            [0x3003] = \"DC_103_END\",\n            [0x3004] = \"DC_104_END\",\n            [0x3005] = \"DC_MINNIE_CANCEL\",\n            [0x3006] = \"DC_105_END\",\n            [0x3008] = \"DC_106_END\",\n            [0x3009] = \"DC_107_END_L\",\n            [0x300A] = \"DC_108_END\",\n            [0x300B] = \"DC_SCENARIO_1_OPEN\",\n            [0x300C] = \"DC_109_END\",\n            [0x300D] = \"DC_110_END\",\n            [0x300E] = \"DC_WI_CLEAR\",\n            [0x300F] = \"DC_111_END\",\n            [0x3010] = \"DC_SCENARIO_1_START\",\n            [0x3011] = \"DC_HB_MERLIN_MEET\",\n            [0x3012] = \"DC_SCENARIO_1_END\",\n            [0x3013] = \"DC_INIT\",\n            [0x301D] = \"DC_MINNIE_GET\",\n            [0x301E] = \"DC_105_OUT\",\n            [0x301F] = \"DC_FM_NAZO_ON\",\n            [0x3021] = \"DC_FM_NAZO_BTL_READY\",\n            [0x3022] = \"DC_FM_NAZO_BTL_CLEAR\",\n            [0x3400] = \"WI_START\",\n            [0x3401] = \"WI_101_END\",\n            [0x3402] = \"WI_102_END\",\n            [0x3403] = \"WI_103_END_L\",\n            [0x3404] = \"WI_104_END\",\n            [0x3406] = \"WI_106_END_L\",\n            [0x3408] = \"WI_108_END_L\",\n            [0x340A] = \"WI_110_END_L\",\n            [0x340C] = \"WI_112_END_L\",\n            [0x340D] = \"WI_VISION_1_END_L\",\n            [0x340E] = \"WI_VISION_2_END_L\",\n            [0x340F] = \"WI_VISION_3_END_L\",\n            [0x3410] = \"WI_VISION_4_END_L\",\n            [0x3411] = \"WI_113_END\",\n            [0x3412] = \"WI_114_END\",\n            [0x3413] = \"WI_115_END\",\n            [0x3414] = \"WI_116_END\",\n            [0x3415] = \"WI_117_END\",\n            [0x3416] = \"WI_118_END_L\",\n            [0x3417] = \"WI_118_OUT\",\n            [0x3418] = \"WI_119_END\",\n            [0x3419] = \"WI_120_END_L\",\n            [0x341A] = \"WI_121_END\",\n            [0x341B] = \"WI_122_END\",\n            [0x341C] = \"WI_105_END_A\",\n            [0x341D] = \"WI_105_END_B\",\n            [0x341E] = \"WI_107_END_A\",\n            [0x341F] = \"WI_107_END_B\",\n            [0x3420] = \"WI_109_END_A\",\n            [0x3421] = \"WI_109_END_B\",\n            [0x3422] = \"WI_111_END_A\",\n            [0x3423] = \"WI_111_END_B\",\n            [0x3424] = \"WI_INIT\",\n            [0x3425] = \"WI_SCENARIO_1_OPEN\",\n            [0x3426] = \"WI_SCENARIO_1_START\",\n            [0x3427] = \"WI_SCENARIO_1_END\",\n            [0x3428] = \"WI_START2\",\n            [0x3429] = \"WI_SCENARIO_2_OPEN\",\n            [0x342A] = \"WI_FM_KINOKO_MAR_PLAYED\",\n            [0x3800] = \"NM_START\",\n            [0x3801] = \"NM_START2\",\n            [0x3802] = \"NM_102_END\",\n            [0x3803] = \"NM_103_END\",\n            [0x3804] = \"NM_104_END\",\n            [0x3805] = \"NM_105_END\",\n            [0x3806] = \"NM_nm00_ms101\",\n            [0x3807] = \"NM_107_END\",\n            [0x3808] = \"NM_108_END\",\n            [0x3809] = \"NM_109_END\",\n            [0x380A] = \"NM_110_END\",\n            [0x380B] = \"NM_111_END\",\n            [0x380C] = \"NM_201_END\",\n            [0x380D] = \"NM_113_END\",\n            [0x380E] = \"NM_114_END\",\n            [0x380F] = \"NM_115_END\",\n            [0x3810] = \"NM_NM_EVENT_116\",\n            [0x3811] = \"NM_117_END\",\n            [0x3812] = \"NM_118_END\",\n            [0x3813] = \"NM_nm03_ms103\",\n            [0x3814] = \"NM_NM_EVENT_120\",\n            [0x3815] = \"NM_121_END\",\n            [0x3816] = \"NM_NM_EVENT_122\",\n            [0x3817] = \"NM_123_END\",\n            [0x3818] = \"NM_124_END\",\n            [0x3819] = \"NM_nm09_ms104\",\n            [0x381A] = \"NM_126_END\",\n            [0x381B] = \"NM_nm06_ms102\",\n            [0x381C] = \"NM_101_END\",\n            [0x381D] = \"NM_108_OUT\",\n            [0x3820] = \"NM_117_OUT\",\n            [0x3821] = \"NM_202_END\",\n            [0x3822] = \"NM_121_OUT\",\n            [0x3823] = \"NM_203_END\",\n            [0x3824] = \"NM_204_END\",\n            [0x3825] = \"NM_205_END\",\n            [0x3826] = \"NM_nm10_ms201\",\n            [0x3827] = \"NM_207_END\",\n            [0x3828] = \"NM_208_END\",\n            [0x3829] = \"NM_nm00_ms202\",\n            [0x382A] = \"NM_210_END\",\n            [0x382B] = \"NM_211_END\",\n            [0x382C] = \"NM_nm10_ms203\",\n            [0x382D] = \"NM_213_END\",\n            [0x382E] = \"NM_214_END\",\n            [0x382F] = \"NM_215_END\",\n            [0x3830] = \"NM_nm07_ms204\",\n            [0x3831] = \"NM_217_END\",\n            [0x3832] = \"NM_NM_EVENT_214\",\n            [0x3833] = \"NM_INIT\",\n            [0x3834] = \"NM_SCENARIO_1_END\",\n            [0x3835] = \"NM_SCENARIO_2_OPEN\",\n            [0x3836] = \"NM_SCENARIO_2_START\",\n            [0x3837] = \"NM_SCENARIO_2_END\",\n            [0x3838] = \"NM_SCENARIO_1_OPEN\",\n            [0x3839] = \"NM_SCENARIO_1_START\",\n            [0x383A] = \"NM_SANTA_START\",\n            [0x383C] = \"NM_112_OUT\",\n            [0x383D] = \"NM_NM_EVENT_122_OUT\",\n            [0x383E] = \"NM_NM_EVENT_122_IN\",\n            [0x383F] = \"NM_FM_KINOKO_XIG_PLAYED\",\n            [0x3C00] = \"WM_TT8_CLEAR\",\n            [0x3C01] = \"WM_HB1_CLEAR\",\n            [0x3C02] = \"WM_MU1_CLEAR\",\n            [0x3C03] = \"WM_BB1_CLEAR\",\n            [0x3C04] = \"WM_EVENT_DC_DARK\",\n            [0x3C05] = \"WM_EVENT_DC_OPEN\",\n            [0x3C06] = \"WM_DC_CLEAR\",\n            [0x3C07] = \"WM_CA1_CLEAR\",\n            [0x3C08] = \"WM_NM1_CLEAR\",\n            [0x3C09] = \"WM_AL1_CLEAR\",\n            [0x3C0A] = \"WM_EVENT_HB_BATTLE\",\n            [0x3C0B] = \"WM_HB2_CLEAR\",\n            [0x3C0C] = \"WM_MU2_CLEAR\",\n            [0x3C0D] = \"WM_CA2_CLEAR\",\n            [0x3C0E] = \"WM_NM2_CLEAR\",\n            [0x3C0F] = \"WM_AL2_CLEAR\",\n            [0x3C10] = \"WM_EVENT_EH_APPEAR\",\n            [0x3C11] = \"FA_EVENT_DC_DARK\",\n            [0x4000] = \"CA_START\",\n            [0x4002] = \"CA_START2\",\n            [0x4004] = \"CA_101_END\",\n            [0x4005] = \"CA_102_END\",\n            [0x4006] = \"CA_ca01_ms101\",\n            [0x4007] = \"CA_ca01_ms102\",\n            [0x4008] = \"CA_105_END\",\n            [0x4009] = \"CA_ca02_ms103\",\n            [0x400A] = \"CA_107_END\",\n            [0x400B] = \"CA_109_END\",\n            [0x4010] = \"CA_112_END\",\n            [0x4011] = \"CA_ca_event_113\",\n            [0x4012] = \"CA_114_END\",\n            [0x4013] = \"CA_ca09_ms104\",\n            [0x4014] = \"CA_116_END\",\n            [0x4016] = \"CA_118_END\",\n            [0x4017] = \"CA_119_END\",\n            [0x4018] = \"CA_ca07_ms105\",\n            [0x4019] = \"CA_121_END\",\n            [0x401A] = \"CA_ca03_ms106\",\n            [0x401B] = \"CA_126_END\",\n            [0x401C] = \"CA_123_END\",\n            [0x401D] = \"CA_ca10_ms107\",\n            [0x401E] = \"CA_125_END\",\n            [0x401F] = \"CA_201_END\",\n            [0x4020] = \"CA_202_END\",\n            [0x4021] = \"CA_203_END\",\n            [0x4022] = \"CA_ca01_ms201\",\n            [0x4024] = \"CA_205_END\",\n            [0x4025] = \"CA_206_END\",\n            [0x4026] = \"CA_207_END\",\n            [0x4028] = \"CA_209_END\",\n            [0x4029] = \"CA_210_END\",\n            [0x402A] = \"CA_ca14_ms203\",\n            [0x402B] = \"CA_212_END\",\n            [0x402D] = \"CA_213_END\",\n            [0x402E] = \"CA_214_END\",\n            [0x402F] = \"CA_ca01_ms204\",\n            [0x4030] = \"CA_216_END\",\n            [0x4032] = \"CA_ca09_ms_ht\",\n            [0x4034] = \"CA_ca10_ms_ht\",\n            [0x4036] = \"CA_ca12_ms_ht\",\n            [0x4038] = \"CA_ca13_ms_ht\",\n            [0x403A] = \"CA_ca14_ms_ht\",\n            [0x403C] = \"CA_ca15_ms_ht\",\n            [0x403D] = \"CA_mission_success\",\n            [0x4040] = \"CA_ca01_on\",\n            [0x4042] = \"CA_ca08_on\",\n            [0x4043] = \"CA_ca14_on\",\n            [0x4044] = \"CA_EVENT_111\",\n            [0x4045] = \"CA_EVENT_117\",\n            [0x4047] = \"CA_EVENT_205\",\n            [0x4049] = \"CA_ca16_on\",\n            [0x404A] = \"CA_INIT\",\n            [0x404B] = \"CA_SCENARIO_1_OPEN\",\n            [0x404C] = \"CA_SCENARIO_1_START\",\n            [0x404D] = \"CA_SCENARIO_1_END\",\n            [0x404E] = \"CA_SCENARIO_2_OPEN\",\n            [0x404F] = \"CA_SCENARIO_2_START\",\n            [0x4050] = \"CA_SCENARIO_2_END\",\n            [0x4051] = \"CA_104_OUT\",\n            [0x405A] = \"CA_JACK01_START\",\n            [0x405B] = \"CA_JACK01_END\",\n            [0x405C] = \"CA_JACK02_START\",\n            [0x405D] = \"CA_JACK02_END\",\n            [0x405E] = \"CA_NO_JACK01_START\",\n            [0x405F] = \"CA_NO_JACK01_END\",\n            [0x4060] = \"CA_NO_JACK02_START\",\n            [0x4061] = \"CA_NO_JACK02_END\",\n            [0x4062] = \"CA_ca18_ms202\",\n            [0x4063] = \"CA_FM_COM_OBJ_OFF\",\n            [0x4064] = \"CA_FM_KINOKO_LUX_PLAYED\",\n            [0x4400] = \"TR_START\",\n            [0x4401] = \"TR_101_END\",\n            [0x4402] = \"TR_102_END\",\n            [0x4403] = \"TR_103_END\",\n            [0x4404] = \"TR_104_END\",\n            [0x4405] = \"TR_105_END\",\n            [0x4406] = \"TR_tr01_ms101\",\n            [0x4407] = \"TR_107_END\",\n            [0x4409] = \"TR_108_END\",\n            [0x440A] = \"TR_109_END\",\n            [0x440C] = \"TR_110_END\",\n            [0x440D] = \"TR_111_END\",\n            [0x440E] = \"TR_tr03_ms103\",\n            [0x440F] = \"TR_113_END\",\n            [0x4410] = \"TR_114_END\",\n            [0x4411] = \"TR_tr04_ms104\",\n            [0x4412] = \"TR_116_END\",\n            [0x4413] = \"TR_117_END\",\n            [0x4414] = \"TR_START2\",\n            [0x4415] = \"TR_201_END\",\n            [0x4416] = \"TR_202_END\",\n            [0x4417] = \"TR_203_END\",\n            [0x4418] = \"TR_tr02_ms210\",\n            [0x4419] = \"TR_204_END\",\n            [0x441A] = \"TR_205_END\",\n            [0x441B] = \"TR_tr04_ms202\",\n            [0x441C] = \"TR_206_END\",\n            [0x441D] = \"TR_207_END\",\n            [0x441E] = \"TR_208_END\",\n            [0x441F] = \"TR_tr07_ms203\",\n            [0x4420] = \"TR_209_END\",\n            [0x4421] = \"TR_210_END\",\n            [0x4422] = \"TR_tr09_ms204\",\n            [0x4423] = \"TR_tr09_ms205\",\n            [0x4424] = \"TR_hb_304_END\",\n            [0x4426] = \"TR_117_tr05_jump\",\n            [0x4428] = \"TR_hb_501_END\",\n            [0x4429] = \"TR_hb_502_END\",\n            [0x442A] = \"TR_503_END\",\n            [0x442B] = \"TR_tr02_ms102a\",\n            [0x442C] = \"TR_tr02_ms102b\",\n            [0x442D] = \"TR_INIT\",\n            [0x442E] = \"TR_SCENARIO_1_OPEN\",\n            [0x442F] = \"TR_SCENARIO_1_START\",\n            [0x4430] = \"TR_SCENARIO_1_END\",\n            [0x4431] = \"TR_SCENARIO_2_OPEN\",\n            [0x4432] = \"TR_SCENARIO_2_START\",\n            [0x4433] = \"TR_SCENARIO_2_END\",\n            [0x4434] = \"TR_tr01_ms101_EXIT\",\n            [0x4436] = \"TR_RTN_ON\",\n            [0x4437] = \"TR_113_OUT\",\n            [0x4438] = \"TR_113_IN\",\n            [0x443A] = \"TR_HB05_HIDDEN_OFF\",\n            [0x443B] = \"TR_FRAG_OFF\",\n            [0x4800] = \"EH_START\",\n            [0x4804] = \"EH_INIT\",\n            [0x4805] = \"EH_eh_event_101\",\n            [0x4806] = \"EH_eh_event_102\",\n            [0x4807] = \"EH_eh_event_103\",\n            [0x4809] = \"EH_eh_event_105\",\n            [0x480A] = \"EH_eh_event_106\",\n            [0x480B] = \"EH_eh_event_107\",\n            [0x480C] = \"EH_eh_event_108\",\n            [0x480D] = \"EH_eh_event_109\",\n            [0x480E] = \"EH_eh_event_110\",\n            [0x480F] = \"EH_eh_event_111\",\n            [0x4810] = \"EH_eh_event_112\",\n            [0x4811] = \"EH_eh_event_113\",\n            [0x4812] = \"EH_eh10_ms102\",\n            [0x4813] = \"EH_eh_event_115\",\n            [0x4814] = \"EH_eh_event_116\",\n            [0x4815] = \"EH_eh_event_117\",\n            [0x4816] = \"EH_eh_event_118\",\n            [0x4817] = \"EH_eh14_ms103\",\n            [0x4818] = \"EH_eh_event_120\",\n            [0x4819] = \"EH_eh_event_121\",\n            [0x481A] = \"EH_eh15_ms104\",\n            [0x481B] = \"EH_eh_event_123\",\n            [0x481C] = \"EH_eh_event_124\",\n            [0x481D] = \"EH_eh_event_125\",\n            [0x481E] = \"EH_eh_event_126\",\n            [0x481F] = \"EH_eh_event_127\",\n            [0x4820] = \"EH_eh_event_128\",\n            [0x4821] = \"EH_eh_event_129\",\n            [0x4822] = \"EH_eh_event_130\",\n            [0x4823] = \"EH_eh_event_131\",\n            [0x4824] = \"EH_eh19_ms105\",\n            [0x4825] = \"EH_eh_event_133\",\n            [0x4826] = \"EH_eh_event_134\",\n            [0x4827] = \"EH_eh_event_135\",\n            [0x4829] = \"EH_eh_event_136\",\n            [0x482B] = \"EH_eh_event_201\",\n            [0x482C] = \"EH_eh_event_202\",\n            [0x482D] = \"EH_eh_event_203\",\n            [0x482E] = \"EH_eh_event_204\",\n            [0x482F] = \"EH_SCENARIO_1_OPEN\",\n            [0x4830] = \"EH_SCENARIO_1_START\",\n            [0x4831] = \"EH_start_ev301\",\n            [0x4832] = \"EH_eh01_ev301\",\n            [0x4837] = \"EH_JIMMNY_FULL_OPEN\",\n            [0x483A] = \"EH_eh27_ms106\",\n            [0x483B] = \"EH_eh28_ms107\",\n            [0x483C] = \"EH_eh26_ms108\",\n            [0x483D] = \"EH_eh25_ms109\",\n            [0x483E] = \"EH_eh24_ms110\",\n            [0x483F] = \"EH_eh22_ms111\",\n            [0x4840] = \"EH_eh23_ms112\",\n            [0x4841] = \"EH_eh20_ms113\",\n            [0x4842] = \"EH_FINAL_CHANCE_START\",\n            [0x4843] = \"EH_NO_RIKU_START\",\n            [0x4844] = \"EH_NO_RIKU_END\",\n            [0x4845] = \"EH_RIKU_LAST_START\",\n            [0x4846] = \"EH_EH_OUT\",\n            [0x4847] = \"EH_EH_IN\",\n            [0x4848] = \"EH_GAME_COMPLETE\",\n            [0x4849] = \"EH_EH_LASTBOSS_RESET\",\n            [0x484A] = \"EH_NO_RIKU_START_RE\",\n            [0x484B] = \"EH_NO_RIKU_END_RE\",\n            [0x484C] = \"EH_RIKU_LAST_RE\",\n            [0x484D] = \"EH_RIKU_LAST_END_RE\",\n            [0x484E] = \"EH_FM_ROX_RE_CLEAR\",\n            [0x484F] = \"EH_FM_XIG_RE_CLEAR\",\n            [0x4850] = \"EH_FM_SAI_RE_CLEAR\",\n            [0x4851] = \"EH_FM_LUX_RE_CLEAR\",\n            [0x4852] = \"EH_FM_XEM_RE_CLEAR\",\n            [0x4853] = \"EH_FM_KINOKO_ZEM_PLAYED\",\n        };\n    }\n\n    public enum GameVersion\n    {\n        Japanese = 0x2a,\n        American = 0x2d,\n        FinalMix = 0x3a\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/ISaveKh2.cs",
    "content": "using KHSave.Lib2.Models;\nusing KHSave.Lib2.Types;\nusing System.IO;\n\nnamespace KHSave.Lib2\n{\n    public interface ISaveKh2\n    {\n        bool IsFinalMix { get; }\n\n        uint MagicCode { get; set; }\n        int Version { get; set; }\n        uint Checksum { get; set; }\n        WorldType WorldId { get; set; }\n        byte RoomId { get; set; }\n        byte SpawnId { get; set; }\n        byte Unused0f { get; set; }\n        IPlaceScript[] PlaceScripts { get; }\n        Progress[] StoryProgress { get; set; }\n\n        byte[] RoomVisitedFlag { get; set; } // There might be a chance that it starts from 0x2300\n        int MunnyAmount { get; set; }\n        int Timer { get; set; }\n        Difficulty Difficulty { get; set; }\n        byte[] PuzzlePieceFlags { get; set; }\n        ICharacter[] Characters { get; }\n        IDriveForm[] DriveForms { get; }\n\n        PartyMembers[] WorldPartyMembers { get; set; }\n        byte[] InventoryCount { get; set; }\n\n        int Experience { get; set; }\n        CommandType ShortcutCircle { get; set; }\n        CommandType ShortcutTriangle { get; set; }\n        CommandType ShortcutSquare { get; set; }\n        CommandType ShortcutCross { get; set; }\n        int BonusLevel { get; set; }\n\n        bool Vibration { get; set; }\n        bool Unknown41a4_1 { get; set; }\n        bool Unknown41a4_2 { get; set; }\n        bool NavigationalMap { get; set; }\n        bool FieldCameraManual { get; set; }\n        bool RightAnalogStickCommand { get; set; }\n        bool CommandMenuClassic { get; set; }\n        bool CameraLeftRightReversed { get; set; }\n        bool CameraUpDownReversed { get; set; }\n        bool Unknown41a5_1 { get; set; }\n        bool Unknown41a5_2 { get; set; }\n\n        short ProgressTutorialMenu { get; set; }\n        bool NewStatusValor { get; set; }\n        bool NewStatusWisdom { get; set; }\n        bool NewStatusLimit { get; set; }\n        bool NewStatusMaster { get; set; }\n        bool NewStatusFinal { get; set; }\n        bool NewStatusSummonStitch { get; set; }\n        bool NewStatusSummonGenie { get; set; }\n        bool NewStatusSummonPeterPan { get; set; }\n        bool NewStatusSummonChickenLittle { get; set; }\n\n        void Write(Stream stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/KHSave.Lib2.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.Lib2/Models/CharacterFinalMix.cs",
    "content": "using KHSave.Lib2.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib2.Models\n{\n    public class CharacterFinalMix : ICharacter\n    {\n        [Data(Count = 0x114)] public byte[] Data { get; set; }\n\n        [Data(0)] public EquipmentType Weapon { get; set; }\n        [Data] public short Unk02 { get; set; }\n        [Data] public byte HpCur { get; set; }\n        [Data] public byte HpMax { get; set; }\n        [Data] public byte MpCur { get; set; }\n        [Data] public byte MpMax { get; set; }\n        [Data] public byte ApBoost { get; set; }\n        [Data] public byte StrengthBoost { get; set; }\n        [Data] public byte MagicBoost { get; set; }\n        [Data] public byte DefenseBoost { get; set; }\n        [Data] public byte Unk0c { get; set; }\n        [Data] public byte Unk0d { get; set; }\n        [Data] public byte Unk0e { get; set; }\n        [Data] public byte Level { get; set; }\n        [Data] public byte ArmorCount { get; set; }\n        [Data] public byte AccessoryCount { get; set; }\n        [Data] public byte ItemCount { get; set; }\n        [Data] public byte UnknownCount { get; set; }\n        [Data(Count = 8)] public short[] Armors { get; set; }\n        [Data(Count = 8)] public short[] Accessories { get; set; }\n        [Data(Count = 8)] public short[] Items { get; set; }\n        [Data(Count = 8)] public short[] ItemAutoReload { get; set; }\n        [Data(Count = 0x50)] public ushort[] Abilities { get; set; }\n        [Data] public BattleStyleType BattleStyle { get; set; }\n        [Data] public AbilityStyleType AbilityStyle1 { get; set; }\n        [Data] public AbilityStyleType AbilityStyle2 { get; set; }\n        [Data] public AbilityStyleType AbilityStyle3 { get; set; }\n        [Data] public AbilityStyleType AbilityStyle4 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Models/CharacterVanilla.cs",
    "content": "using KHSave.Lib2.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib2.Models\n{\n    public class CharacterVanilla : ICharacter\n    {\n        [Data(Count = 0xf4)] public byte[] Data { get; set; }\n\n        [Data(0)] public EquipmentType Weapon { get; set; }\n        [Data] public short Unk02 { get; set; }\n        [Data] public byte HpCur { get; set; }\n        [Data] public byte HpMax { get; set; }\n        [Data] public byte MpCur { get; set; }\n        [Data] public byte MpMax { get; set; }\n        [Data] public byte ApBoost { get; set; }\n        [Data] public byte StrengthBoost { get; set; }\n        [Data] public byte MagicBoost { get; set; }\n        [Data] public byte DefenseBoost { get; set; }\n        [Data] public byte Unk0c { get; set; }\n        [Data] public byte Unk0d { get; set; }\n        [Data] public byte Unk0e { get; set; }\n        [Data] public byte Level { get; set; }\n        [Data] public byte ArmorCount { get; set; }\n        [Data] public byte AccessoryCount { get; set; }\n        [Data] public byte ItemCount { get; set; }\n        [Data] public byte UnknownCount { get; set; }\n        [Data(Count = 8)] public short[] Armors { get; set; }\n        [Data(Count = 8)] public short[] Accessories { get; set; }\n        [Data(Count = 8)] public short[] Items { get; set; }\n        [Data(Count = 8)] public short[] ItemAutoReload { get; set; }\n\n        [Data(0x54, Count = 0x30)] public ushort[] Abilities { get; set; }\n\n        [Data] public BattleStyleType BattleStyle { get; set; }\n        [Data] public AbilityStyleType AbilityStyle1 { get; set; }\n        [Data] public AbilityStyleType AbilityStyle2 { get; set; }\n        [Data] public AbilityStyleType AbilityStyle3 { get; set; }\n        [Data] public AbilityStyleType AbilityStyle4 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Models/DriveFormFinalMix.cs",
    "content": "using KHSave.Lib2.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib2.Models\n{\n    public class DriveFormFinalMix : IDriveForm\n    {\n        [Data(0)] public EquipmentType Weapon { get; set; }\n        [Data] public byte Level { get; set; }\n        [Data] public byte AbilityLevel { get; set; }\n        [Data] public int Experience { get; set; }\n        [Data(Count = 0x18)] public ushort[] Abilities { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Models/DriveFormVanilla.cs",
    "content": "using KHSave.Lib2.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib2.Models\n{\n    public class DriveFormVanilla : IDriveForm\n    {\n        [Data(0)] public EquipmentType Weapon { get; set; }\n        [Data] public byte Level { get; set; }\n        [Data] public byte AbilityLevel { get; set; }\n        [Data] public int Experience { get; set; }\n        [Data(Count = 0x10)] public ushort[] Abilities { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Models/ICharacter.cs",
    "content": "using KHSave.Lib2.Types;\n\nnamespace KHSave.Lib2.Models\n{\n    public interface ICharacter\n    {\n        EquipmentType Weapon { get; set; }\n        short Unk02 { get; set; }\n        byte HpCur { get; set; }\n        byte HpMax { get; set; }\n        byte MpCur { get; set; }\n        byte MpMax { get; set; }\n        byte ApBoost { get; set; }\n        byte StrengthBoost { get; set; }\n        byte MagicBoost { get; set; }\n        byte DefenseBoost { get; set; }\n        byte Unk0c { get; set; }\n        byte Unk0d { get; set; }\n        byte Unk0e { get; set; }\n        byte Level { get; set; }\n        byte ArmorCount { get; set; }\n        byte AccessoryCount { get; set; }\n        byte ItemCount { get; set; }\n        byte UnknownCount { get; set; }\n        short[] Armors { get; set; }\n        short[] Accessories { get; set; }\n        short[] Items { get; set; }\n        short[] ItemAutoReload { get; set; }\n\n        ushort[] Abilities { get; set; }\n\n        BattleStyleType BattleStyle { get; set; }\n        AbilityStyleType AbilityStyle1 { get; set; }\n        AbilityStyleType AbilityStyle2 { get; set; }\n        AbilityStyleType AbilityStyle3 { get; set; }\n        AbilityStyleType AbilityStyle4 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Models/IDriveForm.cs",
    "content": "using KHSave.Lib2.Types;\n\nnamespace KHSave.Lib2.Models\n{\n    public interface IDriveForm\n    {\n        EquipmentType Weapon { get; set; }\n        byte Level { get; set; }\n        byte AbilityLevel { get; set; }\n        int Experience { get; set; }\n        ushort[] Abilities { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Models/IPlaceScript.cs",
    "content": "namespace KHSave.Lib2.Models\n{\n    public interface IPlaceScript\n    {\n        byte Map { get; set; }\n        byte Battle { get; set; }\n        byte Event { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Models/PartyMembers.cs",
    "content": "using KHSave.Lib2.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib2.Models\n{\n    public class PartyMembers\n    {\n        [Data] public PlayableCharacterType PlayableCharacter { get; set; }\n        [Data] public PlayableCharacterType CompanionCharacter1 { get; set; }\n        [Data] public PlayableCharacterType CompanionCharacter2 { get; set; }\n        [Data] public PlayableCharacterType CompanionCharacter3 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Models/PlaceScriptFinalMix.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.Lib2.Models\n{\n    public class PlaceScriptFinalMix : IPlaceScript\n    {\n        [Data] public byte Map { get; set; }\n        [Data] public byte MapSecondary { get; set; }\n        [Data] public byte Battle { get; set; }\n        [Data] public byte BattleSecondary { get; set; }\n        [Data] public byte Event { get; set; }\n        [Data] public byte EventSecondary { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Models/PlaceScriptVanilla.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.Lib2.Models\n{\n    public class PlaceScriptVanilla : IPlaceScript\n    {\n        [Data] public byte Map { get; set; }\n        [Data] public byte Battle { get; set; }\n        [Data] public byte Event { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Models/Progress.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.Lib2.Models\n{\n    public class Progress\n    {\n        [Data(Count = 0x20)] public byte[] Flags { get; set; }\n\n        public bool GetFlag(int index) => (Flags[index / 8] & (1 << (index % 8))) != 0;\n        public void SetFlag(int index, bool value)\n        {\n            var mask = (byte)(1 << (index % 8));\n            if (value)\n                Flags[index / 8] |= mask;\n            else\n                Flags[index / 8] &= (byte)~mask;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/SaveKh2.European.cs",
    "content": "using KHSave.Lib2.Models;\nusing KHSave.Lib2.Types;\nusing System;\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib2\n{\n    public partial class SaveKh2\n    {\n        public class SaveEuropean : ISaveKh2\n        {\n            public bool IsFinalMix => false;\n\n            [Data(0, 0xb4e0)] public byte[] Data { get; set; }\n\n            [Data(0)] public uint MagicCode { get; set; }\n            [Data] public int Version { get; set; }\n            [Data] public uint Checksum { get; set; }\n            [Data] public WorldType WorldId { get; set; }\n            [Data] public byte RoomId { get; set; }\n            [Data] public byte SpawnId { get; set; }\n            [Data] public byte Unused0f { get; set; }\n            [Data(0x13, Count = 64 * 19, Stride = 3)] public PlaceScriptVanilla[] PlaceScripts { get; set; }\n            [Data(0xe50, Count = 20, Stride = 0x20)] public Progress[] StoryProgress { get; set; }\n            [Data(0x14b8, Count = 8 * Constants.WorldCount)] public byte[] RoomVisitedFlag { get; set; }\n            [Data(0x1600)] public int MunnyAmount { get; set; }\n            [Data(0x1604, Count = Constants.WorldCount + 2)] public int Timer { get; set; }\n            [Data(0x1658)] public Difficulty Difficulty { get; set; }\n            [Data(Count = 0)] public byte[] PuzzlePieceFlags { get; set; }\n            [Data(0x1660, Count = 13, Stride = 0xf4)] public CharacterVanilla[] Characters { get; set; }\n            [Data(0x22c4, Count = 9, Stride = 0x28)] public DriveFormVanilla[] DriveForms { get; set; }\n\n            [Data(0x3534, Count = Constants.WorldCount)] public PartyMembers[] WorldPartyMembers { get; set; }\n            [Data(0x2488, Count = 280)] public byte[] InventoryCount { get; set; }\n            [Data(0x25E8)] public int Experience { get; set; }\n            [Data(0x2600)] public CommandType ShortcutCircle { get; set; }\n            [Data] public CommandType ShortcutTriangle { get; set; }\n            [Data] public CommandType ShortcutSquare { get; set; }\n            [Data] public CommandType ShortcutCross { get; set; }\n            [Data] public int BonusLevel { get; set; }\n\n            public bool Vibration { get; set; }\n            public bool Unknown41a4_1 { get; set; }\n            public bool Unknown41a4_2 { get; set; }\n            public bool NavigationalMap { get; set; }\n            public bool FieldCameraManual { get; set; }\n            public bool RightAnalogStickCommand { get; set; }\n            public bool CommandMenuClassic { get; set; }\n            public bool CameraLeftRightReversed { get; set; }\n            public bool CameraUpDownReversed { get; set; }\n            public bool Unknown41a5_1 { get; set; }\n            public bool Unknown41a5_2 { get; set; }\n            public short ProgressTutorialMenu { get; set; }\n            public bool NewStatusValor { get; set; }\n            public bool NewStatusWisdom { get; set; }\n            public bool NewStatusLimit { get; set; }\n            public bool NewStatusMaster { get; set; }\n            public bool NewStatusFinal { get; set; }\n            public bool NewStatusSummonStitch { get; set; }\n            public bool NewStatusSummonGenie { get; set; }\n            public bool NewStatusSummonPeterPan { get; set; }\n            public bool NewStatusSummonChickenLittle { get; set; }\n\n            IPlaceScript[] ISaveKh2.PlaceScripts => Array.ConvertAll(PlaceScripts, x => (IPlaceScript)x);\n            ICharacter[] ISaveKh2.Characters => Array.ConvertAll(Characters, x => (ICharacter)x);\n            IDriveForm[] ISaveKh2.DriveForms => Array.ConvertAll(DriveForms, x => (IDriveForm)x);\n\n            public void Write(Stream stream) =>\n                BinaryMapping.WriteObject(stream.FromBegin(), this);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/SaveKh2.FinalMix.cs",
    "content": "using KHSave.Lib2.Models;\nusing KHSave.Lib2.Types;\nusing System;\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib2\n{\n    public partial class SaveKh2\n    {\n        public class SaveFinalMix : ISaveKh2\n        {\n            public bool IsFinalMix => true;\n\n            [Data(0, 0x10FC0)] public byte[] Data { get; set; }\n\n            [Data(0)] public uint MagicCode { get; set; }\n            [Data] public int Version { get; set; }\n            [Data] public uint Checksum { get; set; }\n            [Data] public WorldType WorldId { get; set; }\n            [Data] public byte RoomId { get; set; }\n            [Data] public byte SpawnId { get; set; }\n            [Data] public byte Unused0f { get; set; }\n            [Data(0x10, Count = 64 * 19, Stride = 6)] public PlaceScriptFinalMix[] PlaceScripts { get; set; }\n            [Data(0x1c90, Count = 20, Stride = 0x20)] public Progress[] StoryProgress { get; set; }\n            // 3e8 of what?\n            [Data(0x22f8, Count = 8 * Constants.WorldCount)] public byte[] RoomVisitedFlag { get; set; } // There might be a chance that it starts from 0x2300\n            [Data(0x2440)] public int MunnyAmount { get; set; }\n            [Data(0x2444, Count = Constants.WorldCount + 2)] public int Timer { get; set; }\n            [Data(0x2498)] public Difficulty Difficulty { get; set; }\n            [Data(0x24a0, Count = 0x30)] public byte[] PuzzlePieceFlags { get; set; }\n            [Data(0x24f0, Count = 13, Stride = 0x114)] public CharacterFinalMix[] Characters { get; set; }\n            [Data(0x32f4, Count = 10, Stride = 0x38)] public DriveFormFinalMix[] DriveForms { get; set; }\n\n            [Data(0x3526)] public byte SummonLevel { get; set; }\n            [Data(0x3529)] public byte DriveBarCurrent { get; set; }\n            [Data(0x352a)] public byte DriveBarMax { get; set; }\n\n            [Data(0x3534, Count = Constants.WorldCount)] public PartyMembers[] WorldPartyMembers { get; set; }\n            [Data(0x3580, Count = 320)] public byte[] InventoryCount { get; set; }\n\n            [Data(0x36E0)] public int Experience { get; set; }\n            [Data(0x36f8)] public CommandType ShortcutCircle { get; set; }\n            [Data(0x36fa)] public CommandType ShortcutTriangle { get; set; }\n            [Data(0x36fc)] public CommandType ShortcutSquare { get; set; }\n            [Data(0x36fe)] public CommandType ShortcutCross { get; set; }\n            [Data(0x3700)] public int BonusLevel { get; set; }\n\n            [Data(0x41a4, BitIndex = 0)] public bool Vibration { get; set; }\n            [Data(0x41a4, BitIndex = 1)] public bool Unknown41a4_1 { get; set; }\n            [Data(0x41a4, BitIndex = 2)] public bool Unknown41a4_2 { get; set; }\n            [Data(0x41a4, BitIndex = 3)] public bool NavigationalMap { get; set; }\n            [Data(0x41a4, BitIndex = 4)] public bool FieldCameraManual { get; set; }\n            [Data(0x41a4, BitIndex = 5)] public bool RightAnalogStickCommand { get; set; }\n            [Data(0x41a4, BitIndex = 6)] public bool CommandMenuClassic { get; set; }\n            [Data(0x41a4, BitIndex = 7)] public bool CameraLeftRightReversed { get; set; }\n            [Data(0x41a5, BitIndex = 0)] public bool CameraUpDownReversed { get; set; }\n            [Data(0x41a5, BitIndex = 1)] public bool Unknown41a5_1 { get; set; }\n            [Data(0x41a5, BitIndex = 2)] public bool Unknown41a5_2 { get; set; }\n\n            // WRONG.\n            // [Data(0x41aa, BitIndex = 0)] public bool NewMagicUnk1_0 { get; set; }\n            // [Data(0x41aa, BitIndex = 1)] public bool NewMagicUnk1_1 { get; set; }\n            // [Data(0x41aa, BitIndex = 2)] public bool NewMagicUnk1_2 { get; set; }\n            // [Data(0x41aa, BitIndex = 3)] public bool NewMagicUnk1_4 { get; set; }\n            // [Data(0x41aa, BitIndex = 4)] public bool NewMagicUnk1_8 { get; set; }\n            // [Data(0x41aa, BitIndex = 5)] public bool NewMagicFiraga { get; set; }\n            // [Data(0x41aa, BitIndex = 6)] public bool NewMagicBlizzaga { get; set; }\n            // [Data(0x41aa, BitIndex = 7)] public bool NewMagicThundaga { get; set; }\n            // [Data(0x41ab, BitIndex = 0)] public bool NewMagicCuraga { get; set; }\n            // [Data(0x41ab, BitIndex = 1)] public bool NewMagicUnkUnk { get; set; }\n            // [Data(0x41b2, BitIndex = 0)] public bool NewMagicUnk2_0 { get; set; }\n            // [Data(0x41b2, BitIndex = 1)] public bool NewMagicUnk2_1 { get; set; }\n            // [Data(0x41b2, BitIndex = 2)] public bool NewMagicUnk2_2 { get; set; }\n            // [Data(0x41b2, BitIndex = 3)] public bool NewMagicUnk2_4 { get; set; }\n            // [Data(0x41b2, BitIndex = 4)] public bool NewMagicUnk2_8 { get; set; }\n            // [Data(0x41b2, BitIndex = 5)] public bool NewMagicUnk2_10 { get; set; }\n            // [Data(0x41b2, BitIndex = 6)] public bool NewMagicUnk2_20 { get; set; }\n            // [Data(0x41b2, BitIndex = 7)] public bool NewMagicMagnega { get; set; }\n            // [Data(0x41b3)] public bool NewMagicReflega { get; set; }\n\n            [Data(0x4270)] public short ProgressTutorialMenu { get; set; }\n            [Data(0x4274)] public bool NewStatusValor { get; set; }\n            [Data(0x4274)] public bool NewStatusWisdom { get; set; }\n            [Data(0x4274)] public bool NewStatusLimit { get; set; }\n            [Data(0x4274)] public bool NewStatusMaster { get; set; }\n            [Data(0x4274)] public bool NewStatusFinal { get; set; }\n            [Data(0x4274)] public bool NewStatusSummonStitch { get; set; }\n            [Data(0x4274)] public bool NewStatusSummonGenie { get; set; }\n            [Data(0x4274)] public bool NewStatusSummonPeterPan { get; set; }\n            [Data(0x4275)] public bool NewStatusSummonChickenLittle { get; set; }\n\n            IPlaceScript[] ISaveKh2.PlaceScripts => Array.ConvertAll(PlaceScripts, x => (IPlaceScript)x);\n            ICharacter[] ISaveKh2.Characters => Array.ConvertAll(Characters, x => (ICharacter)x);\n            IDriveForm[] ISaveKh2.DriveForms => Array.ConvertAll(DriveForms, x => (IDriveForm)x);\n\n            public void Write(Stream stream) =>\n                BinaryMapping.WriteObject(stream.FromBegin(), this);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/SaveKh2.TransferMappings.cs",
    "content": "using KHSave.Lib2.Models;\nusing KHSave.Lib2.Types;\nusing KHSave.Services;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace KHSave.Lib2\n{\n    public partial class SaveKh2\n    {\n        public static Dictionary<Type, Action<object, object, PropertyInfo>> TransferMappings =\n            new Dictionary<Type, Action<object, object, PropertyInfo>>()\n            {\n                [typeof(Difficulty)] = new Action<object, object, PropertyInfo>((dst, src, prop) =>\n                {\n                    var value = (Difficulty)prop.GetValue(src);\n                    if (((ISaveKh2)dst).IsFinalMix == false && value == Difficulty.Critical)\n                        value = Difficulty.Proud; // Downgrade difficulty for non-FinalMix\n                    prop.SetValue(dst, value);\n                }),\n                [typeof(IDriveForm[])] = new Action<object, object, PropertyInfo>((dst, src, prop) =>\n                {\n                    var isDstFinalMix = ((ISaveKh2)dst).IsFinalMix;\n                    var isSrcFinalMix = ((ISaveKh2)src).IsFinalMix;\n                    if (isDstFinalMix == isSrcFinalMix)\n                        CopySame(((ISaveKh2)dst).DriveForms, ((ISaveKh2)src).DriveForms);\n                    else if (isDstFinalMix)\n                        CopyFromVanilla(((ISaveKh2)dst).DriveForms, ((ISaveKh2)src).DriveForms);\n                    else if (isSrcFinalMix)\n                        CopyFromFinalMix(((ISaveKh2)dst).DriveForms, ((ISaveKh2)src).DriveForms);\n                }),\n            }\n            .Concat(TransferServiceLL.DefaultMappings)\n            .GroupBy(x => x.Key)\n            .ToDictionary(x => x.Key, x => x.First().Value);\n\n        private static void CopySame(IDriveForm[] dst, IDriveForm[] src)\n        {\n            var length = Math.Min(dst.Length, src.Length);\n            for (var i = 0; i < length; i++)\n                TransferServiceLL.CopySave<IDriveForm>(dst[i], src[i], TransferMappings);\n        }\n\n        private static void CopyFromVanilla(IDriveForm[] dst, IDriveForm[] src)\n        {\n            var limitDriveForm = new DriveFormFinalMix(); // creates a default Limit\n            limitDriveForm.Level = 1;\n            limitDriveForm.Abilities = new ushort[0x18];\n            limitDriveForm.Abilities[0] = 0x8234;\n            limitDriveForm.Abilities[1] = 0x8239;\n            limitDriveForm.Abilities[2] = 0x823A;\n            limitDriveForm.Abilities[3] = 0x823B;\n            limitDriveForm.Abilities[4] = 0x823C;\n            limitDriveForm.Abilities[5] = 0x823D;\n            limitDriveForm.Abilities[6] = 0x823E;\n            limitDriveForm.Abilities[7] = 0x823F;\n            limitDriveForm.Abilities[8] = 0x824B;\n            limitDriveForm.Abilities[9] = 0x824C;\n            limitDriveForm.Abilities[10] = 0x824D;\n            limitDriveForm.Abilities[11] = 0x8052;\n            limitDriveForm.Abilities[12] = 0x8106;\n            limitDriveForm.Abilities[13] = 0x8108;\n            limitDriveForm.Abilities[14] = 0x810D;\n            limitDriveForm.Abilities[15] = 0x819C;\n            limitDriveForm.Abilities[16] = 0x8195;\n            limitDriveForm.Abilities[17] = 0x8197;\n            limitDriveForm.Abilities[18] = 0x819D;\n            dst[2] = limitDriveForm;\n\n            TransferServiceLL.CopySave<IDriveForm>(dst[0], src[0], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[1], src[1], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[3], src[2], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[4], src[3], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[5], src[4], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[6], src[5], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[7], src[6], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[8], src[7], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[9], src[8], TransferMappings);\n        }\n\n        private static void CopyFromFinalMix(IDriveForm[] dst, IDriveForm[] src)\n        {\n            TransferServiceLL.CopySave<IDriveForm>(dst[0], src[0], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[1], src[1], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[2], src[3], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[3], src[4], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[4], src[5], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[5], src[6], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[6], src[7], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[7], src[8], TransferMappings);\n            TransferServiceLL.CopySave<IDriveForm>(dst[8], src[9], TransferMappings);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/SaveKh2.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib2\n{\n    public partial class SaveKh2\n    {\n        internal static IBinaryMapping Mapper;\n\n        static SaveKh2()\n        {\n            Mapper = MappingConfiguration\n                .DefaultConfiguration()\n                .ForType<TimeSpan>(\n                    x => new TimeSpan(0, 0, 0, x.Reader.ReadInt32(), 0),\n                    x => x.Writer.Write((int)((TimeSpan)x.Item).TotalSeconds)\n                )\n                .Build();\n        }\n\n        public static bool IsValid(Stream stream)\n        {\n            var prevPosition = stream.Position;\n            var magicCode = new BinaryReader(stream).ReadUInt32();\n            stream.Position = prevPosition;\n\n            switch (magicCode)\n            {\n                case Constants.MagicCodeJp:\n                case Constants.MagicCodeUs:\n                case Constants.MagicCodeEu:\n                    return true;\n                default:\n                    return false;\n            }\n        }\n\n        public static GameVersion? GetGameVersion(Stream stream)\n        {\n            if (!IsValid(stream))\n                return null;\n\n            var prevPosition = stream.Position;\n            stream.Position = 4;\n            var version = new BinaryReader(stream).ReadUInt32();\n            stream.Position = prevPosition;\n\n            switch ((GameVersion)version)\n            {\n                case GameVersion.Japanese:\n                case GameVersion.American:\n                case GameVersion.FinalMix:\n                    return (GameVersion)version;\n                default:\n                    return null;\n            }\n        }\n\n        private static TSaveKh2 Read<TSaveKh2>(Stream stream)\n            where TSaveKh2 : class, ISaveKh2 =>\n            BinaryMapping.ReadObject<TSaveKh2>(stream.FromBegin());\n\n        public static ISaveKh2 Read(Stream stream)\n        {\n            switch (GetGameVersion(stream))\n            {\n                case GameVersion.Japanese:\n                    throw new NotImplementedException(\"Japanese save file is not yet supported.\");\n                case GameVersion.American:\n                    return Read<SaveEuropean>(stream);\n                case GameVersion.FinalMix:\n                    return Read<SaveFinalMix>(stream);\n                case null:\n                    throw new NotImplementedException(\"An invalid version has been specified.\");\n                default:\n                    throw new NotImplementedException(\"The version has been recognized but it is not supported.\");\n            }\n        }\n\n        public static void Write<TSaveKh2>(Stream stream, TSaveKh2 save)\n            where TSaveKh2 : class, ISaveKh2\n        {\n            uint checksum;\n            using (var tempStream = new MemoryStream())\n            {\n                save.Write(tempStream);\n                var rawData = tempStream.SetPosition(0xc).ReadBytes();\n                // Calculate checksum of Magiccode and Version.\n                checksum = CalculateChecksum(tempStream.FromBegin().ReadBytes(8), 8, uint.MaxValue);\n                // Calculate checksum of the rest of the gamedata.\n                checksum = CalculateChecksum(rawData, rawData.Length, checksum ^ uint.MaxValue);\n            }\n\n            save.Checksum = checksum;\n            save.Write(stream.FromBegin());\n        }\n\n        private const int CrcPolynomial = 0x04c11db7;\n        private static uint[] crc_table = GetCrcTable(CrcPolynomial)\n                .Take(0x100)\n                .ToArray();\n\n        public static uint CalculateChecksum(byte[] data, int offset, uint checksum)\n        {\n            for (var i = 0; i < offset; i++)\n                checksum = crc_table[(checksum >> 24) ^ data[i]] ^ (checksum << 8);\n\n            return checksum ^ uint.MaxValue;\n        }\n\n        private static IEnumerable<uint> GetCrcTable(int polynomial)\n        {\n            for (var x = 0; ; x++)\n            {\n                var r = x << 24;\n                for (var j = 0; j < 0xff; j++)\n                    r = r << 1 ^ (r < 0 ? polynomial : 0);\n                yield return (uint)r;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Types/AbilityStyleType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib2.Types\n{\n    public enum AbilityStyleType : byte\n    {\n        [Info(\"Free\")] Free,\n        [Info(\"Well-Balanced\")] WellBalanced,\n        [Info(\"Rare\")] Rare,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Types/BattleStyleType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib2.Types\n{\n    public enum BattleStyleType : byte\n    {\n        [CombatStyle(\"Technic Attack\")] TechnicAttack,\n        [CombatStyle(\"Target Attack\")] TargetAttack,\n        [CombatStyle(\"Huddle Attack\")] HuddleAttack,\n        [CombatStyle(\"Party Attack\")] PartyAttack,\n        [CombatStyle(\"Sora Attack\")] SoraAttack,\n        [CombatStyle(\"Relentless Attack\")] RentlessAttack,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Types/CharacterType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib2.Types\n{\n    public enum CharacterType\n    {\n        [Info] Sora,\n        [Info] Donald,\n        [Info] Goofy,\n        [Info] Mickey,\n        [Info] Auron,\n        [Info] Mulan,\n        [Info] Aladdin,\n        [Info(\"Jack Sparrow\")] JackSparrow,\n        [Info] Beast,\n        [Info] Jack,\n        [Info] Simba,\n        [Info] Tron,\n        [Info] Riku,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Types/CommandType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib2.Types\n{\n    public enum CommandType : short\n    {\n        Empty,\n        Attack,\n        Magic,\n        Items,\n        Drive,\n        Revert,\n        ValorForm,\n        WisdomForm,\n        Talk = 10,\n        MasterForm,\n        FinalForm,\n        Antiform,\n        Examine,\n\n\n        [Consumable(\"Hi-Potion\")] HiPotion = 0x14,\n        [Consumable(\"Ether\")] Ether,\n        [Consumable(\"Elixir\")] Elixir,\n        [Consumable(\"Potion\")] Potion,\n        Reversal,\n        FullSwing,\n        Tackle,\n        Snag,\n        SparkleRay,\n        [Magic(\"Firaga\")] Firaga = 0x78,\n        [Magic(\"Blizzaga\")] Blizzaga = 0x7a,\n        [Magic(\"Thundaga\")] Thundaga = 0x7c,\n        [Magic(\"Curaga\")] Curaga = 0x7e,\n        [Magic(\"Magnega\")] Magnega = 0xb0,\n        [Magic(\"Reflega\")] Reflega = 0xb3,\n        [Consumable(\"Mega-Potion\")] MegaPotion = 0xf2,\n        [Consumable(\"Mega-Ether\")] MegaEther = 0xf3,\n        [Consumable(\"Megalixir\")] Megalixir = 0xf4,\n        LimitForm = 673\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Types/DifficultyType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib2.Types\n{\n    public enum Difficulty : byte\n    {\n        [Info] Beginner,\n        [Info] Standard,\n        [Info] Proud,\n        [Info] Critical\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Types/DriveFormType.cs",
    "content": "namespace KHSave.Lib2.Types\n{\n    public enum DriveFormType\n    {\n        Valor,\n        Wisdom,\n        Limit,\n        Master,\n        Final,\n        Antiform,\n        Lion,\n        Unused7,\n        Unused8,\n        Roxas\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Types/EquipmentType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib2.Types\n{\n    public enum EquipmentType : short\n    {\n        [Info] Empty,\n        [Consumable(\"Potion\")] Potion,\n        [Consumable(\"Hi-Potion\")] HiPotion,\n        [Consumable(\"Ether\")] Ether,\n        [Consumable(\"Elixir\")] Elixir,\n        [Consumable(\"Mega-Potion\")] MegaPotion,\n        [Consumable(\"Mega-Ether\")] MegaEther,\n        [Consumable(\"Megalixir\")] Megalixir,\n        [Accessory(\"Ability Ring\")] AbilityRing,\n        [Accessory(\"Engineer´s Ring\")] EngineersRing,\n        [Accessory(\"Technician´s Ring\")] TechniciansRing,\n        [Accessory(\"Expert´s Ring\")] ExpertsRing,\n        [Accessory(\"Sardonyx Ring\")] SardonyxRing,\n        [Accessory(\"Tourmaline Ring\")] TourmalineRing,\n        [Accessory(\"Aquamarine Ring\")] AquamarineRing,\n        [Accessory(\"Garnet Ring\")] GarnetRing,\n        [Accessory(\"Diamond Ring\")] DiamondRing,\n        [Accessory(\"Silver Ring\")] SilverRing,\n        [Accessory(\"Gold Ring\")] GoldRing,\n        [Accessory(\"Platinum Ring\")] PlatinumRing,\n        [Accessory(\"Mythril Ring\")] MythrilRing,\n        [Magic(\"Fire Element\")] FireElement,\n        [Magic(\"Blizzard Element\")] BlizzardElement,\n        [Magic(\"Thunder Element\")] ThunderElement,\n        [Magic(\"Cure Element\")] CureElement,\n        [Summon(\"Ukulele Charm\")] UkuleleCharm,\n        [Form(\"Valor Form\")] ValorForm,\n        [Form(\"Wisdom Form\")] WisdomForm,\n        [Accessory(\"Orichalcum Ring\")] OrichalcumRing,\n        [Form(\"Final Form\")] FinalForm,\n        [Form(\"Antiform\")] Antiform,\n        [Form(\"Master Form\")] MasterForm,\n        [Recipe(\"Torn Pages\")] TornPages,\n        [Unused] Unused021,\n        [Accessory(\"Master´s Ring\")] MastersRing,\n        [Accessory(\"Moon Amulet\")] MoonAmulet,\n        [Accessory(\"Star Charm\")] StarCharm,\n        [Unused] Unused025,\n        [Accessory(\"Skill Ring\")] SkillRing,\n        [Accessory(\"Skillful Ring\")] SkillfulRing,\n        [Accessory(\"Soldier Earring\")] SoldierEarring,\n        [Keyblade(\"Kingdom Key\")] KingdomKey,\n        [Keyblade(\"Oathkeeper\")] Oathkeeper,\n        [Keyblade(\"Oblivion\")] Oblivion,\n        [Keyblade(\"Detection Saber\")] DetectionSaber,\n        [Keyblade(\"Frontier of Ultima\")] FrontierOfUltima,\n        [Accessory(\"Fencer Earring\")] FencerEarring,\n        [Accessory(\"Mage Earring\")] MageEarring,\n        [Accessory(\"Slayer Earring\")] SlayerEarring,\n        [Shield(\"Knight´s Shield\")] KnightsShield,\n        [Shield(\"Detection Shield\")] DetectionShield,\n        [Shield(\"Test the King\")] TestTheKing,\n        [Accessory(\"Cosmic Ring\")] CosmicRing,\n        [Accessory(\"Medal\")] Medal,\n        [Weapon(\"Battlefields of War\")] BattlefieldsOfWar,\n        [Weapon(\"Sword of the Ancestor\")] SwordOfTheAncestor,\n        [Accessory(\"Cosmic Arts\")] CosmicArts,\n        [Accessory(\"Shadow Archive\")] ShadowArchive,\n        [Accessory(\"Shadow Archive+\")] ShadowArchivePlus,\n        [Weapon(\"Beast´s Claw\")] BeastsClaw,\n        [Weapon(\"Bone Fist\")] BoneFist,\n        [Weapon(\"Proud Fang\")] ProudFang,\n        [Weapon(\"Skill and Crossbones\")] SkillAndCrossbones,\n        [Accessory(\"Lucky Ring\")] LuckyRing,\n        [Accessory(\"Full Bloom\")] FullBloom,\n        [Accessory(\"Draw Ring\")] DrawRing,\n        [Accessory(\"Full Bloom+\")] FullBloomPlus,\n        [Armor(\"Elven Bandanna\")] ElvenBandanna,\n        [Armor(\"Divine Bandanna\")] DivineBandanna,\n        [Armor(\"Power Band\")] PowerBand,\n        [Armor(\"Buster Band\")] BusterBand,\n        [Keyblade(\"Antiform Dummy\")] AntiformDummy,\n        [Weapon(\"Scimitar\")] Scimitar,\n        [Weapon(\"Way to the Dawn\")] WayToTheDawn,\n        [Weapon(\"Identity Disk\")] IdentityDisk,\n        [Staff(\"Mage´s Staff\")] MagesStaff,\n        [Unused] Unused04C,\n        [Unused] Unused04D,\n        [Armor(\"Protect Belt\")] ProtectBelt,\n        [Armor(\"Gaia Belt\")] GaiaBelt,\n        [Weapon(\"Unused Weapon\")] Unused050,\n        [Keyblade(\"Kingdom Key W\")] KingdomKeyW,\n        [AbilityAction(\"Guard\")] Guard,\n        [Unused] Unused053,\n        [Unused] Unused054,\n        [Unused] Unused055,\n        [Unused] Unused056,\n        [Magic(\"Magnet Element\")] MagnetElement,\n        [Magic(\"Reflect Element\")] ReflectElement,\n        [Map(\"Navigational Map\")] NavigationalMap,\n        [Map(\"Castle Map\")] CastleMap,\n        [Map(\"Basement Map\")] BasementMap,\n        [Map(\"Castle Walls Map\")] CastleWallsMap,\n        [Unused] Unused05D,\n        [AbilityMobility(\"High Jump LV1\")] HighJumpLV1,\n        [AbilityMobility(\"High Jump LV2\")] HighJumpLV2,\n        [AbilityMobility(\"High Jump LV3\")] HighJumpLV3,\n        [AbilityMobility(\"High Jump MAX\")] HighJumpMAX,\n        [AbilityMobility(\"Quick Run LV1\")] QuickRunLV1,\n        [AbilityMobility(\"Quick Run LV2\")] QuickRunLV2,\n        [AbilityMobility(\"Quick Run LV3\")] QuickRunLV3,\n        [AbilityMobility(\"Quick Run MAX\")] QuickRunMAX,\n        [AbilityMobility(\"Aerial Dodge LV1\")] AerialDodgeLV1,\n        [AbilityMobility(\"Aerial Dodge LV2\")] AerialDodgeLV2,\n        [AbilityMobility(\"Aerial Dodge LV3\")] AerialDodgeLV3,\n        [AbilityMobility(\"Aerial Dodge MAX\")] AerialDodgeMAX,\n        [AbilityMobility(\"Glide LV1\")] GlideLV1,\n        [AbilityMobility(\"Glide LV2\")] GlideLV2,\n        [AbilityMobility(\"Glide LV3\")] GlideLV3,\n        [AbilityMobility(\"Glide MAX\")] GlideMAX,\n        [Unused] Unused06E,\n        [Armor(\"Cosmic Belt\")] CosmicBelt,\n        [Map(\"Encampment Area Map\")] EncampmentAreaMap,\n        [Map(\"Village Area Map\")] VillageAreaMap,\n        [Map(\"Cornerstone Hill Map\")] CornerstoneHillMap,\n        [Map(\"Window of Time Map 2\")] WindowOfTimeMap2,\n        [Map(\"Lilliput Map\")] LilliputMap,\n        [Map(\"Building Site Map\")] BuildingSiteMap,\n        [Map(\"Mickey´s House Map\")] MickeysHouseMap,\n        [Map(\"Disney Castle Map\")] DisneyCastleMap,\n        [Map(\"Agrabah Map\")] AgrabahMap,\n        [Map(\"Cave of Wonders Map\")] CaveOfWondersMap,\n        [Map(\"Ruins Map\")] RuinsMap,\n        [Map(\"Undersea Kingdom Map\")] UnderseaKingdomMap,\n        [Map(\"Starry Hill\")] StarryHill,\n        [Map(\"100 Acre Wood Map\")] HundredAcreWoodMap,\n        [Map(\"Rabbit´s Howse Map\")] RabbitsHowseMap,\n        [Map(\"Piglet´s Howse Map\")] PigletsHowseMap,\n        [Map(\"Kanga´s Howse Map\")] KangasHowseMap,\n        [Map(\"Spooky Cave Map\")] SpookyCaveMap,\n        [Map(\"Palace Map\")] PalaceMap,\n        [Boost(\"Tent\")] Tent,\n        [Armor(\"Shock Charm\")] ShockCharm,\n        [Armor(\"Shock Charm+\")] ShockCharmPlus,\n        [Map(\"Coliseum Map\")] ColiseumMap,\n        [Map(\"Underworld Map\")] UnderworldMap,\n        [Map(\"Caverns Map\")] CavernsMap,\n        [AbilityAction(\"Upper Slash\")] UpperSlash,\n        [AbilitySupport(\"Scan\")] Scan,\n        [Shield(\"Adamant Shield\")] AdamantShield,\n        [Shield(\"Chain Gear\")] ChainGear,\n        [Shield(\"Ogre Shield\")] OgreShield,\n        [Shield(\"Falling Star\")] FallingStar,\n        [Shield(\"Dreamcloud\")] Dreamcloud,\n        [Shield(\"Knight Defender\")] KnightDefender,\n        [Shield(\"Genji Shield\")] GenjiShield,\n        [Shield(\"Akashic Record\")] AkashicRecord,\n        [Shield(\"Nobody Guard\")] NobodyGuard,\n        [Staff(\"Hammer Staff\")] HammerStaff,\n        [Staff(\"Victory Bell\")] VictoryBell,\n        [Staff(\"Meteor Staff\")] MeteorStaff,\n        [Staff(\"Comet Staff\")] CometStaff,\n        [Staff(\"Lord´s Broom\")] LordsBroom,\n        [Staff(\"Wisdom Wand\")] WisdomWand,\n        [Staff(\"Rising Dragon\")] RisingDragon,\n        [Staff(\"Nobody Lance\")] NobodyLance,\n        [Staff(\"Shaman´s Relic\")] ShamansRelic,\n        [Armor(\"Grand Ribbon\")] GrandRibbon,\n        [AbilitySupport(\"Aerial Recovery\")] AerialRecovery,\n        [Summon(\"Lamp Charm\")] LampCharm,\n        [Summon(\"Feather Charm\")] FeatherCharm,\n        [Staff(\"Staff of Detection\")] StaffOfDetection,\n        [AbilitySupport(\"Combo Plus\")] ComboPlus,\n        [AbilitySupport(\"Air Combo Plus\")] AirComboPlus,\n        [Unused] Unused0A4,\n        [AbilityAction(\"Donald Fire\")] DonaldFire,\n        [AbilityAction(\"Donald Blizzard\")] DonaldBlizzard,\n        [AbilityAction(\"Donald Thunder\")] DonaldThunder,\n        [AbilityAction(\"Donald Cure\")] DonaldCure,\n        [Unused] Unused0A9,\n        [Unused] Unused0AA,\n        [Unused] Unused0AB,\n        [Unused] Unused0AC,\n        [Armor(\"Fire Bangle\")] FireBangle,\n        [Armor(\"Fira Bangle\")] FiraBangle,\n        [Unused] Unused0AF,\n        [AbilityAction(\"Healing Water\")] HealingWater,\n        [AbilityAction(\"Furious Shout\")] FuriousShout,\n        [Unused] Unused0B2,\n        [Unused] Unused0B3,\n        [Unused] Unused0B4,\n        [Unused] Unused0B5,\n        [Unused] Unused0B6,\n        [Unused] Unused0B7,\n        [Unused] Unused0B8,\n        [Unused] Unused0B9,\n        [Unused] Unused0BA,\n        [AbilityAction(\"Cure Potion\")] CurePotion,\n        [Unused] Unused0BC,\n        [Unused] Unused0BD,\n        [AbilityAction(\"Healing Herb\")] HealingHerb,\n        [Unused] Unused0BF,\n        [Unused] Unused0C0,\n        [Unused] Unused0C1,\n        [Unused] Unused0C2,\n        [AbilityAction(\"Slow 3\")] Slow3,\n        [Unused] Unused0C4,\n        [Armor(\"Firaga Bangle\")] FiragaBangle,\n        [AbilityAction(\"Trinity Limit\")] TrinityLimit,\n        [AbilityAction(\"Fantasia\")] Fantasia,\n        [AbilityAction(\"Flare Force\")] FlareForce,\n        [AbilityAction(\"Tornado Fusion\")] TornadoFusion,\n        [AbilityAction(\"Teamwork\")] Teamwork,\n        [AbilityAction(\"Trick Fantasy\")] TrickFantasy,\n        [AbilityAction(\"Overdrive\")] Overdrive,\n        [AbilityAction(\"Howling Moon\")] HowlingMoon,\n        [AbilityAction(\"Applause, Applause\")] ApplauseApplause,\n        [AbilityAction(\"Dragonblaze\")] Dragonblaze,\n        [AbilityAction(\"Eternal Session\")] EternalSession,\n        [AbilityAction(\"King´s Pride\")] KingsPride,\n        [AbilityAction(\"Treasure Isle\")] TreasureIsle,\n        [AbilityAction(\"Complete Compilement\")] CompleteCompilement,\n        [Unused] Unused0D4,\n        [Unused] Unused0D5,\n        [Unused] Unused0D6,\n        [AbilityAction(\"Pulsing Thunder\")] PulsingThunder,\n        [AbilityAction(\"Brave Shot\")] BraveShot,\n        [AbilityAction(\"Brave Beat\")] BraveBeat,\n        [AbilityAction(\"Sonic Strike\")] SonicStrike,\n        [AbilityAction(\"Sonic End\")] SonicEnd,\n        [AbilityAction(\"Wisdom Shot\")] WisdomShot,\n        [AbilityAction(\"Mobile Action\")] MobileAction,\n        [Unused] Unused0DE,\n        [AbilityAction(\"Synch Blade\")] SynchBlade,\n        [AbilityAction(\"Magic Haste\")] MagicHaste,\n        [AbilityAction(\"Magic Spice\")] MagicSpice,\n        [Report(\"Secret Ansem Report 1\")] SecretAnsemReport1,\n        [Report(\"Secret Ansem Report 2\")] SecretAnsemReport2,\n        [Report(\"Secret Ansem Report 3\")] SecretAnsemReport3,\n        [Report(\"Secret Ansem Report 4\")] SecretAnsemReport4,\n        [Report(\"Secret Ansem Report 5\")] SecretAnsemReport5,\n        [Report(\"Secret Ansem Report 6\")] SecretAnsemReport6,\n        [Report(\"Secret Ansem Report 7\")] SecretAnsemReport7,\n        [Report(\"Secret Ansem Report 8\")] SecretAnsemReport8,\n        [Report(\"Secret Ansem Report 9\")] SecretAnsemReport9,\n        [Report(\"Secret Ansem Report 10\")] SecretAnsemReport10,\n        [Report(\"Secret Ansem Report 11\")] SecretAnsemReport11,\n        [Report(\"Secret Ansem Report 12\")] SecretAnsemReport12,\n        [Report(\"Secret Ansem Report 13\")] SecretAnsemReport13,\n        [Unused] Unused0EF,\n        [Unused] Unused0F0,\n        [Unused] Unused0F1,\n        [Unused] Unused0F2,\n        [Unused] Unused0F3,\n        [Unused] Unused0F4,\n        [Unused] Unused0F5,\n        [AbilityAction(\"Over the Horizon\")] OverTheHorizon,\n        [AbilityAction(\"Omega Finale\")] OmegaFinale,\n        [AbilityAction(\"Reflect Dummy\")] ReflectDummy,\n        [AbilityAction(\"Upper Dummy\")] UpperDummy,\n        [Map(\"Halloween Town Map\")] HalloweenTownMap,\n        [Map(\"Naval Map\")] NavalMap,\n        [Map(\"Pride Rock Map\")] PrideRockMap,\n        [Map(\"Marketplace Map\")] MarketplaceMap,\n        [Map(\"Pit Cell Area Map\")] PitCellAreaMap,\n        [Map(\"Twilight Town Map\")] TwilightTownMap,\n        [Map(\"Dark City Map\")] DarkCityMap,\n        [AbilityAction(\"Master Strike\")] MasterStrike,\n        [AbilityAction(\"Disaster\")] Disaster,\n        [AbilitySupport(\"Endless Magic\")] EndlessMagic,\n        [Unused] Unused104,\n        [AbilityAction(\"Master Magic\")] MasterMagic,\n        [AbilityAction(\"Slapshot\")] Slapshot,\n        [AbilityAction(\"Dodge Slash\")] DodgeSlash,\n        [AbilityAction(\"Slide Dash\")] SlideDash,\n        [AbilityAction(\"Guard Break\")] GuardBreak,\n        [AbilityAction(\"Explosion\")] Explosion,\n        [AbilityAction(\"Finishing Leap\")] FinishingLeap,\n        [AbilityAction(\"Counterguard\")] Counterguard,\n        [AbilityAction(\"Aerial Sweep\")] AerialSweep,\n        [AbilityAction(\"Aerial Spiral\")] AerialSpiral,\n        [AbilityAction(\"Horizontal Slash\")] HorizontalSlash,\n        [AbilityAction(\"Aerial Finish\")] AerialFinish,\n        [AbilityAction(\"Retaliating Slash\")] RetaliatingSlash,\n        [Boost(\"Drive Recovery\")] DriveRecovery,\n        [Boost(\"High Drive Recovery\")] HighDriveRecovery,\n        [Boost(\"Power Boost\")] PowerBoost,\n        [Boost(\"Magic Boost\")] MagicBoost,\n        [Boost(\"Defense Boost\")] DefenseBoost,\n        [Boost(\"AP Boost\")] APBoost,\n        [Synthesis(\"Dark Shard\")] DarkShard,\n        [Synthesis(\"Dark Stone\")] DarkStone,\n        [Synthesis(\"Dark Gem\")] DarkGem,\n        [Synthesis(\"Dark Crystal\")] DarkCrystal,\n        [Armor(\"Firagun Bangle\")] FiragunBangle,\n        [Unused] Unused11D,\n        [Armor(\"Blizzard Armlet\")] BlizzardArmlet,\n        [Armor(\"Blizzara Armlet\")] BlizzaraArmlet,\n        [Armor(\"Blizzaga Armlet\")] BlizzagaArmlet,\n        [Armor(\"Blizzagun Armlet\")] BlizzagunArmlet,\n        [Unused] Unused122,\n        [Armor(\"Thunder Trinket\")] ThunderTrinket,\n        [Armor(\"Thundara Trinket\")] ThundaraTrinket,\n        [Armor(\"Thundaga Trinket\")] ThundagaTrinket,\n        [Armor(\"Thundagun Trinket\")] ThundagunTrinket,\n        [Unused] Unused127,\n        [Armor(\"Shadow Anklet\")] ShadowAnklet,\n        [Armor(\"Dark Anklet\")] DarkAnklet,\n        [Armor(\"Midnight Anklet\")] MidnightAnklet,\n        [Armor(\"Chaos Anklet\")] ChaosAnklet,\n        [Unused] Unused12C,\n        [Armor(\"Abas Chain\")] AbasChain,\n        [Armor(\"Aegis Chain\")] AegisChain,\n        [Armor(\"Acrisius\")] Acrisius,\n        [Armor(\"Ribbon\")] Ribbon,\n        [Armor(\"Champion Belt\")] ChampionBelt,\n        [Armor(\"Petite Ribbon\")] PetiteRibbon,\n        [Armor(\"Acrisius+\")] AcrisiusPlus,\n        [Armor(\"Cosmic Chain\")] CosmicChain,\n        [Unused] Unused135,\n        [Unused] Unused136,\n        [Unused] Unused137,\n        [Unused] Unused138,\n        [Unused] Unused139,\n        [Unused] Unused13A,\n        [Unused] Unused13B,\n        [Unused] Unused13C,\n        [Synthesis(\"Blazing Shard\")] BlazingShard,\n        [Synthesis(\"Blazing Stone\")] BlazingStone,\n        [Synthesis(\"Blazing Gem\")] BlazingGem,\n        [Synthesis(\"Blazing Crystal\")] BlazingCrystal,\n        [Unused] Unused141,\n        [Unused] Unused142,\n        [Unused] Unused143,\n        [Unused] Unused144,\n        [Synthesis(\"Lightning Shard\")] LightningShard,\n        [Synthesis(\"Lightning Stone\")] LightningStone,\n        [Synthesis(\"Lightning Gem\")] LightningGem,\n        [Synthesis(\"Lightning Crystal\")] LightningCrystal,\n        [Synthesis(\"Power Shard\")] PowerShard,\n        [Synthesis(\"Power Stone\")] PowerStone,\n        [Synthesis(\"Power Gem\")] PowerGem,\n        [Synthesis(\"Power Crystal\")] PowerCrystal,\n        [Synthesis(\"Lucid Shard\")] LucidShard,\n        [Synthesis(\"Lucid Stone\")] LucidStone,\n        [Synthesis(\"Lucid Gem\")] LucidGem,\n        [Synthesis(\"Lucid Crystal\")] LucidCrystal,\n        [Synthesis(\"Dense Shard\")] DenseShard,\n        [Synthesis(\"Dense Stone\")] DenseStone,\n        [Synthesis(\"Dense Gem\")] DenseGem,\n        [Synthesis(\"Dense Crystal\")] DenseCrystal,\n        [Synthesis(\"Twilight Shard\")] TwilightShard,\n        [Synthesis(\"Twilight Stone\")] TwilightStone,\n        [Synthesis(\"Twilight Gem\")] TwilightGem,\n        [Synthesis(\"Twilight Crystal\")] TwilightCrystal,\n        [Synthesis(\"Mythril Shard\")] MythrilShard,\n        [Synthesis(\"Mythril Stone\")] MythrilStone,\n        [Synthesis(\"Mythril Gem\")] MythrilGem,\n        [Synthesis(\"Mythril Crystal\")] MythrilCrystal,\n        [Synthesis(\"Bright Shard\")] BrightShard,\n        [Synthesis(\"Bright Stone\")] BrightStone,\n        [Synthesis(\"Bright Gem\")] BrightGem,\n        [Synthesis(\"Bright Crystal\")] BrightCrystal,\n        [Synthesis(\"Energy Shard\")] EnergyShard,\n        [Synthesis(\"Energy Stone\")] EnergyStone,\n        [Synthesis(\"Energy Gem\")] EnergyGem,\n        [Synthesis(\"Energy Crystal\")] EnergyCrystal,\n        [Synthesis(\"Serenity Shard\")] SerenityShard,\n        [Synthesis(\"Serenity Stone\")] SerenityStone,\n        [Synthesis(\"Serenity Gem\")] SerenityGem,\n        [Synthesis(\"Serenity Crystal\")] SerenityCrystal,\n        [Synthesis(\"Orichalcum+\")] OrichalcumPlus,\n        [Recipe(\"Munny Pouch\")] MunnyPouch,\n        [Recipe(\"Crystal Orb\")] CrystalOrb,\n        [Recipe(\"Seifer´s Trophy\")] SeifersTrophy,\n        [Recipe(\"Tournament Poster\")] TournamentPoster,\n        [Recipe(\"Poster\")] Poster,\n        [Recipe(\"Letter\")] Letter,\n        [Recipe(\"Naminé´s Sketches\")] NaminésSketches,\n        [Recipe(\"Membership Card\")] MembershipCard,\n        [Recipe(\"Olympus Stone\")] OlympusStone,\n        [Recipe(\"Auron´s Statue\")] AuronsStatue,\n        [Recipe(\"Cursed Medallion\")] CursedMedallion,\n        [Recipe(\"Present\")] Present,\n        [Recipe(\"Decoy Presents\")] DecoyPresents,\n        [Recipe(\"Ice Cream\")] IceCream,\n        [Recipe(\"Picture\")] Picture,\n        [Synthesis(\"Orichalcum\")] Orichalcum,\n        [Synthesis(\"Frost Shard\")] FrostShard,\n        [Synthesis(\"Frost Stone\")] FrostStone,\n        [Synthesis(\"Frost Gem\")] FrostGem,\n        [Synthesis(\"Frost Crystal\")] FrostCrystal,\n        [Recipe(\"Mega-Recipe\")] MegaRecipe,\n        [Summon(\"Baseball Charm\")] BaseballCharm,\n        [Keyblade(\"Struggle Sword\")] StruggleSword,\n        [AbilityAction(\"Auto Valor\")] AutoValor,\n        [AbilityAction(\"Auto Wisdom\")] AutoWisdom,\n        [AbilityAction(\"Auto Master\")] AutoMaster,\n        [AbilityAction(\"Auto Final\")] AutoFinal,\n        [AbilityAction(\"Auto Summon\")] AutoSummon,\n        [AbilitySupport(\"Combo Boost\")] ComboBoost,\n        [AbilitySupport(\"Air Combo Boost\")] AirComboBoost,\n        [AbilitySupport(\"Reaction Boost\")] ReactionBoost,\n        [AbilitySupport(\"Finishing Plus\")] FinishingPlus,\n        [AbilitySupport(\"Negative Combo\")] NegativeCombo,\n        [AbilitySupport(\"Berserk Charge\")] BerserkCharge,\n        [AbilitySupport(\"Damage Drive\")] DamageDrive,\n        [AbilitySupport(\"Drive Boost\")] DriveBoost,\n        [AbilitySupport(\"Form Boost\")] FormBoost,\n        [AbilitySupport(\"Summon Boost\")] SummonBoost,\n        [AbilitySupport(\"Combination Boost\")] CombinationBoost,\n        [AbilitySupport(\"Experience Boost\")] ExperienceBoost,\n        [AbilitySupport(\"Leaf Bracer\")] LeafBracer,\n        [AbilitySupport(\"Magic Lock-On\")] MagicLockOn,\n        [AbilitySupport(\"No Experience\")] NoExperience,\n        [AbilitySupport(\"Draw\")] Draw,\n        [AbilitySupport(\"Jackpot\")] Jackpot,\n        [AbilitySupport(\"Lucky Lucky\")] LuckyLucky,\n        [AbilitySupport(\"Fire Boost\")] FireBoost,\n        [AbilitySupport(\"Blizzard Boost\")] BlizzardBoost,\n        [AbilitySupport(\"Thunder Boost\")] ThunderBoost,\n        [AbilitySupport(\"Item Boost\")] ItemBoost,\n        [AbilitySupport(\"MP Rage\")] MPRage,\n        [AbilitySupport(\"MP Haste\")] MPHaste,\n        [AbilitySupport(\"Defender\")] Defender,\n        [AbilitySupport(\"Second Chance\")] SecondChance,\n        [AbilitySupport(\"Once More\")] OnceMore,\n        [AbilitySupport(\"Auto Limit\")] AutoLimit,\n        [AbilitySupport(\"Auto Change\")] AutoChange,\n        [AbilitySupport(\"Hyper Healing\")] HyperHealing,\n        [AbilitySupport(\"Auto Healing\")] AutoHealing,\n        [AbilitySupport(\"MP Hastera\")] MPHastera,\n        [AbilitySupport(\"MP Hastega\")] MPHastega,\n        [AbilityAction(\"Goofy Tornado\")] GoofyTornado,\n        [Unused] Unused1A8,\n        [AbilityAction(\"Goofy Turbo\")] GoofyTurbo,\n        [AbilityAction(\"Slash Frenzy\")] SlashFrenzy,\n        [AbilityAction(\"Quickplay\")] Quickplay,\n        [AbilityAction(\"Divider\")] Divider,\n        [AbilityAction(\"Goofy Bash\")] GoofyBash,\n        [AbilityAction(\"Ferocious Rush\")] FerociousRush,\n        [AbilityAction(\"Blazing Fury\")] BlazingFury,\n        [AbilityAction(\"Icy Terror\")] IcyTerror,\n        [AbilityAction(\"Bolts of Sorrow\")] BoltsOfSorrow,\n        [AbilityAction(\"Mushu Fire\")] MushuFire,\n        [AbilityAction(\"Flametongue\")] Flametongue,\n        [AbilityAction(\"Dark Shield\")] DarkShield,\n        [Unused] Unused1B5,\n        [AbilityAction(\"Dark Aura\")] DarkAura,\n        [AbilityAction(\"Fierce Claw\")] FierceClaw,\n        [AbilityAction(\"Groundshaker\")] Groundshaker,\n        [Unused] Unused1B9,\n        [Unused] Unused1BA,\n        [Unused] Unused1BB,\n        [AbilityAction(\"Scouting Disk\")] ScoutingDisk,\n        [AbilityAction(\"Slow 2\")] Slow2,\n        [AbilityAction(\"No Mercy\")] NoMercy,\n        [AbilityAction(\"Rain Storm\")] RainStorm,\n        [AbilityAction(\"Bone Smash\")] BoneSmash,\n        [Recipe(\"Star Recipe\")] StarRecipe,\n        [Recipe(\"Recovery Recipe\")] RecoveryRecipe,\n        [Recipe(\"Skill Recipe\")] SkillRecipe,\n        [Recipe(\"Guard Recipe\")] GuardRecipe,\n        [Recipe(\"Dummy 06\")] Dummy06,\n        [Recipe(\"Dummy 07\")] Dummy07,\n        [Recipe(\"Dummy 08\")] Dummy08,\n        [Recipe(\"Dummy 09\")] Dummy09,\n        [Recipe(\"Dummy 10\")] Dummy10,\n        [Recipe(\"Dummy 11\")] Dummy11,\n        [Recipe(\"Dummy 12\")] Dummy12,\n        [Recipe(\"Dummy 13\")] Dummy13,\n        [Recipe(\"Dummy 14\")] Dummy14,\n        [Recipe(\"Dummy 15\")] Dummy15,\n        [Recipe(\"Dummy 16\")] Dummy16,\n        [Recipe(\"Road to Discovery\")] RoadToDiscovery,\n        [Recipe(\"Strength Beyond Strength\")] StrengthBeyondStrength,\n        [Recipe(\"Book of Shadows\")] BookOfShadows,\n        [Recipe(\"Cloaked Thunder\")] CloakedThunder,\n        [Recipe(\"Eternal Blossom\")] EternalBlossom,\n        [Recipe(\"Rare Document\")] RareDocument,\n        [Recipe(\"Dummy 23\")] Dummy23,\n        [Recipe(\"Dummy 24\")] Dummy24,\n        [Recipe(\"Dummy 25\")] Dummy25,\n        [Recipe(\"Dummy 26\")] Dummy26,\n        [Recipe(\"Dummy 27\")] Dummy27,\n        [Recipe(\"Style Recipe\")] StyleRecipe,\n        [Recipe(\"Moon Recipe\")] MoonRecipe,\n        [Recipe(\"Queen Recipe\")] QueenRecipe,\n        [Recipe(\"King Recipe\")] KingRecipe,\n        [Recipe(\"Ultimate Recipe\")] UltimateRecipe,\n        [Keyblade(\"Star Seeker\")] StarSeeker,\n        [Keyblade(\"Hidden Dragon\")] HiddenDragon,\n        [Staff(\"Save the Queen\")] SaveTheQueen,\n        [Shield(\"Save the King\")] SaveTheKing,\n        [Keyblade(\"Hero´s Crest\")] HerosCrest,\n        [Keyblade(\"Monochrome\")] Monochrome,\n        [Keyblade(\"Follow the Wind\")] FollowTheWind,\n        [Keyblade(\"Circle of Life\")] CircleOfLife,\n        [Keyblade(\"Photon Debugger\")] PhotonDebugger,\n        [Keyblade(\"Gull Wing\")] GullWing,\n        [Keyblade(\"Rumbling Rose\")] RumblingRose,\n        [Keyblade(\"Guardian Soul\")] GuardianSoul,\n        [Keyblade(\"Wishing Lamp\")] WishingLamp,\n        [Keyblade(\"Decisive Pumpkin\")] DecisivePumpkin,\n        [Keyblade(\"Sleeping Lion\")] SleepingLion,\n        [Keyblade(\"Sweet Memories\")] SweetMemories,\n        [Keyblade(\"Mysterious Abyss\")] MysteriousAbyss,\n        [Keyblade(\"Fatal Crest\")] FatalCrest,\n        [Keyblade(\"Bond of Flame\")] BondOfFlame,\n        [Keyblade(\"Fenrir\")] Fenrir,\n        [Keyblade(\"Ultima Weapon\")] UltimaWeapon,\n        [Keyblade(\"Struggle Wand\")] StruggleWand,\n        [Keyblade(\"Struggle Hammer\")] StruggleHammer,\n        [Staff(\"Save the Queen+\")] SaveTheQueenPlus,\n        [Shield(\"Save the King+\")] SaveTheKingPlus,\n        [Map(\"The Interceptor Map\")] TheInterceptorMap,\n        [Map(\"The Black Pearl Map\")] TheBlackPearlMap,\n        [Map(\"Isla de Muerta Map\")] IslaDeMuertaMap,\n        [Map(\"Ship Graveyard Map\")] ShipGraveyardMap,\n        [Map(\"Christmas Town Map\")] ChristmasTownMap,\n        [Map(\"Curly Hill Map\")] CurlyHillMap,\n        [Map(\"Oasis Map\")] OasisMap,\n        [Map(\"Savannah Map\")] SavannahMap,\n        [Map(\"Castle Perimeter Map\")] CastlePerimeterMap,\n        [Map(\"The Great Maw Map\")] TheGreatMawMap,\n        [Map(\"I/O Tower Map\")] IOTowerMap,\n        [Map(\"Central Computer Core Map\")] CentralComputerCoreMap,\n        [Map(\"Solar Sailer Simulation Map\")] SolarSailerSimulationMap,\n        [Map(\"Window of Time Map\")] WindowOfTimeMap,\n        [AbilityAction(\"Auto Assault\")] AutoAssault,\n        [AbilityAction(\"Finishing Blast\")] FinishingBlast,\n        [AbilityAction(\"Combo Upper\")] ComboUpper,\n        [AbilityAction(\"Aerial Impulse\")] AerialImpulse,\n        [AbilityAction(\"Retaliating Smash\")] RetaliatingSmash,\n        [Recipe(\"Promise Charm\")] PromiseCharm,\n        [AbilityAction(\"Running Tackle\")] RunningTackle,\n        [AbilityAction(\"Dash\")] Dash,\n        [AbilityAction(\"Final Arcana\")] FinalArcana,\n        [AbilityAction(\"Final Strike\")] FinalStrike,\n        [AbilityAction(\"Final Arts\")] FinalArts,\n        [AbilityAction(\"Crime & Punishment\")] CrimeAndPunishment,\n        [Map(\"Sunset Hill Map\")] SunsetHillMap,\n        [Map(\"Mansion Map\")] MansionMap,\n        [Map(\"Tower Map\")] TowerMap,\n        [Map(\"DH Map\")] DHMap,\n        [Recipe(\"Munny Pouch\")] MunnyPouch2,\n        [Map(\"Castle That Never Was Map\")] CastleThatNeverWasMap,\n        [Recipe(\"Hades Cup Trophy\")] HadesCupTrophy,\n        [Recipe(\"The Struggle Trophy\")] TheStruggleTrophy,\n        [AbilitySupport(\"Combo Master\")] ComboMaster,\n        [AbilitySupport(\"Drive Converter\")] DriveConverter,\n        [AbilitySupport(\"Light & Darkness\")] LightAndDarkness,\n        [AbilitySupport(\"Damage Control\")] DamageControl,\n        [Keyblade(\"Two Become One\")] TwoBecomeOne,\n        [Keyblade(\"Winner's Proof\")] WinnersProof,\n        [Staff(\"Centurion\")] Centurion,\n        [Staff(\"Centurion+\")] CenturionPlus,\n        [Staff(\"Plain Mushroom\")] PlainMushroom,\n        [Staff(\"Plain Mushroom+\")] PlainMushroomPlus,\n        [Staff(\"Precious Mushroom\")] PreciousMushroom,\n        [Staff(\"Precious Mushroom+\")] PreciousMushroomPlus,\n        [Staff(\"Premium Mushroom\")] PremiumMushroom,\n        [Shield(\"Frozen Pride\")] FrozenPride,\n        [Shield(\"Frozen Pride+\")] FrozenPridePlus,\n        [Shield(\"Joyous Mushroom\")] JoyousMushroom,\n        [Shield(\"Joyous Mushroom+\")] JoyousMushroomPlus,\n        [Shield(\"Majestic Mushroom\")] MajesticMushroom,\n        [Shield(\"Majestic Mushroom+\")] MajesticMushroomPlus,\n        [Shield(\"Ultimate Mushroom\")] UltimateMushroom,\n        [AbilityAction(\"Flash Step\")] FlashStep,\n        [AbilityAction(\"Aerial Dive\")] AerialDive,\n        [AbilityAction(\"Magnet Burst\")] MagnetBurst,\n        [AbilityAction(\"Vicinity Break\")] VicinityBreak,\n        [Form(\"Limit Form\")] LimitForm,\n        [AbilityMobility(\"Dodge Roll LV 1\")] DodgeRollLV1,\n        [AbilityMobility(\"Dodge Roll LV 2\")] DodgeRollLV2,\n        [AbilityMobility(\"Dodge Roll LV 3\")] DodgeRollLV3,\n        [AbilityMobility(\"Dodge Roll MAX\")] DodgeRollMAX,\n        [AbilitySupport(\"Auto Limit\")] AutoLimit2,\n        [AbilityAction(\"Sonic Rave\")] SonicRave,\n        [AbilityAction(\"Last Arcanum\")] LastArcanum,\n        [AbilityAction(\"Strike Raid\")] StrikeRaid,\n        [AbilityAction(\"Infinity\")] Infinity,\n        [AbilityAction(\"Zantetsuken\")] Zantetsuken,\n        [AbilityAction(\"Ripple Drive\")] RippleDrive,\n        [AbilityAction(\"Hurricane Period\")] HurricanePeriod,\n        [Synthesis(\"Remembrance Shard\")] RemembranceShard,\n        [Synthesis(\"Remembrance Stone\")] RemembranceStone,\n        [Synthesis(\"Remembrance Gem\")] RemembranceGem,\n        [Synthesis(\"Remembrance Crystal\")] RemembranceCrystal,\n        [Synthesis(\"Tranquility Shard\")] TranquilityShard,\n        [Synthesis(\"Tranquility Stone\")] TranquilityStone,\n        [Synthesis(\"Tranquility Gem\")] TranquilityGem,\n        [Synthesis(\"Tranquility Crystal\")] TranquilityCrystal,\n        [Synthesis(\"Lost Illusion\")] LostIllusion,\n        [Synthesis(\"Manifest Illusion\")] ManifestIllusion,\n        [Map(\"Dark Remembrance Map\")] DarkRemembranceMap,\n        [AbilityAction(\"Zantetsu Counter\")] ZantetsuCounter,\n        [AbilityAction(\"Reflect Combo\")] ReflectCombo,\n        [AbilitySupport(\"HP Gain\")] HPGain,\n        [Map(\"Depths of Remembrance Map\")] DepthsOfRemembranceMap,\n        [Unused] Unused24F,\n        [Map(\"Garden of Assemblage Map\")] GardenOfAssemblageMap,\n        [Recipe(\"Proof of Connection\")] ProofOfConnection,\n        [Recipe(\"Proof of Nonexistence\")] ProofOfNonexistence,\n        [Recipe(\"Proof of Peace\")] ProofOfPeace,\n        [AbilitySupport(\"Protect\")] Protect,\n        [AbilitySupport(\"Protectra\")] Protectra,\n        [AbilitySupport(\"Protectga\")] Protectga,\n        [Accessory(\"Executive's Ring\")] ExecutivesRing,\n        [Staff(\"Shaman's Relic+\")] ShamansRelicPlus,\n        [Shield(\"Akashic Record+\")] AkashicRecordPlus,\n    }\n}\n\n"
  },
  {
    "path": "KHSave.Lib2/Types/GameType.cs",
    "content": "using System;\n\nnamespace KHSave.Lib2.Types\n{\n    [Flags]\n    public enum GameType\n    {\n        None,\n        Jp = 1,\n        EuUs = 2,\n        Fm = 4,\n        All = Jp | EuUs | Fm\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Types/InventoryType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib2.Types\n{\n    public enum InventoryType : int\n    {\n        [Consumable(\"Potion\")] Potion,\n        [Consumable(\"Hi-Potion\")] HiPotion,\n        [Consumable(\"Ether\")] Ether,\n        [Consumable(\"Elixir\")] Elixir,\n        [Consumable(\"Mega-Potion\")] MegaPotion,\n        [Consumable(\"Mega-Ether\")] MegaEther,\n        [Consumable(\"Megalixir\")] Megalixir,\n        [Accessory(\"Ability Ring\")] AbilityRing,\n        [Accessory(\"Engineer's Ring\")] EngineerRing,\n        [Accessory(\"Technician's Ring\")] TechnicianRing,\n        [Accessory(\"Expert Ring\")] ExpertRing,\n        [Accessory(\"Sardonyx Ring\")] SardonyxRing,\n        [Accessory(\"Tourmaline Ring\")] TourmalineRing,\n        [Accessory(\"Aquamarine Ring\")] AquamarineRing,\n        [Accessory(\"Garnet Ring\")] GarnetRing,\n        [Accessory(\"Diamond Ring\")] DiamondRing,\n        [Accessory(\"Silver Ring\")] SilverRing,\n        [Accessory(\"Gold Ring\")] GoldRing,\n        [Accessory(\"Platinum Ring\")] PlatinumRing,\n        [Accessory(\"Mythril Ring\")] MythrilRing,\n        [Unused] Unused20,\n        [Unused] Unused21,\n        [Unused] Unused22,\n        [Unused] Unused23,\n        [KeyItem(\"Torn Pages\")] TornPages,\n        [Unused] Unused25,\n        [Accessory(\"Orichalcum Ring\")] OrichalcumRing,\n        [Accessory(\"Master's Ring\")] MasterRing,\n        [Accessory(\"Moon Amulet\")] MoonAmulet,\n        [Unused] Unused29,\n        [Accessory(\"Star Charm\")] StarCharm,\n        [Accessory(\"Skill Ring\")] SkillRing,\n        [Accessory(\"Skillful Ring\")] SkillfulRing,\n        [Keyblade(\"Kingdom Key\")] KingdomKey,\n        [Keyblade(\"Oathkeeper\")] Oathkeeper,\n        [Keyblade(\"Oblivion\")] Oblivion,\n        [Keyblade(\"Detection Saber\")] DetectionSaber,\n        [Keyblade(\"Frontier of Ultima\")] FrontierOfUltima,\n        [Accessory(\"Soldier Earring\")] SoldierEarring,\n        [Accessory(\"Fencer Earring\")] FencerEarring,\n        [Accessory(\"Mage Earring\")] MageEarring,\n        [Shield(\"Knight's Shield\")] KnightShield,\n        [Shield(\"Detection Shield\")] DetectionShield,\n        [Shield(\"Test the King\")] TestTheKing,\n        [Accessory(\"Slayer Earring\")] SlayerEarring,\n        [Accessory(\"Cosmic Ring\")] CosmicRing,\n        [Weapon(\"Battlefields of War\")] BattlefieldsOfWar,\n        [Weapon(\"Sword of the Ancestor\")] SwordOfTheAncestor,\n        [Accessory(\"Medal\")] Medal,\n        [Accessory(\"Cosmic Arts\")] CosmicArts,\n        [Accessory(\"Shadow Archive\")] ShadowArchive,\n        [Weapon(\"Beast's Claw\")] BeastClaw,\n        [Weapon(\"Bone Fist\")] BoneFist,\n        [Weapon(\"Proud Fang\")] ProudFang,\n        [Weapon(\"Skill and Crossbones\")] SkillAndCrossbones,\n        [Accessory(\"Shadow Archive+\")] ShadowArchivePlus,\n        [Accessory(\"Lucky Ring\")] LuckyRing,\n        [Accessory(\"Full Bloom\")] FullBloom,\n        [Accessory(\"Draw Ring\")] DrawRing,\n        [Accessory(\"Full Bloom+\")] FullBloomPlus,\n        [Armor(\"ElvenBandanna\")] ElvenBandanna,\n        [Armor(\"Divine Bandanna\")] DivineBandanna,\n        [Armor(\"Power Band\")] PowerBand,\n        [Keyblade(\"Antiform Dummy\")] AntiformDummy,\n        [Weapon(\"Scimitar\")] Scimitar,\n        [Weapon(\"Way to the Dawn\")] WayToTheDawn,\n        [Weapon(\"Identity Disk\")] IdentityDisk,\n        [Staff(\"Mage's Staff\")] MageStaff,\n        [Unused] Unused68,\n        [Unused] Unused69,\n        [Armor(\"Buster Band\")] BusterBand,\n        [Armor(\"Protect Belt\")] ProtectBelt,\n        [Weapon(\"ID not found\")] Unused72,\n        [Keyblade(\"ID not found\")] Unused73,\n        [Armor(\"Gaia Belt\")] GaiaBelt,\n        [Unused] Unused75,\n        [Unused] Unused76,\n        [Unused] Unused77,\n        [Unused] Unused78,\n        [Unused] Unused79,\n        [Unused] Unused80,\n        [Armor(\"Cosmic Belt\")] CosmicBelt,\n        [Armor(\"Shock Charm\")] ShockCharm,\n        [Armor(\"Shock Charm+\")] ShockCharmPlus,\n        [Armor(\"Grand Ribbon\")] GrandRibbon,\n        [Unused] Unused85,\n        [Unused] Unused86,\n        [Armor(\"Fire Bangle\")] FireBangle,\n        [Armor(\"Fira Bangle\")] FiraBangle,\n        [Armor(\"Firaga Bangle\")] FiragaBangle,\n        [Armor(\"Firagun Bangle\")] FiragunBangle,\n        [Unused] Unused91,\n        [Armor(\"Blizzard Armlet\")] BlizzardArmlet,\n        [Armor(\"Blizzara Armlet\")] BlizzaraArmlet,\n        [Armor(\"Blizzaga Armlet\")] BlizzagaArmlet,\n        [Armor(\"Blizzagun Armlet\")] BlizzagunArmlet,\n        [Unused] Unused96,\n        [Tent(\"Tent\")] Tent,\n        [Armor(\"Thunder Trinket\")] ThunderTrinket,\n        [Armor(\"Thundara Trinket\")] ThundaraTrinket,\n        [Armor(\"Thundaga Trinket\")] ThundagaTrinket,\n        [Armor(\"Thundagun Trinket\")] ThundagunTrinket,\n        [Shield(\"Adamant Shield\")] AdamantShield,\n        [Shield(\"Chain Gear\")] ChainGear,\n        [Shield(\"Ogre Shield\")] OgreShield,\n        [Shield(\"Falling Star\")] FallingStar,\n        [Shield(\"Dreamcloud\")] Dreamcloud,\n        [Shield(\"Knight Defender\")] KnightDefender,\n        [Shield(\"Genji Shield\")] GenjiShield,\n        [Shield(\"Akashic Record\")] AkashicRecord,\n        [Shield(\"Nobody Guard\")] NobodyGuard,\n        [Staff(\"Hammer Staff\")] HammerStaff,\n        [Staff(\"Victory Bell\")] VictoryBell,\n        [Staff(\"Meteor Staff\")] MeteorStaff,\n        [Staff(\"CometStuff\")] CometStuff,\n        [Staff(\"Lord's Broom\")] LordBroom,\n        [Staff(\"Wisdom Wand\")] WisdomWand,\n        [Staff(\"Rising Dragon\")] RisingDragon,\n        [Staff(\"Nobody Lance\")] NobodyLance,\n        [Staff(\"Shaman's Relic\")] ShamanRelic,\n        [Unused] Unused120,\n        [Armor(\"Shadow Anklet\")] ShadowAnklet,\n        [Staff(\"Staff of Detection\")] StaffOfDetection,\n        [Armor(\"Dark Anklet\")] DarkAnklet,\n        [Armor(\"Midnight Anklet\")] MidnightAnklet,\n        [Armor(\"Chaos Anklet\")] ChaosAnklet,\n        [Unused] Unused126,\n        [Armor(\"Abas Chain\")] AbasChain,\n        [Armor(\"Aegis Chain\")] AegisChain,\n        [Armor(\"Arcisius\")] Arcisius,\n        [Armor(\"Ribbon\")] Ribbon,\n        [Armor(\"Champion Belt\")] ChampionBelt,\n        [Armor(\"Petite Ribbon\")] PetiteRibbon,\n        [Armor(\"Arcisius+\")] ArcisiusPlus,\n        [Armor(\"Cosmic Chain\")] CosmicChain,\n        [Unused] Unused135,\n        [Unused] Unused136,\n        [Unused] Unused137,\n        [Unused] Unused138,\n        [Unused] Unused139,\n        [Unused] Unused140,\n        [Unused] Unused141,\n        [Unused] Unused142,\n        [Synthesis(\"Blazing Shard\")] BlazingShard,\n        [Synthesis(\"Blazing Stone\")] BlazingStone,\n        [Synthesis(\"Blazing Gem\")] BlazingGem,\n        [Synthesis(\"Blazing Crystal\")] BlazingCrystal,\n        [Unused] Unused147,\n        [Unused] Unused148,\n        [Unused] Unused149,\n        [Unused] Unused150,\n        [Synthesis(\"Lightning Shard\")] LightningShard,\n        [Synthesis(\"Lightning Stone\")] LightningStone,\n        [Synthesis(\"Lightning Gem\")] LightningGem,\n        [Synthesis(\"Lightning Crystal\")] LightningCrystal,\n        [Synthesis(\"Power Shard\")] PowerShard,\n        [Synthesis(\"Power Stone\")] PowerStone,\n        [Synthesis(\"Power Gem\")] PowerGem,\n        [Synthesis(\"Power Crystal\")] PowerCrystal,\n        [Synthesis(\"Lucid Shard\")] LucidShard,\n        [Synthesis(\"Lucid Stone\")] LucidStone,\n        [Synthesis(\"Lucid Gem\")] LucidGem,\n        [Synthesis(\"Lucid Crystal\")] LucidCrystal,\n        [Synthesis(\"Dense Shard\")] DenseShard,\n        [Synthesis(\"Dense Stone\")] DenseStone,\n        [Synthesis(\"Dense Gem\")] DenseGem,\n        [Synthesis(\"Dense Crystal\")] DenseCrystal,\n        [Synthesis(\"Twilight Shard\")] TwilightShard,\n        [Synthesis(\"Twilight Stone\")] TwilightStone,\n        [Synthesis(\"Twilight Gem\")] TwilightGem,\n        [Synthesis(\"Twilight Crystal\")] TwilightCrystal,\n        [Synthesis(\"Mythril Shard\")] MythrilShard,\n        [Synthesis(\"Mythril Stone\")] MythrilStone,\n        [Synthesis(\"Mythril Gem\")] MythrilGem,\n        [Synthesis(\"Mythril Crystal\")] MythrilCrystal,\n        [Synthesis(\"Bright Shard\")] BrightShard,\n        [Synthesis(\"Bright Stone\")] BrightStone,\n        [Synthesis(\"Bright Gem\")] BrightGem,\n        [Synthesis(\"Bright Crystal\")] BrightCrystal,\n        [Synthesis(\"Energy Shard\")] EnergyShard,\n        [Synthesis(\"Energy Stone\")] EnergyStone,\n        [Synthesis(\"Energy Gem\")] EnergyGem,\n        [Synthesis(\"Energy Crystal\")] EnergyCrystal,\n        [Synthesis(\"Serenity Shard\")] SerenityShard,\n        [Synthesis(\"Serenity Stone\")] SerenityStone,\n        [Synthesis(\"Serenity Gem\")] SerenityGem,\n        [Synthesis(\"Serenity Crystal\")] SerenityCrystal,\n        [Synthesis(\"Orichalcum+\")] OrichalcumPlus,\n        [KeyItem(\"Munny Pouch\")] MunnyPouch,\n        [KeyItem(\"Crystal Orb\")] CrystalOrb,\n        [KeyItem(\"Seifer's Trophy\")] SeiferTrophy,\n        [KeyItem(\"Tournament Poster\")] TournamentPoster,\n        [KeyItem(\"Poster\")] Poster,\n        [KeyItem(\"Letter\")] Letter,\n        [KeyItem(\"Naminé's Sketches\")] NamineSketches,\n        [KeyItem(\"Membership Card\")] MembershipCard,\n        [KeyItem(\"Olympus Stone\")] OlympusStone,\n        [KeyItem(\"Auron's Statue\")] AuronStatue,\n        [KeyItem(\"Cursed Medallion\")] CursedMedallion,\n        [KeyItem(\"Present\")] Present,\n        [KeyItem(\"Decoy Presents\")] DecoyPresents,\n        [KeyItem(\"Ice Cream\")] IceCream,\n        [KeyItem(\"Picture\")] Picture,\n        [Synthesis(\"Orichalcum\")] Orichalcum,\n        [Synthesis(\"Frost Shard\")] FrostShard,\n        [Synthesis(\"Frost Stone\")] FrostStone,\n        [Synthesis(\"Frost Gem\")] FrostGem,\n        [Synthesis(\"Frost Crystal\")] FrostCrystal,\n        [KeyItem(\"Mega-Recipe\")] MegaRecipe,\n        [Unused] Unused209,\n        [KeyItem(\"Star Recipe\")] StarRecipe,\n        [KeyItem(\"Recovery Recipe\")] RecoveryRecipe,\n        [KeyItem(\"Skill Recipe\")] SkillRecipe,\n        [KeyItem(\"Guard Recipe\")] GuardRecipe,\n        [KeyItem(\"Dummy 06\")] Dummy06,\n        [KeyItem(\"Dummy 07\")] Dummy07,\n        [KeyItem(\"Dummy 08\")] Dummy08,\n        [KeyItem(\"Dummy 09\")] Dummy09,\n        [KeyItem(\"Dummy 10\")] Dummy10,\n        [KeyItem(\"Dummy 11\")] Dummy11,\n        [KeyItem(\"Dummy 12\")] Dummy12,\n        [KeyItem(\"Dummy 13\")] Dummy13,\n        [KeyItem(\"Dummy 14\")] Dummy14,\n        [KeyItem(\"Dummy 15\")] Dummy15,\n        [KeyItem(\"Dummy 16\")] Dummy16,\n        [KeyItem(\"Road to Discovery\")] RoadToDiscovery,\n        [KeyItem(\"Strength Beyond Strength\")] StrengthBeyondStrength,\n        [KeyItem(\"Book of Shadows\")] BookOfShadows,\n        [Tent(\"Drive Recovery\")] DriveRecovery,\n        [Tent(\"High Drive Recovery\")] HighDriveRecovery,\n        [Tent(\"Power Boost\")] PowerBoost,\n        [Tent(\"Magic Boost\")] MagicBoost,\n        [Tent(\"Defense Boost\")] DefenseBoost,\n        [Tent(\"AP Boost\")] APBoost,\n        [Synthesis(\"Dark Shard\")] DarkShard,\n        [Synthesis(\"Dark Stone\")] DarkStone,\n        [Synthesis(\"Dark Gem\")] DarkGem,\n        [Synthesis(\"Dark Crystal\")] DarkCrystal,\n        [KeyItem(\"Cloaked Thunder\")] CloakedThunder,\n        [KeyItem(\"Eternal Blossom\")] EternalBlossom,\n        [KeyItem(\"Rare Document\")] RareDocument,\n        [KeyItem(\"Dummy 23\")] Dummy23,\n        [KeyItem(\"Dummy 24\")] Dummy24,\n        [KeyItem(\"Dummy 25\")] Dummy25,\n        [KeyItem(\"Dummy 26\")] Dummy26,\n        [KeyItem(\"Dummy 27\")] Dummy27,\n        [KeyItem(\"Style Recipe\")] StyleRecipe,\n        [KeyItem(\"Moon Recipe\")] MoonRecipe,\n        [KeyItem(\"Queen Recipe\")] QueenRecipe,\n        [KeyItem(\"King Recipe\")] KingRecipe,\n        [KeyItem(\"Ultimate Recipe\")] UltimateRecipe,\n        [Keyblade(\"StarSeeker\")] StarSeeker,\n        [Keyblade(\"Hidden Dragon\")] HiddenDragon,\n        [Staff(\"Save the Queen\")] SaveTheQueen,\n        [Shield(\"Save the King\")] SaveTheKing,\n        [Keyblade(\"Hero's Crest\")] HeroCrest,\n        [Keyblade(\"Monochrome\")] Monochrome,\n        [Keyblade(\"Follow the Wind\")] FollowTheWind,\n        [Keyblade(\"Circle of Life\")] CircleOfLife,\n        [Keyblade(\"Photon Debugger\")] PhotonDebugger,\n        [Keyblade(\"Gull Wing\")] GullWing,\n        [Keyblade(\"Rumbling Rose\")] RumblingRose,\n        [Keyblade(\"Guardian Soul\")] GuardianSoul,\n        [Keyblade(\"Wishing Lamp\")] WishingLamp,\n        [Keyblade(\"Decisive Pumpkin\")] DecisivePumpkin,\n        [Keyblade(\"Sleeping Lion\")] SleepingLion,\n        [Keyblade(\"Sweet Memories\")] SweetMemories,\n        [Keyblade(\"Mysterious Abyss\")] MysteriousAbyss,\n        [Keyblade(\"Fatal Crest\")] FatalCrest,\n        [Keyblade(\"Bond of Flame\")] BondOfFlame,\n        [Keyblade(\"Fenrir\")] Fenrir,\n        [Keyblade(\"Ultima Weapon\")] UltimaWeapon,\n        [Unused] Unused272,\n        [Unused] Unused273,\n        [Keyblade(\"Save the Queen+\")] SaveTheQueenPlys,\n        [Shield(\"Save the King+\")] SaveTheKingPlus,\n        [KeyItem(\"Promise Charm\")] PromiseCharm,\n        [KeyItem(\"Munny Pouch\")] MunnyPouch2,\n        [KeyItem(\"Hades Cup Trophy\")] HadesCupTrophy,\n        [KeyItem(\"\\\"The Struggle\\\" Trophy\")] TheStruggleTrophy,\n        [Unused] Unused280,\n        [Keyblade(\"Winner's Proof\")] WinnerProof,\n        [Staff(\"Centurion\")] Centurion,\n        [Staff(\"Centurion+\")] CenturionPlus,\n        [Staff(\"Plain Mushroom\")] PlainMushroom,\n        [Staff(\"Plain Mushroom+\")] PlainMushroomPlus,\n        [Staff(\"Precious Mushroom\")] PreciousMushroom,\n        [Staff(\"Precious Mushroom+\")] PreciousMushroomPlus,\n        [Staff(\"Premium Mushroom\")] PremiumMushroom,\n        [Shield(\"Frozen Pride\")] FrozenPride,\n        [Shield(\"Frozen Pride+\")] FrozenPridePlus,\n        [Shield(\"Joyous Mushroom\")] JoyousMushroom,\n        [Shield(\"Joyous Mushroom+\")] JoyousMushroomPlus,\n        [Shield(\"Majestic Mushroom\")] MajesticMushroom,\n        [Shield(\"Majestic Mushroom+\")] MajesticMushroomPlus,\n        [Shield(\"Ultimate Mushroom\")] UltimateMushroom,\n        [Synthesis(\"Remembrance Shard\")] RemembranceShard,\n        [Synthesis(\"Remembrance Stone\")] RemembranceStone,\n        [Synthesis(\"Remembrance Gem\")] RemembranceGem,\n        [Synthesis(\"Remembrance Crystal\")] RemembranceCrystal,\n        [Synthesis(\"Tranquility Shard\")] TranquilityShard,\n        [Synthesis(\"Tranquility Stone\")] TranquilityStone,\n        [Synthesis(\"Tranquility Gem\")] TranquilityGem,\n        [Synthesis(\"Tranquility Crystal\")] TranquilityCrystalss,\n        [Synthesis(\"Lost Illusion\")] LostIllusion,\n        [Synthesis(\"Manifest Illusion\")] ManifestIllusion,\n        [KeyItem(\"Proof of Connection\")] ProofOfConnection,\n        [KeyItem(\"Proof of Nonexistence\")] ProofOfNonexistence,\n        [KeyItem(\"Proof of Peace\")] ProofOfPeace,\n        [Accessory(\"Executive's Ring\")] ExecutiveRing,\n        [Staff(\"Shaman's Relic+\")] ShamanRelicPlus,\n        [Shield(\"Akashic Record+\")] AkashicRecordPlus,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Types/PlayableCharacterType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib2.Types\n{\n    public enum PlayableCharacterType : byte\n    {\n        [Info] Sora,\n        [Info] Donald,\n        [Info] Goofy,\n        [Info(\"World character\")] WorldCharacter,\n        [Info] Valor,\n        [Info] Wisdom,\n        [Info] Limit,\n        [Info] Trinity,\n        [Info] Final,\n        [Info] Antiform,\n        [Info] Mickey,\n        [Info] None = 18,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib2/Types/WorldType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib2.Types\n{\n    // https://openkh.dev/kh2/worlds.html\n    public enum WorldType : byte\n    {\n        [World(\"zz\", \"World ZZ\")] WorldZZ,\n        [World(\"es\", \"End of Sea\")] EndOfSea,\n        [World(\"tt\", \"Twilight Town\")] TwilightTown,\n        [World(\"di\", \"Destiny Island\")] DestinyIsland,\n        [World(\"hb\", \"Hollow Bastion\")] HollowBastion,\n        [World(\"bb\", \"Beast's Castle\")] BestCastle,\n        [World(\"he\", \"Olympus Coliseum\")] OlympusColiseum,\n        [World(\"al\", \"Agrabah\")] Agrabah,\n        [World(\"mu\", \"The Land of Dragons\")] LandOfDragons,\n        [World(\"po\", \"100 Acre Wood\")] HundredsAcreWood,\n        [World(\"lk\", \"Pride Land\")] PrideLand,\n        [World(\"lm\", \"Atlantica\")] Atlantica,\n        [World(\"dc\", \"Disney Castle\")] DisneyCastle,\n        [World(\"wi\", \"Timeless River\")] TimelessRiver,\n        [World(\"nm\", \"Halloween Town\")] HalloweenTown,\n        [World(\"wm\", \"World Map\")] WorldMap,\n        [World(\"ca\", \"Port Royal\")] PortRoyal,\n        [World(\"tr\", \"Space Paranoids\")] SpaceParanoids,\n        [World(\"eh\", \"The World That Never Was\")] TheWorldThatNeverWas,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/ISaveKh3.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib3.Models;\nusing KHSave.Lib3.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace KHSave.Lib3\n{\n    public interface ISaveKh3\n    {\n\n        int MagicCode { get; set; }\n        int FileSize { get; set; }\n        short MajorVersion { get; set; }\n        short MinorVersion { get; set; }\n        uint Checksum { get; set; }\n        DifficultyType Difficulty { get; set; }\n        WorldType WorldLogo { get; set; }\n\n        int TotalExp { get; set; }\n        int Munny { get; set; }\n        byte Level { get; set; }\n        DesireChoice DesireChoice { get; set; }\n        PowerChoice PowerChoice { get; set; }\n        List<PartyCharacter> Party { get; set; }\n        bool SaveClear { get; set; }\n        LocationType LocationName { get; set; }\n        int Unknown00058 { get; set; } // Changes every time\n        int Unknown0005C { get; set; } // Changes every time\n        CharacterIconType BaseSaveIcon { get; set; }\n        CharacterIconType DlcSaveIcon { get; set; }\n\n        int EnemiesDefeated { get; set; }\n        short SavesCount { get; set; }\n        List<short> RecordAttractionsUseCount { get; set; }\n        List<short> RecordShotlocksUseCount { get; set; }\n        List<InventoryEntry> Inventory { get; set; }\n        List<short> MaterialsCount { get; set; }\n        int CrabsCollected { get; set; }\n        List<PlayableCharacter> Pc { get; set; }\n        int BonusHp { get; set; }\n        int BonusMp { get; set; }\n        int BonusStrength { get; set; }\n        int BonusMagic { get; set; }\n        int BonusDefense { get; set; }\n        List<int> Storyflags { get; set; }\n        string MapPath { get; set; }\n        string MapSpawn { get; set; }\n        string PlayerScript { get; set; }\n        string PlayerCharacter { get; set; }\n\n        List<ShortcutGroup> Shortcuts { get; set; }\n\n        List<CommandType> Magics { get; set; }\n        List<CommandType> Links { get; set; }\n\n        Records Records { get; set; }\n\n        int PhotoMaxCount { get; set; }\n        List<PhotoEntry> Photos { get; set; }\n\n        string DlcMapPath { get; set; }\n        string DlcSpawnPoint { get; set; }\n\n        void Write(Stream stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/KHSave.Lib3.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Crc32.NET\" Version=\"1.2.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.Lib3/Models/Ability.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Extensions;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3.Models\n{\n    public class Ability\n    {\n        [Data] public int Data { get; set; }\n\n        public bool Unlocked\n        {\n            get => Data.GetFlag(0);\n            set => Data = BitExtensions.SetFlag(Data, 0, value);\n        }\n\n        public bool Enabled\n        {\n            get => Data.GetFlag(1);\n            set => Data = BitExtensions.SetFlag(Data, 1, value);\n        }\n\n        public bool Unseen\n        {\n            get => Data.GetFlag(2);\n            set => Data = BitExtensions.SetFlag(Data, 2, value);\n        }\n\n        public bool Flag3\n        {\n            get => Data.GetFlag(3);\n            set => Data = BitExtensions.SetFlag(Data, 3, value);\n        }\n\n        public override string ToString()\n        {\n            return $\"{Enabled} {Data:X08}\";\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Models/AiModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib3.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3.Models\n{\n    public class AiModel\n    {\n        [Data] public AiCombatStyleType CombatStyle { get; set; }\n        [Data] public AiAbilityType Abilitiy { get; set; }\n        [Data] public AiRecoveryType Recovery { get; set; }\n        [Data] public byte RecoveryTargets { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Models/EquipmentItem.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib3.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3.Models\n{\n    public class EquipmentItem\n    {\n        [Data] public byte Id { get; set; }\n        [Data] public ItemType ItemType { get; set; }\n\n        [Data(4)] public byte Enabled { get; set; }\n    }\n\n    public class WeaponEquipmentItem : EquipmentItem\n    {\n        public WeaponType WeaponId\n        {\n            get => (WeaponType)Id;\n            set => Id = (byte)value;\n        }\n    }\n\n    public class ArmorEquipmentItem : EquipmentItem\n    {\n        public ArmorType ArmorId\n        {\n            get => (ArmorType)Id;\n            set => Id = (byte)value;\n        }\n    }\n\n    public class AccessoryEquipmentItem : EquipmentItem\n    {\n        public AccessoryType AccessoryId\n        {\n            get => (AccessoryType)Id;\n            set => Id = (byte)value;\n        }\n    }\n\n    public class ConsumableEquipmentItem : EquipmentItem\n    {\n        public ConsumableType ConsumableId\n        {\n            get => (ConsumableType)Id;\n            set => Id = (byte)value;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Models/FlantasticRecord.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.Lib3.Models\n{\n    public class FlantasticRecord\n    {\n        [Data] public int HighScore { get; set; }\n        [Data] public int HighScore2 { get; set; }\n        [Data] public int AttemptCount { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Models/InventoryEntry.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3.Models\n{\n    public class InventoryEntry\n    {\n        [Data] public byte Count { get; set; }\n        [Data] public bool Obtained { get; set; }\n        [Data] public bool Unseen { get; set; }\n        [Data] public bool ShopFlag1 { get; set; }\n        [Data] public bool ShopFlag2 { get; set; }\n        [Data] public bool Flag4 { get; set; }\n        [Data] public bool Flag5 { get; set; }\n        [Data] public bool Flag6 { get; set; }\n        [Data] public bool Flag7 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Models/MagicGroup.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib3.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3.Models\n{\n    public class MagicGroup\n    {\n        [Data] public CommandType Magic1 { get; set; }\n        [Data] public CommandType Magic2 { get; set; }\n        [Data] public CommandType Magic3 { get; set; }\n        [Data] public CommandType Magic4 { get; set; }\n        [Data] public CommandType Magic5 { get; set; }\n        [Data] public CommandType Magic6 { get; set; }\n        [Data] public CommandType Magic7 { get; set; }\n        [Data] public CommandType Magic8 { get; set; }\n        [Data] public CommandType Magic9 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Models/PhotoEntry.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3.Models\n{\n    public class PhotoEntry\n    {\n        [Data] public int Length { get; set; }\n\n        [Data(Count = 0x19000)] public byte[] Data { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Models/PlayableCharacter.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.Collections.Generic;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3.Models\n{\n    public class PlayableCharacter\n    {\n        [Data(0x6)] public byte CurrentWeaponIndex { get; set; }\n        [Data(0x80, 3, 8)] public List<WeaponEquipmentItem> Weapons { get; set; }\n        [Data(0x98, 8, 8)] public List<ArmorEquipmentItem> Armors { get; set; }\n        [Data(0xD8, 8, 8)] public List<AccessoryEquipmentItem> Accessories { get; set; }\n        [Data(0x118, 8, 8)] public List<ConsumableEquipmentItem> Items { get; set; }\n        [Data(0x158)] public byte AiCombatStyle { get; set; }\n        [Data(0x158)] public byte AiAbilities { get; set; }\n        [Data(0x158)] public AiModel Ai { get; set; }\n        [Data(0x160, 512, 4)] public List<Ability> Abilities { get; set; }\n        [Data(0x980)] public byte AtkBoost { get; set; }\n        [Data] public byte MagBoost { get; set; }\n        [Data] public byte DefBoost { get; set; }\n        [Data] public byte ApBoost { get; set; }\n        [Data] public int Hp { get; set; }\n        [Data] public int Mp { get; set; }\n        [Data] public int Focus { get; set; }\n\n        public override string ToString()\n        {\n            return $\"HP {Hp} MP {Mp}\";\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Models/Records.cs",
    "content": "using System.Collections.Generic;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3.Models\n{\n    public class Records\n    {\n        [Data] public int VerumRexHighScore { get; set; }\n        [Data] public int VerumRexTimer { get; set; }\n        [Data] public int FlashTracer1HighScore { get; set; }\n        [Data] public int FlashTracer2HighScore { get; set; }\n        [Data] public int FlashTracer1Timer { get; set; }\n        [Data] public int FlashTracer2Timer { get; set; }\n        [Data] public int FrozenSliderHighScore { get; set; }\n        [Data] public int FrozenSliderTimer { get; set; }\n        [Data] public int FrozenSliderMedals { get; set; }\n        [Data] public int FestivalDanceHighScore { get; set; }\n        [Data] public int FestivalDanceLongestChain { get; set; }\n        [Data] public FlantasticRecord CherryFlan { get; set; }\n        [Data] public FlantasticRecord StrawberryFlan { get; set; }\n        [Data] public FlantasticRecord BananaFlan { get; set; }\n        [Data] public FlantasticRecord HoneydewFlan { get; set; }\n        [Data] public FlantasticRecord GrapeFlan { get; set; }\n        [Data] public FlantasticRecord WatermelonFlan { get; set; }\n        [Data] public FlantasticRecord OrangeFlan { get; set; }\n        [Data(Count = 0x1e)] public List<short> ShotlocksHighScore { get; set; }\n        [Data(Count = 5)] public List<int> AttractionsHighScore { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Models/ShortcutGroup.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib3.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3.Models\n{\n    public class ShortcutGroup\n    {\n        [Data] public CommandType Circle { get; set; }\n        [Data] public CommandType Triangle { get; set; }\n        [Data] public CommandType Square { get; set; }\n        [Data] public CommandType Cross { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Presets/Preset.Pawn.cs",
    "content": "using System.Collections.Generic;\n\nnamespace KHSave.Lib3.Presets\n{\n    public static partial class Presets\n    {\n        public class Pawn\n        {\n            public string Name { get; set; }\n        }\n\n        public static readonly string PlayablePawnPath = \"/Game/Blueprints/Player/{0}/{0}_Pawn.{0}_Pawn_C\";\n        public static readonly string NpcPawnPath = \"/Game/Blueprints/Npc/{0}/{0}_Pawn.{0}_Pawn_C\";\n        public static readonly string EnemyPawnPath = \"/Game/Blueprints/Enemy/{0}/{0}_Pawn.{0}_Pawn_C\";\n\n        public static readonly Dictionary<string, Pawn> PlayablePawns = new Dictionary<string, Pawn>\n        {\n            [\"p_ex001\"] = new Pawn { Name = \"Sora (KH3)\" },\n            [\"p_dl001\"] = new Pawn { Name = \"Sora (Shibuya)\" },\n            [\"p_zz001\"] = new Pawn { Name = \"Sora (Debug mode)\" },\n            [\"p_ex002\"] = new Pawn { Name = \"Aqua\" },\n            [\"p_ex003\"] = new Pawn { Name = \"Riku (KH2)\" },\n            [\"p_ex004\"] = new Pawn { Name = \"Riku (KH3)\" },\n            [\"p_ex005\"] = new Pawn { Name = \"Sora (KH1)\" },\n            [\"p_ex006\"] = new Pawn { Name = \"Kairi\" },\n            [\"p_ex007\"] = new Pawn { Name = \"Roxas\" },\n            [\"p_ex011\"] = new Pawn { Name = \"Sora (KH2)\" },\n            [\"p_bx001\"] = new Pawn { Name = \"Sora (Baymax)\" },\n            [\"p_ca001\"] = new Pawn { Name = \"Sora (Caribbean)\" },\n            [\"p_ew001\"] = new Pawn { Name = \"Sora (Final World)\" },\n            [\"p_mi001\"] = new Pawn { Name = \"Sora (Monstropolis)\" },\n            [\"p_po001\"] = new Pawn { Name = \"Sora (100 Acre Wood)\" },\n            [\"p_re001\"] = new Pawn { Name = \"Sora (Remy)\" },\n            [\"p_ts001\"] = new Pawn { Name = \"Sora (Toy Story)\" },\n        };\n\n        public static readonly Dictionary<string, Pawn> PlayableDlcPawns = new Dictionary<string, Pawn>\n        {\n            [\"/Game/Blueprints/ReMind/MiRx/p_ex008/p_ex008_MiRxPawn.p_ex008_MiRxPawn_C\"] = new Pawn { Name = \"Mickey (ReMind)\" },\n            [\"/Game/Blueprints/ReMind/SoKc/Player/p_ex001_SoKcPawn.p_001_SoKcPawn_C\"] = new Pawn { Name = \"Sora (Keyholes ver.)\" },\n            [\"/Game/Blueprints/ReMind/LgRx/p_ex004/p_ex004_LgRxPawn.p_ex004_LgRxPawn_C\"] = new Pawn { Name = \"Guardians of Light (ReMind)\" },\n        };\n\n        public static readonly Dictionary<string, Pawn> NpcPawns = new Dictionary<string, Pawn>\n        {\n            [\"n_bt201\"] = new Pawn { Name = \"Young Xehanort (Chess)\" },\n            [\"n_bt202\"] = new Pawn { Name = \"Young Eraqus (Chess)\" },\n            [\"n_dw202\"] = new Pawn { Name = \"Riku (KH1)\" },\n            [\"n_dw208\"] = new Pawn { Name = \"Ansem the Wise\" },\n\n            [\"n_ex001\"] = new Pawn { Name = \"Donald\" },\n            [\"n_ex002\"] = new Pawn { Name = \"Goofy\" },\n            [\"n_ex003\"] = new Pawn { Name = \"Mickey\" },\n            [\"n_ex004\"] = new Pawn { Name = \"Riku\" },\n            [\"n_ex005\"] = new Pawn { Name = \"Kairi\" },\n            [\"n_ex006\"] = new Pawn { Name = \"Ventus\" },\n            [\"n_ex007\"] = new Pawn { Name = \"Terra\" },\n            [\"n_ex008\"] = new Pawn { Name = \"Roxas\" },\n            [\"n_ex009\"] = new Pawn { Name = \"Roxas (Coat)\" },\n            [\"n_ex010\"] = new Pawn { Name = \"Lea\" },\n            [\"n_ex011\"] = new Pawn { Name = \"Aquanort\" },\n            [\"n_ex013\"] = new Pawn { Name = \"Naminé\" },\n            [\"n_ex024\"] = new Pawn { Name = \"Eraqus\" },\n            [\"n_ex029\"] = new Pawn { Name = \"Lingering Will\" },\n            [\"n_ex033\"] = new Pawn { Name = \"Xion (Coat)\" },\n        };\n\n        public static readonly Dictionary<string, Pawn> EnemyPawns = new Dictionary<string, Pawn>\n        {\n            [\"e_dw401\"] = new Pawn { Name = \"Demon Tide\" },\n            [\"e_ex301\"] = new Pawn { Name = \"Xehanort\" },\n            [\"e_ex302\"] = new Pawn { Name = \"Young Xehanort\" },\n            [\"e_ex303\"] = new Pawn { Name = \"Ansem\" },\n            [\"e_ex304\"] = new Pawn { Name = \"Xemnas\" },\n        };\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Presets/Presets.Map.cs",
    "content": "using System.Collections.Generic;\n\nnamespace KHSave.Lib3.Presets\n{\n    public static partial class Presets\n    {\n        public class Map\n        {\n            public string Name { get; set; }\n        }\n\n        public static readonly Dictionary<string, Map> MAPS = new Dictionary<string, Map>\n        {\n            [\"/Game/Levels/he/he_01/he_01\"] = new Map { Name = \"Realm of the Gods\" },\n            [\"/Game/Levels/he/he_02/he_02\"] = new Map { Name = \"Mount Olympus\" },\n            [\"/Game/Levels/he/he_03/he_03\"] = new Map { Name = \"Thebes (in flames)\" },\n            [\"/Game/Levels/he/he_04/he_04\"] = new Map { Name = \"Thebes\" },\n            [\"/Game/Levels/he/he_05/he_05\"] = new Map { Name = \"Titans battle arena\" },\n            [\"/Game/Levels/he/he_06/he_06\"] = new Map { Name = \"Titans battle tornado\" },\n            [\"/Game/Levels/he/he_50/he_50\"] = new Map { Name = \"Cutscene map\" },\n            [\"/Game/Levels/he_DLC/he_52/he\"] = new Map { Name = \"DLC cutscene map\" },\n            [\"/Game/Maps/he_DLC/umap/he_52/he_52_CheckMap\"] = new Map { Name = \"Thebes cutscene map (playable)\" },\n            [\"/Game/Levels/tt/tt_01/tt_01\"] = new Map { Name = \"The Neighborhood\" },\n            [\"/Game/Levels/tt/tt_40/tt_40\"] = new Map { Name = \"Bistro\" },\n            [\"/Game/Levels/tt/tt_50/tt_50\"] = new Map { Name = \"Computer Laboratory\" },\n            [\"/Game/Maps/tt/umap/tt_01/tt_01_CheckMap\"] = new Map { Name = \"Twilight Town (out of bounds)\" },\n            [\"/Game/Levels/ts/ts_01/ts_01\"] = new Map { Name = \"Andy’s House\" },\n            [\"/Game/Levels/ts/ts_02/ts_02\"] = new Map { Name = \"Galaxy Toys\" },\n            [\"/Game/Levels/ts/ts_03/ts_03\"] = new Map { Name = \"Verux Rem Minigame\" },\n            [\"/Game/Levels/ts/ts_04/ts_04\"] = new Map { Name = \"UFO battle arena\" },\n            [\"/Game/Levels/ra/ra_01/ra_01\"] = new Map { Name = \"The Forest\" },\n            [\"/Game/Levels/ra/ra_02/ra_02\"] = new Map { Name = \"The Kingdom\" },\n            [\"/Game/Levels/ra/ra_50/ra_50\"] = new Map { Name = \"Cutscene map\" },\n            [\"/Game/Maps/ra/umap/ra_02/ra_02_CheckMap\"] = new Map { Name = \"Lantern map (explorable)\" },\n            [\"/Game/Levels/mi/mi_01/mi_01\"] = new Map { Name = \"Monsters. Inc.\" },\n            [\"/Game/Levels/mi/mi_02/mi_02\"] = new Map { Name = \"The Factory\" },\n            [\"/Game/Levels/mi/mi_03/mi_03\"] = new Map { Name = \"The Powerplant\" },\n            [\"/Game/Levels/mi/mi_04/mi_04\"] = new Map { Name = \"The Door Vault\" },\n            [\"/Game/Levels/mi/mi_50/mi_50\"] = new Map { Name = \"Outside the factory\" },\n            [\"/Game/Levels/ca/ca_01/ca_01\"] = new Map { Name = \"Port Royal\" },\n            [\"/Game/Levels/ca/ca_02/ca_02\"] = new Map { Name = \"The High Seas\" },\n            [\"/Game/Levels/ca/ca_03/ca_03\"] = new Map { Name = \"Unused map?\" },\n            [\"/Game/Levels/ca/ca_04/ca_04\"] = new Map { Name = \"Davy Jones' Locker\" },\n            [\"/Game/Levels/ca/ca_05/ca_05\"] = new Map { Name = \"Over the Edge\" },\n            [\"/Game/Levels/ca/ca_50/ca_50\"] = new Map { Name = \"Cutscene map, no collision\" },\n            [\"/Game/Levels/fz/fz_01/fz_01\"] = new Map { Name = \"The North Mountain\" },\n            [\"/Game/Maps/fz/umap/fz_01/fz_01_CheckMap\"] = new Map { Name = \"The North Mountain\" },\n            [\"/Game/Levels/fz/fz_02/fz_02\"] = new Map { Name = \"The Labyrinth of Ice\" },\n            [\"/Game/Maps/fz/umap/fz_02/fz_02_CheckMap\"] = new Map { Name = \"The Labyrinth of Ice\" },\n            [\"/Game/Levels/fz/fz_03/fz_03\"] = new Map { Name = \"Trinity Sled Minigame\" },\n            [\"/Game/Levels/fz/fz_04/fz_04\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/fz/fz_05/fz_05\"] = new Map { Name = \"Sköl fight arena\" },\n            [\"/Game/Levels/fz/fz_06/fz_06\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/bx/bx_01/bx_01\"] = new Map { Name = \"The Bridge\" },\n            [\"/Game/Levels/bx/bx_02/bx_02\"] = new Map { Name = \"The City\" },\n            [\"/Game/Levels/bx/bx_03/bx_03\"] = new Map { Name = \"Hiro's Garage\" },\n            [\"/Game/Maps/dp/umap/dp_01/dp_01_CheckMap_Mezame\"] = new Map { Name = \"Station of Awakening (playable)\" },\n            [\"/Game/Levels/dp/dp_01/dp_01\"] = new Map { Name = \"Land of Departure\" },\n            [\"/Game/Levels/dp_DLC/dp_50/dp_50\"] = new Map { Name = \"DLC unused map\" },\n            [\"/Game/Levels/dp_DLC/dp_50/dp\"] = new Map { Name = \"DLC cutscene\" },\n            [\"/Game/Levels/kg/kg_01/kg_01\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/kg/kg_02/kg_02\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/kg/kg_03/kg_03\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/kg_DLC/kg_04/kg_04\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/kg_DLC/kg_04/kg_05\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/kg_DLC/kg_06/kg_06\"] = new Map { Name = \"Group Fight with Replica Xehanorts\" },\n            [\"/Game/Levels/kg_DLC/kg_07/kg_07\"] = new Map { Name = \"Connect the Dots/Keyholes\" },\n            [\"/Game/Levels/kg_DLC/kg_08/kg_08\"] = new Map { Name = \"Terranort fight\" },\n            [\"/Game/Levels/kg/kg_50/kg_50\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/kg/kg_51/kg_51\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/kg_DLC/kg_52/kg_52\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/kg_DLC/kg_52/kg\"] = new Map { Name = \"\" },\n            [\"/Game/Maps/kg_DLC/umap/kg_06/kg_06_CheckMap\"] = new Map { Name = \"Group Fight with Replica Xehanorts (explorable)\" },\n            [\"/Game/Maps/kg_DLC/umap/kg_07/kg_07_CheckMap\"] = new Map { Name = \"Connect the Dots/Keyholes (explorable)\" },\n            [\"/Game/Maps/kg_DLC/umap/kg_08/kg_08_CheckMap\"] = new Map { Name = \"Terranort fight (explorable)\" },\n            [\"/Game/Levels/bt/bt_01/bt_01\"] = new Map { Name = \"The Stairway to the Sky\" },\n            [\"/Game/Maps/bt/umap/bt_01/bt_01_CheckMap\"] = new Map { Name = \"The Stairway to the Sky (explorable)\" },\n            [\"/Game/Levels/bt/bt_02/bt_02\"] = new Map { Name = \"The Stairway to the Sky - Deformed\" },\n            [\"/Game/Maps/bt/umap/bt_02/bt_02_CheckMap\"] = new Map { Name = \"The Stairway to the Sky - Deformed (explorable)\" },\n            [\"/Game/Levels/bt/bt_03/bt_03\"] = new Map { Name = \"The Stairway to the Sky - Underwater\" },\n            [\"/Game/Maps/bt/umap/bt_03/bt_03_CheckMap\"] = new Map { Name = \"The Stairway to the Sky - Underwater (explorable)\" },\n            [\"/Game/Levels/bt/bt_04/bt_04\"] = new Map { Name = \"The Stairway to the Sky - Destroyed\" },\n            [\"/Game/Maps/bt/umap/bt_04/bt_04_CheckMap\"] = new Map { Name = \"The Stairway to the Sky - Destroyed (explorable)\" },\n            [\"/Game/Levels/bt_DLC/bt_07/bt_07\"] = new Map { Name = \"Breezy Quarter\" },\n            [\"/Game/Maps/bt_DLC/umap/bt_07/bt_07_CheckMap\"] = new Map { Name = \"Breezy Quarter (explorable)\" },\n            [\"/Game/Levels/bt_DLC/bt_08/bt_08\"] = new Map { Name = \"The Stairway to the Sky (ReMind)\" },\n            [\"/Game/Levels/bt/bt_50/bt_50\"] = new Map { Name = \"Chess room (cutscene)\" },\n            [\"/Game/Maps/bt/umap/bt_50/bt_50\"] = new Map { Name = \"Chess room (explorable)\" },\n            [\"/Game/Levels/bt_DLC/bt_51/bt_51\"] = new Map { Name = \"Blank screen\" },\n            [\"/Game/Levels/yt/yt_50/yt_50\"] = new Map { Name = \"Yen Sid Tower (cutscene)\" },\n            [\"/Game/Maps/yt/umap/yt_50/yt_50_CheckMap\"] = new Map { Name = \"Yen Sid Tower - Room\" },\n            [\"/Game/Maps/yt/umap/yt_50/yt_50_tower\"] = new Map { Name = \"Yen Sid Tower - Tower garden\" },\n            [\"/Game/Maps/dc/umap/dc_50/dc_50_basemap\"] = new Map { Name = \"Disney Castle (keep falling to explore)\" },\n            [\"/Game/Levels/ew/ew_01/ew_01\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew/ew_02/ew_02\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew_DLC/ew_03/ew_03\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew_DLC/ew_04/ew_04\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew/ew_21/ew_21\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew/ew_22/ew_22\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew/ew_23/ew_23\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew/ew_24/ew_24\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew/ew_25/ew_25\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew/ew_26/ew_26\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew/ew_27/ew_27\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ew/ew_28/ew_28\"] = new Map { Name = \"\" },\n            [\"/Game/Maps/ew/umap/ew_01/ew_01_CheckMap_WaterWorld\"] = new Map { Name = \"Water world (explorable)\" },\n            [\"/Game/Maps/ew/umap/ew_02/ew_02_CheckMap_Heart\"] = new Map { Name = \"Water world heart fragmented (explorable)\" },\n            [\"/Game/Maps/ew/umap/ew_28/ew_28_CheckMap\"] = new Map { Name = \"Dive into world hearts\" },\n            [\"/Game/Levels/rg_DLC/rg_01/rg_01\"] = new Map { Name = \"Merlin's House\" },\n            [\"/Game/Levels/rg_DLC/rg_03/rg_03\"] = new Map { Name = \"Garden of Assemblage\" },\n            [\"/Game/Levels/rg_DLC/rg_10/rg_10\"] = new Map { Name = \"Xehanort Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_11/rg_11\"] = new Map { Name = \"Ansem Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_12/rg_12\"] = new Map { Name = \"Xemnas Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_13/rg_13\"] = new Map { Name = \"Xigbar Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_14/rg_14\"] = new Map { Name = \"Luxord Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_15/rg_15\"] = new Map { Name = \"Larxene Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_16/rg_16\"] = new Map { Name = \"Marluxia Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_17/rg_17\"] = new Map { Name = \"Saix Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_18/rg_18\"] = new Map { Name = \"Terranort Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_19/rg_19\"] = new Map { Name = \"Riku Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_20/rg_20\"] = new Map { Name = \"Vanitas Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_21/rg_21\"] = new Map { Name = \"Young Xehanort Data Battle\" },\n            [\"/Game/Levels/rg_DLC/rg_22/rg_22\"] = new Map { Name = \"Xion Data Battle\" },\n            [\"/Game/Levels/rg/rg_50/rg_50\"] = new Map { Name = \"Radiant Garden (cutscene)\" },\n            [\"/Game/Levels/rg/rg_51/rg_51\"] = new Map { Name = \"Radiant Garden (cutscene)\" },\n            [\"/Game/Maps/rg_DLC/umap/rg_01/rg_01_CheckMap\"] = new Map { Name = \"Radiant Garden (explorable)\" },\n            [\"/Game/Maps/rg_DLC/umap/rg_10/rg_10_CheckMap\"] = new Map { Name = \"Organization XIII Battle Map (explorable)\" },\n            [\"/Game/Levels/dw/dw_21/dw_21\"] = new Map { Name = \"\" },\n            [\"/Game/Maps/dw/umap/dw_21/dw_21_CheckMap\"] = new Map { Name = \"Dark World (playable)\" },\n            [\"/Game/Levels/dw_DLC/dw_22/dw_22\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/dw_DLC/dw_22/dw\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/dw/dw_71/dw_71\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/dw/dw_71/dw\"] = new Map { Name = \"\" },\n            [\"/Game/Maps/dw/umap/dw_71/dw_71_CheckMap\"] = new Map { Name = \"Dark World (playable cutscene)\" },\n            [\"/Game/Levels/wm/wm_01/wm_01\"] = new Map { Name = \"World Map\" },\n            [\"/Game/Levels/po/po_01/po_01\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/po/po_02/po_02\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/po/po_03/po_03\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/po/po_04/po_04\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/di/di_50/di_50\"] = new Map { Name = \"Destiny Island (infinite loading)\" },\n            [\"/Game/Levels/di/di_50/di\"] = new Map { Name = \"Destiny Island (cutscene)\" },\n            [\"/Game/Maps/di/umap/di_50/di_50_CheckMap\"] = new Map { Name = \"Destiny Island (playable)\" },\n            [\"/Game/Levels/gm/gm_01/gm_01\"] = new Map { Name = \"Starlight Way\" },\n            [\"/Game/Levels/gm/gm_02/gm_02\"] = new Map { Name = \"Misty Stream\" },\n            [\"/Game/Levels/gm/gm_03/gm_03\"] = new Map { Name = \"Eclipse Galaxy\" },\n            [\"/Game/Levels/gm/gm_50/gm\"] = new Map { Name = \"Gummiship (cutscene)\" },\n            [\"/Game/Maps/gm/umap/gm_50/gm_50_CheckMap\"] = new Map { Name = \"Gummiship (explorable)\" },\n            [\"/Game/Maps/gm/umap/gm_02/gm_02_Tornado_Map\"] = new Map { Name = \"Gummiship - Tornado map\" },\n            [\"/Game/Levels/sf/sf_50/sf_50\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/sf/sf_50/sf\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/sp/sp_01/sp_01\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ss/ss\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ss_DLC/ss_01/ss_01\"] = new Map { Name = \"Shibuya - Yozora Fight\" },\n            [\"/Game/Maps/ss_DLC/umap/ss_01/ss_01_CheckMap\"] = new Map { Name = \"Shibuya (explorable)\" },\n            [\"/Game/Levels/ss/ss_50/ss_50\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ss/ss_50/ss\"] = new Map { Name = \"\" },\n            [\"/Game/Levels/ss_DLC/ss_51/ss\"] = new Map { Name = \"DLC secret ending\" },\n            [\"/Game/Levels/ex/ex_21/ex_21\"] = new Map { Name = \"Battlegate 1, Olympus\" },\n            [\"/Game/Levels/ex/ex_22/ex_22\"] = new Map { Name = \"Battlegate 2, Olympus\" },\n            [\"/Game/Levels/ex/ex_23/ex_23\"] = new Map { Name = \"Battlegate 3, Twilight Town\" },\n            [\"/Game/Levels/ex/ex_24/ex_24\"] = new Map { Name = \"Battlegate 4, Toy Box\" },\n            [\"/Game/Levels/ex/ex_25/ex_25\"] = new Map { Name = \"Battlegate 5, Toy Box\" },\n            [\"/Game/Levels/ex/ex_26/ex_26\"] = new Map { Name = \"Battlegate 6, Kingdom of Corona\" },\n            [\"/Game/Levels/ex/ex_27/ex_27\"] = new Map { Name = \"Battlegate 7, Kingdom of Corona\" },\n            [\"/Game/Levels/ex/ex_28/ex_28\"] = new Map { Name = \"Unused battlegate\" },\n            [\"/Game/Levels/ex/ex_29/ex_29\"] = new Map { Name = \"Battlegate 8, Monstropolis\" },\n            [\"/Game/Levels/ex/ex_30/ex_30\"] = new Map { Name = \"Unused battlegate\" },\n            [\"/Game/Levels/ex/ex_31/ex_31\"] = new Map { Name = \"Battlegate 9, Arendelle\" },\n            [\"/Game/Levels/ex/ex_32/ex_32\"] = new Map { Name = \"Unused battlegate\" },\n            [\"/Game/Levels/ex/ex_33/ex_33\"] = new Map { Name = \"Battlegate 10, Caribbean\" },\n            [\"/Game/Levels/ex/ex_34/ex_34\"] = new Map { Name = \"Battlegate 11, San Fransokyo\" },\n            [\"/Game/Levels/ex/ex_35/ex_35\"] = new Map { Name = \"Battlegate 12, San Fransokyo\" },\n            [\"/Game/Levels/ex/ex_36/ex_36\"] = new Map { Name = \"Unused battlegate\" },\n            [\"/Game/Levels/ex/ex_37/ex_37\"] = new Map { Name = \"Battlegate 13, Keyblade Graveyard\" },\n            [\"/Game/Levels/ex/ex_38/ex_38\"] = new Map { Name = \"Battlegate 14, Keyblade Graveyard\" },\n            [\"/Game/Levels/ex/ex_39/ex_39\"] = new Map { Name = \"Battlegate 0, Battlegate at Keyblade Graveyard\" },\n            [\"/Game/Levels/ex/ex_40/ex_40\"] = new Map { Name = \"Unused battlegate\" },\n        };\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Presets/Presets.Story.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib3.Types;\nusing System.Collections.Generic;\nusing System.Linq;\nusing static KHSave.Lib3.Types.StoryLabelTypeBt;\nusing static KHSave.Lib3.Types.StoryLabelTypeBx;\nusing static KHSave.Lib3.Types.StoryLabelTypeCa;\nusing static KHSave.Lib3.Types.StoryLabelTypeCaChartLastAccess;\nusing static KHSave.Lib3.Types.StoryLabelTypeCaShipRide;\nusing static KHSave.Lib3.Types.StoryLabelTypeCaPortroyalSearch;\nusing static KHSave.Lib3.Types.StoryLabelTypeCs;\nusing static KHSave.Lib3.Types.StoryLabelTypeDi;\nusing static KHSave.Lib3.Types.StoryLabelTypeDp;\nusing static KHSave.Lib3.Types.StoryLabelTypeDw;\nusing static KHSave.Lib3.Types.StoryLabelTypeEw;\nusing static KHSave.Lib3.Types.StoryLabelTypeEwSub;\nusing static KHSave.Lib3.Types.StoryLabelTypeEwMission;\nusing static KHSave.Lib3.Types.StoryLabelTypeEwRa;\nusing static KHSave.Lib3.Types.StoryLabelTypeEwMi;\nusing static KHSave.Lib3.Types.StoryLabelTypeEwTs;\nusing static KHSave.Lib3.Types.StoryLabelTypeEwCa;\nusing static KHSave.Lib3.Types.StoryLabelTypeEwFz;\nusing static KHSave.Lib3.Types.StoryLabelTypeFz;\nusing static KHSave.Lib3.Types.StoryLabelTypeFzMinigame;\nusing static KHSave.Lib3.Types.StoryLabelTypeGm;\nusing static KHSave.Lib3.Types.StoryLabelTypeGm1;\nusing static KHSave.Lib3.Types.StoryLabelTypeGm2;\nusing static KHSave.Lib3.Types.StoryLabelTypeGm3;\nusing static KHSave.Lib3.Types.StoryLabelTypeGm3sub;\nusing static KHSave.Lib3.Types.StoryLabelTypeGmSys;\nusing static KHSave.Lib3.Types.StoryLabelTypeGmLevelUp;\nusing static KHSave.Lib3.Types.StoryLabelTypeHe;\nusing static KHSave.Lib3.Types.StoryLabelTypeHeSub;\nusing static KHSave.Lib3.Types.StoryLabelTypeKg;\nusing static KHSave.Lib3.Types.StoryLabelTypeKgA;\nusing static KHSave.Lib3.Types.StoryLabelTypeKgB;\nusing static KHSave.Lib3.Types.StoryLabelTypeKgC;\nusing static KHSave.Lib3.Types.StoryLabelTypeKgD;\nusing static KHSave.Lib3.Types.StoryLabelTypeMi;\nusing static KHSave.Lib3.Types.StoryLabelTypePo;\nusing static KHSave.Lib3.Types.StoryLabelTypeRa;\nusing static KHSave.Lib3.Types.StoryLabelTypeRaDandelion;\nusing static KHSave.Lib3.Types.StoryLabelTypeRaRabbit;\nusing static KHSave.Lib3.Types.StoryLabelTypeRaRainbow;\nusing static KHSave.Lib3.Types.StoryLabelTypeRaBird;\nusing static KHSave.Lib3.Types.StoryLabelTypeRg;\nusing static KHSave.Lib3.Types.StoryLabelTypeSf;\nusing static KHSave.Lib3.Types.StoryLabelTypeTs;\nusing static KHSave.Lib3.Types.StoryLabelTypeTsSub;\nusing static KHSave.Lib3.Types.StoryLabelTypeTt;\nusing static KHSave.Lib3.Types.StoryLabelTypeTtPo;\nusing static KHSave.Lib3.Types.StoryLabelTypeTtRemy;\nusing static KHSave.Lib3.Types.StoryLabelTypeWmHe;\nusing static KHSave.Lib3.Types.StoryLabelTypeWmTt;\nusing static KHSave.Lib3.Types.StoryLabelTypeWmRa;\nusing static KHSave.Lib3.Types.StoryLabelTypeWmTs;\nusing static KHSave.Lib3.Types.StoryLabelTypeWmMi;\nusing static KHSave.Lib3.Types.StoryLabelTypeWmFz;\nusing static KHSave.Lib3.Types.StoryLabelTypeWmCa;\nusing static KHSave.Lib3.Types.StoryLabelTypeWmBx;\nusing static KHSave.Lib3.Types.StoryLabelTypeWmKg;\nusing static KHSave.Lib3.Types.StoryLabelTypeGameBattle;\nusing static KHSave.Lib3.Types.StoryLabelTypeGameShop;\nusing static KHSave.Lib3.Types.StoryLabelTypeYt;\nusing static KHSave.Lib3.Types.StoryLabelTypeBtDlc8;\nusing static KHSave.Lib3.Types.StoryLabelTypeBtDlc7;\nusing static KHSave.Lib3.Types.StoryLabelTypeBtDlc7Monument;\nusing static KHSave.Lib3.Types.StoryLabelTypeKgDlc;\nusing static KHSave.Lib3.Types.StoryLabelTypeKgDlc5c;\nusing static KHSave.Lib3.Types.StoryLabelTypeKgDlc5d;\nusing static KHSave.Lib3.Types.StoryLabelTypeKgDlcCharSelect;\nusing static KHSave.Lib3.Types.StoryLabelTypeRgDlc;\nusing static KHSave.Lib3.Types.StoryLabelTypeSsDlc;\nusing static KHSave.Lib3.Types.StoryLabelTypeSsDlcSub;\n\nnamespace KHSave.Lib3.Presets\n{\n    public static partial class Presets\n    {\n        private static Dictionary<int, string> ToStoryLabel<T>(this Dictionary<T, string> dictionary)\n            where T : struct =>\n            dictionary.ToDictionary(\n                x => (int)(object)x.Key,\n                x => string.IsNullOrEmpty(x.Value) ? x.Key.ToString() : x.Value\n            );\n\n        public static Dictionary<StoryFlagType, Dictionary<int, string>> STORY { get; } = new Dictionary<StoryFlagType, Dictionary<int, string>>\n        {\n            [StoryFlagType.gameflow_BT] = new Dictionary<StoryLabelTypeBt, string>\n            {\n                [BT_INIT] = \"Beginning\",\n                [BT_EVENT_bt901] = \"Before Mysterious Adversaries\",\n                [BT_EVENT_bt902] = \"Mysterious Adversaries\",\n                [BT_BATTLE_REPLICA] = \"Stairway to the Sky (Part 1)\",\n                [BT_EVENT_bt903] = \"Confront Armored Xehanort once you are duly prepared!\",\n                [BT_EVENT_bt904] = \"Stairway to the Sky (Part 2)\",\n                [BT_EVENT_RTEV_ms020s] = \"Cutscene before Armored Xehanort (1st Phase)\",\n                [BT_EVENT_RTEV_ms020s] = \"Armored Xehanort (1st Phase)\",\n                [BT_EVENT_RTEV_ms020e] = \"Armored Xehanort (2nd Phase) [Cutscene before fight]\",\n                [BT_EVENT_RTEV_ms030s] = \"Cutscene before Armored Xehanort (2nd Phase)\",\n                [BT_BATTLE_ARMOR_02] = \"Armored Xehanort (2nd Phase)\",\n                [BT_EVENT_RTEV_ms030e] = \"Armored Xehanort (3rd Phase) [Cutscene before fight]\",\n                [BT_EVENT_RTEV_ms040s] = \"Armored Xehanort (3rd Phase)\",\n                [BT_EVENT_bt905] = \"One Sky, One Destiny cutscene\",\n                [BT_BATTLE_MASTER_01] = \"Final battle pt. 1\",\n                [BT_EVENT_RTEV_ms060] = \"Final battle middle cutscene\",\n                [BT_BATTLE_MASTER_02] = \"Final battle pt. 2\",\n                [BT_EVENT_bt906] = \"End of battle\",\n                [BT_EVENT_bt907] = \"Checkmate (Part 2)\",\n                [BT_EVENT_bt908] = \"Checkmate (Part 3)\",\n                [BT_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_BX] = new Dictionary<StoryLabelTypeBx, string>\n            {\n                [BX_INIT] = \"Beginning\",\n                [BX_WORLD_VISIT1] = \"First visit\",\n                [BX_BRIDGE_MISSION1] = \"Mission 1\",\n                [BX_BRIDGE_RTEV1] = \"Bridge Heartless\",\n                [BX_BRIDGE_MISSION2] = \"Mission 2\",\n                [BX_BRIDGE_RTEV2] = \"Rock Troll II\",\n                [BX_BRIDGE_MISSION3] = \"The AR Device\",\n                [BX_GARAGE_EVENT1] = \"Before Flash Tracer\",\n\n                [BX_CENTRAL_RTEV1] = \"\",\n                [BX_CENTRAL_MISSON1] = \"\",\n                [BX_CENTRAL_MISSON1] = \"\",\n\n                [BX_CENTRAL_EVENT1] = \"\",\n\n                [BX_GARAGE_EVENT2] = \"\",\n                [BX_CENTRAL_RTEV2] = \"\",\n                [BX_CENTRAL_MISSON2] = \"\",\n                [BX_CENTRAL_RTEV2_2] = \"\",\n                [BX_CENTRAL_MISSON2_2] = \"\",\n                [BX_CENTRAL_RTEV3] = \"\",\n                [BX_CENTRAL_BATTLE1] = \"\",\n                [BX_CENTRAL_EVENT2] = \"\",\n\n                [BX_BRIDGE_EVENT1] = \"Microbots\",\n                [BX_CENTRAL_EVENT3] = \"Before Darkubes I\",\n                [BX_CENTRAL_RTEV4] = \"Darkubes I\",\n                [BX_CENTRAL_BATTLE2] = \"After Darkubes I\",\n\n                [BX_CENTRAL_EVENT4] = \"\",\n\n                [BX_CENTRAL_MISSON3] = \"Rescue Big Hero 6\",\n                [BX_CENTRAL_EVENT5] = \"Darkubes II\",\n                [BX_CENTRAL_BATTLE3] = \"A Riku From the Past?\",\n                [BX_CENTRAL_EVENT6] = \"The First Baymax\",\n                [BX_GARAGE_EVENT3] = \"Friend of Yours?\",\n                [BX_GARAGE_EVENT3b] = \"Before Dark Baymax\",\n\n                [BX_CENTRAL_EVENT7] = \"\",\n                [BX_CENTRAL_BATTLE4] = \"\",\n                [BX_CENTRAL_EVENT7_2] = \"\",\n                [BX_CENTRAL_EVENT7] = \"\",\n\n                [BX_GARAGE_EVENT4] = \"Subdue Dark Baymax!\",\n\n                [BX_END] = \"Story Done (night)\",\n                [BX_END_DAY] = \"Story Done (day)\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_CA] = new Dictionary<StoryLabelTypeCa, string>\n            {\n                [CA_INIT] = \"Beginning\",\n                [CA_WORLD_VISIT1] = \"Start of the World\",\n                [CA_WORLD_VISIT2] = \"Don't let the black pearl escape\",\n                [CA_DAVY_JONES_ROCKER_MISSION_CHASE] = \"\",\n                [CA_DAVY_JONES_ROCKER_MISSION_CHASE_BOSS] = \"\",\n                [CA_WORLDEND_EVENT1] = \"Sail to the island with the two peaks!\",\n                [CA_WORLDEND_SHIP_TUTORIAL] = \"Ship tutorial\",\n                [CA_WORLDEND_SHIPBATTLE] = \"Ship first battle\",\n                [CA_WORLDEND_EVENT2] = \"\",\n                [CA_WORLDEND_EVENT3] = \"\",\n                [CA_WORLDEND_EVENT3] = \"\",\n                [CA_SEA_EVENT1] = \"\",\n                [CA_SEA_BATTLE_FLYING] = \"\",\n                [CA_SEA_EVENT2A] = \"\",\n                [CA_SEA_EVENT2B] = \"\",\n                [CA_SEA_EVENT2C] = \"\",\n                [CA_ISLAND_EVENT1] = \"\",\n                [CA_ISLAND_EVENT2] = \"\",\n                [CA_ISLAND_BATTLE_BIGFISH] = \"\",\n                [CA_ISLAND_EVENT3] = \"\",\n                [CA_ISLAND_EVENT4] = \"\",\n                [CA_SEA_EVENT3] = \"\",\n                [CA_SEA_MISSION_SHIPRACE] = \"Ship race\",\n                [CA_SEA_EVENT4] = \"\",\n                [CA_SEA_BATTLE_SHIP1] = \"\",\n                [CA_SEA_BATTLE_SHIPBOARD] = \"\",\n                [CA_PORTROYAL_EVENT1] = \"\",\n                [CA_PORTROYAL_MISSION_CLEAR] = \"\",\n                [CA_PORTROYAL_EVENT2] = \"\",\n                [CA_PORTROYAL_EVENT3] = \"\",\n                [CA_SEA_WATCH_DESTINATION] = \"\",\n                [CA_SEA_EVENT6] = \"\",\n                [CA_SEA_BATTLE_SHIP2] = \"\",\n                [CA_SEA_EVENT7] = \"\",\n                [CA_MAELSTROM_EVENT1] = \"\",\n                [CA_MAELSTROM_BATTLE1] = \"\",\n                [CA_MAELSTROM_EVENT2] = \"\",\n                [CA_MAELSTROM_BATTLE2] = \"\",\n                [CA_MAELSTROM_EVENT3] = \"\",\n                [CA_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_CA_chart_last_access] = new Dictionary<StoryLabelTypeCaChartLastAccess, string>\n            {\n                [CA_chart_last_access_01] = \"\",\n                [CA_chart_last_access_02] = \"\",\n                [CA_chart_last_access_03] = \"\",\n                [CA_chart_last_access_04] = \"\",\n                [CA_chart_last_access_05] = \"\",\n                [CA_chart_last_access_06] = \"\",\n                [CA_chart_last_access_07] = \"\",\n                [CA_chart_last_access_08] = \"\",\n                [CA_chart_last_access_09] = \"\",\n                [CA_chart_last_access_10] = \"\",\n                [CA_chart_last_access_11] = \"\",\n                [CA_chart_last_access_12] = \"\",\n                [CA_chart_last_access_13] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_CA_ship_ride_type] = new Dictionary<StoryLabelTypeCaShipRide, string>\n            {\n                [CA_ship_ride_type_01] = \"\",\n                [CA_ship_ride_type_02] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_CA_Sub_Portroyal_Search] = new Dictionary<StoryLabelTypeCaPortroyalSearch, string>\n            {\n                [CA_Sub_Portroyal_Search_STEP_01] = \"\",\n                [CA_Sub_Portroyal_Search_STEP_02] = \"\",\n                [CA_Sub_Portroyal_Search_STEP_03] = \"\",\n                [CA_Sub_Portroyal_Search_STEP_04] = \"\",\n                [CA_Sub_Portroyal_Search_STEP_05] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_CS] = new Dictionary<StoryLabelTypeCs, string>\n            {\n                [CS_INIT] = \"\",\n                [CS_EVENT_10] = \"\",\n                [CS_MISSION_10] = \"\",\n                [CS_EVENT_20] = \"\",\n                [CS_MISSION_20] = \"\",\n                [CS_EVENT_30] = \"\",\n                [CS_EVENT_40] = \"\",\n                [CS_MISSION_30] = \"\",\n                [CS_EVENT_50] = \"\",\n                [CS_EVENT_60] = \"\",\n                [CS_MISSION_40] = \"\",\n                [CS_EVENT_70] = \"\",\n                [CS_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_DI] = new Dictionary<StoryLabelTypeDi, string>\n            {\n                [DI_INIT] = \"A Guiding Key (Part 2)\",\n                [DI_EVENT1] = \"Return to the Light (Part 2)\",\n                [DI_EVENT2] = \"A Replica's Resolve Pt. 1\",\n                [DI_EVENT3] = \"The Papou Fruit\",\n                [DI_EVENT4] = \"Last cutscene\",\n                [DI_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_DP] = new Dictionary<StoryLabelTypeDp, string>\n            {\n                [DP_INIT] = \"Beginning\",\n                [DP_EVENT1] = \"Castle Oblivion Is Unlocked\",\n                [DP_EVENT2] = \"Before Vanitas fight\",\n                [DP_EVENT3] = \"Cutscene before Vanitas fight\",\n                [DP_BATTLE_1] = \"Vanitas fight\",\n                [DP_EVENT4] = \"An End to Slumber (Part 1) (After Vanitas)\",\n                [DP_EVENT5] = \"An End to Slumber (Part 2)\",\n                [DP_EVENT6] = \"An End to Slumber (Part 3)\",\n                [DP_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_DW] = new Dictionary<StoryLabelTypeDw, string>\n            {\n                [DW_INIT] = \"A Dwindling Trail\",\n                [DW_EVENT1] = \"The Dark Margin\",\n                [DW_EVENT2] = \"Demon Tower cutscene\",\n                [DW_BATTLE_TOWER] = \"Demon Tower battle I\",\n                [DW_EVENT3] = \"An Unexpected Encounter\",\n                [DW_EVENT4] = \"Riku and the King's Peril\",\n                [DW_EVENT5] = \"Too Late\",\n                [DW_EVENT6] = \"Demon Tower cutscene II\",\n                [DW_BATTLE_AntiAQUA_RIKU] = \"Demon Tower battle II\",\n                [DW_EVENT7] = \"Sora arrives\",\n                [DW_BATTLE_AntiAQUA_SORA] = \"Anti-Aqua fight (Sora)\",\n                [DW_EVENT8] = \"Return to the Light (Part 1)\",\n                [DW_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_EW] = new Dictionary<StoryLabelTypeEw, string>\n            {\n                [EW_INIT] = \"Beginning\",\n                [EW_BASE_TUTORIAL] = \"Base tutorial\",\n                [EW_FIRST_CHOICE1] = \"Choice\",\n                [EW_FIRST_EVENT1] = \"Cutscene before question 1\",\n                [EW_FIRST_QUESTION1] = \"Question 1\",\n                [EW_FIRST_EVENT2] = \"Cutscene before question 2\",\n                [EW_FIRST_QUESTION2] = \"Question 2\",\n                [EW_FIRST_EVENT3] = \"\",\n                [EW_FIRST_EVENT4] = \"\",\n                [EW_ACTION_TUTORIAL] = \"Darkside Boss Battle\",\n                [EW_FIRST_EVENT5] = \"End of tutorial\",\n                [EW_SECOND_EVENT1] = \"\",\n                [EW_SECOND_MISSION1] = \"\",\n                [EW_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_EW_Sub_TESTB] = new Dictionary<StoryLabelTypeEwSub, string>\n            {\n                [EW_Sub_INT] = \"Beginning\",\n                [EW_Sub_EVENT1] = \"\",\n                [EW_Sub_EVENT2] = \"\",\n                [EW_Sub_EVENT3] = \"\",\n                [EW_Sub_EVENT4] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_EW_MISSION] = new Dictionary<StoryLabelTypeEwMission, string>\n            {\n                [EW_MISSION_INIT] = \"\",\n                [EW_MISSION_EVENT_01] = \"\",\n                [EW_MISSION_EVENT_02] = \"\",\n                [EW_MISSION_EVENT_02_2] = \"\",\n                [EW_MISSION_EVENT_03] = \"\",\n                [EW_MISSION_BATTLE_HE] = \"\",\n                [EW_MISSION_EVENT_04] = \"\",\n                [EW_MISSION_EVENT_05] = \"\",\n                [EW_MISSION_EVENT_06] = \"\",\n                [EW_MISSION_EVENT_07] = \"\",\n                [EW_MISSION_BATTLE_BX] = \"\",\n                [EW_MISSION_EVENT_08] = \"\",\n                [EW_MISSION_EVENT_09] = \"\",\n                [EW_MISSION_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_EW_MISSION_RA] = new Dictionary<StoryLabelTypeEwRa, string>\n            {\n                [EW_MISSION_RA_START] = \"\",\n                [EW_MISSION_RA_EVENT_01] = \"\",\n                [EW_MISSION_RA_BATTLE_01] = \"\",\n                [EW_MISSION_RA_EVENT_02] = \"\",\n                [EW_MISSION_RA_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_EW_MISSION_MI] = new Dictionary<StoryLabelTypeEwMi, string>\n            {\n                [EW_MISSION_MI_START] = \"\",\n                [EW_MISSION_MI_EVENT_01] = \"\",\n                [EW_MISSION_MI_BATTLE_01] = \"\",\n                [EW_MISSION_MI_EVENT_02] = \"\",\n                [EW_MISSION_MI_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_EW_MISSION_TS] = new Dictionary<StoryLabelTypeEwTs, string>\n            {\n                [EW_MISSION_TS_START] = \"\",\n                [EW_MISSION_TS_EVENT_01] = \"\",\n                [EW_MISSION_TS_BATTLE_01] = \"\",\n                [EW_MISSION_TS_EVENT_02] = \"\",\n                [EW_MISSION_TS_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_EW_MISSION_CA] = new Dictionary<StoryLabelTypeEwCa, string>\n            {\n                [EW_MISSION_CA_START] = \"\",\n                [EW_MISSION_CA_EVENT_01] = \"\",\n                [EW_MISSION_CA_BATTLE_01] = \"\",\n                [EW_MISSION_CA_EVENT_02] = \"\",\n                [EW_MISSION_CA_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_EW_MISSION_FZ] = new Dictionary<StoryLabelTypeEwFz, string>\n            {\n                [EW_MISSION_FZ_START] = \"\",\n                [EW_MISSION_FZ_EVENT_01] = \"\",\n                [EW_MISSION_FZ_BATTLE_01] = \"\",\n                [EW_MISSION_FZ_EVENT_02] = \"\",\n                [EW_MISSION_FZ_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_EX] = new Dictionary<StoryLabelTypeEx, string>\n            {\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_FZ] = new Dictionary<StoryLabelTypeFz, string>\n            {\n                [FZ_INIT] = \"Beginning\",\n                [FZ_WORLD_VISIT1] = \"\",\n                [FZ_MOUNTAIN_RTEV1] = \"\",\n                [FZ_MOUNTAIN_EVENT1] = \"\",\n                [FZ_MOUNTAIN_BATTLE1] = \"\",\n                [FZ_MOUNTAIN_EVENT2] = \"\",\n                [FZ_LABYRINTH_EVENT1] = \"\",\n                [FZ_ICICLE_AREA_C_EVENT1] = \"\",\n                [FZ_ICICLE_AREA_C_BATTLE1] = \"\",\n                [FZ_ICICLE_AREA_C_EVENT2] = \"\",\n                [FZ_ICICLE_AREA_E_EVENT1] = \"\",\n                [FZ_ICICLE_AREA_E_BATTLE1] = \"\",\n                [FZ_ICICLE_AREA_E_EVENT2] = \"\",\n                [FZ_ICICLE_AREA_F_EVENT1] = \"\",\n                [FZ_ICICLE_AREA_F_BATTLE1] = \"\",\n                [FZ_ICICLE_AREA_F_EVENT2] = \"\",\n                [FZ_ICICLE_AREA_H_EVENT1] = \"\",\n                [FZ_ICICLE_AREA_H_BATTLE1] = \"\",\n                [FZ_ICICLE_AREA_H_EVENT2] = \"\",\n                [FZ_LABYRINTH_WORMHOLE] = \"\",\n                [FZ_LABYRINTH_EVENT2] = \"\",\n                [FZ_CASTLE_EVENT1] = \"\",\n                [FZ_MOUNTAIN_EVENT3] = \"\",\n                [FZ_MOUNTAIN_MISSION1] = \"\",\n                [FZ_STEEP_RTEV1] = \"\",\n                [FZ_MOUNTAIN_BATTLE2] = \"\",\n                [FZ_MOUNTAIN_EVENT4] = \"\",\n                [FZ_MOUNTAIN_EVENT5] = \"\",\n                [FZ_MOUNTAIN_EVENT6] = \"\",\n                [FZ_MOUNTAIN_EVENT7] = \"\",\n                [FZ_MOUNTAIN_EVENT8] = \"\",\n                [FZ_MOUNTAIN_MISSION2] = \"\",\n                [FZ_MOUNTAIN_EVENT9] = \"\",\n                [FZ_MOUNTAIN_BATTLE3] = \"\",\n                [FZ_MOUNTAIN_EVENT10] = \"\",\n                [FZ_CASTLE_EVENT2] = \"\",\n                [FZ_MOUNTAIN_BATTLE4] = \"\",\n                [FZ_MOUNTAIN_EVENT11] = \"\",\n                [FZ_MOUNTAIN_EVENT12] = \"\",\n                [FZ_MOUNTAIN_EVENT13] = \"\",\n                [FZ_MOUNTAIN_EVENT14] = \"\",\n                [FZ_MOUNTAIN_MISSION3] = \"\",\n                [FZ_MOUNTAIN_RTEV2] = \"\",\n                [FZ_SEA_EVENT1] = \"\",\n                [FZ_SEA_BATTLE1] = \"\",\n                [FZ_SEA_EVENT2] = \"After last cutscene\",\n                [FZ_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_FZ_Sub_SLIDEMISSION] = new Dictionary<StoryLabelTypeFzMinigame, string>\n            {\n                [FZ_Sub_SLIDEMISSION_INIT] = \"Beginning\",\n                [FZ_Sub_SLIDEMISSION_CHASE] = \"\",\n                [FZ_Sub_SLIDEMISSION_SLIDE1] = \"\",\n                [FZ_Sub_SLIDEMISSION_SLIDE2] = \"\",\n                [FZ_Sub_SLIDEMISSION_SLIDE3] = \"\",\n                [FZ_Sub_SLIDEMISSION_END] = \"Complete\"\n\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_GM] = new Dictionary<StoryLabelTypeGm, string>\n            {\n                [GM_INIT] = \"Beginning\",\n                [GM_EVENT1] = \"\",\n                [GM_EVENT2] = \"\",\n                [GM_EVENT3] = \"\",\n                [GM_EVENT4] = \"\",\n                [GM_EVENT5] = \"\",\n                [GM_EVENT6] = \"\",\n                [GM_EVENT7] = \"\",\n                [GM_END] = \"Story Done\"\n\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_GM_01] = new Dictionary<StoryLabelTypeGm1, string>\n            {\n                [GM_01_INIT] = \"\",\n                [GM_01_END] = \"\"\n\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_GM_02] = new Dictionary<StoryLabelTypeGm2, string>\n            {\n                [GM_02_INIT] = \"\",\n                [GM_02_END] = \"\"\n\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_GM_03] = new Dictionary<StoryLabelTypeGm3, string>\n            {\n                [GM_03_INIT] = \"\",\n                [GM_03_VISIT1] = \"\",\n                [GM_03_BOSS_01_START] = \"\",\n                [GM_03_BOSS_01_END] = \"\",\n                [GM_03_END] = \"\",\n                [GM_03_VISIT10] = \"\"\n\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_GM_03_SUB] = new Dictionary<StoryLabelTypeGm3sub, string>\n            {\n                [GM_03_SUB_INIT] = \"\",\n                [GM_03_SUB_START] = \"\",\n                [GM_03_SUB_CAMERA_01] = \"\",\n                [GM_03_SUB_ARENA_02] = \"\",\n                [GM_03_SUB_ARENA_03] = \"\",\n                [GM_03_SUB_CAMERA_10] = \"\",\n                [GM_03_SUB_BOSS] = \"\",\n                [GM_03_SUB_END] = \"\",\n\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_GM_SYS] = new Dictionary<StoryLabelTypeGmSys, string>\n            {\n                [GM_SYS_INIT] = \"\",\n                [GM_SYS_EVENT1] = \"\",\n                [GM_SYS_EVENT2] = \"\",\n                [GM_SYS_EVENT3] = \"\",\n                [GM_SYS_EVENT4] = \"\",\n                [GM_SYS_EVENT5] = \"\",\n                [GM_SYS_EVENT6] = \"\",\n                [GM_SYS_END] = \"\",\n\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_GM_SYS_LEVELUP] = new Dictionary<StoryLabelTypeGmLevelUp, string>\n            {\n                [0] = \"Beginning\",\n                [GM_SYS_LEVELUP_STEP_01] = \"\",\n                [GM_SYS_LEVELUP_STEP_02] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_HE] = new Dictionary<StoryLabelTypeHe, string>\n            {\n                [HE_INIT] = \"Beginning\",\n                [HE_OLYMPUS_OPENING_EVENT] = \"\",\n                [HE_OLYMPUS_VISIT1_1] = \"\",\n                [HE_OLYMPUS_RTEV1_1] = \"\",\n                [HE_TUTO_MAGIC_PLAY] = \"\",\n                [HE_OLYMPUS_BATTLE1_1] = \"\",\n                [HE_OLYMPUS_RTEV1_2] = \"\",\n                [HE_TUTO_FREERUN_PLAY] = \"\",\n                [HE_OLYMPUS_EVENT1_1] = \"\",\n                [HE_THEBES_VISIT1] = \"\",\n                [HE_THEBES_EVENT1] = \"\",\n                [HE_TUTO_FREEFLOW_PLAY] = \"\",\n                [HE_THEBES_BATTLE1] = \"After Agora heartless\",\n                [HE_THEBES_EVENT2] = \"\",\n                [HE_THEBES_RTEV1] = \"\",\n                [HE_THEBES_BATTLE1_5] = \"\",\n                [HE_THEBES_EVENT2_5] = \"\",\n                [HE_THEBES_RTEV3] = \"\",\n                [HE_THEBES_EVENT4] = \"\",\n                [HE_THEBES_BATTLE2] = \"\",\n                [HE_THEBES_EVENT5] = \"\",\n                [HE_THEBES_EVENT6] = \"\",\n                [HE_TUTO_FORMCHANGE_PLAY] = \"\",\n                [HE_THEBES_BATTLE3] = \"\",\n                [HE_THEBES_EVENT7] = \"\",\n                [HE_THEBES_RTEV4] = \"\",\n                [HE_TUTO_ATTRACTION_PLAY] = \"\",\n                [HE_THEBES_BATTLE4] = \"\",\n                [HE_THEBES_EVENT8] = \"\",\n                [HE_OLYMPUS_EVENT1_2] = \"\",\n                [HE_OLYMPUS_EVENT1] = \"\",\n                [HE_OLYMPUS_RTEV1] = \"\",\n                [HE_OLYMPUS_RTEV1_5] = \"\",\n                [HE_OLYMPUS_RTEV2] = \"\",\n                [HE_OLYMPUS_BATTLE1] = \"\",\n                [HE_OLYMPUS_EVENT2] = \"\",\n                [HE_OLYMPUS_EVENT3] = \"Start of Realm of Gods\",\n                [HE_HEAVENLY_RTEV1] = \"\",\n                [HE_HEAVENLY_BATTLE1] = \"\",\n                [HE_TUTO_SHOOTFLOW_PLAY] = \"\",\n                [HE_HEAVENLY_RTEV2] = \"\",\n                [HE_TUTO_ATHLETICFLOW_PLAY] = \"\",\n                [HE_HEAVENLY_EVENT1] = \"\",\n                [HE_BOSS_BATTLE_01] = \"\",\n                [HE_HEAVENLY_RTEV3] = \"\",\n                [HE_BOSS_BATTLE_02] = \"\",\n                [HE_HEAVENLY_EVENT2] = \"\",\n                [HE_OLYMPUS_EVENT4] = \"\",\n                [HE_THEBES_EVENT9] = \"\",\n                [HE_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_HE_Sub_HeraculesBoy] = new Dictionary<StoryLabelTypeHeSub, string>\n            {\n                [HE_Sub_HeraculesBoy_Init] = \"\",\n                [HE_Sub_HeraculesBoy_Start] = \"\",\n                [HE_Sub_HeraculesBoy_Item_01] = \"\",\n                [HE_Sub_HeraculesBoy_Item_02] = \"\",\n                [HE_Sub_HeraculesBoy_Item_03] = \"\",\n                [HE_Sub_HeraculesBoy_Item_04] = \"\",\n                [HE_Sub_HeraculesBoy_Item_05] = \"\",\n                [HE_Sub_HeraculesBoy_End] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG] = new Dictionary<StoryLabelTypeKg, string>\n            {\n                [StoryLabelTypeKg.KG_INTERVAL_00] = \"Interval - Vexen's Return\",\n                [StoryLabelTypeKg.KG_INTERVAL_01] = \"Interval - The Organization's Origins\",\n                [StoryLabelTypeKg.KG_INTERVAL_02] = \"Interval - cutscene\",\n                [StoryLabelTypeKg.KG_INIT] = \"Beginning\",\n                [StoryLabelTypeKg.KG_WORLD_VISIT] = \"1 Million Heartless\",\n                [StoryLabelTypeKg.KG_01_BATTLE1] = \"KG01 Before The Final World\",\n                [StoryLabelTypeKg.KG_01_CS_KG702] = \"KG01 Light Expires\",\n                [StoryLabelTypeKg.KG_END] = \"Go Toward the Light (Part 1)\",\n                [StoryLabelTypeKg.KG_01_CS_KG801] = \"Go Toward the Light (Part 2)\",\n                [StoryLabelTypeKg.KG_01_CS_KG802] = \"Light in the Darkness\",\n                [StoryLabelTypeKg.KG_01_CS_KG851] = \"Thanks, Kairi\",\n                [StoryLabelTypeKg.KG_01_CS_KG851b] = \"Before Demon Tide II\",\n                [StoryLabelTypeKg.KG_01_CS_KG852] = \"Demon Tide II\",\n                [StoryLabelTypeKg.KG_01_BATTLE2] = \"The Light of the Past\",\n                [StoryLabelTypeKg.KG_01_CS_KG852b] = \"Demon Tide II (Union Cross)\",\n                [StoryLabelTypeKg.KG_01_BATTLE3] = \"A Corridor of Light\",\n                [StoryLabelTypeKg.KG_01_CS_KG853] = \"The X-Blade\",\n                [StoryLabelTypeKg.KG_50_CS_KG854] = \"Start of The Skein of Severance\",\n                [StoryLabelTypeKg.KG_02_CS_KG855] = \"Before 1st Set of Organization XIII Fights\",\n                [StoryLabelTypeKg.KG_02_BATTLE_AB] = \"Towards the end of the labyrinth\",\n                [StoryLabelTypeKg.KG_02_LABYRINTH_END] = \"Before 2nd Set of Organization XIII Fights\",\n                [StoryLabelTypeKg.KG_02_RTEV_CD] = \"\",\n                [StoryLabelTypeKg.KG_02_BATTLE_CD] = \"Before Young Master Xehanort, Ansem, & Xemnas\",\n                [StoryLabelTypeKg.KG_02_EVENT_E_START] = \"Xehanort Trio start battle\",\n                [StoryLabelTypeKg.KG_02_BATTLE_E_PHASE_01] = \"Xehanort Trio phase 1\",\n                [StoryLabelTypeKg.KG_02_EVENT_E_PHASE_01_END] = \"Xehanort Trio end phase 1\",\n                [StoryLabelTypeKg.KG_02_BATTLE_E_PHASE_02] = \"Xehanort Trio phase 2\",\n                [StoryLabelTypeKg.KG_02_EVENT_E_PHASE_02_END] = \"Xehanort Trio end phase 2\",\n                [StoryLabelTypeKg.KG_02_BATTLE_E_PHASE_03] = \"Xehanort Trio phase 3\",\n                [StoryLabelTypeKg.KG_02_EVENT_E_PHASE_03_END] = \"Xehanort Trio end phase 3\",\n                [StoryLabelTypeKg.KG_02_EVENT_E_END] = \"Xehanort Trio end battle\",\n                [StoryLabelTypeKg.KG_END2] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_13_A] = new Dictionary<StoryLabelTypeKgA, string>\n            {\n                [KG_02_EVENT_A_INIT] = \"Beginning\",\n                [KG_02_EVENT_A_START] = \"\",\n                [KG_02_BATTLE_A_PHASE_01] = \"\",\n                [KG_02_EVNET_A_PHASE_01_END] = \"\",\n                [KG_02_BATTLE_A_PHASE_02] = \"\",\n                [KG_02_EVNET_A_PHASE_02_END] = \"\",\n                [KG_02_BATTLE_A_PHASE_03] = \"\",\n                [KG_02_EVNET_A_PHASE_03_END] = \"\",\n                [KG_02_EVENT_A_END] = \"Fight Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_13_B] = new Dictionary<StoryLabelTypeKgB, string>\n            {\n                [KG_02_EVENT_B_INIT] = \"Beginning\",\n                [KG_02_EVENT_B_START] = \"\",\n                [KG_02_BATTLE_B_PHASE_01] = \"\",\n                [KG_02_EVENT_B_PHASE_01_END] = \"\",\n                [KG_02_BATTLE_B_PHASE_02] = \"\",\n                [KG_02_EVENT_B_PHASE_02_END] = \"\",\n                [KG_02_BATTLE_B_PHASE_03] = \"\",\n                [KG_02_EVENT_B_PHASE_03_END] = \"\",\n                [KG_02_BATTLE_B_PHASE_04] = \"\",\n                [KG_02_EVENT_B_PHASE_04_END] = \"\",\n                [KG_02_EVENT_B_END] = \"Fight Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_13_C] = new Dictionary<StoryLabelTypeKgC, string>\n            {\n                [StoryLabelTypeKgC.KG_02_EVENT_C_INIT] = \"Beginning\",\n                [StoryLabelTypeKgC.KG_02_EVENT_C_START] = \"\",\n                [StoryLabelTypeKgC.KG_02_BATTLE_C_PHASE_01] = \"\",\n                [StoryLabelTypeKgC.KG_02_EVENT_C_PHASE_01_END] = \"\",\n                [StoryLabelTypeKgC.KG_02_BATTLE_C_PHASE_02] = \"\",\n                [StoryLabelTypeKgC.KG_02_EVENT_C_PHASE_02_END] = \"\",\n                [StoryLabelTypeKgC.KG_02_EVENT_C_END] = \"Fight Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_13_D] = new Dictionary<StoryLabelTypeKgD, string>\n            {\n                [StoryLabelTypeKgD.KG_02_EVENT_D_INIT] = \"Beginning\",\n                [StoryLabelTypeKgD.KG_02_EVENT_D_START] = \"\",\n                [StoryLabelTypeKgD.KG_02_BATTLE_D_PHASE1_01] = \"\",\n                [StoryLabelTypeKgD.KG_02_EVENT_D_PHASE_01_END] = \"\",\n                [StoryLabelTypeKgD.KG_02_BATTLE_D_PHASE1_02] = \"\",\n                [StoryLabelTypeKgD.KG_02_EVENT_D_PHASE_02_END] = \"\",\n                [StoryLabelTypeKgD.KG_02_EVENT_D_END] = \"Fight Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_MI] = new Dictionary<StoryLabelTypeMi, string>\n            {\n                [MI_INIT] = \"Beginning\",\n                [MI_WORLD_VISIT1] = \"\",\n                [MI_ENTRANCE_EVENT1] = \"\",\n                [MI_ENTRANCE_BATTLE1] = \"\",\n                [MI_ENTRANCE_EVENT2] = \"\",\n                [MI_SCARE_EVENT1] = \"\",\n                [MI_SCARE_BATTLE1] = \"\",\n                [MI_SCARE_EVENT2] = \"\",\n                [MI_SCARE_EVENT3] = \"\",\n                [MI_DOOR_REAL1] = \"\",\n                [MI_DOOR_MISSION1] = \"\",\n                [MI_DOOR_EVENT1] = \"\",\n                [MI_DOOR_MISSION2] = \"\",\n                [MI_DOOR_EVENT2] = \"\",\n                [MI_DOOR_REAL2] = \"\",\n                [MI_DOOR_MISSION3] = \"\",\n                [MI_DOOR_EVENT3] = \"\",\n                [MI_FACTORY_EVENT1] = \"\",\n                [MI_FACTORY_EVENT2] = \"\",\n                [MI_FACTORY_MISSION1] = \"\",\n                [MI_FACTORY_REAL1] = \"\",\n                [MI_FACTORY_EVENT3] = \"\",\n                [MI_FACTORY_LIFT] = \"\",\n                [MI_FACTORY_REAL2] = \"\",\n                [MI_FACTORY_BATTLE1] = \"\",\n                [MI_FACTORY_REAL3] = \"\",\n                [MI_FACTORY_BATTLE2] = \"\",\n                [MI_FACTORY_REAL4] = \"\",\n                [MI_FACTORY_REAL5] = \"\",\n                [MI_FACTORY_MISSION2] = \"\",\n                [MI_FACTORY_REAL6] = \"\",\n                [MI_FACTORY_EVENT4] = \"\",\n                [MI_FACTORY_MISSION3] = \"\",\n                [MI_FACTORY_EVENT5] = \"\",\n                [MI_PLANT_EVENT1] = \"\",\n                [MI_PLANT_EVENT2] = \"\",\n                [MI_PLANT_BATTLE1] = \"\",\n                [MI_PLANT_EVENT3] = \"\",\n                [MI_PLANT_REAL1] = \"\",\n                [MI_PLANT_BATTLE2] = \"\",\n                [MI_PLANT_EVENT4] = \"\",\n                [MI_PLANT_REAL2] = \"\",\n                [MI_PLANT_BATTLE3] = \"\",\n                [MI_PLANT_EVENT5] = \"\",\n                [MI_DOORBOSS_EVENT1] = \"\",\n                [MI_DOORBOSS_BATTLE1] = \"\",\n                [MI_DOORBOSS_EVENT2] = \"\",\n                [MI_SCARE_EVENT4] = \"\",\n                [MI_ENTRANCE_EVENT3] = \"\",\n                [MI_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_MI_Sub_INT] = new Dictionary<StoryLabelTypeMiSub, string>\n            {\n                [0] = \"Beginning\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_PO] = new Dictionary<StoryLabelTypePo, string>\n            {\n                [PO_INIT] = \"Beginning\",\n                [PO_EVENT_01] = \"First minigame beaten\",\n                [PO_VEGETABLE_MINIGAME_01] = \"Before second minigame\",\n                [PO_EVENT_02] = \"Second minigame beaten\",\n                [PO_ORCHARD_MINIGAME_01] = \"Before third minigame\",\n                [PO_EVENT_03] = \"Third minigame beaten\",\n                [PO_FLOWER_MINIGAME_01] = \"Before fourth minigame\",\n                [PO_EVENT_04] = \"Fourth minigame beaten\",\n                [PO_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_RA] = new Dictionary<StoryLabelTypeRa, string>\n            {\n                [RA_INIT] = \"Beginning\",\n                [RA_WORLD_VISIT1] = \"\",\n                [RA_FOREST_EVENT1] = \"\",\n                [RA_FOREST_BATTLE1] = \"\",\n                [RA_FOREST_EVENT2] = \"\",\n                [RA_FOREST_EVENT3] = \"\",\n                [RA_TOWER_EVENT1] = \"\",\n                [RA_FOREST_EVENT4] = \"\",\n                [RA_FOREST_EVENT5] = \"\",\n                [RA_FOREST_EVENT6] = \"\",\n                [RA_FOREST_BATTLE2] = \"\",\n                [RA_TOWER_EVENT2] = \"\",\n                [RA_FOREST_REAL10] = \"\",\n                [RA_FOREST_EVENT20] = \"\",\n                [RA_FOREST_BATTLE10] = \"\",\n                [RA_FOREST_EVENT21] = \"\",\n                [RA_FOREST_EVENT22] = \"\",\n                [RA_FOREST_EVENT23] = \"\",\n                [RA_FOREST_REAL22] = \"\",\n                [RA_FOREST_REAL25] = \"\",\n                [RA_FOREST_BATTLE20] = \"\",\n                [RA_FOREST_BATTLE21] = \"\",\n                [RA_FOREST_REAL30] = \"\",\n                [RA_FOREST_REAL40] = \"\",\n                [RA_CASTLE_EVENT1] = \"\",\n                [RA_CASTLE_EVENT2] = \"\",\n                [RA_CASTLE_MISSION1] = \"\",\n                [RA_CASTLE_EVENT3] = \"\",\n                [RA_CASTLE_BATTLE1] = \"\",\n                [RA_FOREST_EVENT30] = \"\",\n                [RA_TOWER_EVENT3] = \"\",\n                [RA_FOREST_EVENT31] = \"\",\n                [RA_FOREST_EVENT32] = \"Going back to Rapunzel's Tower\",\n                [RA_FOREST_REAL50] = \"\",\n                [RA_FOREST_BATTLE30] = \"\",\n                [RA_TOWER_EVENT4] = \"\",\n                [RA_TOWER_EVENT5] = \"\",\n                [RA_FOREST_EVENT41] = \"\",\n                [RA_FOREST_BATTLEBOSS] = \"\",\n                [RA_TOWER_EVENT6] = \"\",\n                [RA_FOREST_EVENT42] = \"\",\n                [RA_FOREST_EVENT50] = \"\",\n                [RA_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_RA_Dandelion] = new Dictionary<StoryLabelTypeRaDandelion, string>\n            {\n                [RA_DANDELION_INIT] = \"\",\n                [RA_DANDELION_START] = \"\",\n                [RA_DANDELION_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_RA_Rabbit] = new Dictionary<StoryLabelTypeRaRabbit, string>\n            {\n                [RA_RABBIT_INIT] = \"\",\n                [RA_RABBIT_START] = \"\",\n                [RA_RABBIT_FINISH] = \"\",\n                [RA_RABBIT_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_RA_Rainbow] = new Dictionary<StoryLabelTypeRaRainbow, string>\n            {\n                [RA_RAINBOW_INIT] = \"\",\n                [RA_RAINBOW_START] = \"\",\n                [RA_RAINBOW_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_RA_Bird] = new Dictionary<StoryLabelTypeRaBird, string>\n            {\n                [RA_BIRD_INIT] = \"\",\n                [RA_BIRD_START] = \"\",\n                [RA_BIRD_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_RG] = new Dictionary<StoryLabelTypeRg, string>\n            {\n                [RG_INIT] = \"Terra's Whereabouts\",\n                [RG_EVENT1] = \"The Missing Scientist\",\n                [RG_EVENT2] = \"The Benched Enact a Plan\",\n                [RG_EVENT3] = \"A Present from Vexen\",\n                [RG_EVENT4] = \"Last cutscene\",\n                [RG_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_SF] = new Dictionary<StoryLabelTypeSf, string>\n            {\n                [SF_INIT] = \"Beginning\",\n                [SF_EVENT1] = \"Nothing's As It Should Be\",\n                [SF_EVENT2] = \"Second cutscene\",\n                [SF_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_TS] = new Dictionary<StoryLabelTypeTs, string>\n            {\n                [TS_INIT] = \"Beginning\",\n                [TS_GAME_CM1] = \"\",\n                [TS_WORLD_VISIT1] = \"\",\n                [TS_ANDY_BATTLE1] = \"\",\n                [TS_ANDY_EVENT1] = \"\",\n                [TS_ANDY_EVENT2] = \"\",\n                [TS_ANDY_TO_TOYSHOP] = \"\",\n                [TS_HOLE_EVENT1] = \"\",\n                [TS_HOLE_BATTLE1] = \"\",\n                [TS_HOLE_EVENT2] = \"\",\n                [TS_KAIJU_EVENT1] = \"\",\n                [TS_KAIJU_BATTLE1] = \"\",\n                [TS_KAIJU_EVENT2] = \"\",\n                [TS_NUIGURUMI_EVENT1] = \"\",\n                [TS_NUIGURUMI_EVENT2] = \"\",\n                [TS_NUIGURUMI_EVENT3] = \"\",\n                [TS_NUIGURUMI_EVENT4] = \"\",\n                [TS_NUIGURUMI_BATTLE1] = \"\",\n                [TS_NUIGURUMI_EVENT5] = \"\",\n                [TS_BABYTOY_EVENT1] = \"\",\n                [TS_BABYTOY_MISSION1] = \"\",\n                [TS_BABYTOY_EVENT2] = \"\",\n                [TS_HOLE_EVENT3] = \"\",\n                [TS_GAME_EVENT1] = \"\",\n                [TS_GAME_EVENT2] = \"\",\n                [TS_GAME_MISSION1] = \"\",\n                [TS_GAME_EVENT3] = \"\",\n                [TS_ATHLETIC_EVENT1] = \"\",\n                [TS_ATHLETIC_EVENT2] = \"\",\n                [TS_ATHLETIC_EVENT3] = \"\",\n                [TS_BOSS_EVENT1] = \"\",\n                [TS_BOSS_BATTLE1] = \"\",\n                [TS_HOLE_EVENT4] = \"\",\n                [TS_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_TS_Sub_GAM1] = new Dictionary<StoryLabelTypeTsSub, string>\n            {\n                [0] = \"Beginning\",\n                [TS_Sub_GAM1_EVENT1] = \"\",\n                [TS_Sub_GAM1_EVENT2] = \"\",\n                [TS_Sub_GAM1_EVENT3] = \"\",\n                [TS_Sub_GAM1_EVENT4] = \"\",\n                [TS_Sub_GAM1_EVENT5] = \"\",\n                [TS_Sub_GAM1_EVENT6] = \"\",\n                [TS_Sub_GAM1_EVENT7] = \"\",\n                [TS_Sub_GAM1_EVENT8] = \"\",\n                [TS_Sub_GAM1_EVENT9] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_TT] = new Dictionary<StoryLabelTypeTt, string>\n            {\n                [TT_INIT] = \"Beginning\",\n                [TT_TRM_EVENT01] = \"The Neighborhood Nobodies\",\n                [TT_TRM_MISSION01] = \"Hello, Good-bye\",\n                [TT_TRM_EVENT02] = \"Demon Tide I\",\n                [TT_TRM_MISSION02] = \"Defeat the Demon Tide!\",\n                [TT_TRM_EVENT03] = \"Before The Woods Powerwilds\",\n                [TT_WODS_EVENT01] = \"The Woods Powerwilds\",\n                [TT_WODS_MISSION01] = \"\",\n                [TT_WODS_EVENT02] = \"Before Entering the Mansion\",\n                [TT_COMP_EVENT01] = \"Datascapes (Part 2)\",\n                [TT_COMP_EVENT02] = \"Before The Old Mansion Fight\",\n                [TT_MANS_EVENT01] = \"After The Old Mansion Fight\",\n                [TT_MANS_MISSION01] = \"\",\n                [TT_MANS_EVENT02] = \"The Old Mansion Fight\",\n                [TT_TRM2_EVENT01] = \"Collect Ingredients\",\n                [TT_TRM2_MISSION01] = \"End ingredients collection mission\",\n                [TT_TRM2_EVENT02] = \"\",\n                [TT_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_TT_PO] = new Dictionary<StoryLabelTypeTtPo, string>\n            {\n                [TT_PO_INIT] = \"\",\n                [TT_PO_TRM_EVENT01] = \"\",\n                [TT_PO_TRM_EVENT02] = \"\",\n                [TT_PO_END] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_TT_Remy] = new Dictionary<StoryLabelTypeTtRemy, string>\n            {\n                [0] = \"Beginning\",\n                [TT_Remy_EVENT01] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_WM_WORLD_HE] = new Dictionary<StoryLabelTypeWmHe, string>\n            {\n                [WM_WORLD_HE_CLOSED] = \"\",\n                [WM_WORLD_HE_STARTED] = \"\",\n                [WM_WORLD_HE_CLEARED] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_WM_WORLD_TT] = new Dictionary<StoryLabelTypeWmTt, string>\n            {\n                [WM_WORLD_TT_CLOSED] = \"\",\n                [WM_WORLD_TT_STARTED] = \"\",\n                [WM_WORLD_TT_CLEARED] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_WM_WORLD_RA] = new Dictionary<StoryLabelTypeWmRa, string>\n            {\n                [WM_WORLD_RA_CLOSED] = \"\",\n                [WM_WORLD_RA_STARTED] = \"\",\n                [WM_WORLD_RA_CLEARED] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_WM_WORLD_TS] = new Dictionary<StoryLabelTypeWmTs, string>\n            {\n                [WM_WORLD_TS_CLOSED] = \"\",\n                [WM_WORLD_TS_STARTED] = \"\",\n                [WM_WORLD_TS_CLEARED] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_WM_WORLD_MI] = new Dictionary<StoryLabelTypeWmMi, string>\n            {\n                [WM_WORLD_MI_CLOSED] = \"\",\n                [WM_WORLD_MI_STARTED] = \"\",\n                [WM_WORLD_MI_CLEARED] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_WM_WORLD_FZ] = new Dictionary<StoryLabelTypeWmFz, string>\n            {\n                [WM_WORLD_FZ_CLOSED] = \"\",\n                [WM_WORLD_FZ_STARTED] = \"\",\n                [WM_WORLD_FZ_CLEARED] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_WM_WORLD_CA] = new Dictionary<StoryLabelTypeWmCa, string>\n            {\n                [WM_WORLD_CA_CLOSED] = \"\",\n                [WM_WORLD_CA_STARTED] = \"\",\n                [WM_WORLD_CA_CLEARED] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_WM_WORLD_BX] = new Dictionary<StoryLabelTypeWmBx, string>\n            {\n                [WM_WORLD_BX_CLOSED] = \"\",\n                [WM_WORLD_BX_STARTED] = \"\",\n                [WM_WORLD_BX_CLEARED] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_WM_WORLD_KG] = new Dictionary<StoryLabelTypeWmKg, string>\n            {\n                [WM_WORLD_KG_CLOSED] = \"\",\n                [WM_WORLD_KG_STARTED] = \"\",\n                [WM_WORLD_KG_CLEARED] = \"\",\n            }.ToStoryLabel(),\n            [StoryFlagType.global_GameBattleLV] = new Dictionary<StoryLabelTypeGameBattle, string>\n            {\n                [GLOBAL_GAMEBATTLELv_01] = \"Lv. 1 (beginning)\",\n                [GLOBAL_GAMEBATTLELv_02] = \"Lv. 2\",\n                [GLOBAL_GAMEBATTLELv_03] = \"Lv. 3\",\n                [GLOBAL_GAMEBATTLELv_04] = \"Lv. 4\",\n                [GLOBAL_GAMEBATTLELv_05] = \"Lv. 5 (endgame)\",\n                [GLOBAL_GAMEBATTLELv_06] = \"Lv. 6 (DLC beginning\",\n                [GLOBAL_GAMEBATTLELv_07] = \"Lv. 7\",\n                [GLOBAL_GAMEBATTLELv_08] = \"Lv. 8 (endgame)\",\n                [GLOBAL_GAMEBATTLELv_09] = \"Lv. 9 (DLC endgame)\",\n            }.ToStoryLabel(),\n            [StoryFlagType.global_GameShopLV] = new Dictionary<StoryLabelTypeGameShop, string>\n            {\n                [GLOBAL_GAMESHOPLv_01] = \"Lv. 1 (beginning)\",\n                [GLOBAL_GAMESHOPLv_02] = \"Lv. 2\",\n                [GLOBAL_GAMESHOPLv_03] = \"Lv. 3\",\n                [GLOBAL_GAMESHOPLv_04] = \"Lv. 4\",\n                [GLOBAL_GAMESHOPLv_05] = \"Lv. 5\",\n                [GLOBAL_GAMESHOPLv_06] = \"Lv. 6\",\n                [GLOBAL_GAMESHOPLv_07] = \"Lv. 7\",\n                [GLOBAL_GAMESHOPLv_END] = \"Lv. 8 (endgame)\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_YT] = new Dictionary<StoryLabelTypeYt, string>\n            {\n                [YT_INIT] = \"Prelude to Adventure\",\n                [YT_EVENT1] = \"A Fresh Start\",\n                [YT_EVENT2] = \"A Quick Review\",\n                [YT_EVENT3] = \"The Guardians of Light Gather\",\n                [YT_EVENT4] = \"Beneath the Same Stars\",\n                [YT_EVENT5] = \"Last cutscene\",\n                [YT_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_BT_DLC] = new Dictionary<StoryLabelTypeBtDlc8, string>\n            {\n                [BT_DLC_INIT] = \"Beginning\",\n                [BT_DLC_08_EVENT_01] = \"\",\n                [BT_DLC_08_EVENT_02] = \"\",\n                [BT_DLC_08_BATTLE_01] = \"\",\n                [BT_DLC_07_MISSION_01] = \"\",\n                [BT_DLC_08_EVENT_03] = \"\",\n                [BT_DLC_08_BATTLE_02] = \"\",\n                [BT_DLC_08_EVENT_04] = \"\",\n                [BT_DLC_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_BT_DLC_07_BT_01] = new Dictionary<StoryLabelTypeBtDlc7, string>\n            {\n                [BT_DLC_07_BT_01_INIT] = \"Beginning\",\n                [BT_DLC_07_BT_01_EVENT_01] = \"\",\n                [BT_DLC_07_BT_01_EVENT_02] = \"\",\n                [BT_DLC_07_BT_01_BATTLE_01] = \"\",\n                [BT_DLC_07_BT_01_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gim_BT_DLC_monument] = new Dictionary<StoryLabelTypeBtDlc7Monument, string>\n            {\n                [BT_DLC_07_MONUMENT_START] = \"Beginning\",\n                [BT_DLC_07_MONUMENT_STEP01] = \"Step 1\",\n                [BT_DLC_07_MONUMENT_STEP02] = \"Step 2\",\n                [BT_DLC_07_MONUMENT_STEP03] = \"Step 3\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_DLC] = new Dictionary<StoryLabelTypeKgDlc, string>\n            {\n                [StoryLabelTypeKgDlc.KG_DLC_INIT] = \"Beginning\",\n                [StoryLabelTypeKgDlc.KG_DLC_WORLD_VISIT] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_01] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_04_BATTLE_01] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_02] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_04_BATTLE_02] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_03] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_05] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_06] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_04_BATTLE_03] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_07] = \"\",\n                [StoryLabelTypeKgDlc.KG_02_EVENT_E_END] = \"Between Main story and DLC\",\n                [StoryLabelTypeKgDlc.KG_DLC_06_EVENT_01] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_06_BATTLE_01] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_06_BATTLE_02] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_07_BATTLE_01] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_06_2_EVENT_01] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_06_2_BATTLE_01] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_06_2_BATTLE_02] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_05_3_EVENT_01] = \"\",\n                [StoryLabelTypeKgDlc.KG_DLC_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_DLC_13_A] = new Dictionary<StoryLabelTypeKgA, string>\n            {\n                [KG_02_EVENT_A_INIT] = \"Beginning\",\n                [KG_02_EVENT_A_START] = \"\",\n                [KG_02_BATTLE_A_PHASE_01] = \"\",\n                [KG_02_EVNET_A_PHASE_01_END] = \"\",\n                [KG_02_BATTLE_A_PHASE_02] = \"\",\n                [KG_02_EVNET_A_PHASE_02_END] = \"\",\n                [KG_02_BATTLE_A_PHASE_03] = \"\",\n                [KG_02_EVNET_A_PHASE_03_END] = \"\",\n                [KG_02_EVENT_A_END] = \"Fight Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_DLC_13_B] = new Dictionary<StoryLabelTypeKgB, string>\n            {\n                [KG_02_EVENT_B_INIT] = \"Beginning\",\n                [KG_02_EVENT_B_START] = \"\",\n                [KG_02_BATTLE_B_PHASE_01] = \"\",\n                [KG_02_EVENT_B_PHASE_01_END] = \"\",\n                [KG_02_BATTLE_B_PHASE_02] = \"\",\n                [KG_02_EVENT_B_PHASE_02_END] = \"\",\n                [KG_02_BATTLE_B_PHASE_03] = \"\",\n                [KG_02_EVENT_B_PHASE_03_END] = \"\",\n                [KG_02_BATTLE_B_PHASE_04] = \"\",\n                [KG_02_EVENT_B_PHASE_04_END] = \"\",\n                [KG_02_EVENT_B_END] = \"Fight Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_DLC_13_C] = new Dictionary<StoryLabelTypeKgDlc5c, string>\n            {\n                [StoryLabelTypeKgDlc5c.KG_02_EVENT_C_INIT] = \"Beginning\",\n                [StoryLabelTypeKgDlc5c.KG_02_EVENT_C_START] = \"\",\n                [StoryLabelTypeKgDlc5c.KG_DLC_05_BATTLE_C_PHASE_0a] = \"\",\n                [StoryLabelTypeKgDlc5c.KG_DLC_05_EVENT_C_PHASE_0a_END] = \"\",\n                [StoryLabelTypeKgDlc5c.KG_02_BATTLE_C_PHASE_01] = \"\",\n                [StoryLabelTypeKgDlc5c.KG_02_EVENT_C_PHASE_01_END] = \"\",\n                [StoryLabelTypeKgDlc5c.KG_02_BATTLE_C_PHASE_02] = \"\",\n                [StoryLabelTypeKgDlc5c.KG_02_EVENT_C_PHASE_02_END] = \"\",\n                [StoryLabelTypeKgDlc5c.KG_02_EVENT_C_END] = \"Fight Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_DLC_13_D] = new Dictionary<StoryLabelTypeKgDlc5d, string>\n            {\n                [StoryLabelTypeKgDlc5d.KG_02_EVENT_D_INIT] = \"Beginning\",\n                [StoryLabelTypeKgDlc5d.KG_02_EVENT_D_START] = \"\",\n                [StoryLabelTypeKgDlc5d.KG_DLC_05_EVENT_D_EVENT_01] = \"\",\n                [StoryLabelTypeKgDlc5d.KG_02_BATTLE_D_PHASE1_01] = \"\",\n                [StoryLabelTypeKgDlc5d.KG_02_EVENT_D_PHASE_01_END] = \"\",\n                [StoryLabelTypeKgDlc5d.KG_DLC_05_EVENT_D_PHASE_01a_END] = \"\",\n                [StoryLabelTypeKgDlc5d.KG_DLC_05_BATTLE_D_PHASE_0a] = \"\",\n                [StoryLabelTypeKgDlc5d.KG_DLC_05_EVENT_D_PHASE_0a_END] = \"\",\n                [StoryLabelTypeKgDlc5d.KG_02_BATTLE_D_PHASE1_02] = \"\",\n                [StoryLabelTypeKgDlc5d.KG_02_EVENT_D_PHASE_02_END] = \"\",\n                [StoryLabelTypeKgDlc5d.KG_02_EVENT_D_END] = \"Fight Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_DLC_05_AREA_A_CHARSEL] = new Dictionary<StoryLabelTypeKgDlcCharSelect, string>\n            {\n                [KG_DLC_05_AREA_A_CHARSEL_01] = \"Sora\",\n                [KG_DLC_05_AREA_A_CHARSEL_02] = \"Riku\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_DLC_05_AREA_B_CHARSEL] = new Dictionary<StoryLabelTypeKgDlcCharSelect, string>\n            {\n                [KG_DLC_05_AREA_B_CHARSEL_01] = \"Sora\",\n                [KG_DLC_05_AREA_B_CHARSEL_02] = \"???\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_DLC_05_AREA_C_CHARSEL] = new Dictionary<StoryLabelTypeKgDlcCharSelect, string>\n            {\n                [KG_DLC_05_AREA_C_CHARSEL_01] = \"Sora\",\n                [KG_DLC_05_AREA_C_CHARSEL_02] = \"Aqua\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_DLC_05_AREA_D_CHARSEL] = new Dictionary<StoryLabelTypeKgDlcCharSelect, string>\n            {\n                [KG_DLC_05_AREA_D_CHARSEL_01] = \"Sora\",\n                [KG_DLC_05_AREA_D_CHARSEL_02] = \"Roxas\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_KG_DLC_06_LAST_CHARSEL] = new Dictionary<StoryLabelTypeKgDlcCharSelect, string>\n            {\n                [KG_DLC_06_LAST_CHARSEL_01] = \"Sora\",\n                [KG_DLC_06_LAST_CHARSEL_02] = \"Kairi\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_RG_DLC] = new Dictionary<StoryLabelTypeRgDlc, string>\n            {\n                [RG_DLC_INIT] = \"Beginning\",\n                [RG_DLC_EVENT_01] = \"\",\n                [RG_DLC_EVENT_02] = \"\",\n                [RG_DLC_MAR_EVENT_01] = \"\",\n                [RG_DLC_SHU_EVENT_01] = \"\",\n                [RG_DLC_SHU_EVENT_02] = \"\",\n                [RG_DLC_SHU_BATTLE_01] = \"\",\n                [RG_DLC_MAR2_EVENT_01] = \"\",\n                [RG_DLC_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_SS_DLC] = new Dictionary<StoryLabelTypeSsDlc, string>\n            {\n                [SS_DLC_INIT] = \"Beginning\",\n                [SS_DLC_EVENT_01] = \"\",\n                [SS_DLC_BATTLE_01] = \"\",\n                [SS_DLC_END] = \"Story Done\",\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_SS_DLC_Sub_BadEnd] = new Dictionary<StoryLabelTypeSsDlcSub, string>\n            {\n                [0] = \"Not seen\",\n                [SS_DLC_SUB_BADEND_END] = \"Seen\"\n            }.ToStoryLabel(),\n            [StoryFlagType.gameflow_SS_DLC_Sub_TrueEnd] = new Dictionary<StoryLabelTypeSsDlcSub, string>\n            {\n                [0] = \"Not seen\",\n                [SS_DLC_SUB_BADEND_END] = \"Seen\"\n            }.ToStoryLabel(),\n        };\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/SaveKh3.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Force.Crc32;\nusing KHSave.Lib3.Models;\nusing KHSave.Lib3.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3\n{\n    public class SaveKh3 : ISaveKh3\n    {\n        internal static IBinaryMapping Mapper;\n\n        static SaveKh3()\n        {\n            Mapper = MappingConfiguration\n                .DefaultConfiguration()\n                .Build();\n        }\n\n        [Data(0, 0x94E8F0)] public byte[] Data { get; set; }\n\n        [Data(0x0)] public int MagicCode { get; set; }\n        [Data] public int FileSize { get; set; }\n        [Data] public short MajorVersion { get; set; }\n        [Data] public short MinorVersion { get; set; }\n        [Data(0xC)] public uint Checksum { get; set; }\n        [Data(0x14)] public DifficultyType Difficulty { get; set; }\n        [Data(0x18)] public WorldType WorldLogo { get; set; }\n\n        [Data(0x24)] public int TotalExp { get; set; }\n        [Data(0x28)] public int Munny { get; set; }\n        [Data(0x2C)] public byte Level { get; set; }\n        [Data(0x30)] public DesireChoice DesireChoice { get; set; }\n        [Data(0x31)] public PowerChoice PowerChoice { get; set; }\n        [Data(0x32, Count = 5)] public List<PartyCharacter> Party { get; set; }\n        [Data(0x39)] public bool SaveClear { get; set; }\n        [Data(0x54)] public LocationType LocationName { get; set; }\n        [Data(0x58)] public int Unknown00058 { get; set; }\n        [Data(0x5C)] public int Unknown0005C { get; set; }\n        [Data(0x60)] public CharacterIconType BaseSaveIcon { get; set; }\n        public CharacterIconType DlcSaveIcon { get => default(CharacterIconType); set { } }\n\n        [Data(0x68)] public int EnemiesDefeated { get; set; }\n        [Data(0x5B0)] public short SavesCount { get; set; }\n        [Data(0x68e, 5)] public List<short> RecordAttractionsUseCount { get; set; }\n        [Data(0x6C8, 0x1e, 2)] public List<short> RecordShotlocksUseCount { get; set; }\n        [Data(0x86c, 0x400, 2)] public List<InventoryEntry> Inventory { get; set; }\n        [Data(0x15d6, 100)] public List<short> MaterialsCount { get; set; }\n        [Data(0x1764)] public int CrabsCollected { get; set; }\n        [Data(0x17F8, 16, 0x9C0)] public List<PlayableCharacter> Pc { get; set; }\n        [Data(0xB414)] public int BonusHp { get; set; }\n        [Data(0xB418)] public int BonusMp { get; set; }\n        [Data(0xB41C)] public int BonusStrength { get; set; }\n        [Data(0xB420)] public int BonusMagic { get; set; }\n        [Data(0xB424)] public int BonusDefense { get; set; }\n        [Data(0xB43C, 0x40, 4)] public List<int> Storyflags { get; set; }\n        [Data(0xBB18, 0x100)] public string MapPath { get; set; }\n        [Data(0xBC18, 0x40)] public string MapSpawn { get; set; }\n        [Data(0xBC58, 0x100)] public string PlayerScript { get; set; }\n        [Data(0xBD58, 0x100)] public string PlayerCharacter { get; set; }\n\n        [Data(0xBE98, 3)] public List<ShortcutGroup> Shortcuts { get; set; }\n\n        [Data(0xBEC8, 6, 4)] public List<CommandType> Magics { get; set; }\n        [Data(0xBEE0, 5, 4)] public List<CommandType> Links { get; set; }\n\n        [Data(0x83a70)] public Records Records { get; set; }\n\n        [Data(0x84770)] public int PhotoMaxCount { get; set; }\n        [Data(0x84784, 90, 0x19004)] public List<PhotoEntry> Photos { get; set; }\n        public string DlcMapPath { get => string.Empty; set { } }\n        public string DlcSpawnPoint { get => string.Empty; set { } }\n\n        internal static bool IsValidInternal(Stream stream)\n        {\n            var prevPosition = stream.Position;\n            var reader = new BinaryReader(stream.SetPosition(0));\n            var magicCode = reader.ReadInt32();\n            var length = reader.ReadInt32();\n            stream.Position = prevPosition;\n\n            return magicCode == 0x45764053 && length == 0x94E8E0;\n        }\n\n        public void Write(Stream stream)\n        {\n            using (var tempStream = new MemoryStream())\n            {\n                BinaryMapping.WriteObject(tempStream, this);\n                Checksum = CalculateChecksum(tempStream);\n            }\n\n            Mapper.WriteObject(stream.SetPosition(0), this);\n        }\n\n        internal static SaveKh3 ReadInternal(Stream stream) =>\n            Mapper.ReadObject(stream, new SaveKh3()) as SaveKh3;\n\n        public static bool IsValid(Stream stream) =>\n            SaveKh3.IsValidInternal(stream) ||\n            SaveKh3u109.IsValidInternal(stream);\n\n        public static ISaveKh3 Read(Stream stream)\n        {\n            if (SaveKh3.IsValidInternal(stream))\n                return ReadInternal(stream);\n            if (SaveKh3u109.IsValidInternal(stream))\n                return SaveKh3u109.ReadInternal(stream);\n\n            throw new InvalidDataException(\"Input not recognized as a valid or supported Kingdom Hearts III save game.\");\n        }\n\n        public static uint CalculateChecksum(Stream stream)\n        {\n            stream.Position = 0x10;\n            var buffer = stream.ReadBytes((int)(stream.Length - stream.Position));\n            return Crc32Algorithm.Compute(buffer);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/SaveKh3u109.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib3.Models;\nusing KHSave.Lib3.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.Lib3\n{\n    public class SaveKh3u109 : ISaveKh3\n    {\n        [Data(0, 0x94F308)] public byte[] Data { get; set; }\n\n        [Data(0x0)] public int MagicCode { get; set; }\n        [Data] public int FileSize { get; set; }\n        [Data] public short MajorVersion { get; set; }\n        [Data] public short MinorVersion { get; set; }\n        [Data(0xC)] public uint Checksum { get; set; }\n        [Data(0x14)] public DifficultyType Difficulty { get; set; }\n        [Data(0x18)] public WorldType WorldLogo { get; set; }\n\n        [Data(0x24)] public int TotalExp { get; set; }\n        [Data(0x28)] public int Munny { get; set; }\n        [Data(0x2C)] public byte Level { get; set; }\n        [Data(0x30)] public DesireChoice DesireChoice { get; set; }\n        [Data(0x31)] public PowerChoice PowerChoice { get; set; }\n        [Data(0x32, Count = 5)] public List<PartyCharacter> Party { get; set; }\n        [Data(0x39)] public bool SaveClear { get; set; }\n        [Data(0x54)] public LocationType LocationName { get; set; }\n        [Data(0x58)] public int Unknown00058 { get; set; }\n        [Data(0x5C)] public int Unknown0005C { get; set; }\n        [Data(0x60)] public CharacterIconType BaseSaveIcon { get; set; }\n        [Data(0x68)] public CharacterIconType DlcSaveIcon { get; set; }\n\n        [Data(0x70)] public int EnemiesDefeated { get; set; }\n        [Data(0x5B8)] public short SavesCount { get; set; }\n        [Data(0x696, 5)] public List<short> RecordAttractionsUseCount { get; set; }\n        [Data(0x6D0, 0x1e, 2)] public List<short> RecordShotlocksUseCount { get; set; }\n        [Data(0x8F4, 0x400, 2)] public List<InventoryEntry> Inventory { get; set; }\n        [Data(0x165E, 100)] public List<short> MaterialsCount { get; set; }\n        [Data(0x17EC)] public int CrabsCollected { get; set; }\n        [Data(0x1880, 16, 0x9C0)] public List<PlayableCharacter> Pc { get; set; }\n        [Data(0xB49C)] public int BonusHp { get; set; }\n        [Data(0xB4A0)] public int BonusMp { get; set; }\n        [Data(0xB4A4)] public int BonusStrength { get; set; }\n        [Data(0xB4A8)] public int BonusMagic { get; set; }\n        [Data(0xB4AC)] public int BonusDefense { get; set; }\n        [Data(0xB4C4, 0x50, 4)] public List<int> Storyflags { get; set; }\n        [Data(0xBBA0, 0x100)] public string MapPath { get; set; }\n        [Data(0xBCA0, 0x40)] public string MapSpawn { get; set; }\n        [Data(0xBCE0, 0x100)] public string PlayerScript { get; set; }\n        [Data(0xBDE0, 0x100)] public string PlayerCharacter { get; set; }\n\n        [Data(0xBF20, 3)] public List<ShortcutGroup> Shortcuts { get; set; }\n\n        [Data(0xBF50, 6, 4)] public List<CommandType> Magics { get; set; }\n        [Data(0xBF68, 5, 4)] public List<CommandType> Links { get; set; }\n\n        [Data(0x83AF8)] public Records Records { get; set; }\n\n        [Data(0x84E48)] public int PhotoMaxCount { get; set; }\n        [Data(0x84E5C, 90, 0x19004)] public List<PhotoEntry> Photos { get; set; }\n        [Data(0x94EFC4, Count = 0x100)] public string DlcMapPath { get; set; }\n        [Data(0x94F0C4, Count = 0x40)] public string DlcSpawnPoint { get; set; }\n\n        internal static bool IsValidInternal(Stream stream)\n        {\n            var prevPosition = stream.Position;\n            var reader = new BinaryReader(stream.SetPosition(0));\n            var magicCode = reader.ReadInt32();\n            var length = reader.ReadInt32();\n            stream.Position = prevPosition;\n\n            return magicCode == 0x45764053 && length == 0x94F2F8;\n        }\n\n        public void Write(Stream stream)\n        {\n            using (var tempStream = new MemoryStream())\n            {\n                BinaryMapping.WriteObject(tempStream, this);\n                Checksum = SaveKh3.CalculateChecksum(tempStream);\n            }\n\n            SaveKh3.Mapper.WriteObject(stream.SetPosition(0), this);\n        }\n\n        internal static SaveKh3u109 ReadInternal(Stream stream) =>\n            SaveKh3.Mapper.ReadObject(stream.SetPosition(0), new SaveKh3u109()) as SaveKh3u109;\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/AbilityType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum AbilityType\n    {\n        [Info(\"<untested>\")] Ability000,\n        [AbilityAction(\"Aerial Recovery\")] Ability001,\n        [AbilityAction(\"Payback Strike\")] Ability002,\n        [AbilityAction(\"Block\")] Ability003,\n        [AbilityAction(\"Counter Slash\")] Ability004,\n        [AbilityAction(\"Counter Impact\")] Ability005,\n        [AbilityAction(\"Counter Kick\")] Ability006,\n        [AbilityAction(\"Final Blow\")] Ability007,\n        [AbilityAction(\"Risk Dodge\")] Ability008,\n        [AbilityAction(\"<unnamed>\")] Ability009,\n        [AbilityAction(\"Rising Spiral\")] Ability00A,\n        [AbilityAction(\"Groundbreaker\")] Ability00B,\n        [AbilityAction(\"Falling Slash\")] Ability00C,\n        [AbilityAction(\"Speed Slash\")] Ability00D,\n        [AbilityAction(\"Triple Rush\")] Ability00E,\n        [AbilityAction(\"Magic Flash\")] Ability00F,\n        [AbilityMobility(\"High Jump\")] Ability010,\n        [AbilityMobility(\"Doubleflight\")] Ability011,\n        [AbilityMobility(\"Superjump\")] Ability012,\n        [AbilityMobility(\"Superslide\")] Ability013,\n        [AbilityMobility(\"Glide\")] Ability014,\n        [AbilitySupport(\"Scan\")] Ability015,\n        [AbilityMobility(\"Dodge Roll\")] Ability016,\n        [AbilityMobility(\"Air Slide\")] Ability017,\n        [AbilityMobility(\"Aerial Dodge\")] Ability018,\n        [AbilitySupport(\"MP Safety\")] Ability019,\n        [AbilitySupport(\"Zero EXP\")] Ability01A,\n        [AbilitySupport(\"Assist Friends\")] Ability01B,\n        [AbilitySupport(\"Combo Plus\")] Ability01C,\n        [AbilitySupport(\"Air Combo Plus\")] Ability01D,\n        [AbilitySupport(\"Combo Master\")] Ability01E,\n        [AbilitySupport(\"Combo Boost\")] Ability01F,\n        [AbilitySupport(\"Air Combo Boost\")] Ability020,\n        [AbilitySupport(\"Fire Boost\")] Ability021,\n        [AbilitySupport(\"Blizzard Boost\")] Ability022,\n        [AbilitySupport(\"Thunder Boost\")] Ability023,\n        [AbilitySupport(\"Water Boost\")] Ability024,\n        [AbilitySupport(\"Aero Boost\")] Ability025,\n        [AbilitySupport(\"Wizard´s Ruse\")] Ability026,\n        [AbilitySupport(\"Lucky Strike\")] Ability027,\n        [AbilitySupport(\"Item Boost\")] Ability028,\n        [AbilitySupport(\"Treasure Magnet\")] Ability029,\n        [AbilitySupport(\"No name\")] Ability02A,\n        [AbilitySupport(\"Leaf Bracer\")] Ability02B,\n        [AbilitySupport(\"Second Chance\")] Ability02C,\n        [AbilitySupport(\"Withstand Combo\")] Ability02D,\n        [AbilityAction(\"Focus Syphon\")] Ability02E,\n        [AbilitySupport(\"Attraction Extender\")] Ability02F,\n        [AbilitySupport(\"Link Extender\")] Ability030,\n        [AbilitySupport(\"Formchange Extender\")] Ability031,\n        [AbilitySupport(\"Defender\")] Ability032,\n        [AbilitySupport(\"Damage Control\")] Ability033,\n        [AbilitySupport(\"Damage Syphon\")] Ability034,\n        [AbilitySupport(\"MP Haste\")] Ability035,\n        [AbilitySupport(\"MP Hastera\")] Ability036,\n        [AbilitySupport(\"MP Hastega\")] Ability037,\n        [AbilitySupport(\"Magic Combo Thrift\")] Ability038,\n        [AbilitySupport(\"Magic Galvanizer\")] Ability039,\n        [AbilitySupport(\"MP Walker\")] Ability03A,\n        [AbilitySupport(\"HP Walker\")] Ability03B,\n        [AbilitySupport(\"Magic Treasure Magnet\")] Ability03C,\n        [AbilitySupport(\"Master Treasure Magnet\")] Ability03D,\n        [AbilitySupport(\"Attraction Enhancer\")] Ability03E,\n        [AbilitySupport(\"Burn Protection\")] Ability03F,\n        [AbilitySupport(\"Cloud Protection\")] Ability040,\n        [AbilitySupport(\"Sneeze Protection\")] Ability041,\n        [AbilitySupport(\"Freeze Protection\")] Ability042,\n        [AbilitySupport(\"Electric Protection\")] Ability043,\n        [AbilitySupport(\"Stun Protection\")] Ability044,\n        [AbilitySupport(\"Reprisal Boost\")] Ability045,\n        [AbilitySupport(\"Auto-Finish\")] Ability046,\n        [AbilitySupport(\"Situation Boost\")] Ability047,\n        [AbilitySupport(\"Grand Magic Extender\")] Ability048,\n        [AbilitySupport(\"Magic Lock-On\")] Ability049,\n        [AbilitySupport(\"Block Replenisher\")] Ability04A,\n        [AbilitySupport(\"MP Thrift\")] Ability04B,\n        [AbilitySupport(\"Extra Cast\")] Ability04C,\n        [AbilitySupport(\"Full MP Blast\")] Ability04D,\n        [AbilitySupport(\"Harvester\")] Ability04E,\n        [AbilitySupport(\"HP Converter\")] Ability04F,\n        [AbilitySupport(\"MP  Converter\")] Ability050,\n        [AbilitySupport(\"Munny Converter\")] Ability051,\n        [AbilitySupport(\"Endless Magic\")] Ability052,\n        [AbilitySupport(\"Focus Converter\")] Ability053,\n        [AbilitySupport(\"Fire Syphon\")] Ability054,\n        [AbilitySupport(\"Blizzard Syphon\")] Ability055,\n        [AbilitySupport(\"Thunder Syphon\")] Ability056,\n        [AbilitySupport(\"Water Syphon\")] Ability057,\n        [AbilitySupport(\"Aero Syphon\")] Ability058,\n        [AbilitySupport(\"Dark Syphon\")] Ability059,\n        [AbilitySupport(\"Team Effort\")] Ability05A,\n        [AbilityAction(\"Sonic Slash\")] Ability05B,\n        [AbilityAction(\"Sonic Cleave\")] Ability05C,\n        [AbilityAction(\"Buzz Saw\")] Ability05D,\n        [AbilityAction(\"Somersault\")] Ability05E,\n        [AbilityMobility(\"Pole Spin\")] Ability05F,\n        [AbilityMobility(\"Pole Swing\")] Ability060,\n        [AbilityMobility(\"Wall Kick\")] Ability061,\n        [AbilitySupport(\"Frontline Photographer\")] Ability062,\n        [AbilitySupport(\"Chef Extraordinaire\")] Ability063,\n        [AbilitySupport(\"Double Team\")] Ability064,\n        [AbilitySupport(\"Heartless Buster\")] Ability065,\n        [AbilitySupport(\"Nobody Buster\")] Ability066,\n        [AbilitySupport(\"Cure Converter\")] Ability067,\n        [AbilitySupport(\"Critical Counter\")] Ability068,\n        [AbilitySupport(\"Critical Recharge\")] Ability069,\n        [AbilitySupport(\"Critical Converter\")] Ability06A,\n        [Unused] Ability06B,\n        [Unused] Ability06C,\n        [Unused] Ability06D,\n        [Unused] Ability06E,\n        [Unused] Ability06F,\n        [Unused] Ability070,\n        [Unused] Ability071,\n        [Unused] Ability072,\n        [Unused] Ability073,\n        [Unused] Ability074,\n        [Unused] Ability075,\n        [Unused] Ability076,\n        [Unused] Ability077,\n        [Unused] Ability078,\n        [Unused] Ability079,\n        [Unused] Ability07A,\n        [Unused] Ability07B,\n        [Unused] Ability07C,\n        [Unused] Ability07D,\n        [Unused] Ability07E,\n        [Unused] Ability07F,\n        [Unused] Ability080,\n        [Unused] Ability081,\n        [Unused] Ability082,\n        [Unused] Ability083,\n        [Unused] Ability084,\n        [Unused] Ability085,\n        [Unused] Ability086,\n        [Unused] Ability087,\n        [Unused] Ability088,\n        [Unused] Ability089,\n        [Unused] Ability08A,\n        [Unused] Ability08B,\n        [Unused] Ability08C,\n        [Unused] Ability08D,\n        [Unused] Ability08E,\n        [Unused] Ability08F,\n        [Unused] Ability090,\n        [Unused] Ability091,\n        [Unused] Ability092,\n        [Unused] Ability093,\n        [Unused] Ability094,\n        [Unused] Ability095,\n        [Unused] Ability096,\n        [Unused] Ability097,\n        [Unused] Ability098,\n        [Unused] Ability099,\n        [Unused] Ability09A,\n        [Unused] Ability09B,\n        [Unused] Ability09C,\n        [Unused] Ability09D,\n        [Unused] Ability09E,\n        [Unused] Ability09F,\n        [Unused] Ability0A0,\n        [Unused] Ability0A1,\n        [Unused] Ability0A2,\n        [Unused] Ability0A3,\n        [Unused] Ability0A4,\n        [Unused] Ability0A5,\n        [Unused] Ability0A6,\n        [Unused] Ability0A7,\n        [Unused] Ability0A8,\n        [Unused] Ability0A9,\n        [AbilitySupport(\"Cuisine Extender\")] Ability0AA,\n        [AbilitySupport(\"Hearty Meal\")] Ability0AB,\n        [AbilitySupport(\"Overtime\")] Ability0AC,\n        [AbilitySupport(\"Top Condition\")] Ability0AD,\n        [AbilitySupport(\"EXP Incentive\")] Ability0AE,\n        [AbilitySupport(\"Prize Proliferator\")] Ability0AF,\n        [AbilitySupport(\"Rags to Riches\")] Ability0B0,\n        [AbilitySupport(\"Curaza\")] Ability0B1,\n        [AbilitySupport(\"Berserk Change\")] Ability0B2,\n        [AbilitySupport(\"Hidden Potential\")] Ability0B3,\n        [AbilitySupport(\"More Grand Magic\")] Ability0B4,\n        [AbilitySupport(\"Firaza\")] Ability0B5,\n        [AbilitySupport(\"Blizzaza\")] Ability0B6,\n        [AbilitySupport(\"Thundaza\")] Ability0B7,\n        [AbilitySupport(\"Waterza\")] Ability0B8,\n        [AbilitySupport(\"Aeroza\")] Ability0B9,\n        [Unused] Ability0BA,\n        [Unused] Ability0BB,\n        [Unused] Ability0BC,\n        [Unused] Ability0BD,\n        [AbilityAction(\"Unison Fire\")] Ability0BE,\n        [AbilityAction(\"Unison Blizzard\")] Ability0BF,\n        [AbilityAction(\"Unison Thunder\")] Ability0C0,\n        [AbilityAction(\"Fusion Spin\")] Ability0C1,\n        [AbilityAction(\"Fusion Rocket\")] Ability0C2,\n        [AbilitySupport(\"Hyper Healing\")] Ability0C3,\n        [AbilitySupport(\"More Team Attacks\")] Ability0C4,\n        [AbilitySupport(\"Team Attack Extender\")] Ability0C5,\n        [AbilitySupport(\"Share Prizes\")] Ability0C6,\n        [AbilityAction(\"<unnamed>\")] Ability0C7,\n        [AbilityAction(\"<unnamed>\")] Ability0C8,\n        [AbilityAction(\"Donald Fire\")] Ability0C9,\n        [AbilityAction(\"Donald Blizzard\")] Ability0CA,\n        [AbilityAction(\"Donald Thunder\")] Ability0CB,\n        [AbilityAction(\"Donald Aero\")] Ability0CC,\n        [AbilityAction(\"Donald Cure\")] Ability0CD,\n        [AbilityAction(\"Goofy Tornado\")] Ability0CE,\n        [AbilityAction(\"Goofy Turbo\")] Ability0CF,\n        [AbilityAction(\"Goofy Discus\")] Ability0D0,\n        [AbilityAction(\"Boulder Toss\")] Ability0D1,\n        [AbilityAction(\"Burst of Energy\")] Ability0D2,\n        [AbilityAction(\"Shoulder Tackle\")] Ability0D3,\n        [AbilityAction(\"Lasso Attack\")] Ability0D4,\n        [AbilityAction(\"Laser Beam\")] Ability0D5,\n        [AbilityAction(\"Spinning Lariat\")] Ability0D6,\n        [AbilityAction(\"<untested???>\")] Ability0D7,\n        [AbilityAction(\"<untested???>\")] Ability0D8,\n        [AbilityAction(\"Frying Pan Toss\")] Ability0D9,\n        [AbilityAction(\"Barrel Bash\")] Ability0DA,\n        [AbilityAction(\"Monster Roar\")] Ability0DB,\n        [AbilityAction(\"Takedown\")] Ability0DC,\n        [AbilityAction(\"Googly Appeal\")] Ability0DD,\n        [AbilityAction(\"Pep Talk\")] Ability0DE,\n        [AbilityAction(\"Bone Crusher\")] Ability0DF,\n        [AbilityAction(\"Rolling Lunge\")] Ability0E0,\n        [AbilityAction(\"Leaping Smash\")] Ability0E1,\n        [AbilityAction(\"Cold Breath\")] Ability0E2,\n        [AbilityAction(\"Booster Punch\")] Ability0E3,\n        [AbilityAction(\"Care Spray\")] Ability0E4,\n        [AbilityAction(\"<unnamed>\")] Ability0E5,\n        [AbilityAction(\"<unnamed>\")] Ability0E6,\n        [AbilityAction(\"<unnamed>\")] Ability0E7,\n        [AbilityAction(\"<unnamed>\")] Ability0E8,\n        [AbilityAction(\"<unnamed>\")] Ability0E9,\n        [AbilityAction(\"<unnamed>\")] Ability0EA,\n        [AbilityAction(\"<unnamed>\")] Ability0EB,\n        [AbilityAction(\"<unnamed>\")] Ability0EC,\n        [AbilityAction(\"<unnamed>\")] Ability0ED,\n        [AbilityAction(\"<unnamed>\")] Ability0EE,\n        [Unused] Ability0EF,\n        [AbilityAction(\"<unnamed>\")] Ability0F0,\n        [AbilityAction(\"<unnamed>\")] Ability0F1,\n        [Unused] Ability0F2,\n        [Unused] Ability0F3,\n        [Unused] Ability0F4,\n        [Unused] Ability0F5,\n        [Unused] Ability0F6,\n        [Unused] Ability0F7,\n        [Unused] Ability0F8,\n        [Unused] Ability0F9,\n        [Unused] Ability0FA,\n        [Unused] Ability0FB,\n        [Unused] Ability0FC,\n        [Unused] Ability0FD,\n        [Unused] Ability0FE,\n        [Unused] Ability0FF,\n        [Unused] Ability100,\n        Ability101,\n        Ability102,\n        Ability103,\n        Ability104,\n        Ability105,\n        Ability106,\n        Ability107,\n        Ability108,\n        Ability109,\n        Ability10A,\n        Ability10B,\n        Ability10C,\n        Ability10D,\n        Ability10E,\n        Ability10F,\n        Ability110,\n        Ability111,\n        Ability112,\n        Ability113,\n        Ability114,\n        Ability115,\n        Ability116,\n        Ability117,\n        Ability118,\n        Ability119,\n        Ability11A,\n        Ability11B,\n        Ability11C,\n        Ability11D,\n        Ability11E,\n        Ability11F,\n        Ability120,\n        Ability121,\n        Ability122,\n        Ability123,\n        Ability124,\n        Ability125,\n        Ability126,\n        Ability127,\n        Ability128,\n        Ability129,\n        Ability12A,\n        Ability12B,\n        Ability12C,\n        Ability12D,\n        Ability12E,\n        Ability12F,\n        Ability130,\n        Ability131,\n        Ability132,\n        Ability133,\n        Ability134,\n        Ability135,\n        Ability136,\n        Ability137,\n        Ability138,\n        Ability139,\n        Ability13A,\n        Ability13B,\n        Ability13C,\n        Ability13D,\n        Ability13E,\n        Ability13F,\n        Ability140,\n        Ability141,\n        Ability142,\n        Ability143,\n        Ability144,\n        Ability145,\n        Ability146,\n        Ability147,\n        Ability148,\n        Ability149,\n        Ability14A,\n        Ability14B,\n        Ability14C,\n        Ability14D,\n        Ability14E,\n        Ability14F,\n        Ability150,\n        Ability151,\n        Ability152,\n        Ability153,\n        Ability154,\n        Ability155,\n        Ability156,\n        Ability157,\n        Ability158,\n        Ability159,\n        Ability15A,\n        Ability15B,\n        Ability15C,\n        Ability15D,\n        [Unused] Ability15E,\n        [Unused] Ability15F,\n        [Unused] Ability160,\n        Ability161,\n        Ability162,\n        Ability163,\n        Ability164,\n        Ability165,\n        Ability166,\n        Ability167,\n        Ability168,\n        [Unused] Ability169,\n        [Unused] Ability16A,\n        [Unused] Ability16B,\n        [Unused] Ability16C,\n        [Unused] Ability16D,\n        [Unused] Ability16E,\n        [Unused] Ability16F,\n        [Unused] Ability170,\n        [Unused] Ability171,\n        [Unused] Ability172,\n        [Unused] Ability173,\n        [Unused] Ability174,\n        [Unused] Ability175,\n        [Unused] Ability176,\n        [Unused] Ability177,\n        [Unused] Ability178,\n        [Unused] Ability179,\n        [Unused] Ability17A,\n        [Unused] Ability17B,\n        [Unused] Ability17C,\n        [Unused] Ability17D,\n        [Unused] Ability17E,\n        [Unused] Ability17F,\n        [Unused] Ability180,\n        [Unused] Ability181,\n        [Unused] Ability182,\n        [Unused] Ability183,\n        [Unused] Ability184,\n        [Unused] Ability185,\n        [Unused] Ability186,\n        [Unused] Ability187,\n        [Unused] Ability188,\n        [Unused] Ability189,\n        [Unused] Ability18A,\n        [Unused] Ability18B,\n        [Unused] Ability18C,\n        [Unused] Ability18D,\n        [Unused] Ability18E,\n        [Unused] Ability18F,\n        [Unused] Ability190,\n        [Unused] Ability191,\n        [Unused] Ability192,\n        [Unused] Ability193,\n        [Unused] Ability194,\n        [Unused] Ability195,\n        [Unused] Ability196,\n        [Unused] Ability197,\n        [Unused] Ability198,\n        [Unused] Ability199,\n        [Unused] Ability19A,\n        [Unused] Ability19B,\n        [Unused] Ability19C,\n        [Unused] Ability19D,\n        [Unused] Ability19E,\n        [Unused] Ability19F,\n        [Unused] Ability1A0,\n        [Unused] Ability1A1,\n        [Unused] Ability1A2,\n        [Unused] Ability1A3,\n        [Unused] Ability1A4,\n        [Unused] Ability1A5,\n        [Unused] Ability1A6,\n        [Unused] Ability1A7,\n        [Unused] Ability1A8,\n        [Unused] Ability1A9,\n        [Unused] Ability1AA,\n        [Unused] Ability1AB,\n        [Unused] Ability1AC,\n        [Unused] Ability1AD,\n        [Unused] Ability1AE,\n        [Unused] Ability1AF,\n        [Unused] Ability1B0,\n        [Unused] Ability1B1,\n        [Unused] Ability1B2,\n        [Unused] Ability1B3,\n        [Unused] Ability1B4,\n        [Unused] Ability1B5,\n        [Unused] Ability1B6,\n        [Unused] Ability1B7,\n        [Unused] Ability1B8,\n        [Unused] Ability1B9,\n        [Unused] Ability1BA,\n        [Unused] Ability1BB,\n        [Unused] Ability1BC,\n        [Unused] Ability1BD,\n        [Unused] Ability1BE,\n        [Unused] Ability1BF,\n        [Unused] Ability1C0,\n        [Unused] Ability1C1,\n        [Unused] Ability1C2,\n        [Unused] Ability1C3,\n        [Unused] Ability1C4,\n        [Unused] Ability1C5,\n        [Unused] Ability1C6,\n        [Unused] Ability1C7,\n        [Unused] Ability1C8,\n        [Unused] Ability1C9,\n        [Unused] Ability1CA,\n        [Unused] Ability1CB,\n        [Unused] Ability1CC,\n        [Unused] Ability1CD,\n        [Unused] Ability1CE,\n        [Unused] Ability1CF,\n        [Unused] Ability1D0,\n        [Unused] Ability1D1,\n        [Unused] Ability1D2,\n        [Unused] Ability1D3,\n        [Unused] Ability1D4,\n        [Unused] Ability1D5,\n        [Unused] Ability1D6,\n        [Unused] Ability1D7,\n        [Unused] Ability1D8,\n        [Unused] Ability1D9,\n        [Unused] Ability1DA,\n        [Unused] Ability1DB,\n        [Unused] Ability1DC,\n        [Unused] Ability1DD,\n        [Unused] Ability1DE,\n        [Unused] Ability1DF,\n        [Unused] Ability1E0,\n        [Unused] Ability1E1,\n        [Unused] Ability1E2,\n        [Unused] Ability1E3,\n        [Unused] Ability1E4,\n        [Unused] Ability1E5,\n        [Unused] Ability1E6,\n        [Unused] Ability1E7,\n        [Unused] Ability1E8,\n        [Unused] Ability1E9,\n        [Unused] Ability1EA,\n        [Unused] Ability1EB,\n        [Unused] Ability1EC,\n        [Unused] Ability1ED,\n        [Unused] Ability1EE,\n        [Unused] Ability1EF,\n        [Unused] Ability1F0,\n        [Unused] Ability1F1,\n        [Unused] Ability1F2,\n        [Unused] Ability1F3,\n        [Unused] Ability1F4,\n        [Unused] Ability1F5,\n        [Unused] Ability1F6,\n        [Unused] Ability1F7,\n        [Unused] Ability1F8,\n        [Unused] Ability1F9,\n        [Unused] Ability1FA,\n        [Unused] Ability1FB,\n        [Unused] Ability1FC,\n        [Unused] Ability1FD,\n        [Unused] Ability1FE,\n        [Unused] Ability1FF,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/AccessoryType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum AccessoryType : byte\n    {\n        [Info] Empty,\n        [Accessory(\"Laughter Pin\")] LaughterPin,\n        [Accessory(\"Forest Clasp\")] ForestClasp,\n        [Accessory(\"Ability Ring\")] AbilityRing,\n        [Accessory(\"Ability Ring+\")] AbilityRingPlus,\n        [Accessory(\"Technician's Ring\")] TechnicianRing,\n        [Accessory(\"Technician's Ring+\")] TechnicianRingPlus,\n        [Accessory(\"Skill Ring\")] SkillRing,\n        [Accessory(\"Skill Ring+\")] SkillRingPlus,\n        [Accessory(\"Expert's Ring\")] ExpertRing,\n        [Accessory(\"Master's Ring\")] MasterRing,\n        [Accessory(\"Cosmic Ring\")] CosmicRing,\n        [Accessory(\"Power Ring\")] PowerRing,\n        [Accessory(\"Buster Ring\")] BusterRing,\n        [Accessory(\"Valor Ring\")] ValorRing,\n        [Accessory(\"Phantom Ring\")] PhantomRing,\n        [Accessory(\"Orichalcum Ring\")] OrichalcumRing,\n        [Accessory(\"Magic Ring\")] MagicRing,\n        [Accessory(\"Rune Ring\")] RuneRing,\n        [Accessory(\"Force Ring\")] ForceRing,\n        [Accessory(\"Sorcerer's Ring\")] SorcererRing,\n        [Accessory(\"Wisdom Ring\")] WisdomRing,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace,\n        [Accessory(\"Silver Necklace\")] SilverNecklace,\n        [Accessory(\"Master's Necklace\")] MasterNecklace,\n        [Accessory(\"Bronze Amulet\")] BronzeAmulet,\n        [Accessory(\"Silver Amulet\")] SilverAmulet,\n        [Accessory(\"Gold Amulet\")] GoldAmulet,\n        [Accessory(\"Junior Medal\")] JuniorMedal,\n        [Accessory(\"Master Medal\")] MasterMedal,\n        [Accessory(\"Star Medal\")] StarMedal,\n        [Accessory(\"Mickey Clasp\")] MickeyClasp,\n        [Accessory(\"Soldier's Earring\")] SoldierEarring,\n        [Accessory(\"Fencer's Earring\")] FencerEarring,\n        [Accessory(\"Mage's Earring\")] MageEarring,\n        [Accessory(\"Slayer's Earring\")] SlayerEarring,\n        [Accessory(\"Moon Amulet\")] MoonAmulet,\n        [Accessory(\"Star Charm\")] StarCharm,\n        [Accessory(\"Cosmic Arts\")] CosmicArts,\n        [Accessory(\"Crystal Regalia\")] CrystalRegalia,\n        [Accessory(\"Water Cufflink\")] WaterCufflink,\n        [Accessory(\"Thunder Cufflink\")] ThunderCufflink,\n        [Accessory(\"Fire Cufflink\")] FireCufflink,\n        [Accessory(\"Aero Cufflink\")] AeroCufflink,\n        [Accessory(\"Blizzard Cufflink\")] BlizzardCufflink,\n        [Accessory(\"Celestriad\")] Celestriad,\n        [Accessory(\"Yin-Yang Cufflink\")] YinYangCufflink,\n        [Accessory(\"Gourmand's Ring\")] GourmandRing,\n        [Accessory(\"Draw Ring\")] DrawRing,\n        [Accessory(\"Lucky Ring\")] LuckyRing,\n        [Accessory(\"Flanniversary Badge\")] FlanniversaryBadge,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_33,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_34,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_35,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_36,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_37,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_38,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_39,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_3A,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_3B,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_3C,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_3D,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_3E,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_3F,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_40,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_41,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_42,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_43,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_44,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_45,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_46,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_47,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_48,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_49,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4A,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4B,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4C,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4D,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4E,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4F,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_50,\n        [Accessory(\"Master Medal\")] MasterMedal_51,\n        [Accessory(\"Master Medal\")] MasterMedal_52,\n        [Accessory(\"Junior Medal\")] JuniorMedal_53,\n        [Accessory(\"Master Medal\")] MasterMedal_54,\n        [Accessory(\"Junior Medal\")] JuniorMedal_55,\n        [Accessory(\"Junior Medal\")] JuniorMedal_56,\n        [Accessory(\"Junior Medal\")] JuniorMedal_57,\n        [Accessory(\"Junior Medal\")] JuniorMedal_58,\n        [Accessory(\"Junior Medal\")] JuniorMedal_59,\n        [Accessory(\"Junior Medal\")] JuniorMedal_5A,\n        [Accessory(\"Junior Medal\")] JuniorMedal_5B,\n        [Accessory(\"Junior Medal\")] JuniorMedal_5C,\n        [Accessory(\"Star Medal\")] StarMedal_5D,\n        [Accessory(\"Master Medal\")] MasterMedal_5E,\n        [Accessory(\"Master Medal\")] MasterMedal_5F,\n        [Accessory(\"Star Medal\")] StarMedal_60,\n        [Accessory(\"Master Medal\")] MasterMedal_61,\n        [Accessory(\"Star Medal\")] StarMedal_62,\n        [Accessory(\"Master Medal\")] MasterMedal_63,\n        [Accessory(\"Master Medal\")] MasterMedal_64,\n        [Accessory(\"Master Medal\")] MasterMedal_65,\n        [Accessory(\"Master Medal\")] MasterMedal_66,\n        [Accessory(\"Master Medal\")] MasterMedal_67,\n        [Accessory(\"Master Medal\")] MasterMedal_68,\n        [Accessory(\"Star Medal\")] StarMedal_69,\n        [Accessory(\"Star Medal\")] StarMedal_6A,\n        [Accessory(\"Star Medal\")] StarMedal_6B,\n        [Accessory(\"Star Medal\")] StarMedal_6C,\n        [Accessory(\"Star Medal\")] StarMedal_6D,\n        [Accessory(\"Star Medal\")] StarMedal_6E,\n        [Accessory(\"Breakthrough\")] Item6f,\n        [Accessory(\"Crystal Regalia+\")] Item70,\n        Item71,\n        Item72,\n        Item73,\n        Item74,\n        Item75,\n        Item76,\n        Item77,\n        Item78,\n        Item79,\n        Item7a,\n        Item7b,\n        Item7c,\n        Item7d,\n        Item7e,\n        Item7f,\n        Item80,\n        Item81,\n        Item82,\n        Item83,\n        Item84,\n        Item85,\n        Item86,\n        Item87,\n        Item88,\n        Item89,\n        Item8a,\n        Item8b,\n        Item8c,\n        Item8d,\n        Item8e,\n        Item8f,\n        Item90,\n        Item91,\n        Item92,\n        Item93,\n        Item94,\n        Item95,\n        Item96,\n        Item97,\n        Item98,\n        Item99,\n        Item9a,\n        Item9b,\n        Item9c,\n        Item9d,\n        Item9e,\n        Item9f,\n        Itema0,\n        Itema1,\n        Itema2,\n        Itema3,\n        Itema4,\n        Itema5,\n        Itema6,\n        Itema7,\n        Itema8,\n        Itema9,\n        Itemaa,\n        Itemab,\n        Itemac,\n        Itemad,\n        Itemae,\n        Itemaf,\n        Itemb0,\n        Itemb1,\n        Itemb2,\n        Itemb3,\n        Itemb4,\n        Itemb5,\n        Itemb6,\n        Itemb7,\n        Itemb8,\n        Itemb9,\n        Itemba,\n        Itembb,\n        Itembc,\n        Itembd,\n        Itembe,\n        Itembf,\n        Itemc0,\n        Itemc1,\n        Itemc2,\n        Itemc3,\n        Itemc4,\n        Itemc5,\n        Itemc6,\n        Itemc7,\n        Itemc8,\n        Itemc9,\n        Itemca,\n        Itemcb,\n        Itemcc,\n        Itemcd,\n        Itemce,\n        Itemcf,\n        Itemd0,\n        Itemd1,\n        Itemd2,\n        Itemd3,\n        Itemd4,\n        Itemd5,\n        Itemd6,\n        Itemd7,\n        Itemd8,\n        Itemd9,\n        Itemda,\n        Itemdb,\n        Itemdc,\n        Itemdd,\n        Itemde,\n        Itemdf,\n        Iteme0,\n        Iteme1,\n        Iteme2,\n        Iteme3,\n        Iteme4,\n        Iteme5,\n        Iteme6,\n        Iteme7,\n        Iteme8,\n        Iteme9,\n        Itemea,\n        Itemeb,\n        Itemec,\n        Itemed,\n        Itemee,\n        Itemef,\n        Itemf0,\n        Itemf1,\n        Itemf2,\n        Itemf3,\n        Itemf4,\n        Itemf5,\n        Itemf6,\n        Itemf7,\n        Itemf8,\n        Itemf9,\n        Itemfa,\n        Itemfb,\n        Itemfc,\n        Itemfd,\n        Itemfe,\n        Itemff,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/AiAbilityType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum AiAbilityType : byte\n    {\n        [CombatStyle(\"Go Wild\")] GoWild,\n        [CombatStyle(\"Watch MP\")] WatchMP,\n        [CombatStyle(\"Conserve\")] Conserve,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/AiCombatStyleType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum AiCombatStyleType : byte\n    {\n        [CombatStyle(\"Stick By Sora\")] StickBySora,\n        [CombatStyle(\"Be Yourself\")] BeYourself,\n        [CombatStyle(\"Hands Off\")] HandsOff,\n        [CombatStyle(\"Finish the Job\")] FinishTheJob,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/AiRecoveryType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum AiRecoveryType : byte\n    {\n        [CombatStyle(\"Use As Needed\")] UseAsNeeded,\n        [CombatStyle(\"Use in Emergencies\")] UseInEmergencies,\n        [CombatStyle(\"Use Like Crazy\")] UseLikeCrazy,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/ArmorType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum ArmorType : byte\n    {\n        [Info] Empty,\n        [Armor(\"Hero's Belt\")] HerosBelt,\n        [Armor(\"Hero's Glove\")] HerosGlove,\n        [Armor(\"Shield Belt\")] ShieldBelt,\n        [Armor(\"DefenseBelt\")] DefenseBelt,\n        [Armor(\"Guardian Belt\")] GuardianBelt,\n        [Armor(\"Power Band\")] PowerBand,\n        [Armor(\"Buster Band\")] BusterBand,\n        [Armor(\"Buster Band+\")] BusterBandPlus,\n        [Armor(\"Cosmic Belt\")] CosmicBelt,\n        [Armor(\"Cosmic Belt+\")] CosmicBeltPlus,\n        [Armor(\"Fire Bangle\")] FireBangle,\n        [Armor(\"Firaga Bangle\")] FiragaBangle,\n        [Armor(\"Firaza Bangle\")] FirazaBangle,\n        [Armor(\"Fire Chain\")] FireChain,\n        [Armor(\"Blizzard Choker\")] BlizzardChoker,\n        [Armor(\"Blizzara Choker\")] BlizzaraChoker,\n        [Armor(\"Blizzaga Choker\")] BlizzagaChoker,\n        [Armor(\"Blizzard Chain\")] BlizzardChain,\n        [Armor(\"Thunder Trinket\")] ThunderTrinket,\n        [Armor(\"Thundaga Trinket\")] ThundagaTrinket,\n        [Armor(\"Thundaza Trinket\")] ThundazaTrinket,\n        [Armor(\"Thunder Chain\")] ThunderChain,\n        [Armor(\"Dark Anklet\")] DarkAnklet,\n        [Armor(\"Midnight Anklet\")] MidnightAnklet,\n        [Armor(\"Chaos Anklet\")] ChaosAnklet,\n        [Armor(\"Dark Chain\")] DarkChain,\n        [Armor(\"Divine Bandanna\")] DivineBandanna,\n        [Armor(\"Elven Bandanna\")] ElvenBandanna,\n        [Armor(\"Aqua Chaplet\")] AquaChaplet,\n        [Armor(\"Wind Fan\")] WindFan,\n        [Armor(\"Storm Fan\")] StormFan,\n        [Armor(\"Aero Armlet\")] AeroArmlet,\n        [Armor(\"Aegis Chain\")] AegisChain,\n        [Armor(\"Acrisius\")] Acrisius,\n        [Armor(\"Cosmic Chain\")] CosmicChain,\n        [Armor(\"Petite Ribbon\")] PetiteRibbon,\n        [Armor(\"Ribbon\")] Ribbon,\n        [Armor(\"Fira Bangle\")] FiraBangle,\n        [Armor(\"Blizzaza Choker\")] BlizzazaChoker,\n        [Armor(\"Thundara Trinket\")] ThundaraTrinket,\n        [Armor(\"Shadow Anklet\")] ShadowAnklet,\n        [Armor(\"Abas Chain\")] AbasChain,\n        [Armor(\"Acrisius+\")] AcrisiusPlus,\n        [Armor(\"Royal Ribbon\")] RoyalRibbon,\n        [Armor(\"Firefighter Rosette\")] FirefighterRosette,\n        [Armor(\"Umbrella Rosette\")] UmbrellaRosette,\n        [Armor(\"Snowman Rosette\")] SnowmanRosette,\n        [Armor(\"Insulator Rosette\")] InsulatorRosette,\n        [Armor(\"Power Weight\")] PowerWeight,\n        [Armor(\"Magic Weight\")] MagicWeight,\n        [Armor(\"Master Belt\")] MasterBelt,\n        Item34,\n        Item35,\n        Item36,\n        Item37,\n        Item38,\n        Item39,\n        Item3a,\n        Item3b,\n        Item3c,\n        Item3d,\n        Item3e,\n        Item3f,\n        Item40,\n        Item41,\n        Item42,\n        Item43,\n        Item44,\n        Item45,\n        Item46,\n        Item47,\n        Item48,\n        Item49,\n        Item4a,\n        Item4b,\n        Item4c,\n        Item4d,\n        Item4e,\n        Item4f,\n        Item50,\n        Item51,\n        Item52,\n        Item53,\n        Item54,\n        Item55,\n        Item56,\n        Item57,\n        Item58,\n        Item59,\n        Item5a,\n        Item5b,\n        Item5c,\n        Item5d,\n        Item5e,\n        Item5f,\n        Item60,\n        Item61,\n        Item62,\n        Item63,\n        Item64,\n        Item65,\n        Item66,\n        Item67,\n        Item68,\n        Item69,\n        Item6a,\n        Item6b,\n        Item6c,\n        Item6d,\n        Item6e,\n        Item6f,\n        Item70,\n        Item71,\n        Item72,\n        Item73,\n        Item74,\n        Item75,\n        Item76,\n        Item77,\n        Item78,\n        Item79,\n        Item7a,\n        Item7b,\n        Item7c,\n        Item7d,\n        Item7e,\n        Item7f,\n        Item80,\n        Item81,\n        Item82,\n        Item83,\n        Item84,\n        Item85,\n        Item86,\n        Item87,\n        Item88,\n        Item89,\n        Item8a,\n        Item8b,\n        Item8c,\n        Item8d,\n        Item8e,\n        Item8f,\n        Item90,\n        Item91,\n        Item92,\n        Item93,\n        Item94,\n        Item95,\n        Item96,\n        Item97,\n        Item98,\n        Item99,\n        Item9a,\n        Item9b,\n        Item9c,\n        Item9d,\n        Item9e,\n        Item9f,\n        Itema0,\n        Itema1,\n        Itema2,\n        Itema3,\n        Itema4,\n        Itema5,\n        Itema6,\n        Itema7,\n        Itema8,\n        Itema9,\n        Itemaa,\n        Itemab,\n        Itemac,\n        Itemad,\n        Itemae,\n        Itemaf,\n        Itemb0,\n        Itemb1,\n        Itemb2,\n        Itemb3,\n        Itemb4,\n        Itemb5,\n        Itemb6,\n        Itemb7,\n        Itemb8,\n        Itemb9,\n        Itemba,\n        Itembb,\n        Itembc,\n        Itembd,\n        Itembe,\n        Itembf,\n        Itemc0,\n        Itemc1,\n        Itemc2,\n        Itemc3,\n        Itemc4,\n        Itemc5,\n        Itemc6,\n        Itemc7,\n        Itemc8,\n        Itemc9,\n        Itemca,\n        Itemcb,\n        Itemcc,\n        Itemcd,\n        Itemce,\n        Itemcf,\n        Itemd0,\n        Itemd1,\n        Itemd2,\n        Itemd3,\n        Itemd4,\n        Itemd5,\n        Itemd6,\n        Itemd7,\n        Itemd8,\n        Itemd9,\n        Itemda,\n        Itemdb,\n        Itemdc,\n        Itemdd,\n        Itemde,\n        Itemdf,\n        Iteme0,\n        Iteme1,\n        Iteme2,\n        Iteme3,\n        Iteme4,\n        Iteme5,\n        Iteme6,\n        Iteme7,\n        Iteme8,\n        Iteme9,\n        Itemea,\n        Itemeb,\n        Itemec,\n        Itemed,\n        Itemee,\n        Itemef,\n        Itemf0,\n        Itemf1,\n        Itemf2,\n        Itemf3,\n        Itemf4,\n        Itemf5,\n        Itemf6,\n        Itemf7,\n        Itemf8,\n        Itemf9,\n        Itemfa,\n        Itemfb,\n        Itemfc,\n        Itemfd,\n        Itemfe,\n        Itemff,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/CharacterIconType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum CharacterIconType : byte\n    {\n        [Info] Empty,\n        [Info] Sora,\n        [Info] Riku,\n        [Info] Kairi,\n        [Info] Terra,\n        [Info] Ventus,\n        [Info] Aqua,\n        [Info] Roxas,\n        [Info] Axel,\n        [Info] Xion,\n        [Info] Mickey,\n        [Info] Donald,\n        [Info] Goofy,\n        [Info] Jack,\n        [Info] Woody,\n        [Info] Buzz,\n        [Info] Hercules,\n        [Info] Rapunzel,\n        [Info] Flynn,\n        [Info] Sulley,\n        [Info] Mike,\n        [Info] Empty20,\n        [Info] Marshmallow,\n        [Info] Baymax,\n\n        [Info] Leon = 0x96,\n        [Info] Aerith = 0x97,\n        [Info] Yuffie = 0x98,\n        [Info] Cid = 0x99,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/ChoiceType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum DesireChoice : byte\n    {\n        [Info] Vitality,\n        [Info] Wisdom,\n        [Info] Balance,\n    }\n\n    public enum PowerChoice : byte\n    {\n        [Info] Warrior,\n        [Info] Mystic,\n        [Info] Guardian,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/CommandType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum CommandType : int\n    {\n        [Info] Empty,\n        [Command(\" \")] Empty_1 = 0x1,\n        [Command(\"Payback Strike\")] PaybackStrike = 0x2,\n        [Command(\"Counter Slash\")] CounterSlash = 0x3,\n        [Command(\"Counter Impact\")] CounterImpact = 0x4,\n        [Command(\"Counter Kick\")] CounterKick = 0x5,\n        [Command(\"Counter Blast\")] CounterBlast = 0x6,\n        [Command(\"Rising Hook\")] RisingHook = 0x7,\n        [Command(\"Risk Raid\")] RiskRaid = 0x8,\n        Backslash = 0x9,\n        [Command(\"Teleport Slash\")] TeleportSlash = 0xa,\n        [Command(\"Diving Strike\")] DivingStrike = 0xb,\n        [Command(\"Final Blow\")] FinalBlow = 0xc,\n        Raid = 0xd,\n        [Command(\"Nano Counter\")] NanoCounter = 0xe,\n        [Command(\"Counter Blade\")] CounterBlade = 0xf,\n        [Command(\"Wrathful Fist\")] WrathfulFist = 0x10,\n        [Command(\"Wrathful Flurry\")] WrathfulFlurry = 0x11,\n        [Command(\"Flame Torrent\")] FlameTorrent = 0x12,\n        [Command(\"Flame Barrage\")] FlameBarrage = 0x13,\n        Lightning = 0x14,\n        Sneeze = 0x15,\n        [Command(\"Unison Fire\")] UnisonFire = 0x16,\n        [Command(\"Unison Blizzard\")] UnisonBlizzard = 0x17,\n        [Command(\"Unison Thunder\")] UnisonThunder = 0x18,\n        [Command(\"Fusion Spin\")] FusionSpin,\n        [Command(\"Fusion Rocket\")] FusionRocket,\n        Attack,\n        [Command(\" \")] Empty_1C,\n        [Magic] Fire,\n        [Magic] Fira,\n        [Magic] Firaga,\n        [Magic(\"Firaza [Doesn't work]\")] Firaza,\n        [Magic] Blizzard,\n        [Magic] Blizzara,\n        [Magic] Blizzaga,\n        [Magic(\"Blizzaza [Doesn't work]\")] Blizzaza,\n        [Magic] Thunder,\n        [Magic] Thundara,\n        [Magic] Thundaga,\n        [Magic(\"Thundaza [Doesn't work]\")] Thundaza,\n        [Magic] Water,\n        [Magic] Watera,\n        [Magic] Waterga,\n        [Magic(\"Waterza [Doesn't work]\")] Waterza,\n        [Magic] Aero,\n        [Magic] Aerora,\n        [Magic] Aeroga,\n        [Magic(\"Aeroza [Doesn't work]\")] Aeroza,\n        [Magic] Cure,\n        [Magic] Cura,\n        [Magic] Curaga,\n        [Magic(\"Curaza [Doesn't work]\")] Curaza,\n        [Magic(\"Sea-Fire\")] SeaFire,\n        [Magic(\"Sea-Blizzard\")] SeaBlizzard,\n        [Magic(\"Sea-Thunder\")] SeaThunder,\n        [Magic(\"Sea-Aero\")] SeaAero,\n        Unused,\n        [Consumable(\"Potion\")] Potion,\n        [Consumable(\"Hi-Potion\")] HiPotion,\n        [Consumable(\"Mega-Potion\")] MegaPotion,\n        [Consumable(\"Ether\")] Ether,\n        [Consumable(\"Hi-Ether\")] HiEther,\n        [Consumable(\"Mega-Ether\")] MegaEther,\n        [Consumable(\"Elixir\")] Elixir,\n        [Consumable(\"Megalixir\")] Megalixir,\n        [Consumable(\"Refocuser\")] Refocuser,\n        [Consumable(\"Hi-Refocuser\")] HiRefocuser,\n        [Consumable(\"Panacea\")] Panacea,\n        Unused40,\n        [Link(\"Meow Wow Balloon\")] MeowWowBaloon,\n        [Link(\"8-Bit Blast\")] EightBitBlast,\n        [Link(\"King's Flare\")] KingFlare,\n        [Link(\"Plasma Encounter\")] PlasmaEncounter,\n        [Link(\"Sea Spectacle\")] SeaSpectacle,\n        Finish,\n        Save,\n        Talk,\n        Open,\n        [Command(\"Examine\")] Unused41,\n        [Command(\"Shop\")] Unused42,\n        [Command(\"Help\")] Unused43,\n        [Command(\"Board\")] Unused44,\n        [Command(\"Take the Helm\")] Unused45,\n        [Command(\"Ride\")] Unused46,\n        [Command(\"Eject\")] Unused47,\n        [Command(\"Mag Assemble\")] Unused48,\n        [Command(\"Get On\")] GetOn,\n        [Command(\"Ride\")] Ride_58,\n        [Command(\"Cover Shot\")] Unused51,\n        [Command(\"Cover Slide\")] Unused52,\n        [Command(\"Perform\")] Unused53,\n        [Command(\"Splash\")] Unused54,\n        [Command(\"Reach Out\")] Unused55,\n        [Command(\"Board\")] Unused56,\n        [Command(\"Raging Cannons\")] RagingCannons,\n        [Command(\"Wind Chasers\")] WindChasers,\n        [Command(\"Tidal Wave\")] TidalWave,\n        Tailwind,\n        Swing,\n        [Command(\"Boinnng!\")] Boinnng,\n        [Command(\"\")] Empty_65,\n        [Command(\"Send Postcard\")] SendPostcard,\n        [Command(\"Choose Vitality\")] ChooseVitality,\n        [Command(\"Choose Wisdom\")] ChooseWisdom,\n        [Command(\"Choose Balance\")] ChooseBalance,\n        [Command(\"Choose the Warrior\")] ChooseTheWarrior,\n        [Command(\"Choose the Mystic\")] ChooseTheMystic,\n        [Command(\"Choose the Guardian\")] ChooseTheGuardian,\n        [Command(\"Return to the Light\")] ReturnToTheLight,\n        [Magic(\"Fira\")] Fira_6E,\n        [Magic(\"Firaga\")] Firaga_6F,\n        [Magic(\"Firaza\")] Firaza_70,\n        [Magic(\"Blizzara\")] Blizzara_71,\n        [Magic(\"Blizzaga\")] Blizzaga_72,\n        [Magic(\"Blizzaza\")] Blizzaza_73,\n        [Magic(\"Thundara\")] Thundara_74,\n        [Magic(\"Thundaga\")] Thundaga_75,\n        [Magic(\"Thundaza\")] Thundaza_76,\n        [Magic(\"Watera\")] Watera_77,\n        [Magic(\"Waterga\")] Waterga_78,\n        [Magic(\"Waterza\")] Waterza_79,\n        [Magic(\"Aerora\")] Aerora_7A,\n        [Magic(\"Aeroga\")] Aeroga_7B,\n        [Magic(\"Aeroza\")] Aeroza_7C,\n        [Magic(\"Curaza\")] Curaza_7D,\n        [Command(\"Dark Firaga\")] DarkFiraga,\n        [Command(\" \")] Empty_7F,\n        [Command(\"Double Arrowguns\")] DoubleArrowguns,\n        [Command(\"Hyper Hammer\")] HyperHammer,\n        [Command(\"Twin Yo-Yos\")] TwinYoYos,\n        [Command(\"Magic Launcher\")] MagicLauncher,\n        [Command(\"Drill Punch\")] DrillPunch,\n        [Command(\"Blizzard Blades\")] BlizzardBlades,\n        [Command(\"Nano Arms\")] NanoArms,\n        [Command(\"Ultimate Form\")] UltimateForm,\n        [Command(\"Mirage Staff\")] MirageStaff,\n        Countershield,\n        [Command(\"Agile Claws\")] AgileClaws,\n        [Command(\"Rage Form\")] RageForm,\n        Highwind,\n        [Command(\"Storm Flag\")] StormFlag,\n        [Command(\"Hunny Blasters\")] HunnyBlasters,\n        [Command(\"Hunny Launcher\")] HunnyLauncher,\n        [Command(\"Blizzard Claws\")] BlizzardClaws,\n        [Command(\"Frying Pan\")] FryingPan,\n        [Command(\"Boom Hammer\")] BoomHammer,\n        [Command(\"Clock Drill\")] ClockDrill,\n        [Command(\"Second Form\")] SecondForm,\n        [Command(\"Second Form S (Starlight)\")] SecondFormS,\n        [Command(\"Second Form M (Midnight Blue)\")] SecondFormM,\n        [Command(\"Second Form P (Phantom Green)\")] SecondFormP,\n        [Command(\"Second Form D (Dusk til Dawn)\")] SecondFormD,\n        Spellweaver,\n        [Command(\" \")] Empty_9A,\n        [Command(\"Finish\")] Finish_9B,\n        [Command(\"Finish\")] Finish_9C,\n        [Command(\"Finish\")] Finish_9D,\n        [Command(\"Finish\")] Finish_9E,\n        [Command(\"Finish\")] Finish_9F,\n        [Command(\"Finish\")] Finish_A0,\n        [Command(\"Finish\")] Finish_A1,\n        [Command(\"Finish\")] Finish_A2,\n        [Command(\"Finish\")] Finish_A3,\n        [Command(\"Finish\")] Finish_A4,\n        [Command(\"Finish\")] Finish_A5,\n        [Command(\"Finish\")] Finish_A6,\n        [Command(\"Finish\")] Finish_A7,\n        [Command(\"Finish\")] Finish_A8,\n        [Command(\"Double Duel\")] DoubleDuel,\n        [Command(\"Thunder\")] Thunder_AA,\n        [Command(\"Stun Impact\")] StunImpact,\n        [Command(\"Sonic Blade\")] SonicBlade,\n        [Command(\"Ars Arcanum\")] ArsArcanum,\n        [Command(\"Ancient Light\")] AncientLight,\n        [Command(\"Rave\")] Unused137,\n        [Command(\"Blast\")] Unused138,\n        [Command(\"Bash\")] Unused139,\n        [Command(\"Finish\")] Unused140,\n        [Command(\"Riskcharge\")] Unused141,\n        [Command(\"Union x\")] UnionX,\n        [Command(\"USERNAME\")] USERNAME_1,\n        [Command(\"USERNAME\")] USERNAME_2,\n        [Command(\"USERNAME\")] USERNAME_3,\n        [Command(\"USERNAME\")] USERNAME_4,\n        [Command(\"USERNAME\")] USERNAME_5,\n        [Command(\"Mountain Coaster\")] MountainCoaster,\n        [Command(\"Pirate Ship\")] PirateShip,\n        [Command(\"Mad Tea Cups\")] MadTeaCups,\n        [Command(\"Blaster Blaze\")] BlasterBlaze,\n        [Command(\"Magic Carousel\")] MagicCarrousel,\n        [Command(\"Splash Run\")] SplashRun,\n        [Command(\"Finish\")] Finish_C0,\n        [Command(\"Trinity Guard\")] TrinityGuard,\n        [Info(\"Infinite jump\")] TrinitySled,\n        [Command(\"Goofy Bombardier\")] GoofyBombardier,\n        [Command(\" \")] Empty_C4,\n        [Command(\" \")] Empty_C5,\n        [Info(\"Infinite jump\")] Empty_C6,\n        [Command(\"Scream Strike\")] ScreamStrike,\n        [Command(\"Never Fear\")] NeverFear,\n        [Info(\"Infinite jump\")] Empty_C9,\n        [Command(\"Heroic Swing\")] HeroicSwing,\n        [Command(\"Mighty Avalanche\")] MightyAvalanche,\n        [Command(\"Rocket Ruckus\")] RocketRuckus,\n        [Command(\"Tangled Twist\")] TangledTwist,\n        [Command(\"Tree Whip\")] TreeWhip,\n        [Command(\"Donald Meteor\")] DonaldMeteor,\n        [Command(\"Flare Force\")] FlareForce,\n        [Command(\"Interceptor Wing\")] InterceptorWing,\n        [Command(\"Subzero Impact\")] SubzeroImpact,\n        [Command(\"Last Ray\")] LastRay,\n        Trinity,\n        Sora,\n        [Command(\"Finish\")] Finish_D7,\n        [Command(\"Light Burst\")] Unused177,\n        [Command(\"Dark Burst\")] Unused178,\n        [Command(\"Dual Smasher\")] Unused179,\n        [Command(\"Dual Counter\")] Unused180,\n        [Command(\"Starcracker\")] Unused181,\n        [Command(\"Reversal\")] Unused182,\n        [Command(\"Light Form\")] Unused183,\n        [Command(\"Dark Form\")] Unused184,\n        [Command(\"Double Form OKP\")] Unused185,\n        [Command(\"Double Form OBV\")] Unused186,\n        [Command(\"Finish\")] Unused187,\n        [Command(\"Finish\")] Unused233,\n        [Command(\"Dual Shot\")] Unused188,\n        [Command(\"Seven Wishes\")] Unused189,\n        [Command(\"Dispel\")] Unused190,\n        [Command(\"Showdown\")] Unused191,\n        [Command(\"Dual Shot\")] Unused192,\n        [Command(\"Sora\")] Unused193,\n        [Command(\"Help\")] Unused194,\n        [Command(\"Help\")] Unused195,\n        [Command(\"Help\")] Unused196,\n        [Command(\"Help\")] Unused197,\n        [Command(\"Faith Volley\")] Unused198,\n        [Command(\"Icy Slider\")] Unused199,\n        [Command(\"Thinking of You\")] Unused200,\n        [Command(\"True End\")] Unused201,\n        [Command(\"Connecting Hearts\")] Unused202,\n        [Command(\"One Heart\")] Unused203,\n        [Command(\"Blitz\")] Unused204,\n        [Command(\"Usual Adventure\")] Unused205,\n        [Command(\"Easy Adventure\")] Unused206,\n        [Command(\"Challenging  Adventure\")] Unused207,\n        [Command(\"Draw Card\")] Unused208,\n        [Command(\" \")] Unused209,\n        [Command(\" \")] Unused210,\n        [Command(\" \")] Unused211,\n        [Command(\" \")] Unused212,\n        [Command(\" \")] Unused213,\n        [Command(\" \")] Unused214,\n        [Command(\" \")] Unused215,\n        [Command(\"Crash\")] Crash,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/ConsumableType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum ConsumableType : byte\n    {\n        [Info] Empty,\n        [Consumable(\"Potion\")] Potion,\n        [Consumable(\"Hi-Potion\")] HiPotion,\n        [Consumable(\"Mega-Potion\")] MegaPotion,\n        [Consumable(\"Ether\")] Ether,\n        [Consumable(\"Mega-Ether\")] MegaEther,\n        [Consumable(\"Elixir\")] Elixir,\n        [Consumable(\"Megalixir\")] Megalixir,\n        [Consumable(\"Refocuser\")] Refocuser,\n        [Consumable(\"Hi-Refocuser\")] HiRefocuser,\n        [Consumable(\"Panacea\")] Panacea,\n        [Consumable(\"Hi-Ether\")] HiEther,\n        Item0c,\n        Item0d,\n        Item0e,\n        Item0f,\n        Item10,\n        Item11,\n        Item12,\n        Item13,\n        Item14,\n        Item15,\n        Item16,\n        Item17,\n        Item18,\n        Item19,\n        Item1a,\n        Item1b,\n        Item1c,\n        Item1d,\n        Item1e,\n        Item1f,\n        Item20,\n        Item21,\n        Item22,\n        Item23,\n        Item24,\n        Item25,\n        Item26,\n        Item27,\n        Item28,\n        Item29,\n        Item2a,\n        Item2b,\n        Item2c,\n        Item2d,\n        Item2e,\n        Item2f,\n        Item30,\n        Item31,\n        Item32,\n        Item33,\n        Item34,\n        Item35,\n        Item36,\n        Item37,\n        Item38,\n        Item39,\n        Item3a,\n        Item3b,\n        Item3c,\n        Item3d,\n        Item3e,\n        Item3f,\n        Item40,\n        Item41,\n        Item42,\n        Item43,\n        Item44,\n        Item45,\n        Item46,\n        Item47,\n        Item48,\n        Item49,\n        Item4a,\n        Item4b,\n        Item4c,\n        Item4d,\n        Item4e,\n        Item4f,\n        Item50,\n        Item51,\n        Item52,\n        Item53,\n        Item54,\n        Item55,\n        Item56,\n        Item57,\n        Item58,\n        Item59,\n        Item5a,\n        Item5b,\n        Item5c,\n        Item5d,\n        Item5e,\n        Item5f,\n        Item60,\n        Item61,\n        Item62,\n        Item63,\n        Item64,\n        Item65,\n        Item66,\n        Item67,\n        Item68,\n        Item69,\n        Item6a,\n        Item6b,\n        Item6c,\n        Item6d,\n        Item6e,\n        Item6f,\n        Item70,\n        Item71,\n        Item72,\n        Item73,\n        Item74,\n        Item75,\n        Item76,\n        Item77,\n        Item78,\n        Item79,\n        Item7a,\n        Item7b,\n        Item7c,\n        Item7d,\n        Item7e,\n        Item7f,\n        Item80,\n        Item81,\n        Item82,\n        Item83,\n        Item84,\n        Item85,\n        Item86,\n        Item87,\n        Item88,\n        Item89,\n        Item8a,\n        Item8b,\n        Item8c,\n        Item8d,\n        Item8e,\n        Item8f,\n        Item90,\n        Item91,\n        Item92,\n        Item93,\n        Item94,\n        Item95,\n        Item96,\n        Item97,\n        Item98,\n        Item99,\n        Item9a,\n        Item9b,\n        Item9c,\n        Item9d,\n        Item9e,\n        Item9f,\n        Itema0,\n        Itema1,\n        Itema2,\n        Itema3,\n        Itema4,\n        Itema5,\n        Itema6,\n        Itema7,\n        Itema8,\n        Itema9,\n        Itemaa,\n        Itemab,\n        Itemac,\n        Itemad,\n        Itemae,\n        Itemaf,\n        Itemb0,\n        Itemb1,\n        Itemb2,\n        Itemb3,\n        Itemb4,\n        Itemb5,\n        Itemb6,\n        Itemb7,\n        Itemb8,\n        Itemb9,\n        Itemba,\n        Itembb,\n        Itembc,\n        Itembd,\n        Itembe,\n        Itembf,\n        Itemc0,\n        Itemc1,\n        Itemc2,\n        Itemc3,\n        Itemc4,\n        Itemc5,\n        Itemc6,\n        Itemc7,\n        Itemc8,\n        Itemc9,\n        Itemca,\n        Itemcb,\n        Itemcc,\n        Itemcd,\n        Itemce,\n        Itemcf,\n        Itemd0,\n        Itemd1,\n        Itemd2,\n        Itemd3,\n        Itemd4,\n        Itemd5,\n        Itemd6,\n        Itemd7,\n        Itemd8,\n        Itemd9,\n        Itemda,\n        Itemdb,\n        Itemdc,\n        Itemdd,\n        Itemde,\n        Itemdf,\n        Iteme0,\n        Iteme1,\n        Iteme2,\n        Iteme3,\n        Iteme4,\n        Iteme5,\n        Iteme6,\n        Iteme7,\n        Iteme8,\n        Iteme9,\n        Itemea,\n        Itemeb,\n        Itemec,\n        Itemed,\n        Itemee,\n        Itemef,\n        Itemf0,\n        Itemf1,\n        Itemf2,\n        Itemf3,\n        Itemf4,\n        Itemf5,\n        Itemf6,\n        Itemf7,\n        Itemf8,\n        Itemf9,\n        Itemfa,\n        Itemfb,\n        Itemfc,\n        Itemfd,\n        Itemfe,\n        Itemff,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/DifficultyType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum DifficultyType : byte\n    {\n        [Info] Beginner,\n        [Info] Normal,\n        [Info] Proud,\n        [Info] Critical\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/FoodType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum FoodType : byte\n    {\n        [Info] Empty,\n        [Food(\"Crab\")] Item01,\n        Item02,\n        Item03,\n        Item04,\n        Item05,\n        Item06,\n        Item07,\n        Item08,\n        Item09,\n        Item0a,\n        Item0b,\n        Item0c,\n        Item0d,\n        Item0e,\n        Item0f,\n        Item10,\n        Item11,\n        Item12,\n        Item13,\n        Item14,\n        Item15,\n        Item16,\n        Item17,\n        Item18,\n        Item19,\n        Item1a,\n        Item1b,\n        Item1c,\n        Item1d,\n        Item1e,\n        Item1f,\n        Item20,\n        Item21,\n        Item22,\n        Item23,\n        Item24,\n        Item25,\n        Item26,\n        Item27,\n        Item28,\n        Item29,\n        Item2a,\n        Item2b,\n        Item2c,\n        Item2d,\n        Item2e,\n        Item2f,\n        Item30,\n        Item31,\n        Item32,\n        Item33,\n        Item34,\n        Item35,\n        Item36,\n        Item37,\n        Item38,\n        Item39,\n        Item3a,\n        Item3b,\n        Item3c,\n        Item3d,\n        Item3e,\n        Item3f,\n        Item40,\n        Item41,\n        Item42,\n        Item43,\n        Item44,\n        Item45,\n        Item46,\n        Item47,\n        Item48,\n        Item49,\n        Item4a,\n        Item4b,\n        Item4c,\n        Item4d,\n        Item4e,\n        Item4f,\n        Item50,\n        Item51,\n        Item52,\n        Item53,\n        Item54,\n        Item55,\n        Item56,\n        Item57,\n        Item58,\n        Item59,\n        Item5a,\n        Item5b,\n        Item5c,\n        Item5d,\n        Item5e,\n        Item5f,\n        Item60,\n        Item61,\n        Item62,\n        Item63,\n        Item64,\n        Item65,\n        Item66,\n        Item67,\n        Item68,\n        Item69,\n        Item6a,\n        Item6b,\n        Item6c,\n        Item6d,\n        Item6e,\n        Item6f,\n        Item70,\n        Item71,\n        Item72,\n        Item73,\n        Item74,\n        Item75,\n        Item76,\n        Item77,\n        Item78,\n        Item79,\n        Item7a,\n        Item7b,\n        Item7c,\n        Item7d,\n        Item7e,\n        Item7f,\n        Item80,\n        Item81,\n        Item82,\n        Item83,\n        Item84,\n        Item85,\n        Item86,\n        Item87,\n        Item88,\n        Item89,\n        Item8a,\n        Item8b,\n        Item8c,\n        Item8d,\n        Item8e,\n        Item8f,\n        Item90,\n        Item91,\n        Item92,\n        Item93,\n        Item94,\n        Item95,\n        Item96,\n        Item97,\n        Item98,\n        Item99,\n        Item9a,\n        Item9b,\n        Item9c,\n        Item9d,\n        Item9e,\n        Item9f,\n        Itema0,\n        Itema1,\n        Itema2,\n        Itema3,\n        Itema4,\n        Itema5,\n        Itema6,\n        Itema7,\n        Itema8,\n        Itema9,\n        Itemaa,\n        Itemab,\n        Itemac,\n        Itemad,\n        Itemae,\n        Itemaf,\n        Itemb0,\n        Itemb1,\n        Itemb2,\n        Itemb3,\n        Itemb4,\n        Itemb5,\n        Itemb6,\n        Itemb7,\n        Itemb8,\n        Itemb9,\n        Itemba,\n        Itembb,\n        Itembc,\n        Itembd,\n        Itembe,\n        Itembf,\n        Itemc0,\n        Itemc1,\n        Itemc2,\n        Itemc3,\n        Itemc4,\n        Itemc5,\n        Itemc6,\n        Itemc7,\n        Itemc8,\n        Itemc9,\n        Itemca,\n        Itemcb,\n        Itemcc,\n        Itemcd,\n        Itemce,\n        Itemcf,\n        Itemd0,\n        Itemd1,\n        Itemd2,\n        Itemd3,\n        Itemd4,\n        Itemd5,\n        Itemd6,\n        Itemd7,\n        Itemd8,\n        Itemd9,\n        Itemda,\n        Itemdb,\n        Itemdc,\n        Itemdd,\n        Itemde,\n        Itemdf,\n        Iteme0,\n        Iteme1,\n        Iteme2,\n        Iteme3,\n        Iteme4,\n        Iteme5,\n        Iteme6,\n        Iteme7,\n        Iteme8,\n        Iteme9,\n        Itemea,\n        Itemeb,\n        Itemec,\n        Itemed,\n        Itemee,\n        Itemef,\n        Itemf0,\n        Itemf1,\n        Itemf2,\n        Itemf3,\n        Itemf4,\n        Itemf5,\n        Itemf6,\n        Itemf7,\n        Itemf8,\n        Itemf9,\n        Itemfa,\n        Itemfb,\n        Itemfc,\n        Itemfd,\n        Itemfe,\n        Itemff,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/InventoryType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum InventoryType\n    {\n        Empty,\n        [Consumable(\"Potion\")] Potion,\n        [Consumable(\"Hi-Potion\")] HiPotion,\n        [Consumable(\"Mega-Potion\")] MegaPotion,\n        [Consumable(\"Ether\")] Ether,\n        [Consumable(\"Mega-Ether\")] MegaEther,\n        [Consumable(\"Elixir\")] Elixir,\n        [Consumable(\"Megalixir\")] Megalixir,\n        [Consumable(\"Refocuser\")] Refocuser,\n        [Consumable(\"Hi-Refocuser\")] HiRefocuser,\n        [Consumable(\"Panacea\")] Panacea,\n        [Consumable(\"Hi-Ether\")] HiEther,\n        [Unused] UnusedItem0d,\n        [Unused] UnusedItem0e,\n        [Unused] UnusedItem0f,\n        [Unused] UnusedItem10,\n        [Unused] UnusedItem11,\n        [Tent(\"Tent\")] Tent,\n        [Tent(\"Strength boost\")] StrengthBoost,\n        [Tent(\"Magic boost\")] MagicBoost,\n        [Tent(\"Defense boost\")] DefenseBoost,\n        [Tent(\"AP boost\")] ApBoost,\n        [Unused] UnusedBoost17,\n        [Unused] UnusedBoost18,\n        [Unused] UnusedBoost19,\n        [Keyblade(\"Kingdom Key\")] KingdomKey,\n        [Keyblade(\"Hero's Origin\")] HeroOrigin,\n        [Keyblade(\"Shooting Star\")] ShootingStar,\n        [Keyblade(\"Favorite Deputy\")] FavoriteDeputy,\n        [Keyblade(\"Ever After\")] EvenAfter,\n        [Keyblade(\"Happy Gear\")] HappyGear,\n        [Keyblade(\"Crystal Snow\")] CrystalSnow,\n        [Keyblade(\"Hunny Spout\")] HunnySpout,\n        [Keyblade(\"Nano Gear\")] NanoGear,\n        [Keyblade(\"Wheel of Fate\")] WheelOfFate,\n        [Keyblade(\"Grand Chef\")] GrandChef,\n        [Keyblade(\"Classic Tone\")] ClassicTone,\n        [Keyblade(\"Oathkeeper\")] Oathkeeper,\n        [Keyblade(\"Oblivion\")] Oblivion,\n        [Keyblade(\"Ultima Weapon\")] UltimaWeapon,\n        [Keyblade(\"Midnight Blue\")] MidnightBlue,\n        [Keyblade(\"Phantom Green\")] PhantomGreen,\n        [Keyblade(\"Starlight\")] Starlight,\n        [Keyblade(\"Dawn Till Dusk\")] DawnTillDusk,\n        [Unused] UnusedKeyblade2b,\n        [Staff(\"Mage's Staff\")] Weapon15,\n        [Staff(\"Mage's Staff+\")] Weapon16,\n        [Staff(\"Warhammer\")] Weapon17,\n        [Staff(\"Warhammer+\")] Weapon18,\n        [Staff(\"Magician's Wand\")] Weapon19,\n        [Staff(\"Magician's Wand+\")] Weapon1a,\n        [Staff(\"Nirvana\")] Weapon1b,\n        [Staff(\"Nirvana+\")] Weapon1c,\n        [Staff(\"Astrolabe\")] Weapon1d,\n        [Staff(\"Astrolabe+\")] Weapon1e,\n        [Staff(\"Heartless Maul\")] Weapon1f,\n        [Staff(\"Heartless Maul+\")] Weapon20,\n        [Staff(\"Save the Queen\")] Weapon21,\n        [Staff(\"Save the Queen+\")] SaveTheQueenPlus,\n        [Unused] UnusedStaff3c,\n        [Unused] UnusedStaff3d,\n        [Unused] UnusedStaff3e,\n        [Unused] UnusedStaff3f,\n        [Unused] UnusedStaff40,\n        [Unused] UnusedStaff41,\n        [Shield(\"Knight's Shield\")] Weapon29,\n        [Shield(\"Knight's Shield+\")] Weapon2a,\n        [Shield(\"Clockwork Shield\")] Weapon2b,\n        [Shield(\"Clockwork Shield+\")] Weapon2c,\n        [Shield(\"Star Shield\")] Weapon2d,\n        [Shield(\"Star Shield+\")] Weapon2e,\n        [Shield(\"Aegis Shield\")] Weapon2f,\n        [Shield(\"Aegis Shield+\")] Weapon30,\n        [Shield(\"Storm Anchor\")] Weapon31,\n        [Shield(\"Storm Anchor+\")] Weapon32,\n        [Shield(\"Nobody Guard\")] Weapon33,\n        [Shield(\"Nobody Guard+\")] Weapon34,\n        [Shield(\"Save the King\")] Weapon35,\n        [Shield(\"Save the King+\")] SaveTheKingPlus,\n        [Unused] Unused50,\n        [Unused] Unused51,\n        [Unused] Unused52,\n        [Unused] Unused53,\n        [Unused] Unused54,\n        [Unused] Unused55,\n        [Unused] Unused56,\n        [Unused] Unused57,\n        [Unused] Unused58,\n        [Unused] Unused59,\n        [Unused] Unused5a,\n        [Unused] Unused5b,\n        [Unused] Unused5c,\n        [Unused] Unused5d,\n        [Weapon(\"Heart of a Hero\")] HeartOfHero,\n        [Weapon(\"Cowboy's Pride\")] CowboyPride,\n        [Weapon(\"Space Ranger Suit\")] SpaceRangerSuit,\n        [Weapon(\"Golden Hair\")] GoldenHair,\n        [Weapon(\"Frying Pan\")] FryingPan,\n        [Weapon(\"Skill & Crossbones\")] SkillAndCrossbones,\n        [Weapon(\"Ice Claws\")] IceClaws,\n        [Weapon(\"Powered Suit\")] PoweredSuit,\n        [Weapon(\"Claws\")] Claws,\n        [Weapon(\"Knockout Body\")] KnockoutBody,\n\n        [Armor(\"Hero's Belt\")] HeroBelt = 125,\n        [Armor(\"Hero's Glove\")] HeroGlove,\n        [Armor(\"Shield Belt\")] ShieldBelt,\n        [Armor(\"Defense Belt\")] DefensedBelt,\n        [Armor(\"Guardian's Belt\")] GuardianBelt,\n        [Armor(\"Power Band\")] PowerBand,\n        [Armor(\"Buster Band\")] BusterBand,\n        [Armor(\"Buster Band+\")] BusterBandPlus,\n        [Armor(\"Cosmic Belt\")] CosmicBelt,\n        [Armor(\"Cosmic Belt+\")] CosmicBeltPlus,\n        [Armor(\"Fire Bangle\")] FireBangle,\n        [Armor(\"Firaga Bangle\")] FiragaBangle,\n        [Armor(\"Firaza Bangle\")] FirazaBangle,\n        [Armor(\"Fire Chain\")] FireChain,\n        [Armor(\"Blizzard Choker\")] BlizzardChocker,\n        [Armor(\"Blizzara Choker\")] BlizzaraChocker,\n        [Armor(\"Blizzaga Choker\")] BlizzagaChocker,\n        [Armor(\"Blizzard Chain\")] BlizzardChain,\n        [Armor(\"Thunder Trinket\")] ThunderTrinker,\n        [Armor(\"Thundaga Trinket\")] ThundagaTrinker,\n        [Armor(\"Thundaza Trinket\")] ThundazaTrinker,\n        [Armor(\"Thunder Chain\")] ThunderChain,\n        [Armor(\"Dark Anklet\")] DarkAnklet,\n        [Armor(\"Midnight Anklet\")] MidnightAnklet,\n        [Armor(\"Chaos Anklet\")] ChaosAnklet,\n        [Armor(\"Dark Chain\")] DarkChain,\n        [Armor(\"Divine Bandanna\")] DivineBandanna,\n        [Armor(\"Elven Bandanna\")] ElvenBandanna,\n        [Armor(\"Aqua Chaplet\")] AquaChaplet,\n        [Armor(\"Wind Fan\")] WindFan,\n        [Armor(\"Storm Fan\")] StormFan,\n        [Armor(\"Aero Armlet\")] AeroArmlet,\n        [Armor(\"Aegis Chain\")] AegisChain,\n        [Armor(\"Acrisius\")] Acrisius,\n        [Armor(\"Cosmic Chain\")] CosmicChain,\n        [Armor(\"Petite Ribbon\")] PetiteRibbon,\n        [Armor(\"Ribbon\")] Ribbon,\n        [Armor(\"Fira Bangle\")] FiraBangle,\n        [Armor(\"Blizzaza Choker\")] BlizzazaChocker,\n        [Armor(\"Thundara Trinket\")] BlizzazaTrinker,\n        [Armor(\"Shadow Anklet\")] ShadowAnklet,\n        [Armor(\"Abas Chain\")] AbasChain,\n        [Armor(\"Acrisius+\")] AcrisiusPlus,\n        [Armor(\"Royal Ribbon\")] RoyalRibbon,\n        [Armor(\"Firefighter Rosette\")] FirefighterRosette,\n        [Armor(\"Umbrella Rosette\")] UmbrellaRosette,\n        [Armor(\"Mask Rosette\")] MaskRosette,\n        [Armor(\"Snowman Rosette\")] SnowmanRosette,\n        [Armor(\"Insulator Rosette\")] InsulatorRosette,\n        Item174,\n        [Armor(\"Power Weight\")] en,\n        [Armor(\"Magic Weight\")] en2,\n        [Armor(\"Master Belt\")] en3,\n\n        [Accessory(\"Laughter Pin\")] LaughterPin = 225,\n        [Accessory(\"Forest Clasp\")] ForestClasp,\n        [Accessory(\"Ability Ring\")] AbilityRing,\n        [Accessory(\"Ability Ring+\")] AbilityRingPlus,\n        [Accessory(\"Technician's Ring\")] TechnicianRing,\n        [Accessory(\"Technician's Ring+\")] TechnicianRingPlus,\n        [Accessory(\"Skill Ring\")] SkillRing,\n        [Accessory(\"Skill Ring+\")] SkillRingPlus,\n        [Accessory(\"Expert's Ring\")] ExpertRing,\n        [Accessory(\"Master's Ring\")] MasterRing,\n        [Accessory(\"Cosmic Ring\")] CosmicRing,\n        [Accessory(\"Power Ring\")] PowerRing,\n        [Accessory(\"Buster Ring\")] BusterRing,\n        [Accessory(\"Valor Ring\")] ValorRing,\n        [Accessory(\"Phantom Ring\")] PhantomRing,\n        [Accessory(\"Orichalcum Ring\")] OrichalcumRing,\n        [Accessory(\"Magic Ring\")] MagicRing,\n        [Accessory(\"Rune Ring\")] RuneRing,\n        [Accessory(\"Force Ring\")] ForceRing,\n        [Accessory(\"Sorcerer's Ring\")] SorcererRing,\n        [Accessory(\"Wisdom Ring\")] WisdomRing,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace,\n        [Accessory(\"Silver Necklace\")] SilverNecklace,\n        [Accessory(\"Master's Necklace\")] MasterNecklace,\n        [Accessory(\"Bronze Amulet\")] BronzeAmulet,\n        [Accessory(\"Silver Amulet\")] SilverAmulet,\n        [Accessory(\"Gold Amulet\")] GoldAmulet,\n        [Accessory(\"Junior Medal\")] JuniorMedal,\n        [Accessory(\"Master Medal\")] MasterMedal,\n        [Accessory(\"Star Medal\")] StarMedal,\n        [Accessory(\"Mickey Clasp\")] MickeyClasp,\n        [Accessory(\"Soldier's Earring\")] SoldierEarring,\n        [Accessory(\"Fencer's Earring\")] FencerEarring,\n        [Accessory(\"Mage's Earring\")] MageEarring,\n        [Accessory(\"Slayer's Earring\")] SlayerEarring,\n        [Accessory(\"Moon Amulet\")] MoonAmulet,\n        [Accessory(\"Star Charm\")] StarCharm,\n        [Accessory(\"Cosmic Arts\")] CosmicArts,\n        [Accessory(\"Crystal Regalia\")] CrystalRegalia,\n        [Accessory(\"Water Cufflink\")] WaterCufflink,\n        [Accessory(\"Thunder Cufflink\")] ThunderCufflink,\n        [Accessory(\"Fire Cufflink\")] FireCufflink,\n        [Accessory(\"Aero Cufflink\")] AeroCufflink,\n        [Accessory(\"Blizzard Cufflink\")] BlizzardCufflink,\n        [Accessory(\"Celestriad\")] Celestriad,\n        [Accessory(\"Yin-Yang Cufflink\")] YinYangCufflink,\n        [Accessory(\"Gourmand's Ring\")] GourmandRing,\n        [Accessory(\"Draw Ring\")] DrawRing,\n        [Accessory(\"Lucky Ring\")] LuckyRing,\n        [Accessory(\"Flanniversary Badge\")] FlanniversaryBadge,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_33,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_34,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_35,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_36,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_37,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_38,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_39,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_3A,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_3B,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_3C,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_3D,\n        [Accessory(\"Bronze Necklace\")] BronzeNecklace_3E,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_3F,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_40,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_41,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_42,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_43,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_44,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_45,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_46,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_47,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_48,\n        [Accessory(\"Silver Necklace\")] SilverNecklace_49,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4A,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4B,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4C,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4D,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4E,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_4F,\n        [Accessory(\"Master's Necklace\")] MasterNecklace_50,\n        [Accessory(\"Master Medal\")] MasterMedal_51,\n        [Accessory(\"Master Medal\")] MasterMedal_52,\n        [Accessory(\"Junior Medal\")] JuniorMedal_53,\n        [Accessory(\"Master Medal\")] MasterMedal_54,\n        [Accessory(\"Junior Medal\")] JuniorMedal_55,\n        [Accessory(\"Junior Medal\")] JuniorMedal_56,\n        [Accessory(\"Junior Medal\")] JuniorMedal_57,\n        [Accessory(\"Junior Medal\")] JuniorMedal_58,\n        [Accessory(\"Junior Medal\")] JuniorMedal_59,\n        [Accessory(\"Junior Medal\")] JuniorMedal_5A,\n        [Accessory(\"Junior Medal\")] JuniorMedal_5B,\n        [Accessory(\"Junior Medal\")] JuniorMedal_5C,\n        [Accessory(\"Star Medal\")] StarMedal_5D,\n        [Accessory(\"Master Medal\")] MasterMedal_5E,\n        [Accessory(\"Master Medal\")] MasterMedal_5F,\n        [Accessory(\"Star Medal\")] StarMedal_60,\n        [Accessory(\"Master Medal\")] MasterMedal_61,\n        [Accessory(\"Star Medal\")] StarMedal_62,\n        [Accessory(\"Master Medal\")] MasterMedal_63,\n        [Accessory(\"Master Medal\")] MasterMedal_64,\n        [Accessory(\"Master Medal\")] MasterMedal_65,\n        [Accessory(\"Master Medal\")] MasterMedal_66,\n        [Accessory(\"Master Medal\")] MasterMedal_67,\n        [Accessory(\"Master Medal\")] MasterMedal_68,\n        [Accessory(\"Star Medal\")] StarMedal_69,\n        [Accessory(\"Star Medal\")] StarMedal_6A,\n        [Accessory(\"Star Medal\")] StarMedal_6B,\n        [Accessory(\"Star Medal\")] StarMedal_6C,\n        [Accessory(\"Star Medal\")] StarMedal_6D,\n        [Accessory(\"Star Medal\")] StarMedal_6E,\n        [Accessory(\"Breakthrough\")] Item6f,\n        [Accessory(\"Crystal Regalia+\")] Item70,\n        [Snack(\"Pumpkin Velouté\")] PumpkinVeloute = 425,\n        [Snack(\"Consomé\")] Consome,\n        [Snack(\"Carrot Potage\")] CarrotPotage,\n        [Snack(\"Crab Bisque\")] CrabBisque,\n        [Snack(\"Cold Tomato Soup\")] ColdTomatoSoup,\n        [Snack(\"Scallop Poêlé\")] ScallopPoele,\n        [Snack(\"Lobster Mousse\")] LobsterMousse,\n        [Snack(\"Mushroom Terrine\")] MushroomTerrine,\n        [Snack(\"Ratatouille\")] Ratatouille,\n        [Snack(\"Caprese Salad\")] CapreseSalad,\n        [Snack(\"Sole Meunière\")] SoleMeuniere,\n        [Snack(\"Eel Matelote\")] EelMatelote,\n        [Snack(\"Sea Bass en Papillote\")] SeaBassEnPapillote,\n        [Snack(\"Bouillabaisse\")] Bouillabaisse,\n        [Snack(\"Seafood Tartare\")] SeafoodTartare,\n        [Snack(\"Sea Bass Poêlé\")] SeaBassPoele,\n        [Snack(\"Sweetbread Poêlé\")] SweetbreadPoele,\n        [Snack(\"Beef Sauté\")] BeefSaute,\n        [Snack(\"Beef Bourguignon\")] BeefBourguignon,\n        [Snack(\"Stuffed Quail\")] StuffedQuail,\n        [Snack(\"Filet Mignon Poêlé\")] FiletMignonPoele,\n        [Snack(\"Crêpes Suzette\")] CrepesSuzette,\n        [Snack(\"Chocolate Mousse\")] ChocolateMousse,\n        [Snack(\"Fresh Fruit Compote\")] FreshFruitCompote,\n        [Snack(\"Berries au Fromage\")] BerriesAuFromage,\n        [Snack(\"Warm Banana Soufflé\")] WarmBananaSouffle,\n        [Snack(\"Fruit Gelée\")] FruitGelee,\n        [Snack(\"Tarte aux Fruits\")] TarteAuxFruits,\n        [Snack(\"Pumpkin Velouté+\")] PumpkinVeloutePlus,\n        [Snack(\"Consomé+\")] ConsomePlus,\n        [Snack(\"Carrot Potage+\")] CarrotPotagePlus,\n        [Snack(\"Crab Bisque+\")] CrabBisquePlus,\n        [Snack(\"Cold Tomato Soup+\")] ColdTomatoSoupPlus,\n        [Snack(\"Scallop Poêlé+\")] ScallopPoelePlus,\n        [Snack(\"Lobster Mousse+\")] LobsterMoussePlus,\n        [Snack(\"Mushroom Terrine+\")] MushroomTerrinePlus,\n        [Snack(\"Ratatouille+\")] RatatouillePlus,\n        [Snack(\"Caprese Salad+\")] CapreseSaladPlus,\n        [Snack(\"Sole Meunière+\")] SoleMeunierePlus,\n        [Snack(\"Eel Matelote+\")] EelMatelotePlus,\n        [Snack(\"Sea Bass en Papillote+\")] SeaBassEnPapillotePlus,\n        [Snack(\"Bouillabaisse+\")] BouillabaissePlus,\n        [Snack(\"Seafood Tartare+\")] SeafoodTartarePlus,\n        [Snack(\"Sea Bass Poêlé+\")] SeaBassPoelePlus,\n        [Snack(\"Sweetbread Poêlé+\")] SweetbreadPoelePlus,\n        [Snack(\"Beef Sauté+\")] BeefSautePlus,\n        [Snack(\"Beef Bourguignon+\")] BeefBourguignonPlus,\n        [Snack(\"Stuffed Quail+\")] StuffedQuailPlus,\n        [Snack(\"Filet Mignon Poêlé+\")] FiletMignonPoelePlus,\n        [Snack(\"Crêpes Suzette+\")] CrepesSuzettePlus,\n        [Snack(\"Chocolate Mousse+\")] ChocolateMoussePlus,\n        [Snack(\"Fresh Fruit Compote+\")] FreshFruitCompotePlus,\n        [Snack(\"Berries au Fromage+\")] BerriesAuFromagePlus,\n        [Snack(\"Warm Banana Soufflé+\")] WarmBananaSoufflePlus,\n        [Snack(\"Fruit Gelée+\")] FruitGeleePlus,\n        [Snack(\"Tarte aux Fruits+\")] TarteAuxFruitsPlus,\n\n        [Synthesis(\"Blazing Shard\")] BlazingShard = 489,\n        [Synthesis(\"Blazing Stone\")] BlazingStone,\n        [Synthesis(\"Blazing Gem\")] BlazingGem,\n        [Synthesis(\"Blazing Crystal\")] BlazingCrystal,\n        [Synthesis(\"Frost Shard\")] FrostShard,\n        [Synthesis(\"Frost Stone\")] FrostStone,\n        [Synthesis(\"Frost Gem\")] FrostGem,\n        [Synthesis(\"Frost Crystal\")] FrostCrystal,\n        [Synthesis(\"Lightning Shard\")] LightningShard,\n        [Synthesis(\"Lightning Stone\")] LightningStone,\n        [Synthesis(\"Lightning Gem\")] LightningGem,\n        [Synthesis(\"Lightning Crystal\")] LightningCrystal = 500,\n        [Synthesis(\"Lucid Shard\")] LucidShard,\n        [Synthesis(\"Lucid Stone\")] LucidStone,\n        [Synthesis(\"Lucid Gem\")] LucidGem,\n        [Synthesis(\"Lucid Crystal\")] LucidCrystal,\n        [Synthesis(\"Pulsing Shard\")] PulsingShard,\n        [Synthesis(\"Pulsing Stone\")] PulsingStone,\n        [Synthesis(\"Pulsing Gem\")] PulsingGem,\n        [Synthesis(\"Pulsing Crystal\")] PulsingCrystal,\n        [Synthesis(\"Writhing Shard\")] WrithingShard,\n        [Synthesis(\"Writhing Stone\")] WrithingStone,\n        [Synthesis(\"Writhing Gem\")] WrithingGem,\n        [Synthesis(\"Writhing Crystal\")] WrithingCrystal,\n        [Synthesis(\"Betwixt Shard\")] BetwixtShard,\n        [Synthesis(\"Betwixt Stone\")] BetwixtStone,\n        [Synthesis(\"Betwixt Gem\")] BetwixtGem,\n        [Synthesis(\"Betwixt Crystal\")] BetwixtCrystal,\n        [Synthesis(\"Twilight Shard\")] TwilightShard,\n        [Synthesis(\"Twilight Stone\")] TwilightStone,\n        [Synthesis(\"Twilight Gem\")] TwilightGem,\n        [Synthesis(\"Twilight Crystal\")] TwilightCrystal,\n        [Synthesis(\"Mythril Shard\")] MythrilShard,\n        [Synthesis(\"Mythril Stone\")] MythrilStone,\n        [Synthesis(\"Mythril Gem\")] MythrilGem,\n        [Synthesis(\"Mythril Crystal\")] MythrilCrystal,\n        [Synthesis(\"Sinister Shard\")] SinisterShard,\n        [Synthesis(\"Sinister Stone\")] SinisterStone,\n        [Synthesis(\"Sinister Gem\")] SinisterGem,\n        [Synthesis(\"Sinister Crystal\")] SinisterCrystal,\n        [Synthesis(\"Soothing Shard\")] SoothingShard,\n        [Synthesis(\"Soothing Stone\")] SoothingStone,\n        [Synthesis(\"Soothing Gem\")] SoothingGem,\n        [Synthesis(\"Soothing Crystal\")] SoothingCrystal,\n        [Synthesis(\"Wellspring Shard\")] WellspringShard,\n        [Synthesis(\"Wellspring Stone\")] WellspringStone,\n        [Synthesis(\"Wellspring Gem\")] WellspringGem,\n        [Synthesis(\"Wellspring Crystal\")] WellspringCrystal,\n        [Synthesis(\"Hungry Shard\")] HungryShard,\n        [Synthesis(\"Hungry Stone\")] HungryStone,\n        [Synthesis(\"Hungry Gem\")] HungryGem,\n        [Synthesis(\"Hungry Crystal\")] HungryCrystal,\n        [Synthesis(\"Fluorite\")] Fluorite,\n        [Synthesis(\"Damascus\")] Damascus,\n        [Synthesis(\"Adamantite\")] Adamantite,\n        [Synthesis(\"Orichalcum\")] Orichalcum,\n        [Synthesis(\"Orichalcum+\")] OrichalcumPlus,\n        [Synthesis(\"Electrum\")] Electrum,\n        [Synthesis(\"Evanescent Crystal\")] EvanescentCrystal,\n        [Synthesis(\"Illusory Crystal\")] IllusoryCrystal,\n\n        [Food(\"Crab\")] Crab = 589,\n        [Food(\"Scallop\")] Scallop,\n        [Food(\"Lobster\")] Lobster,\n        [Food(\"Sole\")] Sole,\n        [Food(\"Eel\")] Eel,\n        [Food(\"Sea Bass\")] SeaBass,\n        [Food(\"Mussel\")] Mussel,\n        [Food(\"Cod\")] Cod,\n        [Food(\"Pumpkin\")] Pumpkin,\n        [Food(\"Zucchini\")] Zucchini,\n        [Food(\"Onion\")] Onion,\n        [Food(\"Tomato\")] Tomato,\n        [Food(\"Eggplant\")] Eggplant,\n        [Food(\"Carrot\")] Carrot,\n        [Food(\"Garlic\")] Garlic,\n        [Food(\"Celery\")] Celery,\n        [Food(\"Morel\")] Morel,\n        [Food(\"Porcini\")] Porcini,\n        [Food(\"Chanterelle\")] Chanterelle,\n        [Food(\"Portobello\")] Portobello,\n        [Food(\"Black Truffle\")] BlackTruffle,\n        [Food(\"King Oyster Mushroom\")] KingOysterMushroom,\n        [Food(\"Black Trumpet\")] BlackTrumpet,\n        [Food(\"Miller Mushroom\")] MillerMushroom,\n        [Food(\"Cloves\")] Cloves,\n        [Food(\"Rosemary\")] Rosemary,\n        [Food(\"Thyme\")] Thyme,\n        [Food(\"Bay Leaf\")] BayLeaf,\n        [Food] Basil,\n        [Food] Dill,\n        [Food] Parsley,\n        [Food] Saffron,\n        [Food] Apricot,\n        [Food] Gooseberry,\n        [Food] Lemon,\n        [Food] Orange,\n        [Food] Raspberry,\n        [Food] Pear,\n        [Food] Blackberry,\n        [Food] Apple,\n        [Food] Cheese,\n        [Food] Chocolate,\n        [Food] Caviar,\n        [Food] Butter,\n        [Food(\"Olive Oil\")] OliveOil,\n        [Food] Cornichon,\n        [Food] Rice,\n        [Food] Honey,\n        [Food(\"Sour Cherry\")] SourCherry,\n        [Food] Strawberry,\n        [Food(\"Blood Orange\")] BloodOrange,\n        [Food] Banana,\n        [Food] Grapes,\n        [Food] Melon,\n        [Food] Watermelon,\n        [Food] Veal,\n        [Food] Beef,\n        [Food] Quail,\n        [Food(\"Filet Mignon\")] FiletMignon,\n\n        [KeyItem(\"Gummiphone\")] Gummiphone = 654,\n        [KeyItem(\"AR Device\")] ARDevice,\n        [KeyItem(\"Prize Postcard\")] PrizePostcard,\n        [KeyItem(\"M.O.G. Card\")] MOGCard,\n        [KeyItem(\"Dream Heartbinder\")] DreamHeartbinder,\n        [KeyItem(\"Pixel Heartbinder\")] PixelHeartbinder,\n        [KeyItem(\"'Ohana Heartbinder\")] OhanaHeartbinder,\n        [KeyItem(\"Pride Heartbinder\")] PrideHeartbinder,\n        [KeyItem(\"Ocean Heartbinder\")] OceanHeartbinder,\n        [KeyItem(\"Golden Herc Figure\")] GoldenHercFigure,\n        [KeyItem(\"Proof of Promises\")] Item664,\n        [KeyItem(\"Proof of Times Past\")] Item665,\n\n        [MogItem(\"Kupo Coin\")] KupoCoin = 677,\n\n        [KeyItem(\"Giantland\")] Minigame01 = 681,\n        [KeyItem(\"Mickey, the mail pilot\")] Minigame02,\n        [KeyItem(\"The musical farmer\")] Minigame03,\n        [KeyItem(\"Building a building\")] Minigame04,\n        [KeyItem(\"The mad doctor\")] Minigame05,\n        [KeyItem(\"Mickey´s kitten catch\")] Minigame06,\n        [KeyItem(\"The klondike kid\")] Minigame07,\n        [KeyItem(\"Fishin´frenzy\")] Minigame08,\n        [KeyItem(\"The karnival kid\")] Minigame09,\n        [KeyItem(\"Mickey cuts up\")] Minigame10,\n        [KeyItem(\"Mickey´s prison escape\")] Minigame11,\n        [KeyItem(\"How to play baseball\")] Minigame12,\n        [KeyItem(\"How to play golf\")] Minigame13,\n        [KeyItem(\"Mickey´s circus\")] Minigame14,\n        [KeyItem(\"Camping out\")] Minigame15,\n        [KeyItem(\"Taxi troubles\")] Minigame16,\n        [KeyItem(\"Beach party\")] Minigame17,\n        [KeyItem(\"The wayward canary\")] Minigame18,\n        [KeyItem(\"Mickey´s mechanical\")] Minigame19,\n        [KeyItem(\"The barnyard battle\")] Minigame20,\n        [KeyItem(\"Cast out to sea\")] Minigame21,\n        [KeyItem(\"Barnyard sports\")] Minigame22,\n        [KeyItem(\"Mickey steps out\")] Minigame23,\n\n        [KeyItem(\"Secret Report 1\")] SecretReport1 = 814,\n        [KeyItem(\"Secret Report 2\")] SecretReport2,\n        [KeyItem(\"Secret Report 3\")] SecretReport3,\n        [KeyItem(\"Secret Report 4\")] SecretReport4,\n        [KeyItem(\"Secret Report 5\")] SecretReport5,\n        [KeyItem(\"Secret Report 6\")] SecretReport6,\n        [KeyItem(\"Secret Report 7\")] SecretReport7,\n        [KeyItem(\"Secret Report 8\")] SecretReport8,\n        [KeyItem(\"Secret Report 9\")] SecretReport9,\n        [KeyItem(\"Secret Report 10\")] SecretReport10,\n        [KeyItem(\"Secret Report 11\")] SecretReport11,\n        [KeyItem(\"Secret Report 12\")] SecretReport12,\n        [KeyItem(\"Secret Report 13\")] SecretReport13,\n\n        [Info(\"Angular/G-01\")] Item833 = 833,\n        [Info(\"Angular/G-02\")] Item834,\n        [Info(\"Angular/G-03\")] Item835,\n        [Info(\"Angular/G-04\")] Item836,\n        [Info(\"Angular/G-05\")] Item837,\n        [Info(\"Angular/G-06\")] Item838,\n        [Info(\"Angular/G-07\")] Item839,\n        [Info(\"Angular/G-08\")] Item840,\n        [Info(\"Angular/G-09\")] Item841,\n        [Info(\"Angular/G-10\")] Item842,\n        [Info(\"Angular/G-11\")] Item843,\n        [Info(\"Angular/G-12\")] Item844,\n        [Info(\"Rounded/G-01\")] Item845,\n        [Info(\"Rounded/G-02\")] Item846,\n        [Info(\"Rounded/G-03\")] Item847,\n        [Info(\"Rounded/G-04\")] Item848,\n        [Info(\"Rounded/G-05\")] Item849,\n        [Info(\"Rounded/G-06\")] Item850,\n        [Info(\"Rounded/G-07\")] Item851,\n        [Info(\"Rounded/G-08\")] Item852,\n        [Info(\"Rounded/G-09\")] Item853,\n        [Info(\"Rounded/G-10\")] Item854,\n        [Info(\"Rounded/G-11\")] Item855,\n        [Info(\"Rounded/G-12\")] Item856,\n        [Info(\"Rounded/G-13\")] Item857,\n        [Info(\"Rounded/G-14\")] Item858,\n        [Info(\"Rounded/G-15\")] Item859,\n        [Info(\"Cylindrical/G-01\")] Item860,\n        [Info(\"Cylindrical/G-02\")] Item861,\n        [Info(\"Cylindrical/G-03\")] Item862,\n        [Info(\"Cylindrical/G-04\")] Item863,\n        [Info(\"Cylindrical/G-05\")] Item864,\n        [Info(\"Cylindrical/G-06\")] Item865,\n        [Info(\"Cylindrical/G-07\")] Item866,\n        [Info(\"Cylindrical/G-08\")] Item867,\n        [Info(\"Cylindrical/G-09\")] Item868,\n        [Info(\"Aero/G-01\")] Item869,\n        [Info(\"Aero/G-02\")] Item870,\n        [Info(\"Aero/G-03\")] Item871,\n        [Info(\"Aero/G-04\")] Item872,\n        [Info(\"Aero/G-05\")] Item873,\n        [Info(\"Aero/G-06\")] Item874,\n        [Info(\"Aero/G-07\")] Item875,\n        [Info(\"Aero/G-08\")] Item876,\n        [Info(\"Aero/G-09\")] Item877,\n        [Info(\"Aero/G-10\")] Item878,\n        [Info(\"Aero/G-11\")] Item879,\n        [Info(\"Aero/G-12\")] Item880,\n\n        [Info(\"Fire/G\")] Item907 = 907,\n        [Info(\"Fira/G\")] Item908,\n        [Info(\"Firaga/G-01\")] Item909,\n        [Info(\"Firaga/G-02\")] Item910,\n        [Info(\"Blizzard/G\")] Item911,\n        [Info(\"Blizzara/G\")] Item912,\n        [Info(\"Blizzaga/G-01\")] Item913,\n        [Info(\"Blizzaga/G-02\")] Item914,\n        [Info(\"Gravity/G\")] Item915,\n        [Info(\"Gravira/G\")] Item916,\n        [Info(\"Graviga/G-01\")] Item917,\n        [Info(\"Graviga/G-02\")] Item918,\n        [Info(\"Water/G\")] Item919,\n        [Info(\"Watera/G\")] Item920,\n        [Info(\"Waterga/G-01\")] Item921,\n        [Info(\"Waterga/G-02\")] Item922,\n        [Info(\"Comet/G\")] Item923,\n        [Info(\"Meteor/G\")] Item924,\n        [Info(\"Thunder/G\")] Item925,\n        [Info(\"Thundara/G\")] Item926,\n        [Info(\"Thundaga/G\")] Item927,\n        [Info(\"Ultima/G\")] Item928,\n        [Info(\"Masamune/G\")] Item929,\n        [Info(\"Excalibur/G\")] Item930,\n        [Info(\"Drill/G\")] Item931,\n        [Info(\"Saw/G\")] Item932,\n        [Info(\"Gungnir/G\")] Item933,\n        [Info(\"Laser Blade/G\")] Item934,\n        [Info(\"Knuckle/G\")] Item935,\n        [Info(\"Manipulator/G\")] Item936,\n        [Info(\"Vernier/G\")] Item937,\n        [Info(\"Thruster/G\")] Item938,\n        [Info(\"Booster/G\")] Item939,\n        [Info(\"Rocket/G\")] Item940,\n        [Info(\"Mini-Propeller/G\")] Item941,\n        [Info(\"Propeller/G\")] Item942,\n        [Info(\"Screw Propeller/G\")] Item943,\n        [Info(\"Small Rotor/G\")] Item944,\n        [Info(\"Rotor/G\")] Item945,\n        [Info(\"Large Rotor/G\")] Item946,\n        [Info(\"Mast/G\")] Item947,\n        [Info(\"Cyclone/G\")] Item948,\n        [Info(\"Storm/G\")] Item949,\n        [Info(\"Tempest/G\")] Item950,\n        [Info(\"Typhoon/G\")] Item951,\n        [Info(\"Hurricane/G\")] Item952,\n        [Info(\"Vortex/G\")] Item953,\n        [Info(\"Sonic Turbo/G\")] Item954,\n        [Info(\"Darkness/G\")] Item955,\n        [Info(\"Angel/G\")] Item956,\n        [Info(\"Butterfly/G\")] Item957,\n        [Unused] Item958,\n        [Info(\"Tire/G\")] Item959,\n        [Info(\"Caterpillar/G\")] Item960,\n        [Info(\"Triple Wheel/G\")] Item961,\n        [Info(\"Bubble Helm/G\")] Item962,\n        [Info(\"Flat Helm/G\")] Item963,\n        [Info(\"Solid Helm/G\")] Item964,\n        [Info(\"Sphere Helm/G\")] Item965,\n        [Info(\"Bridge/G\")] Item966,\n        [Info(\"Big Bridge/G\")] Item967,\n        [Info(\"Mini-Helm/G\")] Item968,\n        [Info(\"Long Helm/G\")] Item969,\n        [Unused] Item970,\n        [Info(\"Wall/G\")] Item971,\n        [Info(\"Large Wall/G\")] Item972,\n        [Info(\"Shield/G\")] Item973,\n        [Info(\"Large Shield/G\")] Item974,\n        [Info(\"Radome/G\")] Item975,\n        [Info(\"Antenna/G\")] Item976,\n        [Info(\"Parabola/G\")] Item977,\n        [Info(\"Neon Orb/G\")] Item978,\n        [Info(\"Neon Bar/G\")] Item979,\n        [Info(\"Neon Chain/G\")] Item980,\n        [Info(\"Round Light/G\")] Item981,\n        [Info(\"Square Light/G\")] Item982,\n        [Info(\"Strobe Light/G\")] Item983,\n        [Info(\"Flag/G\")] Item984,\n        [Info(\"Muffler/G\")] Item985,\n        [Info(\"Chimney/G\")] Item986,\n        [Info(\"Beetle Horn/G\")] Item987,\n        [Info(\"Cat Ear/G\")] Item988,\n        [Info(\"Cat Tail/G\")] Item989,\n        [Info(\"\")] Item990,\n        [Info(\"Dog/G-01\")] Item991,\n        [Info(\"Cat/G\")] Item992,\n        [Info(\"Chocochick/G\")] Item993,\n        [Info(\"Dog/G-02\")] Item994,\n        [Info(\"Bunny/G\")] Item995,\n        [Info(\"Bird/G\")] Item996,\n        [Info(\"Meow Wow/G\")] Item997,\n        [Info(\"Flantastic Seven/G-01\")] Item998,\n        [Info(\"Flantastic Seven/G-02\")] Item999,\n        [Info(\"Flantastic Seven/G-03\")] Item1000,\n        [Info(\"Present/G\")] Item1001,\n        [Info(\"Cake/G\")] Item1002,\n        [Info(\"Treasure Chest/G\")] Item1003,\n        [Info(\"Lantern/G\")] Item1004,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/ItemType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum ItemType : byte\n    {\n        [Consumable] Consumable,\n        [Consumable(\"Consumable (same)\")] ConsumableMirrored,\n        [Tent] Tent,\n        [Weapon] Weapon,\n        [Armor] Armor,\n        [Accessory] Accessory,\n        [Snack] Snack,\n        [Synthesis] Synthesis,\n        [Food] Food,\n        [KeyItem] KeyItem,\n        [MogItem] Mog,\n        [KeyItem(\"Gummiphone game\")] Type0b,\n        [Info] Untested0c,\n        [KeyItem(\"Secret Report\")] AnsemReport,\n        [Info(\"Gummi Block\")] GummiBlock,\n        [Info(\"Gummi related?\")] GummiRelated,\n        [Info] Untested10,\n        [Info] Untested11,\n        [Info] Untested12,\n        [Info] Untested13,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/KeyItemType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum KeyItemType : byte\n    {\n        [Info] Empty,\n        [KeyItem(\"<no text>\")] Item01,\n        [KeyItem(\"Gummiphone\")] Gummiphone,\n        [KeyItem(\"AR Device\")] ARDevice,\n        [KeyItem(\"Prize Postcard\")] PrizePostcard,\n        [KeyItem(\"M.O.G. Card\")] MOGCard,\n        [KeyItem(\"Dream Heartbinder\")] DreamHeartbinder,\n        [KeyItem(\"Pixel Heartbinder\")] PixelHeartbinder,\n        [KeyItem(\"'Ohana Heartbinder\")] OhanaHeartbinder,\n        [KeyItem(\"Pride Heartbinder\")] PrideHeartbinder,\n        [KeyItem(\"Ocean Heartbinder\")] OceanHeartbinder,\n        [KeyItem(\"Golden Herc Figure\")] GoldenHercFigure,\n        Item0c,\n        Item0d,\n        Item0e,\n        Item0f,\n        Item10,\n        Item11,\n        Item12,\n        Item13,\n        Item14,\n        Item15,\n        Item16,\n        Item17,\n        Item18,\n        Item19,\n        Item1a,\n        Item1b,\n        Item1c,\n        Item1d,\n        Item1e,\n        Item1f,\n        Item20,\n        Item21,\n        Item22,\n        Item23,\n        Item24,\n        Item25,\n        Item26,\n        Item27,\n        Item28,\n        Item29,\n        Item2a,\n        Item2b,\n        Item2c,\n        Item2d,\n        Item2e,\n        Item2f,\n        Item30,\n        Item31,\n        Item32,\n        Item33,\n        Item34,\n        Item35,\n        Item36,\n        Item37,\n        Item38,\n        Item39,\n        Item3a,\n        Item3b,\n        Item3c,\n        Item3d,\n        Item3e,\n        Item3f,\n        Item40,\n        Item41,\n        Item42,\n        Item43,\n        Item44,\n        Item45,\n        Item46,\n        Item47,\n        Item48,\n        Item49,\n        Item4a,\n        Item4b,\n        Item4c,\n        Item4d,\n        Item4e,\n        Item4f,\n        Item50,\n        Item51,\n        Item52,\n        Item53,\n        Item54,\n        Item55,\n        Item56,\n        Item57,\n        Item58,\n        Item59,\n        Item5a,\n        Item5b,\n        Item5c,\n        Item5d,\n        Item5e,\n        Item5f,\n        Item60,\n        Item61,\n        Item62,\n        Item63,\n        Item64,\n        Item65,\n        Item66,\n        Item67,\n        Item68,\n        Item69,\n        Item6a,\n        Item6b,\n        Item6c,\n        Item6d,\n        Item6e,\n        Item6f,\n        Item70,\n        Item71,\n        Item72,\n        Item73,\n        Item74,\n        Item75,\n        Item76,\n        Item77,\n        Item78,\n        Item79,\n        Item7a,\n        Item7b,\n        Item7c,\n        Item7d,\n        Item7e,\n        Item7f,\n        Item80,\n        Item81,\n        Item82,\n        Item83,\n        Item84,\n        Item85,\n        Item86,\n        Item87,\n        Item88,\n        Item89,\n        Item8a,\n        Item8b,\n        Item8c,\n        Item8d,\n        Item8e,\n        Item8f,\n        Item90,\n        Item91,\n        Item92,\n        Item93,\n        Item94,\n        Item95,\n        Item96,\n        Item97,\n        Item98,\n        Item99,\n        Item9a,\n        Item9b,\n        Item9c,\n        Item9d,\n        Item9e,\n        Item9f,\n        Itema0,\n        Itema1,\n        Itema2,\n        Itema3,\n        Itema4,\n        Itema5,\n        Itema6,\n        Itema7,\n        Itema8,\n        Itema9,\n        Itemaa,\n        Itemab,\n        Itemac,\n        Itemad,\n        Itemae,\n        Itemaf,\n        Itemb0,\n        Itemb1,\n        Itemb2,\n        Itemb3,\n        Itemb4,\n        Itemb5,\n        Itemb6,\n        Itemb7,\n        Itemb8,\n        Itemb9,\n        Itemba,\n        Itembb,\n        Itembc,\n        Itembd,\n        Itembe,\n        Itembf,\n        Itemc0,\n        Itemc1,\n        Itemc2,\n        Itemc3,\n        Itemc4,\n        Itemc5,\n        Itemc6,\n        Itemc7,\n        Itemc8,\n        Itemc9,\n        Itemca,\n        Itemcb,\n        Itemcc,\n        Itemcd,\n        Itemce,\n        Itemcf,\n        Itemd0,\n        Itemd1,\n        Itemd2,\n        Itemd3,\n        Itemd4,\n        Itemd5,\n        Itemd6,\n        Itemd7,\n        Itemd8,\n        Itemd9,\n        Itemda,\n        Itemdb,\n        Itemdc,\n        Itemdd,\n        Itemde,\n        Itemdf,\n        Iteme0,\n        Iteme1,\n        Iteme2,\n        Iteme3,\n        Iteme4,\n        Iteme5,\n        Iteme6,\n        Iteme7,\n        Iteme8,\n        Iteme9,\n        Itemea,\n        Itemeb,\n        Itemec,\n        Itemed,\n        Itemee,\n        Itemef,\n        Itemf0,\n        Itemf1,\n        Itemf2,\n        Itemf3,\n        Itemf4,\n        Itemf5,\n        Itemf6,\n        Itemf7,\n        Itemf8,\n        Itemf9,\n        Itemfa,\n        Itemfb,\n        Itemfc,\n        Itemfd,\n        Itemfe,\n        Itemff,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/LocationType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum LocationType : byte\n    {\n        [Info(\"The City / North District\")] Location00,\n        [Info(\"The City / Central District\")] Location01,\n        [Info(\"The City / South District\")] Location02,\n        [Info(\"Hiro's Garage\")] Location03,\n        [Info(\"The High Seas / Port Royal Waters\")] Location04,\n        [Info(\"The High Seas / Northern Waters\")] Location05,\n        [Info(\"The High Seas / Southern Waters\")] Location06,\n        [Info(\"The High Seas / Huddled Isles\")] Location07,\n        [Info(\"The High Seas / Undersea Cavern\")] Location08,\n        [Info(\"The High Seas / Sandbar Isle\")] Location09,\n        [Info(\"The High Seas / Forsaken Isle\")] Location0a,\n        [Info(\"The High Seas / Isla Verdemontaña\")] Location0b,\n        [Info(\"The High Seas / Isla de los Mástiles\")] Location0c,\n        [Info(\"Port Royal / Docks\")] Location0d,\n        [Info(\"Port Royal / Seaport\")] Location0e,\n        [Info(\"Port Royal / Fort\")] Location0f,\n        [Info(\"Port Royal / Settlement\")] Location10,\n        [Info(\"Port Royal / Dockside Path\")] Location11,\n        [Info(\"Port Royal\")] Location12,\n        [Info(\"Over the Edge\")] Location13,\n        [Info(\"The Labyrinth of Ice / Lower Tier\")] Location14,\n        [Info(\"The Labyrinth of Ice / Middle Tier\")] Location15,\n        [Info(\"The Labyrinth of Ice / Upper Tier\")] Location16,\n        [Info(\"The North Mountain / Mountain Ridge\")] Location17,\n        [Info(\"The North Mountain / Ice Palace\")] Location18,\n        [Info(\"The North Mountain / Treescape\")] Location19,\n        [Info(\"The North Mountain / Gorge\")] Location1a,\n        [Info(\"The North Mountain / Valley of Ice\")] Location1b,\n        [Info(\"The North Mountain / Frozen Wall\")] Location1c,\n        [Info(\"The North Mountain / Snowfield\")] Location1d,\n        [Info(\"The North Mountain / Fjord\")] Location1e,\n        [Info(\"The North Mountain / Foothills\")] Location1f,\n        [Info(\"Monsters. Inc. / Lobby & Offices\")] Location20,\n        [Info(\"Monsters. Inc. / Laugh Room\")] Location21,\n        [Info(\"The Factory / Basement\")] Location22,\n        [Info(\"The Factory / Ground Floor\")] Location23,\n        [Info(\"The Factory / Second Floor\")] Location24,\n        [Info(\"The Power Plant / Accessway\")] Location25,\n        [Info(\"The Power Plant / Tank Yard\")] Location26,\n        [Info(\"The Power Plant / Vault Passage\")] Location27,\n        [Info(\"The Door Vault / Upper Level\")] Location28,\n        [Info(\"The Door Vault / Lower Level\")] Location29,\n        [Info(\"The Door Vault / Service Area\")] Location2a,\n        [Info(\"Andy's House\")] Location2b,\n        [Info(\"Galaxy Toys / Main Floor: 1F\")] Location2c,\n        [Info(\"Galaxy Toys / Main Floor: 2F\")] Location2d,\n        [Info(\"Galaxy Toys / Main Floor: 3F\")] Location2e,\n        [Info(\"Galaxy Toys / Babies & Toddlers: Dolls\")] Location2f,\n        [Info(\"Galaxy Toys / Babies & Toddlers: Outdoors\")] Location30,\n        [Info(\"Galaxy Toys / Lower Vents\")] Location31,\n        [Info(\"Galaxy Toys / Upper Vents\")] Location32,\n        [Info(\"Galaxy Toys / Action Figures\")] Location33,\n        [Info(\"Galaxy Toys / Video Games\")] Location34,\n        [Info(\"Galaxy Toys / Kid Korral\")] Location35,\n        [Info(\"Galaxy Toys / Rest Area\")] Location36,\n        [Info(\"The Neighborhood / Tram Common\")] Location37,\n        [Info(\"The Neighborhood / Underground Conduit\")] Location38,\n        [Info(\"The Neighborhood / The Woods\")] Location39,\n        [Info(\"The Neighborhood / The Old Mansion\")] Location3a,\n        [Info(\"Realm of the Gods / Courtyard\")] Location3b,\n        [Info(\"Realm of the Gods / Corridors\")] Location3c,\n        [Info(\"Realm of the Gods / Secluded Forge\")] Location3d,\n        [Info(\"Realm of the Gods / Cloud Ridge\")] Location3e,\n        [Info(\"Realm of the Gods / Apex\")] Location3f,\n        [Info(\"Mount Olympus / Ravine\")] Location40,\n        [Info(\"Mount Olympus / Cliff Ascent\")] Location41,\n        [Info(\"Mount Olympus / Mountainside\")] Location42,\n        [Info(\"Mount Olympus / Summit\")] Location43,\n        [Info(\"Thebes / Agora\")] Location44,\n        [Info(\"Thebes / Gardens\")] Location45,\n        [Info(\"Thebes / Overlook\")] Location46,\n        [Info(\"Thebes / The Big Olive\")] Location47,\n        [Info(\"Thebes / Alleyway\")] Location48,\n        [Info(\"The Forest / Tower\")] Location49,\n        [Info(\"The Forest / Hills\")] Location4a,\n        [Info(\"The Forest / Marsh\")] Location4b,\n        [Info(\"The Forest / Campsite\")] Location4c,\n        [Info(\"The Forest / Wetlands\")] Location4d,\n        [Info(\"The Forest / Wildflower Clearing\")] Location4e,\n        [Info(\"The Forest / Shore\")] Location4f,\n        [Info(\"The Kingdom / Thoroughfare\")] Location50,\n        [Info(\"The Kingdom / Wharf\")] Location51,\n        [Info(\"The Badlands\")] Location52,\n        [Info(\"The Skein of Severance / Trail of Valediction\")] Location53,\n        [Info(\"The Skein of Severance / Twist of Isolation\")] Location54,\n        [Info(\"The Skein of Severance / Tower of Endings\")] Location55,\n        [Info(\"Rabbit's House\")] Location56,\n        [Info(\"The Stairway to the Sky\")] Location57,\n        [Info(\"The Realm of Darkness\")] Location58,\n        [Info(\"Worldmap\")] Location59,\n        [Info(\"The Final World\")] Location5a,\n        [Info(\"The Land of Departure\")] Location5b,\n        [Info(\"The Bridge\")] Location5c,\n        [Info(\"Davy Jones' Locker\")] Location5d,\n        [Info(\"The Realm of Darkness\")] Location5e,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/MaterialType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum MaterialType\n    {\n        [Synthesis(\"Blazing Shard\")] BlazingShard,\n        [Synthesis(\"Blazing Stone\")] BlazingStone,\n        [Synthesis(\"Blazing Gem\")] BlazingGem,\n        [Synthesis(\"Blazing Crystal\")] BlazingCrystal,\n        [Synthesis(\"Frost Shard\")] FrostShard,\n        [Synthesis(\"Frost Stone\")] FrostStone,\n        [Synthesis(\"Frost Gem\")] FrostGem,\n        [Synthesis(\"Frost Crystal\")] FrostCrystal,\n        [Synthesis(\"Lightning Shard\")] LightningShard,\n        [Synthesis(\"Lightning Stone\")] LightningStone,\n        [Synthesis(\"Lightning Gem\")] LightningGem,\n        [Synthesis(\"Lightning Crystal\")] LightningCrystal,\n        [Synthesis(\"Lucid Shard\")] LucidShard,\n        [Synthesis(\"Lucid Stone\")] LucidStone,\n        [Synthesis(\"Lucid Gem\")] LucidGem,\n        [Synthesis(\"Lucid Crystal\")] LucidCrystal,\n        [Synthesis(\"Pulsing Shard\")] PulsingShard,\n        [Synthesis(\"Pulsing Stone\")] PulsingStone,\n        [Synthesis(\"Pulsing Gem\")] PulsingGem,\n        [Synthesis(\"Pulsing Crystal\")] PulsingCrystal,\n        [Synthesis(\"Writhing Shard\")] WrithingShard,\n        [Synthesis(\"Writhing Stone\")] WrithingStone,\n        [Synthesis(\"Writhing Gem\")] WrithingGem,\n        [Synthesis(\"Writhing Crystal\")] WrithingCrystal,\n        [Synthesis(\"Betwixt Shard\")] BetwixtShard,\n        [Synthesis(\"Betwixt Stone\")] BetwixtStone,\n        [Synthesis(\"Betwixt Gem\")] BetwixtGem,\n        [Synthesis(\"Betwixt Crystal\")] BetwixtCrystal,\n        [Synthesis(\"Twilight Shard\")] TwilightShard,\n        [Synthesis(\"Twilight Stone\")] TwilightStone,\n        [Synthesis(\"Twilight Gem\")] TwilightGem,\n        [Synthesis(\"Twilight Crystal\")] TwilightCrystal,\n        [Synthesis(\"Mythril Shard\")] MythrilShard,\n        [Synthesis(\"Mythril Stone\")] MythrilStone,\n        [Synthesis(\"Mythril Gem\")] MythrilGem,\n        [Synthesis(\"Mythril Crystal\")] MythrilCrystal,\n        [Synthesis(\"Sinister Shard\")] SinisterShard,\n        [Synthesis(\"Sinister Stone\")] SinisterStone,\n        [Synthesis(\"Sinister Gem\")] SinisterGem,\n        [Synthesis(\"Sinister Crystal\")] SinisterCrystal,\n        [Synthesis(\"Soothing Shard\")] SoothingShard,\n        [Synthesis(\"Soothing Stone\")] SoothingStone,\n        [Synthesis(\"Soothing Gem\")] SoothingGem,\n        [Synthesis(\"Soothing Crystal\")] SoothingCrystal,\n        [Synthesis(\"Wellspring Shard\")] WellspringShard,\n        [Synthesis(\"Wellspring Stone\")] WellspringStone,\n        [Synthesis(\"Wellspring Gem\")] WellspringGem,\n        [Synthesis(\"Wellspring Crystal\")] WellspringCrystal,\n        [Synthesis(\"Hungry Shard\")] HungryShard,\n        [Synthesis(\"Hungry Stone\")] HungryStone,\n        [Synthesis(\"Hungry Gem\")] HungryGem,\n        [Synthesis(\"Hungry Crystal\")] HungryCrystal,\n        [Synthesis(\"Fluorite\")] Fluorite,\n        [Synthesis(\"Damascus\")] Damascus,\n        [Synthesis(\"Adamantite\")] Adamantite,\n        [Synthesis(\"Orichalcum\")] Orichalcum,\n        [Synthesis(\"Orichalcum+\")] OrichalcumPlus,\n        [Synthesis(\"Electrum\")] Electrum,\n        [Synthesis(\"Evanescent Crystal\")] EvanescentCrystal,\n        [Synthesis(\"Illusory Crystal\")] IllusoryCrystal,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/MogType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum MogType : byte\n    {\n        [Info] Empty,\n        [MogItem(\"Kupo Coin\")] Item01,\n        Item02,\n        Item03,\n        Item04,\n        Item05,\n        Item06,\n        Item07,\n        Item08,\n        Item09,\n        Item0a,\n        Item0b,\n        Item0c,\n        Item0d,\n        Item0e,\n        Item0f,\n        Item10,\n        Item11,\n        Item12,\n        Item13,\n        Item14,\n        Item15,\n        Item16,\n        Item17,\n        Item18,\n        Item19,\n        Item1a,\n        Item1b,\n        Item1c,\n        Item1d,\n        Item1e,\n        Item1f,\n        Item20,\n        Item21,\n        Item22,\n        Item23,\n        Item24,\n        Item25,\n        Item26,\n        Item27,\n        Item28,\n        Item29,\n        Item2a,\n        Item2b,\n        Item2c,\n        Item2d,\n        Item2e,\n        Item2f,\n        Item30,\n        Item31,\n        Item32,\n        Item33,\n        Item34,\n        Item35,\n        Item36,\n        Item37,\n        Item38,\n        Item39,\n        Item3a,\n        Item3b,\n        Item3c,\n        Item3d,\n        Item3e,\n        Item3f,\n        Item40,\n        Item41,\n        Item42,\n        Item43,\n        Item44,\n        Item45,\n        Item46,\n        Item47,\n        Item48,\n        Item49,\n        Item4a,\n        Item4b,\n        Item4c,\n        Item4d,\n        Item4e,\n        Item4f,\n        Item50,\n        Item51,\n        Item52,\n        Item53,\n        Item54,\n        Item55,\n        Item56,\n        Item57,\n        Item58,\n        Item59,\n        Item5a,\n        Item5b,\n        Item5c,\n        Item5d,\n        Item5e,\n        Item5f,\n        Item60,\n        Item61,\n        Item62,\n        Item63,\n        Item64,\n        Item65,\n        Item66,\n        Item67,\n        Item68,\n        Item69,\n        Item6a,\n        Item6b,\n        Item6c,\n        Item6d,\n        Item6e,\n        Item6f,\n        Item70,\n        Item71,\n        Item72,\n        Item73,\n        Item74,\n        Item75,\n        Item76,\n        Item77,\n        Item78,\n        Item79,\n        Item7a,\n        Item7b,\n        Item7c,\n        Item7d,\n        Item7e,\n        Item7f,\n        Item80,\n        Item81,\n        Item82,\n        Item83,\n        Item84,\n        Item85,\n        Item86,\n        Item87,\n        Item88,\n        Item89,\n        Item8a,\n        Item8b,\n        Item8c,\n        Item8d,\n        Item8e,\n        Item8f,\n        Item90,\n        Item91,\n        Item92,\n        Item93,\n        Item94,\n        Item95,\n        Item96,\n        Item97,\n        Item98,\n        Item99,\n        Item9a,\n        Item9b,\n        Item9c,\n        Item9d,\n        Item9e,\n        Item9f,\n        Itema0,\n        Itema1,\n        Itema2,\n        Itema3,\n        Itema4,\n        Itema5,\n        Itema6,\n        Itema7,\n        Itema8,\n        Itema9,\n        Itemaa,\n        Itemab,\n        Itemac,\n        Itemad,\n        Itemae,\n        Itemaf,\n        Itemb0,\n        Itemb1,\n        Itemb2,\n        Itemb3,\n        Itemb4,\n        Itemb5,\n        Itemb6,\n        Itemb7,\n        Itemb8,\n        Itemb9,\n        Itemba,\n        Itembb,\n        Itembc,\n        Itembd,\n        Itembe,\n        Itembf,\n        Itemc0,\n        Itemc1,\n        Itemc2,\n        Itemc3,\n        Itemc4,\n        Itemc5,\n        Itemc6,\n        Itemc7,\n        Itemc8,\n        Itemc9,\n        Itemca,\n        Itemcb,\n        Itemcc,\n        Itemcd,\n        Itemce,\n        Itemcf,\n        Itemd0,\n        Itemd1,\n        Itemd2,\n        Itemd3,\n        Itemd4,\n        Itemd5,\n        Itemd6,\n        Itemd7,\n        Itemd8,\n        Itemd9,\n        Itemda,\n        Itemdb,\n        Itemdc,\n        Itemdd,\n        Itemde,\n        Itemdf,\n        Iteme0,\n        Iteme1,\n        Iteme2,\n        Iteme3,\n        Iteme4,\n        Iteme5,\n        Iteme6,\n        Iteme7,\n        Iteme8,\n        Iteme9,\n        Itemea,\n        Itemeb,\n        Itemec,\n        Itemed,\n        Itemee,\n        Itemef,\n        Itemf0,\n        Itemf1,\n        Itemf2,\n        Itemf3,\n        Itemf4,\n        Itemf5,\n        Itemf6,\n        Itemf7,\n        Itemf8,\n        Itemf9,\n        Itemfa,\n        Itemfb,\n        Itemfc,\n        Itemfd,\n        Itemfe,\n        Itemff,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/PartyCharacter.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum PartyCharacter : byte\n    {\n        [Info(\"Default\")] Sora,\n        [Info(\"Sora (Caribbean)\")] SoraCaribbean,\n        [Info(\"Sora (Monstropolis)\")] SoraMonstropolis,\n        [Info(\"Sora (Toy Box)\")] SoraToyBox,\n        [Info(\"Sora (Baymax)\")] SoraBaymax,\n        Char05,\n        [Info(\"Sora (KH2)\")] SoraKh2,\n        Char07,\n        Char08,\n        [Info(\"Riku (KH2)\")] RikuKh2,\n        [Info(\"Mickey\")] Mickey,\n        [Info(\"Donald\")] Donald,\n        [Info(\"Goofy\")] Goofy,\n        [Info(\"Jack\")] Jack,\n        [Info(\"Woody\")] Woody,\n        [Info(\"Buzz\")] Buzz,\n        [Info(\"Hercules\")] Hercules,\n        [Info(\"Rapunzel\")] Rapunzel,\n        [Info(\"Eugene\")] Eugene,\n        [Info(\"Sulley\")] Sulley,\n        [Info(\"Mike\")] Mike,\n        Char15,\n        [Info(\"Marshmallow\")] Marshmallow,\n        [Info(\"Baymax\")] Baymax,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/PlayableCharacterType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Lib3.Types\n{\n    public enum PlayableCharacterType\n    {\n        Sora,\n        Donald,\n        Goofy,\n        Hercules,\n        Woody,\n        Buzz,\n        Rapunzel,\n        Flynn,\n        Sulley,\n        Mike,\n        Marshmallow,\n        Baymax,\n        Jack,\n        Riku,\n        Mickey,\n        Unused\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/RecordAttractionType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum RecordAttractionType\n    {\n        [Info(\"Pirate Ship\")] Usage00,\n        [Info(\"Mad Tea Cups\")] Usage01,\n        [Info(\"Blaster Blaze\")] Usage02,\n        [Info(\"Magic Carousel\")] Usage03,\n        [Info(\"Splash Run\")] Usage04,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/RecordShotlockType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum RecordShotlockType\n    {\n        [Info(\"Kingdom Key / King of Hearts Total Uses\")] Usage00,\n        [Info(\"Kingdom Key / Ragnarok Total Uses\")] Usage01,\n        [Info(\"Hero's Origin / Drain Shock Total Uses\")] Usage02,\n        [Info(\"Hero's Origin / Atomic Deluge Total Uses\")] Usage03,\n        [Info(\"Shooting Star / Meteor Shower Total Uses\")] Usage04,\n        [Info(\"Shooting Star / Diving Barrage Total Uses\")] Usage05,\n        [Info(\"Shooting Star / Cluster Cannonade Total Uses\")] Usage06,\n        [Info(\"Favorite Deputy / Ghost Horde Total Uses\")] Usage07,\n        [Info(\"Favorite Deputy / Drill Dive Total Uses\")] Usage08,\n        [Info(\"Ever After / Shimmering Drops Total Uses\")] Usage09,\n        [Info(\"Ever After / Spectral Rays Total Uses\")] Usage0a,\n        [Info(\"Happy Gear / Snakebite Total Uses\")] Usage0b,\n        [Info(\"Happy Gear / Warp Trick Total Uses\")] Usage0c,\n        [Info(\"Crystal Snow / Diamond Dust Total Uses\")] Usage0d,\n        [Info(\"Crystal Snow / Frozen Crescents Total Uses\")] Usage0e,\n        [Info(\"Wheel of Fate / Blade Storm Total Uses\")] Usage0f,\n        [Info(\"Wheel of Fate / Flag Rampage Total Uses\")] Usage10,\n        [Info(\"Nano Gear / Cubic Stream Total Uses\")] Usage11,\n        [Info(\"Nano Gear / Zone Connector Total Uses\")] Usage12,\n        [Info(\"Hunny Spout / Hunny Burst Total Uses\")] Usage13,\n        [Info(\"Hunny Spout / Hunny Drizzle Total Uses\")] Usage14,\n        [Info(\"Hunny Spout / Sweet Surprise Total Uses\")] Usage15,\n        [Info(\"Grand Chef / Steam Spiral Total Uses\")] Usage16,\n        [Info(\"Grand Chef / Fruit Crusher Total Uses\")] Usage17,\n        [Info(\"Classic Tone / Phantom Rush Total Uses\")] Usage18,\n        [Info(\"Classic Tone / Noise Flux Total Uses\")] Usage19,\n        [Info(\"Starlight / Knights of the Round Total Uses\")] Usage1a,\n        [Info(\"Starlight / Union Ragnarok Total Uses\")] Usage1b,\n        [Info(\"Ultima Weapon / Infinity Circle Total Uses\")] Usage1c,\n        [Unused] [Info(\"\")] Usage1d,\n        [Unused] [Info(\"\")] Usage1e,\n        [Unused] [Info(\"\")] Usage1f,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/SnackType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum SnackType : byte\n    {\n        [Info] Empty,\n        [Snack(\"Pumpkin Velouté\")] Item01,\n        Item02,\n        Item03,\n        Item04,\n        Item05,\n        Item06,\n        Item07,\n        Item08,\n        Item09,\n        Item0a,\n        Item0b,\n        Item0c,\n        Item0d,\n        Item0e,\n        Item0f,\n        Item10,\n        Item11,\n        Item12,\n        Item13,\n        Item14,\n        Item15,\n        Item16,\n        Item17,\n        Item18,\n        Item19,\n        Item1a,\n        Item1b,\n        Item1c,\n        Item1d,\n        Item1e,\n        Item1f,\n        Item20,\n        Item21,\n        Item22,\n        Item23,\n        Item24,\n        Item25,\n        Item26,\n        Item27,\n        Item28,\n        Item29,\n        Item2a,\n        Item2b,\n        Item2c,\n        Item2d,\n        Item2e,\n        Item2f,\n        Item30,\n        Item31,\n        Item32,\n        Item33,\n        Item34,\n        Item35,\n        Item36,\n        Item37,\n        Item38,\n        Item39,\n        Item3a,\n        Item3b,\n        Item3c,\n        Item3d,\n        Item3e,\n        Item3f,\n        Item40,\n        Item41,\n        Item42,\n        Item43,\n        Item44,\n        Item45,\n        Item46,\n        Item47,\n        Item48,\n        Item49,\n        Item4a,\n        Item4b,\n        Item4c,\n        Item4d,\n        Item4e,\n        Item4f,\n        Item50,\n        Item51,\n        Item52,\n        Item53,\n        Item54,\n        Item55,\n        Item56,\n        Item57,\n        Item58,\n        Item59,\n        Item5a,\n        Item5b,\n        Item5c,\n        Item5d,\n        Item5e,\n        Item5f,\n        Item60,\n        Item61,\n        Item62,\n        Item63,\n        Item64,\n        Item65,\n        Item66,\n        Item67,\n        Item68,\n        Item69,\n        Item6a,\n        Item6b,\n        Item6c,\n        Item6d,\n        Item6e,\n        Item6f,\n        Item70,\n        Item71,\n        Item72,\n        Item73,\n        Item74,\n        Item75,\n        Item76,\n        Item77,\n        Item78,\n        Item79,\n        Item7a,\n        Item7b,\n        Item7c,\n        Item7d,\n        Item7e,\n        Item7f,\n        Item80,\n        Item81,\n        Item82,\n        Item83,\n        Item84,\n        Item85,\n        Item86,\n        Item87,\n        Item88,\n        Item89,\n        Item8a,\n        Item8b,\n        Item8c,\n        Item8d,\n        Item8e,\n        Item8f,\n        Item90,\n        Item91,\n        Item92,\n        Item93,\n        Item94,\n        Item95,\n        Item96,\n        Item97,\n        Item98,\n        Item99,\n        Item9a,\n        Item9b,\n        Item9c,\n        Item9d,\n        Item9e,\n        Item9f,\n        Itema0,\n        Itema1,\n        Itema2,\n        Itema3,\n        Itema4,\n        Itema5,\n        Itema6,\n        Itema7,\n        Itema8,\n        Itema9,\n        Itemaa,\n        Itemab,\n        Itemac,\n        Itemad,\n        Itemae,\n        Itemaf,\n        Itemb0,\n        Itemb1,\n        Itemb2,\n        Itemb3,\n        Itemb4,\n        Itemb5,\n        Itemb6,\n        Itemb7,\n        Itemb8,\n        Itemb9,\n        Itemba,\n        Itembb,\n        Itembc,\n        Itembd,\n        Itembe,\n        Itembf,\n        Itemc0,\n        Itemc1,\n        Itemc2,\n        Itemc3,\n        Itemc4,\n        Itemc5,\n        Itemc6,\n        Itemc7,\n        Itemc8,\n        Itemc9,\n        Itemca,\n        Itemcb,\n        Itemcc,\n        Itemcd,\n        Itemce,\n        Itemcf,\n        Itemd0,\n        Itemd1,\n        Itemd2,\n        Itemd3,\n        Itemd4,\n        Itemd5,\n        Itemd6,\n        Itemd7,\n        Itemd8,\n        Itemd9,\n        Itemda,\n        Itemdb,\n        Itemdc,\n        Itemdd,\n        Itemde,\n        Itemdf,\n        Iteme0,\n        Iteme1,\n        Iteme2,\n        Iteme3,\n        Iteme4,\n        Iteme5,\n        Iteme6,\n        Iteme7,\n        Iteme8,\n        Iteme9,\n        Itemea,\n        Itemeb,\n        Itemec,\n        Itemed,\n        Itemee,\n        Itemef,\n        Itemf0,\n        Itemf1,\n        Itemf2,\n        Itemf3,\n        Itemf4,\n        Itemf5,\n        Itemf6,\n        Itemf7,\n        Itemf8,\n        Itemf9,\n        Itemfa,\n        Itemfb,\n        Itemfc,\n        Itemfd,\n        Itemfe,\n        Itemff,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/StoryFlagType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum StoryFlagType\n    {\n        [Info(\"Scala ad Caelum\")] gameflow_BT,\n        [Info(\"San Fransokyo\")] gameflow_BX,\n        [Info(\"Caribbean\")] gameflow_CA,\n        [Info(\"Caribbean - Chart last access\")] gameflow_CA_chart_last_access,\n        [Info(\"Caribbean - Ship ride type\")] gameflow_CA_ship_ride_type,\n        [Info(\"Caribbean - Port Royal search\")] gameflow_CA_Sub_Portroyal_Search,\n        [Info(\"World CS (unused)\")] gameflow_CS,\n        [Info(\"Destiny Island\")] gameflow_DI,\n        [Info(\"Land of Departure\")] gameflow_DP,\n        [Info(\"Dark World\")] gameflow_DW,\n        [Info(\"Dark World (unused)\")] gameflow_DW_Sub_INT,\n        [Info(\"Final World\")] gameflow_EW,\n        [Info(\"Final World - Test\")] gameflow_EW_Sub_TESTB,\n        [Info(\"Final World - Dive\")] gameflow_EW_MISSION,\n        [Info(\"Final World - Kingdom of Corona\")] gameflow_EW_MISSION_RA,\n        [Info(\"Final World - Monstropolis\")] gameflow_EW_MISSION_MI,\n        [Info(\"Final World - Toy Box\")] gameflow_EW_MISSION_TS,\n        [Info(\"Final World - Caribbean\")] gameflow_EW_MISSION_CA,\n        [Info(\"Final World - Frozen\")] gameflow_EW_MISSION_FZ,\n        [Info(\"System (unused)\")] gameflow_EX,\n        [Info(\"Arendelle\")] gameflow_FZ,\n        [Info(\"Arendelle - Minigame\")] gameflow_FZ_Sub_SLIDEMISSION,\n        [Info(\"Gummiship\")] gameflow_GM,\n        [Info(\"Gummiship - Area 1\")] gameflow_GM_01,\n        [Info(\"Gummiship - Area 2\")] gameflow_GM_02,\n        [Info(\"Gummiship - Area 3A\")] gameflow_GM_03,\n        [Info(\"Gummiship - Area 3B\")] gameflow_GM_03_SUB,\n        [Info(\"Gummiship - System\")] gameflow_GM_SYS,\n        [Info(\"Gummiship - Level up\")] gameflow_GM_SYS_LEVELUP,\n        [Info(\"Olympus\")] gameflow_HE,\n        [Info(\"Olympus  #2\")] gameflow_HE_Sub_HeraculesBoy,\n        [Info(\"Keyblade Graveyard\")] gameflow_KG,\n        [Info(\"KG - Dark Riku, Xigbar\")] gameflow_KG_13_A,\n        [Info(\"KG - Luxord, Marluxia, Larxene\")] gameflow_KG_13_B,\n        [Info(\"KG - Vanitas, Terra-Xehanort\")] gameflow_KG_13_C,\n        [Info(\"KG - Xion, Saix\")] gameflow_KG_13_D,\n        [Info(\"Monstropolis\")] gameflow_MI,\n        [Info(\"Monstropolis (unused)\")] gameflow_MI_Sub_INT,\n        [Info(\"100 Acre Wood\")] gameflow_PO,\n        [Info(\"Kingdom of Corona\")] gameflow_RA,\n        [Info(\"Kingdom of Corona - Dandelion\")] gameflow_RA_Dandelion,\n        [Info(\"Kingdom of Corona - Rabbit\")] gameflow_RA_Rabbit,\n        [Info(\"Kingdom of Corona - Rainbow\")] gameflow_RA_Rainbow,\n        [Info(\"Kingdom of Corona - Bird\")] gameflow_RA_Bird,\n        [Info(\"Radiant Garden\")] gameflow_RG,\n        [Info(\"Secret Forest\")] gameflow_SF,\n        [Info(\"Toy Box\")] gameflow_TS,\n        [Info(\"Toy Box - Minigame\")] gameflow_TS_Sub_GAM1,\n        [Info(\"Twilight Town\")] gameflow_TT,\n        [Info(\"Twilight Town - Winnie the Pooh\")] gameflow_TT_PO,\n        [Info(\"Twilight Town - Remy\")] gameflow_TT_Remy,\n        [Info(\"World map - Olympus\")] gameflow_WM_WORLD_HE,\n        [Info(\"World map - Twilight Town\")] gameflow_WM_WORLD_TT,\n        [Info(\"World map - Kingdom of Corona\")] gameflow_WM_WORLD_RA,\n        [Info(\"World map - Toy Story\")] gameflow_WM_WORLD_TS,\n        [Info(\"World map - Monstropolis\")] gameflow_WM_WORLD_MI,\n        [Info(\"World map - Arendelle\")] gameflow_WM_WORLD_FZ,\n        [Info(\"World map - Caribbean\")] gameflow_WM_WORLD_CA,\n        [Info(\"World map - San Fransokyo\")] gameflow_WM_WORLD_BX,\n        [Info(\"World map - Keyblade Graveyard\")] gameflow_WM_WORLD_KG,\n        [Info(\"Game battle level\")] global_GameBattleLV,\n        [Info(\"Game shop level\")] global_GameShopLV,\n        [Info(\"The Mysterious Tower\")] gameflow_YT,\n        [Info(\"Scala ad Caelum (DLC) main map\")] gameflow_BT_DLC,\n        [Info(\"Scala ad Caelum (DLC) second map\")] gameflow_BT_DLC_07_BT_01,\n        [Info(\"Scala ad Caelum (DLC) Monument\")] gim_BT_DLC_monument,\n        [Info(\"Keyblade Graveyard (DLC)\")] gameflow_KG_DLC,\n        [Info(\"KG (DLC) - Dark Riku, Xigbar\")] gameflow_KG_DLC_13_A,\n        [Info(\"KG (DLC) - Luxord, Marluxia, Larxene\")] gameflow_KG_DLC_13_B,\n        [Info(\"KG (DLC) - Vanitas, Terra-Xehanort\")] gameflow_KG_DLC_13_C,\n        [Info(\"KG (DLC) - Xion, Saix\")] gameflow_KG_DLC_13_D,\n        [Info(\"KG (DLC) Character Select 1\")] gameflow_KG_DLC_05_AREA_A_CHARSEL,\n        [Info(\"KG (DLC) Character Select 2\")] gameflow_KG_DLC_05_AREA_B_CHARSEL,\n        [Info(\"KG (DLC) Character Select 3\")] gameflow_KG_DLC_05_AREA_C_CHARSEL,\n        [Info(\"KG (DLC) Character Select 4\")] gameflow_KG_DLC_05_AREA_D_CHARSEL,\n        [Info(\"Keyblade Graveyard (DLC) Last fight\")] gameflow_KG_DLC_06_LAST_CHARSEL,\n        [Info(\"Radiant Garden (DLC)\")] gameflow_RG_DLC,\n        [Info(\"Yozora Fight\")] gameflow_SS_DLC,\n        [Info(\"Yozora Fight - Bad ending\")] gameflow_SS_DLC_Sub_BadEnd,\n        [Info(\"Yozora Fight - True ending\")] gameflow_SS_DLC_Sub_TrueEnd,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/StoryLabelType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nnamespace KHSave.Lib3.Types\n{\n    public enum StoryLabelTypeBt\n    {\n        BT_INIT = 0,\n        BT_EVENT_bt901 = 100,\n        BT_EVENT_bt902 = 200,\n        BT_BATTLE_REPLICA = 210,\n        BT_EVENT_bt903 = 220,\n        BT_EVENT_bt904 = 230,\n        BT_EVENT_RTEV_ms020s = 300,\n        BT_BATTLE_ARMOR_01 = 310,\n        BT_EVENT_RTEV_ms020e = 320,\n        BT_EVENT_RTEV_ms030s = 400,\n        BT_BATTLE_ARMOR_02 = 410,\n        BT_EVENT_RTEV_ms030e = 420,\n        BT_EVENT_RTEV_ms040s = 500,\n        BT_BATTLE_ARMOR_03 = 510,\n        BT_EVENT_bt905 = 600,\n        BT_BATTLE_MASTER_01 = 610,\n        BT_EVENT_RTEV_ms060 = 700,\n        BT_BATTLE_MASTER_02 = 710,\n        BT_EVENT_bt906 = 800,\n        BT_EVENT_bt907 = 810,\n        BT_EVENT_bt908 = 820,\n        BT_END = 9999,\n    }\n\n    public enum StoryLabelTypeBx\n    {\n        BX_INIT = 0,\n        BX_WORLD_VISIT1 = 10,\n        BX_BRIDGE_MISSION1 = 20,\n        BX_BRIDGE_RTEV1 = 30,\n        BX_BRIDGE_MISSION2 = 40,\n        BX_BRIDGE_RTEV2 = 50,\n        BX_BRIDGE_MISSION3 = 60,\n        BX_GARAGE_EVENT1 = 100,\n        BX_CENTRAL_RTEV1 = 200,\n        BX_CENTRAL_MISSON1 = 210,\n        BX_CENTRAL_EVENT1 = 220,\n        BX_GARAGE_EVENT2 = 300,\n        BX_CENTRAL_RTEV2 = 400,\n        BX_CENTRAL_MISSON2 = 410,\n        BX_CENTRAL_RTEV2_2 = 412,\n        BX_CENTRAL_MISSON2_2 = 415,\n        BX_CENTRAL_RTEV3 = 420,\n        BX_CENTRAL_BATTLE1 = 430,\n        BX_CENTRAL_EVENT2 = 440,\n        BX_BRIDGE_EVENT1 = 500,\n        BX_CENTRAL_EVENT3 = 600,\n        BX_CENTRAL_RTEV4 = 610,\n        BX_CENTRAL_BATTLE2 = 620,\n        BX_CENTRAL_EVENT4 = 630,\n        BX_CENTRAL_MISSON3 = 640,\n        BX_CENTRAL_EVENT5 = 650,\n        BX_CENTRAL_BATTLE3 = 660,\n        BX_CENTRAL_EVENT6 = 670,\n        BX_GARAGE_EVENT3 = 700,\n        BX_GARAGE_EVENT3b = 710,\n        BX_CENTRAL_EVENT7 = 800,\n        BX_CENTRAL_BATTLE4 = 810,\n        BX_CENTRAL_EVENT7_2 = 811,\n        BX_CENTRAL_BATTLE5 = 812,\n        BX_CENTRAL_EVENT8 = 820,\n        BX_GARAGE_EVENT4 = 900,\n        BX_END = 9999,\n        BX_END_DAY = 10000,\n    }\n\n    public enum StoryLabelTypeCa\n    {\n        CA_INIT = 0,\n        CA_WORLD_VISIT1 = 100,\n        CA_WORLD_VISIT2 = 200,\n        CA_DAVY_JONES_ROCKER_MISSION_CHASE = 300,\n        CA_DAVY_JONES_ROCKER_MISSION_CHASE_BOSS = 350,\n        CA_WORLDEND_EVENT1 = 400,\n        CA_WORLDEND_SHIP_TUTORIAL = 450,\n        CA_WORLDEND_SHIPBATTLE = 500,\n        CA_WORLDEND_EVENT2 = 1000,\n        CA_WORLDEND_EVENT3 = 1100,\n        CA_SEA_EVENT1 = 1200,\n        CA_SEA_BATTLE_FLYING = 1300,\n        CA_SEA_EVENT2A = 1400,\n        CA_SEA_EVENT2B = 1500,\n        CA_SEA_EVENT2C = 1600,\n        CA_ISLAND_EVENT1 = 2000,\n        CA_ISLAND_EVENT2 = 2100,\n        CA_ISLAND_BATTLE_BIGFISH = 2200,\n        CA_ISLAND_EVENT3 = 2300,\n        CA_ISLAND_EVENT4 = 2400,\n        CA_SEA_EVENT3 = 3000,\n        CA_SEA_MISSION_SHIPRACE = 3100,\n        CA_SEA_EVENT4 = 3200,\n        CA_SEA_BATTLE_SHIP1 = 3300,\n        CA_SEA_BATTLE_SHIPBOARD = 3400,\n        CA_PORTROYAL_EVENT1 = 3600,\n        CA_PORTROYAL_MISSION_CLEAR = 3700,\n        CA_PORTROYAL_EVENT2 = 4000,\n        CA_PORTROYAL_EVENT3 = 4100,\n        CA_SEA_WATCH_DESTINATION = 4150,\n        CA_SEA_EVENT6 = 4200,\n        CA_SEA_BATTLE_SHIP2 = 4300,\n        CA_SEA_EVENT7 = 4400,\n        CA_MAELSTROM_EVENT1 = 5000,\n        CA_MAELSTROM_BATTLE1 = 5100,\n        CA_MAELSTROM_EVENT2 = 5200,\n        CA_MAELSTROM_BATTLE2 = 5300,\n        CA_MAELSTROM_EVENT3 = 5400,\n        CA_END = 9999,\n    }\n\n    public enum StoryLabelTypeCaChartLastAccess\n    {\n        CA_chart_last_access_01 = 100,\n        CA_chart_last_access_02 = 200,\n        CA_chart_last_access_03 = 300,\n        CA_chart_last_access_04 = 400,\n        CA_chart_last_access_05 = 500,\n        CA_chart_last_access_06 = 600,\n        CA_chart_last_access_07 = 700,\n        CA_chart_last_access_08 = 800,\n        CA_chart_last_access_09 = 900,\n        CA_chart_last_access_10 = 1000,\n        CA_chart_last_access_11 = 1100,\n        CA_chart_last_access_12 = 1200,\n        CA_chart_last_access_13 = 1300,\n    }\n\n    public enum StoryLabelTypeCaShipRide\n    {\n        CA_ship_ride_type_01 = 100,\n        CA_ship_ride_type_02 = 200,\n    }\n\n    public enum StoryLabelTypeCaPortroyalSearch\n    {\n        CA_Sub_Portroyal_Search_STEP_01 = 1000,\n        CA_Sub_Portroyal_Search_STEP_02 = 2000,\n        CA_Sub_Portroyal_Search_STEP_03 = 3000,\n        CA_Sub_Portroyal_Search_STEP_04 = 4000,\n        CA_Sub_Portroyal_Search_STEP_05 = 5000,\n    }\n\n    public enum StoryLabelTypeCs\n    {\n        CS_INIT = 0,\n        CS_EVENT_10 = 1000,\n        CS_MISSION_10 = 1010,\n        CS_EVENT_20 = 1020,\n        CS_MISSION_20 = 1030,\n        CS_EVENT_30 = 1040,\n        CS_EVENT_40 = 2000,\n        CS_MISSION_30 = 2010,\n        CS_EVENT_50 = 2020,\n        CS_EVENT_60 = 3000,\n        CS_MISSION_40 = 3010,\n        CS_EVENT_70 = 3020,\n        CS_END = 9999,\n    }\n\n    public enum StoryLabelTypeDi\n    {\n        DI_INIT = 0,\n        DI_EVENT1 = 10,\n        DI_EVENT2 = 100,\n        DI_EVENT3 = 200,\n        DI_EVENT4 = 300,\n        DI_END = 9999,\n    }\n\n    public enum StoryLabelTypeDp\n    {\n        DP_INIT = 0,\n        DP_EVENT1 = 10,\n        DP_EVENT2 = 100,\n        DP_EVENT3 = 200,\n        DP_BATTLE_1 = 300,\n        DP_EVENT4 = 400,\n        DP_EVENT5 = 500,\n        DP_EVENT6 = 600,\n        DP_END = 9999,\n    }\n\n    public enum StoryLabelTypeDw\n    {\n        DW_INIT = 0,\n        DW_EVENT1 = 10,\n        DW_EVENT2 = 20,\n        DW_BATTLE_TOWER = 30,\n        DW_EVENT3 = 100,\n        DW_EVENT4 = 200,\n        DW_EVENT5 = 300,\n        DW_EVENT6 = 400,\n        DW_BATTLE_AntiAQUA_RIKU = 500,\n        DW_EVENT7 = 600,\n        DW_BATTLE_AntiAQUA_SORA = 700,\n        DW_EVENT8 = 800,\n        DW_END = 9999,\n    }\n\n    public enum StoryLabelTypeEw\n    {\n        EW_INIT = 0,\n        EW_BASE_TUTORIAL = 1000,\n        EW_FIRST_CHOICE1 = 1100,\n        EW_FIRST_EVENT1 = 1200,\n        EW_FIRST_QUESTION1 = 1300,\n        EW_FIRST_EVENT2 = 1400,\n        EW_FIRST_QUESTION2 = 1500,\n        EW_FIRST_EVENT3 = 1600,\n        EW_FIRST_EVENT4 = 2000,\n        EW_ACTION_TUTORIAL = 2100,\n        EW_FIRST_EVENT5 = 2300,\n        EW_SECOND_EVENT1 = 5000,\n        EW_SECOND_MISSION1 = 5100,\n        EW_END = 9999,\n    }\n\n    public enum StoryLabelTypeEx\n    { }\n\n    public enum StoryLabelTypeEwSub\n    {\n        EW_Sub_INT = 0,\n        EW_Sub_EVENT1 = 10,\n        EW_Sub_EVENT2 = 20,\n        EW_Sub_EVENT3 = 30,\n        EW_Sub_EVENT4 = 40,\n    }\n\n    public enum StoryLabelTypeEwMission\n    {\n        EW_MISSION_INIT = 0,\n        EW_MISSION_EVENT_01 = 100,\n        EW_MISSION_EVENT_02 = 110,\n        EW_MISSION_EVENT_02_2 = 115,\n        EW_MISSION_EVENT_03 = 120,\n        EW_MISSION_BATTLE_HE = 130,\n        EW_MISSION_EVENT_04 = 140,\n        EW_MISSION_EVENT_05 = 200,\n        EW_MISSION_EVENT_06 = 300,\n        EW_MISSION_EVENT_07 = 310,\n        EW_MISSION_BATTLE_BX = 320,\n        EW_MISSION_EVENT_08 = 330,\n        EW_MISSION_EVENT_09 = 340,\n        EW_MISSION_END = 9999,\n    }\n\n    public enum StoryLabelTypeEwRa\n    {\n        EW_MISSION_RA_START = 0,\n        EW_MISSION_RA_EVENT_01 = 100,\n        EW_MISSION_RA_BATTLE_01 = 200,\n        EW_MISSION_RA_EVENT_02 = 300,\n        EW_MISSION_RA_END = 9999,\n    }\n\n    public enum StoryLabelTypeEwMi\n    {\n        EW_MISSION_MI_START = 0,\n        EW_MISSION_MI_EVENT_01 = 100,\n        EW_MISSION_MI_BATTLE_01 = 200,\n        EW_MISSION_MI_EVENT_02 = 300,\n        EW_MISSION_MI_END = 9999,\n    }\n\n    public enum StoryLabelTypeEwTs\n    {\n        EW_MISSION_TS_START = 0,\n        EW_MISSION_TS_EVENT_01 = 100,\n        EW_MISSION_TS_BATTLE_01 = 200,\n        EW_MISSION_TS_EVENT_02 = 300,\n        EW_MISSION_TS_END = 9999,\n    }\n\n    public enum StoryLabelTypeEwCa\n    {\n        EW_MISSION_CA_START = 0,\n        EW_MISSION_CA_EVENT_01 = 100,\n        EW_MISSION_CA_BATTLE_01 = 200,\n        EW_MISSION_CA_EVENT_02 = 300,\n        EW_MISSION_CA_END = 9999,\n    }\n\n    public enum StoryLabelTypeEwFz\n    {\n        EW_MISSION_FZ_START = 0,\n        EW_MISSION_FZ_EVENT_01 = 100,\n        EW_MISSION_FZ_BATTLE_01 = 200,\n        EW_MISSION_FZ_EVENT_02 = 300,\n        EW_MISSION_FZ_END = 9999,\n    }\n\n    public enum StoryLabelTypeFz\n    {\n        FZ_INIT = 0,\n        FZ_WORLD_VISIT1 = 10,\n        FZ_MOUNTAIN_RTEV1 = 1100,\n        FZ_MOUNTAIN_EVENT1 = 1110,\n        FZ_MOUNTAIN_BATTLE1 = 1120,\n        FZ_MOUNTAIN_EVENT2 = 1130,\n        FZ_LABYRINTH_EVENT1 = 2000,\n        FZ_ICICLE_AREA_C_EVENT1 = 2010,\n        FZ_ICICLE_AREA_C_BATTLE1 = 2020,\n        FZ_ICICLE_AREA_C_EVENT2 = 2030,\n        FZ_ICICLE_AREA_E_EVENT1 = 2110,\n        FZ_ICICLE_AREA_E_BATTLE1 = 2120,\n        FZ_ICICLE_AREA_E_EVENT2 = 2130,\n        FZ_ICICLE_AREA_F_EVENT1 = 2210,\n        FZ_ICICLE_AREA_F_BATTLE1 = 2220,\n        FZ_ICICLE_AREA_F_EVENT2 = 2230,\n        FZ_ICICLE_AREA_H_EVENT1 = 2310,\n        FZ_ICICLE_AREA_H_BATTLE1 = 2320,\n        FZ_ICICLE_AREA_H_EVENT2 = 2330,\n        FZ_LABYRINTH_WORMHOLE = 2500,\n        FZ_LABYRINTH_EVENT2 = 3300,\n        FZ_CASTLE_EVENT1 = 3310,\n        FZ_MOUNTAIN_EVENT3 = 4400,\n        FZ_MOUNTAIN_MISSION1 = 4410,\n        FZ_STEEP_RTEV1 = 4420,\n        FZ_MOUNTAIN_BATTLE2 = 4430,\n        FZ_MOUNTAIN_EVENT4 = 4440,\n        FZ_MOUNTAIN_EVENT5 = 5500,\n        FZ_MOUNTAIN_EVENT6 = 5510,\n        FZ_MOUNTAIN_EVENT7 = 5520,\n        FZ_MOUNTAIN_EVENT8 = 5530,\n        FZ_MOUNTAIN_MISSION2 = 5540,\n        FZ_MOUNTAIN_EVENT9 = 5550,\n        FZ_MOUNTAIN_BATTLE3 = 5560,\n        FZ_MOUNTAIN_EVENT10 = 5570,\n        FZ_CASTLE_EVENT2 = 5580,\n        FZ_MOUNTAIN_BATTLE4 = 6600,\n        FZ_MOUNTAIN_EVENT11 = 6610,\n        FZ_MOUNTAIN_EVENT12 = 7700,\n        FZ_MOUNTAIN_EVENT13 = 7710,\n        FZ_MOUNTAIN_EVENT14 = 7720,\n        FZ_MOUNTAIN_MISSION3 = 7730,\n        FZ_MOUNTAIN_RTEV2 = 7750,\n        FZ_SEA_EVENT1 = 8800,\n        FZ_SEA_BATTLE1 = 8810,\n        FZ_SEA_EVENT2 = 8820,\n        FZ_END = 9999,\n    }\n\n    public enum StoryLabelTypeFzMinigame\n    {\n        FZ_Sub_SLIDEMISSION_INIT = 0,\n        FZ_Sub_SLIDEMISSION_CHASE = 2000,\n        FZ_Sub_SLIDEMISSION_SLIDE1 = 2100,\n        FZ_Sub_SLIDEMISSION_SLIDE2 = 2110,\n        FZ_Sub_SLIDEMISSION_SLIDE3 = 2120,\n        FZ_Sub_SLIDEMISSION_END = 2999,\n    }\n\n    public enum StoryLabelTypeGm\n    {\n        GM_INIT = 0,\n        GM_EVENT1 = 10,\n        GM_EVENT2 = 100,\n        GM_EVENT3 = 200,\n        GM_EVENT4 = 300,\n        GM_EVENT5 = 400,\n        GM_EVENT6 = 500,\n        GM_EVENT7 = 600,\n        GM_END = 9999,\n    }\n\n    public enum StoryLabelTypeGm1\n    {\n        GM_01_INIT = 0,\n        GM_01_END = 9999,\n    }\n\n    public enum StoryLabelTypeGm2\n    {\n        GM_02_INIT = 0,\n        GM_02_END = 9999,\n    }\n\n    public enum StoryLabelTypeGm3\n    {\n        GM_03_INIT = 0,\n        GM_03_VISIT1 = 10,\n        GM_03_BOSS_01_START = 100,\n        GM_03_BOSS_01_END = 200,\n        GM_03_END = 999,\n        GM_03_VISIT10 = 1010,\n    }\n\n    public enum StoryLabelTypeGm3sub\n    {\n        GM_03_SUB_INIT = 0,\n        GM_03_SUB_START = 10,\n        GM_03_SUB_CAMERA_01 = 100,\n        GM_03_SUB_ARENA_02 = 110,\n        GM_03_SUB_ARENA_03 = 120,\n        GM_03_SUB_CAMERA_10 = 200,\n        GM_03_SUB_BOSS = 500,\n        GM_03_SUB_END = 9999,\n    }\n\n    public enum StoryLabelTypeGmSys\n    {\n        GM_SYS_INIT = 0,\n        GM_SYS_EVENT1 = 10,\n        GM_SYS_EVENT2 = 100,\n        GM_SYS_EVENT3 = 200,\n        GM_SYS_EVENT4 = 300,\n        GM_SYS_EVENT5 = 400,\n        GM_SYS_EVENT6 = 500,\n        GM_SYS_END = 9999,\n    }\n\n    public enum StoryLabelTypeGmLevelUp\n    {\n        GM_SYS_LEVELUP_STEP_01 = 100,\n        GM_SYS_LEVELUP_STEP_02 = 200,\n    }\n\n    public enum StoryLabelTypeHe\n    {\n        HE_INIT = 0,\n        HE_OLYMPUS_OPENING_EVENT = 2,\n        HE_OLYMPUS_VISIT1_1 = 5,\n        HE_OLYMPUS_RTEV1_1 = 10,\n        HE_TUTO_MAGIC_PLAY = 11,\n        HE_OLYMPUS_BATTLE1_1 = 15,\n        HE_OLYMPUS_RTEV1_2 = 20,\n        HE_TUTO_FREERUN_PLAY = 21,\n        HE_OLYMPUS_EVENT1_1 = 25,\n        HE_THEBES_VISIT1 = 30,\n        HE_THEBES_EVENT1 = 40,\n        HE_TUTO_FREEFLOW_PLAY = 41,\n        HE_THEBES_BATTLE1 = 50,\n        HE_THEBES_EVENT2 = 60,\n        HE_THEBES_RTEV1 = 100,\n        HE_THEBES_BATTLE1_5 = 110,\n        HE_THEBES_EVENT2_5 = 120,\n        HE_THEBES_RTEV3 = 300,\n        HE_THEBES_EVENT4 = 400,\n        HE_THEBES_BATTLE2 = 410,\n        HE_THEBES_EVENT5 = 420,\n        HE_THEBES_EVENT6 = 500,\n        HE_TUTO_FORMCHANGE_PLAY = 501,\n        HE_THEBES_BATTLE3 = 510,\n        HE_THEBES_EVENT7 = 520,\n        HE_THEBES_RTEV4 = 530,\n        HE_TUTO_ATTRACTION_PLAY = 531,\n        HE_THEBES_BATTLE4 = 540,\n        HE_THEBES_EVENT8 = 600,\n        HE_OLYMPUS_EVENT1_2 = 910,\n        HE_OLYMPUS_EVENT1 = 1000,\n        HE_OLYMPUS_RTEV1 = 1010,\n        HE_OLYMPUS_RTEV1_5 = 1015,\n        HE_OLYMPUS_RTEV2 = 1100,\n        HE_OLYMPUS_BATTLE1 = 1110,\n        HE_OLYMPUS_EVENT2 = 1120,\n        HE_OLYMPUS_EVENT3 = 1200,\n        HE_HEAVENLY_RTEV1 = 2000,\n        HE_HEAVENLY_BATTLE1 = 2010,\n        HE_TUTO_SHOOTFLOW_PLAY = 2011,\n        HE_HEAVENLY_RTEV2 = 2100,\n        HE_TUTO_ATHLETICFLOW_PLAY = 2101,\n        HE_HEAVENLY_EVENT1 = 2200,\n        HE_BOSS_BATTLE_01 = 2210,\n        HE_HEAVENLY_RTEV3 = 2215,\n        HE_BOSS_BATTLE_02 = 2216,\n        HE_HEAVENLY_EVENT2 = 2220,\n        HE_OLYMPUS_EVENT4 = 2230,\n        HE_THEBES_EVENT9 = 2240,\n        HE_END = 9999,\n    }\n\n    public enum StoryLabelTypeHeSub\n    {\n        HE_Sub_HeraculesBoy_Init = 0,\n        HE_Sub_HeraculesBoy_Start = 100,\n        HE_Sub_HeraculesBoy_Item_01 = 200,\n        HE_Sub_HeraculesBoy_Item_02 = 300,\n        HE_Sub_HeraculesBoy_Item_03 = 400,\n        HE_Sub_HeraculesBoy_Item_04 = 500,\n        HE_Sub_HeraculesBoy_Item_05 = 600,\n        HE_Sub_HeraculesBoy_End = 9999,\n    }\n\n    public enum StoryLabelTypeKg\n    {\n        KG_INTERVAL_00 = 0,\n        KG_INTERVAL_01 = 10,\n        KG_INTERVAL_02 = 20,\n        KG_INIT = 50,\n        KG_WORLD_VISIT = 100,\n        KG_01_BATTLE1 = 200,\n        KG_01_CS_KG702 = 500,\n        KG_END = 9999,\n        KG_01_CS_KG801 = 10000,\n        KG_01_CS_KG802 = 10100,\n        KG_01_CS_KG851 = 10500,\n        KG_01_CS_KG851b = 11000,\n        KG_01_CS_KG852 = 11100,\n        KG_01_BATTLE2 = 11300,\n        KG_01_CS_KG852b = 11400,\n        KG_01_BATTLE3 = 11410,\n        KG_01_CS_KG853 = 11420,\n        KG_50_CS_KG854 = 11500,\n        KG_02_CS_KG855 = 11600,\n        KG_02_BATTLE_AB = 13000,\n        KG_02_LABYRINTH_END = 13050,\n        KG_02_RTEV_CD = 13100,\n        KG_02_BATTLE_CD = 13500,\n        KG_02_EVENT_E_START = 14000,\n        KG_02_BATTLE_E_PHASE_01 = 14100,\n        KG_02_EVENT_E_PHASE_01_END = 14200,\n        KG_02_BATTLE_E_PHASE_02 = 14300,\n        KG_02_EVENT_E_PHASE_02_END = 14400,\n        KG_02_BATTLE_E_PHASE_03 = 14500,\n        KG_02_EVENT_E_PHASE_03_END = 14600,\n        KG_02_EVENT_E_END = 14700,\n        KG_END2 = 99999,\n    }\n\n    public enum StoryLabelTypeKgA\n    {\n        KG_02_EVENT_A_INIT = 0,\n        KG_02_EVENT_A_START = 1000,\n        KG_02_BATTLE_A_PHASE_01 = 1100,\n        KG_02_EVNET_A_PHASE_01_END = 1200,\n        KG_02_BATTLE_A_PHASE_02 = 1300,\n        KG_02_EVNET_A_PHASE_02_END = 1400,\n        KG_02_BATTLE_A_PHASE_03 = 1500,\n        KG_02_EVNET_A_PHASE_03_END = 1600,\n        KG_02_EVENT_A_END = 9999,\n    }\n\n    public enum StoryLabelTypeKgB\n    {\n        KG_02_EVENT_B_INIT = 0,\n        KG_02_EVENT_B_START = 1000,\n        KG_02_BATTLE_B_PHASE_01 = 1100,\n        KG_02_EVENT_B_PHASE_01_END = 1200,\n        KG_02_BATTLE_B_PHASE_02 = 1300,\n        KG_02_EVENT_B_PHASE_02_END = 1400,\n        KG_02_BATTLE_B_PHASE_03 = 1500,\n        KG_02_EVENT_B_PHASE_03_END = 1600,\n        KG_02_BATTLE_B_PHASE_04 = 1700,\n        KG_02_EVENT_B_PHASE_04_END = 1800,\n        KG_02_EVENT_B_END = 9999,\n    }\n\n    public enum StoryLabelTypeKgC\n    {\n        KG_02_EVENT_C_INIT = 0,\n        KG_02_EVENT_C_START = 1000,\n        KG_02_BATTLE_C_PHASE_01 = 1100,\n        KG_02_EVENT_C_PHASE_01_END = 1200,\n        KG_02_BATTLE_C_PHASE_02 = 1300,\n        KG_02_EVENT_C_PHASE_02_END = 1400,\n        KG_02_EVENT_C_END = 9999,\n    }\n\n    public enum StoryLabelTypeKgD\n    {\n        KG_02_EVENT_D_INIT = 0,\n        KG_02_EVENT_D_START = 1000,\n        KG_02_BATTLE_D_PHASE1_01 = 1100,\n        KG_02_EVENT_D_PHASE_01_END = 1200,\n        KG_02_BATTLE_D_PHASE1_02 = 1300,\n        KG_02_EVENT_D_PHASE_02_END = 1400,\n        KG_02_EVENT_D_END = 9999,\n    }\n\n    public enum StoryLabelTypeMi\n    {\n        MI_INIT = 0,\n        MI_WORLD_VISIT1 = 10,\n        MI_ENTRANCE_EVENT1 = 1010,\n        MI_ENTRANCE_BATTLE1 = 1020,\n        MI_ENTRANCE_EVENT2 = 1030,\n        MI_SCARE_EVENT1 = 1110,\n        MI_SCARE_BATTLE1 = 1120,\n        MI_SCARE_EVENT2 = 1130,\n        MI_SCARE_EVENT3 = 1140,\n        MI_DOOR_REAL1 = 1210,\n        MI_DOOR_MISSION1 = 1220,\n        MI_DOOR_EVENT1 = 1230,\n        MI_DOOR_MISSION2 = 1240,\n        MI_DOOR_EVENT2 = 1250,\n        MI_DOOR_REAL2 = 1251,\n        MI_DOOR_MISSION3 = 1260,\n        MI_DOOR_EVENT3 = 1270,\n        MI_FACTORY_EVENT1 = 3010,\n        MI_FACTORY_EVENT2 = 3020,\n        MI_FACTORY_MISSION1 = 3030,\n        MI_FACTORY_REAL1 = 3040,\n        MI_FACTORY_EVENT3 = 3050,\n        MI_FACTORY_LIFT = 3060,\n        MI_FACTORY_REAL2 = 3110,\n        MI_FACTORY_BATTLE1 = 3120,\n        MI_FACTORY_REAL3 = 3130,\n        MI_FACTORY_BATTLE2 = 3140,\n        MI_FACTORY_REAL4 = 3150,\n        MI_FACTORY_REAL5 = 3160,\n        MI_FACTORY_MISSION2 = 3170,\n        MI_FACTORY_REAL6 = 3180,\n        MI_FACTORY_EVENT4 = 3190,\n        MI_FACTORY_MISSION3 = 3200,\n        MI_FACTORY_EVENT5 = 3210,\n        MI_PLANT_EVENT1 = 5010,\n        MI_PLANT_EVENT2 = 5020,\n        MI_PLANT_BATTLE1 = 5030,\n        MI_PLANT_EVENT3 = 5040,\n        MI_PLANT_REAL1 = 5050,\n        MI_PLANT_BATTLE2 = 5060,\n        MI_PLANT_EVENT4 = 5070,\n        MI_PLANT_REAL2 = 5080,\n        MI_PLANT_BATTLE3 = 5090,\n        MI_PLANT_EVENT5 = 5100,\n        MI_DOORBOSS_EVENT1 = 7010,\n        MI_DOORBOSS_BATTLE1 = 7020,\n        MI_DOORBOSS_EVENT2 = 7030,\n        MI_SCARE_EVENT4 = 7040,\n        MI_ENTRANCE_EVENT3 = 7050,\n        MI_END = 9999,\n    }\n\n    public enum StoryLabelTypeMiSub\n    { }\n\n    public enum StoryLabelTypePo\n    {\n        PO_INIT = 0,\n        PO_EVENT_01 = 100,\n        PO_VEGETABLE_MINIGAME_01 = 110,\n        PO_EVENT_02 = 200,\n        PO_ORCHARD_MINIGAME_01 = 210,\n        PO_EVENT_03 = 300,\n        PO_FLOWER_MINIGAME_01 = 310,\n        PO_EVENT_04 = 400,\n        PO_END = 9999,\n    }\n\n    public enum StoryLabelTypeRa\n    {\n        RA_INIT = 0,\n        RA_WORLD_VISIT1 = 10,\n        RA_FOREST_EVENT1 = 100,\n        RA_FOREST_BATTLE1 = 110,\n        RA_FOREST_EVENT2 = 120,\n        RA_FOREST_EVENT3 = 200,\n        RA_TOWER_EVENT1 = 210,\n        RA_FOREST_EVENT4 = 220,\n        RA_FOREST_EVENT5 = 300,\n        RA_FOREST_EVENT6 = 400,\n        RA_FOREST_BATTLE2 = 410,\n        RA_TOWER_EVENT2 = 420,\n        RA_FOREST_REAL10 = 500,\n        RA_FOREST_EVENT20 = 1000,\n        RA_FOREST_BATTLE10 = 1010,\n        RA_FOREST_EVENT21 = 1020,\n        RA_FOREST_EVENT22 = 1100,\n        RA_FOREST_EVENT23 = 1200,\n        RA_FOREST_REAL22 = 2020,\n        RA_FOREST_REAL25 = 2025,\n        RA_FOREST_BATTLE20 = 2030,\n        RA_FOREST_BATTLE21 = 2031,\n        RA_FOREST_REAL30 = 2500,\n        RA_FOREST_REAL40 = 2900,\n        RA_CASTLE_EVENT1 = 3000,\n        RA_CASTLE_EVENT2 = 3100,\n        RA_CASTLE_MISSION1 = 3110,\n        RA_CASTLE_EVENT3 = 3120,\n        RA_CASTLE_BATTLE1 = 3130,\n        RA_FOREST_EVENT30 = 3140,\n        RA_TOWER_EVENT3 = 3150,\n        RA_FOREST_EVENT31 = 3160,\n        RA_FOREST_EVENT32 = 3170,\n        RA_FOREST_REAL50 = 4000,\n        RA_FOREST_BATTLE30 = 4010,\n        RA_TOWER_EVENT4 = 4020,\n        RA_TOWER_EVENT5 = 4100,\n        RA_FOREST_EVENT41 = 4110,\n        RA_FOREST_BATTLEBOSS = 4120,\n        RA_TOWER_EVENT6 = 4200,\n        RA_FOREST_EVENT42 = 4210,\n        RA_FOREST_EVENT50 = 4300,\n        RA_END = 9999,\n    }\n\n    public enum StoryLabelTypeRaDandelion\n    {\n        RA_DANDELION_INIT = 0,\n        RA_DANDELION_START = 10,\n        RA_DANDELION_END = 100,\n    }\n\n    public enum StoryLabelTypeRaRabbit\n    {\n        RA_RABBIT_INIT = 0,\n        RA_RABBIT_START = 10,\n        RA_RABBIT_FINISH = 50,\n        RA_RABBIT_END = 100,\n    }\n\n    public enum StoryLabelTypeRaRainbow\n    {\n        RA_RAINBOW_INIT = 0,\n        RA_RAINBOW_START = 10,\n        RA_RAINBOW_END = 100,\n    }\n\n    public enum StoryLabelTypeRaBird\n    {\n        RA_BIRD_INIT = 0,\n        RA_BIRD_START = 10,\n        RA_BIRD_END = 100,\n    }\n\n    public enum StoryLabelTypeRg\n    {\n        RG_INIT = 0,\n        RG_EVENT1 = 10,\n        RG_EVENT2 = 100,\n        RG_EVENT3 = 200,\n        RG_EVENT4 = 300,\n        RG_END = 9999,\n    }\n\n    public enum StoryLabelTypeSf\n    {\n        SF_INIT = 0,\n        SF_EVENT1 = 10,\n        SF_EVENT2 = 100,\n        SF_END = 9999,\n    }\n\n    public enum StoryLabelTypeTs\n    {\n        TS_INIT = 0,\n        TS_GAME_CM1 = 500,\n        TS_WORLD_VISIT1 = 1000,\n        TS_ANDY_BATTLE1 = 1010,\n        TS_ANDY_EVENT1 = 1020,\n        TS_ANDY_EVENT2 = 1030,\n        TS_ANDY_TO_TOYSHOP = 1040,\n        TS_HOLE_EVENT1 = 1500,\n        TS_HOLE_BATTLE1 = 1520,\n        TS_HOLE_EVENT2 = 1530,\n        TS_KAIJU_EVENT1 = 1600,\n        TS_KAIJU_BATTLE1 = 1610,\n        TS_KAIJU_EVENT2 = 1620,\n        TS_NUIGURUMI_EVENT1 = 1700,\n        TS_NUIGURUMI_EVENT2 = 1710,\n        TS_NUIGURUMI_EVENT3 = 1720,\n        TS_NUIGURUMI_EVENT4 = 1730,\n        TS_NUIGURUMI_BATTLE1 = 1740,\n        TS_NUIGURUMI_EVENT5 = 1750,\n        TS_BABYTOY_EVENT1 = 1800,\n        TS_BABYTOY_MISSION1 = 1810,\n        TS_BABYTOY_EVENT2 = 1820,\n        TS_HOLE_EVENT3 = 1900,\n        TS_GAME_EVENT1 = 3000,\n        TS_GAME_EVENT2 = 3010,\n        TS_GAME_MISSION1 = 3020,\n        TS_GAME_EVENT3 = 3030,\n        TS_ATHLETIC_EVENT1 = 3100,\n        TS_ATHLETIC_EVENT2 = 3200,\n        TS_ATHLETIC_EVENT3 = 3300,\n        TS_BOSS_EVENT1 = 3500,\n        TS_BOSS_BATTLE1 = 3510,\n        TS_HOLE_EVENT4 = 4000,\n        TS_END = 9999,\n    }\n\n    public enum StoryLabelTypeTsSub\n    {\n        TS_Sub_GAM1_EVENT1 = 1000,\n        TS_Sub_GAM1_EVENT2 = 1100,\n        TS_Sub_GAM1_EVENT3 = 1200,\n        TS_Sub_GAM1_EVENT4 = 1300,\n        TS_Sub_GAM1_EVENT5 = 1400,\n        TS_Sub_GAM1_EVENT6 = 1500,\n        TS_Sub_GAM1_EVENT7 = 1600,\n        TS_Sub_GAM1_EVENT8 = 1700,\n        TS_Sub_GAM1_EVENT9 = 1800,\n    }\n\n    public enum StoryLabelTypeTt\n    {\n        TT_INIT = 0,\n        TT_TRM_EVENT01 = 100,\n        TT_TRM_MISSION01 = 110,\n        TT_TRM_EVENT02 = 120,\n        TT_TRM_MISSION02 = 130,\n        TT_TRM_EVENT03 = 140,\n        TT_WODS_EVENT01 = 200,\n        TT_WODS_MISSION01 = 210,\n        TT_WODS_EVENT02 = 220,\n        TT_COMP_EVENT01 = 300,\n        TT_COMP_EVENT02 = 310,\n        TT_MANS_EVENT01 = 400,\n        TT_MANS_MISSION01 = 410,\n        TT_MANS_EVENT02 = 420,\n        TT_TRM2_EVENT01 = 500,\n        TT_TRM2_MISSION01 = 510,\n        TT_TRM2_EVENT02 = 520,\n        TT_END = 9999,\n    }\n\n    public enum StoryLabelTypeTtPo\n    {\n        TT_PO_INIT = 0,\n        TT_PO_TRM_EVENT01 = 100,\n        TT_PO_TRM_EVENT02 = 110,\n        TT_PO_END = 9999,\n    }\n\n    public enum StoryLabelTypeTtRemy\n    {\n        TT_Remy_EVENT01 = 100,\n    }\n\n    public enum StoryLabelTypeWmHe\n    {\n        WM_WORLD_HE_CLOSED = 0,\n        WM_WORLD_HE_STARTED = 1000,\n        WM_WORLD_HE_CLEARED = 2000,\n    }\n\n    public enum StoryLabelTypeWmTt\n    {\n        WM_WORLD_TT_CLOSED = 0,\n        WM_WORLD_TT_STARTED = 1000,\n        WM_WORLD_TT_CLEARED = 2000,\n    }\n\n    public enum StoryLabelTypeWmRa\n    {\n        WM_WORLD_RA_CLOSED = 0,\n        WM_WORLD_RA_STARTED = 1000,\n        WM_WORLD_RA_CLEARED = 2000,\n    }\n\n    public enum StoryLabelTypeWmTs\n    {\n        WM_WORLD_TS_CLOSED = 0,\n        WM_WORLD_TS_STARTED = 1000,\n        WM_WORLD_TS_CLEARED = 2000,\n    }\n\n    public enum StoryLabelTypeWmMi\n    {\n        WM_WORLD_MI_CLOSED = 0,\n        WM_WORLD_MI_STARTED = 1000,\n        WM_WORLD_MI_CLEARED = 2000,\n    }\n\n    public enum StoryLabelTypeWmFz\n    {\n        WM_WORLD_FZ_CLOSED = 0,\n        WM_WORLD_FZ_STARTED = 1000,\n        WM_WORLD_FZ_CLEARED = 2000,\n    }\n\n    public enum StoryLabelTypeWmCa\n    {\n        WM_WORLD_CA_CLOSED = 0,\n        WM_WORLD_CA_STARTED = 1000,\n        WM_WORLD_CA_CLEARED = 2000,\n    }\n\n    public enum StoryLabelTypeWmBx\n    {\n        WM_WORLD_BX_CLOSED = 0,\n        WM_WORLD_BX_STARTED = 1000,\n        WM_WORLD_BX_CLEARED = 2000,\n    }\n\n    public enum StoryLabelTypeWmKg\n    {\n        WM_WORLD_KG_CLOSED = 0,\n        WM_WORLD_KG_STARTED = 1000,\n        WM_WORLD_KG_CLEARED = 2000,\n    }\n\n    public enum StoryLabelTypeGameBattle\n    {\n        GLOBAL_GAMEBATTLELv_01 = 0,\n        GLOBAL_GAMEBATTLELv_02 = 1000,\n        GLOBAL_GAMEBATTLELv_03 = 2000,\n        GLOBAL_GAMEBATTLELv_04 = 3000,\n        GLOBAL_GAMEBATTLELv_05 = 4000,\n        GLOBAL_GAMEBATTLELv_06 = 5000,\n        GLOBAL_GAMEBATTLELv_07 = 6000,\n        GLOBAL_GAMEBATTLELv_08 = 7000,\n        GLOBAL_GAMEBATTLELv_09 = 8000,\n    }\n\n    public enum StoryLabelTypeGameShop\n    {\n        GLOBAL_GAMESHOPLv_01 = 0,\n        GLOBAL_GAMESHOPLv_02 = 1000,\n        GLOBAL_GAMESHOPLv_03 = 2000,\n        GLOBAL_GAMESHOPLv_04 = 3000,\n        GLOBAL_GAMESHOPLv_05 = 4000,\n        GLOBAL_GAMESHOPLv_06 = 5000,\n        GLOBAL_GAMESHOPLv_07 = 6000,\n        GLOBAL_GAMESHOPLv_END = 7000,\n    }\n\n    public enum StoryLabelTypeYt\n    {\n        YT_INIT = 0,\n        YT_EVENT1 = 10,\n        YT_EVENT2 = 100,\n        YT_EVENT3 = 200,\n        YT_EVENT4 = 300,\n        YT_EVENT5 = 400,\n        YT_END = 9999,\n    }\n\n    public enum StoryLabelTypeBtDlc8\n    {\n        BT_DLC_INIT = 0,\n        BT_DLC_08_EVENT_01 = 110,\n        BT_DLC_08_EVENT_02 = 210,\n        BT_DLC_08_BATTLE_01 = 220,\n        BT_DLC_07_MISSION_01 = 310,\n        BT_DLC_08_EVENT_03 = 410,\n        BT_DLC_08_BATTLE_02 = 420,\n        BT_DLC_08_EVENT_04 = 430,\n        BT_DLC_END = 9999,\n    }\n\n    public enum StoryLabelTypeBtDlc7\n    {\n        BT_DLC_07_BT_01_INIT = 0,\n        BT_DLC_07_BT_01_EVENT_01 = 110,\n        BT_DLC_07_BT_01_EVENT_02 = 120,\n        BT_DLC_07_BT_01_BATTLE_01 = 130,\n        BT_DLC_07_BT_01_END = 9999,\n    }\n\n    public enum StoryLabelTypeBtDlc7Monument\n    {\n        BT_DLC_07_MONUMENT_START = 0,\n        BT_DLC_07_MONUMENT_STEP01 = 110,\n        BT_DLC_07_MONUMENT_STEP02 = 120,\n        BT_DLC_07_MONUMENT_STEP03 = 130,\n    }\n\n    public enum StoryLabelTypeKgDlc\n    {\n        KG_DLC_INIT = 0,\n        KG_DLC_WORLD_VISIT = 110,\n        KG_DLC_04_EVENT_01 = 410,\n        KG_DLC_04_BATTLE_01 = 420,\n        KG_DLC_04_EVENT_02 = 430,\n        KG_DLC_04_BATTLE_02 = 440,\n        KG_DLC_04_EVENT_03 = 450,\n        KG_DLC_04_EVENT_05 = 510,\n        KG_DLC_04_EVENT_06 = 520,\n        KG_DLC_04_BATTLE_03 = 530,\n        KG_DLC_04_EVENT_07 = 540,\n        KG_DLC_06_EVENT_01 = 20100,\n        KG_DLC_06_BATTLE_01 = 21200,\n        KG_DLC_06_BATTLE_02 = 21300,\n        KG_DLC_07_BATTLE_01 = 21400,\n        KG_DLC_06_2_EVENT_01 = 22100,\n        KG_DLC_06_2_BATTLE_01 = 22200,\n        KG_DLC_06_2_BATTLE_02 = 22250,\n        KG_DLC_05_3_EVENT_01 = 22300,\n        KG_02_EVENT_E_END = 14700,\n        KG_DLC_END = 99999,\n    }\n\n    public enum StoryLabelTypeKgDlc5c\n    {\n        KG_02_EVENT_C_INIT = 0,\n        KG_02_EVENT_C_START = 1000,\n        KG_DLC_05_BATTLE_C_PHASE_0a = 1050,\n        KG_DLC_05_EVENT_C_PHASE_0a_END = 1060,\n        KG_02_BATTLE_C_PHASE_01 = 1100,\n        KG_02_EVENT_C_PHASE_01_END = 1200,\n        KG_02_BATTLE_C_PHASE_02 = 1300,\n        KG_02_EVENT_C_PHASE_02_END = 1400,\n        KG_02_EVENT_C_END = 9999,\n    }\n    public enum StoryLabelTypeKgDlc5d\n    {\n        KG_02_EVENT_D_INIT = 0,\n        KG_02_EVENT_D_START = 1000,\n        KG_DLC_05_EVENT_D_EVENT_01 = 1050,\n        KG_02_BATTLE_D_PHASE1_01 = 1100,\n        KG_02_EVENT_D_PHASE_01_END = 1200,\n        KG_DLC_05_EVENT_D_PHASE_01a_END = 1250,\n        KG_DLC_05_BATTLE_D_PHASE_0a = 1260,\n        KG_DLC_05_EVENT_D_PHASE_0a_END = 1270,\n        KG_02_BATTLE_D_PHASE1_02 = 1300,\n        KG_02_EVENT_D_PHASE_02_END = 1400,\n        KG_02_EVENT_D_END = 9999,\n    }\n    public enum StoryLabelTypeKgDlcCharSelect\n    {\n        KG_DLC_05_AREA_A_CHARSEL_01 = 0,\n        KG_DLC_05_AREA_A_CHARSEL_02 = 1,\n        KG_DLC_05_AREA_B_CHARSEL_01 = 0,\n        KG_DLC_05_AREA_B_CHARSEL_02 = 1,\n        KG_DLC_05_AREA_C_CHARSEL_01 = 0,\n        KG_DLC_05_AREA_C_CHARSEL_02 = 1,\n        KG_DLC_05_AREA_D_CHARSEL_01 = 0,\n        KG_DLC_05_AREA_D_CHARSEL_02 = 1,\n        KG_DLC_06_LAST_CHARSEL_01 = 0,\n        KG_DLC_06_LAST_CHARSEL_02 = 1,\n    }\n\n    public enum StoryLabelTypeRgDlc\n    {\n        RG_DLC_INIT = 0,\n        RG_DLC_EVENT_01 = 110,\n        RG_DLC_EVENT_02 = 120,\n        RG_DLC_MAR_EVENT_01 = 210,\n        RG_DLC_SHU_EVENT_01 = 310,\n        RG_DLC_SHU_EVENT_02 = 320,\n        RG_DLC_SHU_BATTLE_01 = 330,\n        RG_DLC_MAR2_EVENT_01 = 410,\n        RG_DLC_END = 9999,\n    }\n\n    public enum StoryLabelTypeSsDlc\n    {\n        SS_DLC_INIT = 0,\n        SS_DLC_EVENT_01 = 110,\n        SS_DLC_BATTLE_01 = 120,\n        SS_DLC_END = 9999,\n    }\n\n    public enum StoryLabelTypeSsDlcSub\n    {\n        SS_DLC_SUB_BADEND_END = 100,\n        SS_DLC_SUB_TRUEEND_END = 100,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/SyntesisType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum SynthesisType : byte\n    {\n        [Info] Empty,\n        [Synthesis(\"Blazing Shard\")] Item01,\n        Item02,\n        Item03,\n        Item04,\n        Item05,\n        Item06,\n        Item07,\n        Item08,\n        Item09,\n        Item0a,\n        Item0b,\n        Item0c,\n        Item0d,\n        Item0e,\n        Item0f,\n        Item10,\n        Item11,\n        Item12,\n        Item13,\n        Item14,\n        Item15,\n        Item16,\n        Item17,\n        Item18,\n        Item19,\n        Item1a,\n        Item1b,\n        Item1c,\n        Item1d,\n        Item1e,\n        Item1f,\n        Item20,\n        Item21,\n        Item22,\n        Item23,\n        Item24,\n        Item25,\n        Item26,\n        Item27,\n        Item28,\n        Item29,\n        Item2a,\n        Item2b,\n        Item2c,\n        Item2d,\n        Item2e,\n        Item2f,\n        Item30,\n        Item31,\n        Item32,\n        Item33,\n        Item34,\n        Item35,\n        Item36,\n        Item37,\n        Item38,\n        Item39,\n        Item3a,\n        Item3b,\n        Item3c,\n        Item3d,\n        Item3e,\n        Item3f,\n        Item40,\n        Item41,\n        Item42,\n        Item43,\n        Item44,\n        Item45,\n        Item46,\n        Item47,\n        Item48,\n        Item49,\n        Item4a,\n        Item4b,\n        Item4c,\n        Item4d,\n        Item4e,\n        Item4f,\n        Item50,\n        Item51,\n        Item52,\n        Item53,\n        Item54,\n        Item55,\n        Item56,\n        Item57,\n        Item58,\n        Item59,\n        Item5a,\n        Item5b,\n        Item5c,\n        Item5d,\n        Item5e,\n        Item5f,\n        Item60,\n        Item61,\n        Item62,\n        Item63,\n        Item64,\n        Item65,\n        Item66,\n        Item67,\n        Item68,\n        Item69,\n        Item6a,\n        Item6b,\n        Item6c,\n        Item6d,\n        Item6e,\n        Item6f,\n        Item70,\n        Item71,\n        Item72,\n        Item73,\n        Item74,\n        Item75,\n        Item76,\n        Item77,\n        Item78,\n        Item79,\n        Item7a,\n        Item7b,\n        Item7c,\n        Item7d,\n        Item7e,\n        Item7f,\n        Item80,\n        Item81,\n        Item82,\n        Item83,\n        Item84,\n        Item85,\n        Item86,\n        Item87,\n        Item88,\n        Item89,\n        Item8a,\n        Item8b,\n        Item8c,\n        Item8d,\n        Item8e,\n        Item8f,\n        Item90,\n        Item91,\n        Item92,\n        Item93,\n        Item94,\n        Item95,\n        Item96,\n        Item97,\n        Item98,\n        Item99,\n        Item9a,\n        Item9b,\n        Item9c,\n        Item9d,\n        Item9e,\n        Item9f,\n        Itema0,\n        Itema1,\n        Itema2,\n        Itema3,\n        Itema4,\n        Itema5,\n        Itema6,\n        Itema7,\n        Itema8,\n        Itema9,\n        Itemaa,\n        Itemab,\n        Itemac,\n        Itemad,\n        Itemae,\n        Itemaf,\n        Itemb0,\n        Itemb1,\n        Itemb2,\n        Itemb3,\n        Itemb4,\n        Itemb5,\n        Itemb6,\n        Itemb7,\n        Itemb8,\n        Itemb9,\n        Itemba,\n        Itembb,\n        Itembc,\n        Itembd,\n        Itembe,\n        Itembf,\n        Itemc0,\n        Itemc1,\n        Itemc2,\n        Itemc3,\n        Itemc4,\n        Itemc5,\n        Itemc6,\n        Itemc7,\n        Itemc8,\n        Itemc9,\n        Itemca,\n        Itemcb,\n        Itemcc,\n        Itemcd,\n        Itemce,\n        Itemcf,\n        Itemd0,\n        Itemd1,\n        Itemd2,\n        Itemd3,\n        Itemd4,\n        Itemd5,\n        Itemd6,\n        Itemd7,\n        Itemd8,\n        Itemd9,\n        Itemda,\n        Itemdb,\n        Itemdc,\n        Itemdd,\n        Itemde,\n        Itemdf,\n        Iteme0,\n        Iteme1,\n        Iteme2,\n        Iteme3,\n        Iteme4,\n        Iteme5,\n        Iteme6,\n        Iteme7,\n        Iteme8,\n        Iteme9,\n        Itemea,\n        Itemeb,\n        Itemec,\n        Itemed,\n        Itemee,\n        Itemef,\n        Itemf0,\n        Itemf1,\n        Itemf2,\n        Itemf3,\n        Itemf4,\n        Itemf5,\n        Itemf6,\n        Itemf7,\n        Itemf8,\n        Itemf9,\n        Itemfa,\n        Itemfb,\n        Itemfc,\n        Itemfd,\n        Itemfe,\n        Itemff,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/TentType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum TentType : byte\n    {\n        [Info] Empty,\n        [Tent(\"Tent\")] Tent,\n        [Tent(\"Strength boost\")] StrengthBoost,\n        [Tent(\"Magic boost\")] MagicBoost,\n        [Tent(\"Defense boost\")] DefenseBoost,\n        [Tent(\"AP boost\")] ApBoost,\n        Item06,\n        Item07,\n        Item08,\n        Item09,\n        Item0a,\n        Item0b,\n        Item0c,\n        Item0d,\n        Item0e,\n        Item0f,\n        Item10,\n        Item11,\n        Item12,\n        Item13,\n        Item14,\n        Item15,\n        Item16,\n        Item17,\n        Item18,\n        Item19,\n        Item1a,\n        Item1b,\n        Item1c,\n        Item1d,\n        Item1e,\n        Item1f,\n        Item20,\n        Item21,\n        Item22,\n        Item23,\n        Item24,\n        Item25,\n        Item26,\n        Item27,\n        Item28,\n        Item29,\n        Item2a,\n        Item2b,\n        Item2c,\n        Item2d,\n        Item2e,\n        Item2f,\n        Item30,\n        Item31,\n        Item32,\n        Item33,\n        Item34,\n        Item35,\n        Item36,\n        Item37,\n        Item38,\n        Item39,\n        Item3a,\n        Item3b,\n        Item3c,\n        Item3d,\n        Item3e,\n        Item3f,\n        Item40,\n        Item41,\n        Item42,\n        Item43,\n        Item44,\n        Item45,\n        Item46,\n        Item47,\n        Item48,\n        Item49,\n        Item4a,\n        Item4b,\n        Item4c,\n        Item4d,\n        Item4e,\n        Item4f,\n        Item50,\n        Item51,\n        Item52,\n        Item53,\n        Item54,\n        Item55,\n        Item56,\n        Item57,\n        Item58,\n        Item59,\n        Item5a,\n        Item5b,\n        Item5c,\n        Item5d,\n        Item5e,\n        Item5f,\n        Item60,\n        Item61,\n        Item62,\n        Item63,\n        Item64,\n        Item65,\n        Item66,\n        Item67,\n        Item68,\n        Item69,\n        Item6a,\n        Item6b,\n        Item6c,\n        Item6d,\n        Item6e,\n        Item6f,\n        Item70,\n        Item71,\n        Item72,\n        Item73,\n        Item74,\n        Item75,\n        Item76,\n        Item77,\n        Item78,\n        Item79,\n        Item7a,\n        Item7b,\n        Item7c,\n        Item7d,\n        Item7e,\n        Item7f,\n        Item80,\n        Item81,\n        Item82,\n        Item83,\n        Item84,\n        Item85,\n        Item86,\n        Item87,\n        Item88,\n        Item89,\n        Item8a,\n        Item8b,\n        Item8c,\n        Item8d,\n        Item8e,\n        Item8f,\n        Item90,\n        Item91,\n        Item92,\n        Item93,\n        Item94,\n        Item95,\n        Item96,\n        Item97,\n        Item98,\n        Item99,\n        Item9a,\n        Item9b,\n        Item9c,\n        Item9d,\n        Item9e,\n        Item9f,\n        Itema0,\n        Itema1,\n        Itema2,\n        Itema3,\n        Itema4,\n        Itema5,\n        Itema6,\n        Itema7,\n        Itema8,\n        Itema9,\n        Itemaa,\n        Itemab,\n        Itemac,\n        Itemad,\n        Itemae,\n        Itemaf,\n        Itemb0,\n        Itemb1,\n        Itemb2,\n        Itemb3,\n        Itemb4,\n        Itemb5,\n        Itemb6,\n        Itemb7,\n        Itemb8,\n        Itemb9,\n        Itemba,\n        Itembb,\n        Itembc,\n        Itembd,\n        Itembe,\n        Itembf,\n        Itemc0,\n        Itemc1,\n        Itemc2,\n        Itemc3,\n        Itemc4,\n        Itemc5,\n        Itemc6,\n        Itemc7,\n        Itemc8,\n        Itemc9,\n        Itemca,\n        Itemcb,\n        Itemcc,\n        Itemcd,\n        Itemce,\n        Itemcf,\n        Itemd0,\n        Itemd1,\n        Itemd2,\n        Itemd3,\n        Itemd4,\n        Itemd5,\n        Itemd6,\n        Itemd7,\n        Itemd8,\n        Itemd9,\n        Itemda,\n        Itemdb,\n        Itemdc,\n        Itemdd,\n        Itemde,\n        Itemdf,\n        Iteme0,\n        Iteme1,\n        Iteme2,\n        Iteme3,\n        Iteme4,\n        Iteme5,\n        Iteme6,\n        Iteme7,\n        Iteme8,\n        Iteme9,\n        Itemea,\n        Itemeb,\n        Itemec,\n        Itemed,\n        Itemee,\n        Itemef,\n        Itemf0,\n        Itemf1,\n        Itemf2,\n        Itemf3,\n        Itemf4,\n        Itemf5,\n        Itemf6,\n        Itemf7,\n        Itemf8,\n        Itemf9,\n        Itemfa,\n        Itemfb,\n        Itemfc,\n        Itemfd,\n        Itemfe,\n        Itemff,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/WeaponType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum WeaponType : byte\n    {\n        [Info] Empty,\n        [Keyblade(\"Kingdom Key\")] KingdomKey,\n        [Keyblade(\"Hero's Origin\")] HeroOrigin,\n        [Keyblade(\"Shooting Star\")] ShootingStar,\n        [Keyblade(\"Favorite Deputy\")] FavoriteDeputy,\n        [Keyblade(\"Ever After\")] EvenAfter,\n        [Keyblade(\"Happy Gear\")] HappyGear,\n        [Keyblade(\"Crystal Snow\")] CrystalSnow,\n        [Keyblade(\"Hunny Spout\")] HunnySpout,\n        [Keyblade(\"Nano Gear\")] NanoGear,\n        [Keyblade(\"Wheel of Fate\")] WheelOfFate,\n        [Keyblade(\"Grand Chef\")] GrandChef,\n        [Keyblade(\"Classic Tone\")] ClassicTone,\n        [Keyblade(\"Oathkeeper\")] Oathkeeper,\n        [Keyblade(\"Oblivion\")] Oblivion,\n        [Keyblade(\"Ultima Weapon\")] UltimaWeapon,\n        [Keyblade(\"Midnight Blue\")] MidnightBlue,\n        [Keyblade(\"Phantom Green\")] PhantomGreen,\n        [Keyblade(\"Starlight\")] Starlight,\n        [Keyblade(\"Dawn Till Dusk\")] DawnTillDusk,\n        [Unused] UnusedKeyblade2b,\n        [Staff(\"Mage's Staff\")] Weapon15,\n        [Staff(\"Mage's Staff+\")] Weapon16,\n        [Staff(\"Warhammer\")] Weapon17,\n        [Staff(\"Warhammer+\")] Weapon18,\n        [Staff(\"Magician's Wand\")] Weapon19,\n        [Staff(\"Magician's Wand+\")] Weapon1a,\n        [Staff(\"Nirvana\")] Weapon1b,\n        [Staff(\"Nirvana+\")] Weapon1c,\n        [Staff(\"Astrolabe\")] Weapon1d,\n        [Staff(\"Astrolabe+\")] Weapon1e,\n        [Staff(\"Heartless Maul\")] Weapon1f,\n        [Staff(\"Heartless Maul+\")] Weapon20,\n        [Staff(\"Save the Queen\")] Weapon21,\n        [Staff(\"Save the Queen+\")] SaveTheQueenPlus,\n        [Unused] UnusedStaff3c,\n        [Unused] UnusedStaff3d,\n        [Unused] UnusedStaff3e,\n        [Unused] UnusedStaff3f,\n        [Unused] UnusedStaff40,\n        [Unused] UnusedStaff41,\n        [Shield(\"Knight's Shield\")] Weapon29,\n        [Shield(\"Knight's Shield+\")] Weapon2a,\n        [Shield(\"Clockwork Shield\")] Weapon2b,\n        [Shield(\"Clockwork Shield+\")] Weapon2c,\n        [Shield(\"Star Shield\")] Weapon2d,\n        [Shield(\"Star Shield+\")] Weapon2e,\n        [Shield(\"Aegis Shield\")] Weapon2f,\n        [Shield(\"Aegis Shield+\")] Weapon30,\n        [Shield(\"Storm Anchor\")] Weapon31,\n        [Shield(\"Storm Anchor+\")] Weapon32,\n        [Shield(\"Nobody Guard\")] Weapon33,\n        [Shield(\"Nobody Guard+\")] Weapon34,\n        [Shield(\"Save the King\")] Weapon35,\n        [Shield(\"Save the King+\")] SaveTheKingPlus,\n        [Unused] Weapon37,\n        [Unused] Weapon38,\n        [Unused] Weapon39,\n        [Unused] Weapon3a,\n        [Unused] Weapon3b,\n        [Unused] Weapon3c,\n        [Weapon(\"Master's Defender\")] EraqusKeyblade,\n        Weapon3e,\n        Weapon3f,\n        Weapon40,\n        Weapon41,\n        [Weapon(\"Kingdom Key D\")] KingdomKeyD,\n        [Weapon(\"Kingdom Key W\")] KingdomKeyDPlus,\n        Weapon44,\n        [Weapon(\"Heart of a Hero\")] HeartOfHero,\n        [Weapon(\"Cowboy's Pride\")] CowboyPride,\n        [Weapon(\"Space Ranger Suit\")] SpaceRangerSuit,\n        [Weapon(\"Golden Hair\")] GoldenHair,\n        [Weapon(\"Frying Pan\")] FryingPan,\n        [Weapon(\"Skill & Crossbones\")] SkillAndCrossbones,\n        [Weapon(\"Ice Claws\")] IceClaws,\n        [Weapon(\"Powered Suit\")] PoweredSuit,\n        [Weapon(\"Claws\")] Claws,\n        [Weapon(\"Knockout Body\")] KnockoutBody,\n        [Keyblade(\"Way to the Dawn\")] WayToDawn,\n        [Keyblade(\"Braveheart\")] Braveheart,\n        Weapon51,\n        Weapon52,\n        Weapon53,\n        Weapon54,\n        Weapon55,\n        Weapon56,\n        Weapon57,\n        [Weapon(\"Kingdom Key (FAKE)\")] FakeKingdomKey,\n        [Weapon(\"Kingdom Key (FAKE)\")] FakeKingdomKey2,\n        Weapon5a,\n        Weapon5b,\n        Weapon5c,\n        Weapon5d,\n        Weapon5e,\n        Weapon5f,\n        Item60,\n        Item61,\n        Item62,\n        Item63,\n        Item64,\n        Item65,\n        Item66,\n        Item67,\n        Item68,\n        Item69,\n        Item6a,\n        Item6b,\n        Item6c,\n        Item6d,\n        Item6e,\n        Item6f,\n        Item70,\n        Item71,\n        Item72,\n        Item73,\n        Item74,\n        Item75,\n        Item76,\n        Item77,\n        Item78,\n        Item79,\n        Item7a,\n        Item7b,\n        Item7c,\n        Item7d,\n        Item7e,\n        Item7f,\n        Item80,\n        Item81,\n        Item82,\n        Item83,\n        Item84,\n        Item85,\n        Item86,\n        Item87,\n        Item88,\n        Item89,\n        Item8a,\n        Item8b,\n        Item8c,\n        Item8d,\n        Item8e,\n        Item8f,\n        Item90,\n        Item91,\n        Item92,\n        Item93,\n        Item94,\n        Item95,\n        Item96,\n        Item97,\n        Item98,\n        Item99,\n        Item9a,\n        Item9b,\n        Item9c,\n        Item9d,\n        Item9e,\n        Item9f,\n        Itema0,\n        Itema1,\n        Itema2,\n        Itema3,\n        Itema4,\n        Itema5,\n        Itema6,\n        Itema7,\n        Itema8,\n        Itema9,\n        Itemaa,\n        Itemab,\n        Itemac,\n        Itemad,\n        Itemae,\n        Itemaf,\n        Itemb0,\n        Itemb1,\n        Itemb2,\n        Itemb3,\n        Itemb4,\n        Itemb5,\n        Itemb6,\n        Itemb7,\n        Itemb8,\n        Itemb9,\n        Itemba,\n        Itembb,\n        Itembc,\n        Itembd,\n        Itembe,\n        Itembf,\n        Itemc0,\n        Itemc1,\n        Itemc2,\n        Itemc3,\n        Itemc4,\n        Itemc5,\n        Itemc6,\n        Itemc7,\n        Itemc8,\n        Itemc9,\n        Itemca,\n        Itemcb,\n        Itemcc,\n        Itemcd,\n        Itemce,\n        Itemcf,\n        Itemd0,\n        Itemd1,\n        Itemd2,\n        Itemd3,\n        Itemd4,\n        Itemd5,\n        Itemd6,\n        Itemd7,\n        Itemd8,\n        Itemd9,\n        Itemda,\n        Itemdb,\n        Itemdc,\n        Itemdd,\n        Itemde,\n        Itemdf,\n        Iteme0,\n        Iteme1,\n        Iteme2,\n        Iteme3,\n        Iteme4,\n        Iteme5,\n        Iteme6,\n        Iteme7,\n        Iteme8,\n        Iteme9,\n        Itemea,\n        Itemeb,\n        Itemec,\n        Itemed,\n        Itemee,\n        Itemef,\n        Itemf0,\n        Itemf1,\n        Itemf2,\n        Itemf3,\n        Itemf4,\n        Itemf5,\n        Itemf6,\n        Itemf7,\n        Itemf8,\n        Itemf9,\n        Itemfa,\n        Itemfb,\n        Itemfc,\n        Itemfd,\n        Itemfe,\n        Itemff,\n    }\n}\n"
  },
  {
    "path": "KHSave.Lib3/Types/WorldType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.Lib3.Types\n{\n    public enum WorldType : byte\n    {\n        [World(\"bt\", \"Scala Ad Caelum\")]\n        ScalaAdCaelum = 1,\n\n        [World(\"dw\", \"Dark World\")]\n        DarkWorld = 3,\n\n        [World(\"he\", \"Olympus\")]\n        Olympus = 4,\n\n        [World(\"ts\", \"Toy Box\")]\n        ToyBox = 5,\n\n        [World(\"ra\", \"Kingdom of Corona\")]\n        KingdomOfCorona = 7,\n\n        [World(\"fz\", \"Arendelle\")]\n        Arendelle = 8,\n\n        [World(\"ca\", \"Caribbean\")]\n        Caribbean = 9,\n\n        [World(\"po\", \"100 Acre Wood\")]\n        AcreWood = 10,\n\n        [World(\"mi\", \"Monstropolis\")]\n        Monstropolis = 11,\n\n        [World(\"tt\", \"Twilight Town\")]\n        TwilightTown = 12,\n\n        [World(\"yt\", \"The Mysterious Tower\")]\n        MysteriousTower = 13,\n\n        [World(\"kg\", \"Keyblade Graveyard\")]\n        KeybladeGraveyard = 14,\n\n        [World(\"bx\", \"San Fransokyo\")]\n        SanFransokyo = 19,\n\n        [World(\"ew\", \"The Final World\")]\n        FinalWorld = 22,\n\n        [World(\"rg\", \"Radiant Garden\")]\n        RadiantGarden = 24,\n\n        [World(\"dp\", \"Land of Departure\")]\n        LandOfDeparture = 25,\n\n        [World(\"wm\", \"World Map\")]\n        WorldMap = 28,\n\n        [World(\"di\", \"Destiny Island\")]\n        DestinyIsland = 0xF0,\n\n        [World(\"rg\", \"Radiant Garden\")]\n        RadiantGarden2 = 0xF1,\n\n        [World(\"gm\", \"Gummiship\")]\n        Gummiship = 0xF2,\n\n        [World(\"dc\", \"Disney Castle\")]\n        DisneyCastle = 0xF3,\n\n        [World(\"sp\", \"SP world\")]\n        Sp = 0xF4,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Attributes/AbilityAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibBbs.Attributes\n{\n    public class AbilityStatusAttribute : AbilityAttribute\n    {\n        public AbilityStatusAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class AbilityPriceAttribute : AbilityAttribute\n    {\n        public AbilityPriceAttribute(string name = null) : base(name)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Attributes/ActionAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibBbs.Attributes\n{\n    public class MovementAttribute : InfoAttribute\n    {\n        public MovementAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class DefenseAttribute : InfoAttribute\n    {\n        public DefenseAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class ReprisalAttribute : InfoAttribute\n    {\n        public ReprisalAttribute(string name = null) : base(name)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Attributes/CommandAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibBbs.Attributes\n{\n    public class AttackAttribute : InfoAttribute\n    {\n        public AttackAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class FinisherAttribute : InfoAttribute\n    {\n        public FinisherAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class ShotlockAttribute : InfoAttribute\n    {\n        public ShotlockAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class DlinkAttribute : InfoAttribute\n    {\n        public DlinkAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class FriendshipAttribute : InfoAttribute\n    {\n        public FriendshipAttribute(string name = null) : base(name)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Attributes/CommandStyleAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibBbs.Attributes\n{\n    public class CommandStyleLevel1Attribute : InfoAttribute\n    {\n        public CommandStyleLevel1Attribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class CommandStyleLevel2Attribute : InfoAttribute\n    {\n        public CommandStyleLevel2Attribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class CommandStyleOtherAttribute : InfoAttribute\n    {\n        public CommandStyleOtherAttribute(string name = null) : base(name)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Constants.cs",
    "content": "namespace KHSave.LibBbs\n{\n    internal class Constants\n    {\n        public const uint MagicCode = 1146307138;\n    }\n\n    public enum GameVersion\n    {\n        Japanese = 0x18,\n        AmericanEuropean = 0x1C,\n        FinalMix = 0x1D,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/ISaveKhBbs.cs",
    "content": "using KHSave.LibBbs.Models;\nusing KHSave.LibBbs.Types;\n\nnamespace KHSave.LibBbs\n{\n    public interface ISaveKhBbs\n    {\n        uint MagicCode { get; set; }\n\n        int Version { get; set; }\n\n        uint Size { get; set; }\n\n        uint Checksum { get; set; }\n\n        byte Report { get; set; }\n        byte Dummy1 { get; set; }\n        byte Dummy2 { get; set; }\n        byte Dummy3 { get; set; }\n        WorldType World { get; set; }\n        byte Room { get; set; }\n        byte Location { get; set; }\n        CharacterType PlayableCharacter { get; set; }\n        int Timer { get; set; }\n\n        Command[] CommandList { get; set; }\n        Character Character { get; set; }\n        Deck[] Decks { get; set; }\n\n        DifficultyType Difficulty { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/KHSave.LibBbs.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.LibBbs/Models/Ability.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibBbs.Models\n{\n    public class Ability\n    {\n        [Data] public byte NumberActivated { get; set; }\n        [Data] public byte Slots { get; set; }\n        [Data] public byte Unk2 { get; set; }\n        [Data] public byte Unk3 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Models/Character.cs",
    "content": "using KHSave.LibBbs.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibBbs.Models\n{\n    public class Character\n    {\n        [Data] public uint Experience { get; set; }\n        [Data] public uint Money { get; set; }\n        [Data] public uint Medals { get; set; }\n        [Data] public ushort Level { get; set; }\n        [Data] public ushort Hp1 { get; set; }\n        [Data] public ushort Hp2 { get; set; }\n        [Data] public ushort Unk12 { get; set; }\n        [Data] public ushort Unk14 { get; set; }\n        [Data] public ushort Unk16 { get; set; }\n        [Data] public ushort Magic { get; set; }\n        [Data] public ushort Defense { get; set; }\n        [Data] public ushort ArenaLevel { get; set; }\n        [Data] public ushort Strength { get; set; }\n        [Data] public ushort Unk20 { get; set; }\n        [Data] public ushort Unk22 { get; set; }\n        [Data] public ushort Unk24 { get; set; }\n        [Data] public ushort Unk26 { get; set; }\n        [Data] public ushort Unk28 { get; set; }\n        [Data] public WeaponType Weapon { get; set; }\n        [Data] public ushort Unk2C { get; set; }\n        [Data] public ushort Unk2E { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Models/Command.cs",
    "content": "using KHSave.LibBbs.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibBbs.Models\n{\n    public class Command\n    {\n        [Data] public CommandType Id { get; set; }\n        [Data] public ushort Level { get; set; }\n        [Data] public ushort Experience { get; set; }\n        [Data] public AbilityType Ability { get; set; }\n        [Data] public ushort Flags { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Models/Deck.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibBbs.Models\n{\n    public class Deck\n    {\n        [Data(Count = 8)] public Command[] BattleCommands { get; set; }\n        [Data(Count = 10)] public Command[] ActionCommands { get; set; }\n        [Data] public Command Shotlock { get; set; }\n        [Data(Count = 0x14)] public byte[] Unk72 { get; set; }\n        [Data(Count = 16)] public byte[] Name { get; set; }\n        [Data(Count = 46)] public byte[] Unk90 { get; set; } //Padding?\n\n        public class Command\n        {\n            [Data] public ushort Id { get; set; } // Id in CommandList\n            [Data] public ushort Unk02 { get; set; }\n            [Data] public ushort Unk04 { get; set; }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Models/Dlink.cs",
    "content": "using KHSave.LibBbs.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibBbs.Models\n{\n    public class Dlink\n    {\n        [Data] public CommandType Id { get; set; }\n        [Data] public ushort Status { get; set; }\n        [Data] public uint Dummy { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Models/Finisher.cs",
    "content": "using KHSave.LibBbs.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibBbs.Models\n{\n    public class Finisher\n    {\n        [Data] public CommandType Id { get; set; }\n        [Data] public ushort Status { get; set; }\n        [Data] public uint Experience { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/SaveKhBbs.European.cs",
    "content": "using KHSave.LibBbs.Models;\nusing KHSave.LibBbs.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibBbs\n{\n    public partial class SaveKhBbs\n    {\n        public class SaveEuropean : ISaveKhBbs\n        {\n            [Data(0, 0x11B40)] public byte[] Data { get; set; }\n\n            [Data(0)] public uint MagicCode { get; set; }\n            [Data] public int Version { get; set; }\n            [Data] public uint Size { get; set; }\n            [Data] public uint Checksum { get; set; }\n\n            [Data] public byte Report { get; set; }\n            [Data] public byte Dummy1 { get; set; }\n            [Data] public byte Dummy2 { get; set; }\n            [Data] public byte Dummy3 { get; set; }\n            [Data] public WorldType World { get; set; }\n            [Data] public byte Room { get; set; }\n            [Data] public byte Location { get; set; }\n            [Data] public CharacterType PlayableCharacter { get; set; }\n            [Data] public int Timer { get; set; }\n\n            [Data(0x3488, Count = 0x200)] public Command[] CommandList { get; set; }\n            [Data(0x59A8)] public Character Character { get; set; }\n            [Data(0x5A04, Count = 0x3)] public Deck[] Decks { get; set; }\n\n            [Data(0x5C84)] public DifficultyType Difficulty { get; set; }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/SaveKhBbs.FinalMix.cs",
    "content": "using KHSave.LibBbs.Models;\nusing KHSave.LibBbs.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibBbs\n{\n    public partial class SaveKhBbs\n    {\n        public class SaveFinalMix : ISaveKhBbs\n        {\n            [Data(0, 0x11E50)] public byte[] Data { get; set; }\n\n            [Data(0)] public uint MagicCode { get; set; }\n            [Data] public int Version { get; set; }\n            [Data] public uint Size { get; set; }\n            [Data] public uint Checksum { get; set; }\n\n            [Data] public byte Report { get; set; }\n            [Data] public byte Dummy1 { get; set; }\n            [Data] public byte Dummy2 { get; set; }\n            [Data] public byte Dummy3 { get; set; }\n            [Data] public WorldType World { get; set; }\n            [Data] public byte Room { get; set; }\n            [Data] public byte Location { get; set; }\n            [Data] public CharacterType PlayableCharacter { get; set; }\n            [Data] public int Timer { get; set; }\n\n            [Data(0x3498, Count = 0x200)] public Command[] CommandList { get; set; }\n            [Data(0x4D64, Count = 0x1E)] public Ability[] Abilities { get; set; }\n            [Data(0x5644, Count = 0xF)] public Finisher[] Finishers { get; set; }\n            [Data(0x5746, Count = 0xC)] public Dlink[] Dlinks { get; set; }\n            [Data(0x59D0)] public Character Character { get; set; }\n            [Data(0x5A2C, Count = 0x3)] public Deck[] Decks { get; set; }\n\n            [Data(0x5CAC)] public DifficultyType Difficulty { get; set; }\n\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/SaveKhBbs.cs",
    "content": "using System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibBbs\n{\n    public partial class SaveKhBbs\n    {\n        public static bool IsValid(Stream stream)\n        {\n            var prevPosition = stream.Position;\n            var magicCode = new BinaryReader(stream).ReadUInt32();\n            stream.Position = prevPosition;\n\n            return magicCode == Constants.MagicCode;\n        }\n\n        public static GameVersion? GetGameVersion(Stream stream)\n        {\n            if (!IsValid(stream))\n                return null;\n\n            var prevPosition = stream.Position;\n            stream.Position = 4;\n            var version = new BinaryReader(stream).ReadUInt32();\n            stream.Position = prevPosition;\n\n            switch ((GameVersion)version)\n            {\n                case GameVersion.Japanese:\n                case GameVersion.AmericanEuropean:\n                case GameVersion.FinalMix:\n                    return (GameVersion)version;\n                default:\n                    return null;\n            }\n        }\n\n        public static TSaveKhBbs Read<TSaveKhBbs>(Stream stream)\n            where TSaveKhBbs : class, ISaveKhBbs =>\n            BinaryMapping.ReadObject<TSaveKhBbs>(stream.SetPosition(0));\n\n        public static void Write<TSaveKhBbs>(Stream stream, TSaveKhBbs save)\n            where TSaveKhBbs : class, ISaveKhBbs\n        {\n            uint checksum;\n            using (var tempStream = new MemoryStream())\n            {\n                BinaryMapping.WriteObject(tempStream, save);\n                checksum = CalculateChecksum(tempStream);\n            }\n\n            save.Checksum = checksum;\n            BinaryMapping.WriteObject(stream.FromBegin(), save);\n        }\n\n\n        public static uint CalculateChecksum(Stream stream)\n        {\n            uint checksum = 0;\n            using (BinaryReader reader = new BinaryReader(stream))\n            {\n                reader.BaseStream.Seek(0x10, SeekOrigin.Begin);\n                for (int i = 0; i < reader.BaseStream.Length / 4 - 4; i++)\n                    checksum += reader.ReadUInt32();\n            }\n            return checksum;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Types/AbilityType.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibBbs.Attributes;\n\nnamespace KHSave.LibBbs.Types\n{\n    public enum AbilityType : ushort\n    {\n        [AbilityPrice(\"Treasure Magnet\")] TreasureMagnet = 0x01C4,\n        [AbilityPrice(\"HP Prize Plus\")] HpPrizePlus = 0x01C5,\n        [AbilityPrice(\"Link Prize Plus\")] LinkPrizePlus = 0x01C6,\n        [AbilityPrice(\"Lucky Strike\")] LuckyStrike = 0x01C7,\n        [AbilityStatus(\"HP Boost\")] HpBoost = 0x01C8,\n        [AbilitySupport(\"EXP Zero\")] ExpZero = 0x01C9,\n        [AbilityStatus(\"Fire Boost\")] FireBoost = 0x01CA,\n        [AbilityStatus(\"Blizzard Boost\")] BlizzardBoost = 0x01CB,\n        [AbilityStatus(\"Thunder Boost\")] ThunderBoost = 0x01CC,\n        [AbilityStatus(\"Cure Boost\")] CureBoost = 0x01CD,\n        [AbilityStatus(\"Item Boost\")] ItemBoost = 0x01CE,\n        [AbilityStatus(\"Attack Haste\")] AttackHaste = 0x01CF,\n        [AbilityStatus(\"Magic Haste\")] MagicHaste = 0x01D0,\n        [AbilityStatus(\"Combo F Boost\")] ComboFBoost = 0x01D1,\n        [AbilityStatus(\"Finish Boost\")] FinishBoost = 0x01D2,\n        [AbilitySupport(\"Combo Plus\")] ComboPlus = 0x01D3,\n        [AbilitySupport(\"Air Combo Plus\")] AirComboPlus = 0x01D4,\n        [AbilityStatus(\"Fire Screen\")] FireScreen = 0x01D5,\n        [AbilityStatus(\"Blizzard Screen\")] BlizzardScreen = 0x01D6,\n        [AbilityStatus(\"Thunder Screen\")] ThunderScreen = 0x01D7,\n        [AbilityStatus(\"Dark Screen\")] DarkScreen = 0x01D8,\n        [AbilityStatus(\"Reload Boost\")] ReloadBoost = 0x01D9,\n        [AbilityStatus(\"Defender\")] Defender = 0x01DA,\n        [AbilitySupport(\"EXP Chance\")] ExpChance = 0x01DB,\n        [AbilitySupport(\"EXP Walker\")] ExpWalker = 0x01DC,\n        [AbilitySupport(\"Damage Syphon\")] DamageSyphon = 0x01DD,\n        [AbilitySupport(\"Second Chance\")] SecondChance = 0x01DE,\n        [AbilitySupport(\"Once More\")] OnceMore = 0x01DF,\n        [AbilitySupport(\"Scan\")] Scan = 0x01E0,\n        [AbilitySupport(\"Leaf Bracer\")] LeafBracer = 0x01E1,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Types/CharacterType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibBbs.Types\n{\n    public enum CharacterType : byte\n    {\n        [Unused] Crash00,\n        [Info] Ventus,\n        [Info] Aqua,\n        [Info] Terra,\n        [Unused] Crash04,\n        [Info(\"Ventus (full armor)\")] ArmoredVentus,\n        [Info(\"Aqua (full armor)\")] ArmoredAqua,\n        [Info(\"Terra (full armor)\")] ArmoredTerra,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Types/CommandType.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibBbs.Attributes;\n\nnamespace KHSave.LibBbs.Types\n{\n    public enum CommandType : ushort\n    {\n        [Info] Empty = 0,\n        [Finisher(\"Finish\")] Finish = 0x003F,\n        [Finisher(\"Air Flair 1\")] AirFlair1 = 0x0040,\n        [Finisher(\"Magic Pulse 1\")] MagicPulse1 = 0x0041,\n        [Finisher(\"Rising Rock 1\")] RisingRock1 = 0x0042,\n        [Finisher(\"Heat Slash 1\")] HeatSlash1 = 0x0043,\n        [Finisher(\"Gold Rush\")] GoldRush = 0x0044,\n        [Finisher(\"Air Flair 2\")] AirFlair2 = 0x0045,\n        [Finisher(\"Magic Pulse 2\")] MagicPulse2 = 0x0046,\n        [Finisher(\"Rising Rock 2\")] RisingRock2 = 0x0047,\n        [Finisher(\"Heat Slash 2\")] HeatSlash2 = 0x0048,\n        [Finisher(\"Ramuh's Judgement\")] RamuhsJudgement = 0x0049,\n        [Finisher(\"Twisted Hours\")] TwistedHours = 0x004A,\n        [Finisher(\"Surprise! 1\")] Surprise1 = 0x004B,\n        [Finisher(\"Air Flair 3\")] AirFlair3 = 0x004C,\n        [Finisher(\"Magic Pulse 3\")] MagicPulse3 = 0x004D,\n        [Finisher(\"Dark Star 1\")] DarkStar1 = 0x004E,\n        [Finisher(\"Heal Strike\")] HealStrike = 0x004F,\n        [Finisher(\"Random End\")] RandomEnd = 0x0050,\n        [Finisher(\"Surprise! 2\")] Surprise2 = 0x0051,\n        [Finisher(\"Air Flair 4\")] AirFlair4 = 0x0052,\n        [Finisher(\"Magic Pulse 4\")] MagicPulse4 = 0x0053,\n        [Finisher(\"Dark Star 2\")] DarkStar2 = 0x0054,\n        [Finisher(\"Explosion\")] Explosion = 0x0055,\n        [Finisher(\"Ice Burst\")] IceBurst = 0x0056,\n        [Finisher(\"Celebration\")] Celebration = 0x0057,\n        [Finisher(\"Stratosphere\")] Stratosphere = 0x0058,\n        [Finisher(\"Teleport Spike\")] TeleportSpike = 0x0059,\n        [Finisher(\"Demolition\")] Demolition = 0x005A,\n        [Attack(\"Quick Blitz\")] QuickBlitz = 0x005B,\n        [Attack(\"Blitz\")] Blitz = 0x005C,\n        [Attack(\"Magic Hour\")] MagicHour = 0x005D,\n        [Attack(\"Meteor Crash\")] MeteorCrash = 0x005E,\n        [Attack(\"Sliding Dash\")] SlidingDash = 0x005F,\n        [Attack(\"Fire Dash\")] FireDash = 0x0060,\n        [Attack(\"Dark Haze\")] DarkHaze = 0x0061,\n        [Attack(\"Sonic Blade\")] SonicBlade = 0x0062,\n        [Attack(\"Chaos Blade\")] ChaosBlade = 0x0063,\n        [Attack(\"Zantetsuken\")] Zantetsuken = 0x0064,\n        [Attack(\"Strike Raid\")] StrikeRaid = 0x0065,\n        [Attack(\"Freeze Raid\")] FreezeRaid = 0x0066,\n        [Attack(\"Treasure Raid\")] TreasureRaid = 0x0067,\n        [Attack(\"Spark Raid\")] SparkRaid = 0x0068,\n        [Attack(\"Wind Raid\")] WindRaid = 0x0069,\n        [Attack(\"Fire Surge\")] FireSurge = 0x006A,\n        [Attack(\"Barrier Surge\")] BarrierSurge = 0x006B,\n        [Attack(\"Thunder Surge\")] ThunderSurge = 0x006C,\n        [Attack(\"Aerial Slam\")] AerialSlam = 0x006D,\n        [Attack(\"Ars Solum\")] ArsSolum = 0x006E,\n        [Attack(\"Ars Arcanum\")] ArsArcanum = 0x006F,\n        [Attack(\"Time Splicer\")] TimeSplicer = 0x0070,\n        [Attack(\"Poison Edge\")] PoisonEdge = 0x0071,\n        [Attack(\"Wishing Edge\")] WishingEdge = 0x0072,\n        [Attack(\"Blizzard Edge\")] BlizzardEdge = 0x0073,\n        [Attack(\"Stun Edge\")] StunEdge = 0x0074,\n        [Attack(\"Slot Edge\")] SlotEdge = 0x0075,\n        [Attack(\"Fire Strike\")] FireStrike = 0x0076,\n        [Attack(\"Confusion Strike\")] ConfusionStrike = 0x0077,\n        [Attack(\"Binding Strike\")] BindingStrike = 0x0078,\n        [Attack(\"Tornado Strike\")] TornadoStrike = 0x0079,\n        [Attack(\"Brutal Blast\")] BrutalBlast = 0x007A,\n        [Attack(\"Magnet Spiral\")] MagnetSpiral = 0x007B,\n        [Attack(\"Salvation\")] Salvation = 0x007C,\n        [Attack(\"Windcutter\")] Windcutter = 0x007D,\n        [Attack(\"Limit Storm\")] LimitStorm = 0x007E,\n        [Attack(\"Collision Magnet\")] CollisionMagnet = 0x007F,\n        [Attack(\"Geo Impact\")] GeoImpact = 0x0080,\n        [Attack(\"Sacrifice\")] Sacrifice = 0x0081,\n        [Attack(\"Break Time\")] BreakTime = 0x0082,\n        [Magic(\"Fire\")] Fire = 0x0083,\n        [Magic(\"Fira\")] Fira = 0x0084,\n        [Magic(\"Firaga\")] Firaga = 0x0085,\n        [Magic(\"Dark Firaga\")] DarkFiraga = 0x0086,\n        [Magic(\"Fission Firaga\")] FissionFiraga = 0x0087,\n        [Magic(\"Triple Firaga\")] TripleFiraga = 0x0088,\n        [Magic(\"Crawling Fire\")] CrawlingFire = 0x0089,\n        [Magic(\"Blizzard\")] Blizzard = 0x008A,\n        [Magic(\"Blizzara\")] Blizzara = 0x008B,\n        [Magic(\"Blizzaga\")] Blizzaga = 0x008C,\n        [Magic(\"Triple Blizzaga\")] TripleBlizzaga = 0x008D,\n        [Magic(\"Thunder\")] Thunder = 0x008E,\n        [Magic(\"Thundara\")] Thundara = 0x008F,\n        [Magic(\"Thundaga\")] Thundaga = 0x0090,\n        [Magic(\"Thundaga Shot\")] ThundagaShot = 0x0091,\n        [Magic(\"Cure\")] Cure = 0x0092,\n        [Magic(\"Cura\")] Cura = 0x0093,\n        [Magic(\"Curaga\")] Curaga = 0x0094,\n        [Magic(\"Esuna\")] Esuna = 0x0095,\n        [Magic(\"Mine Shield\")] MineShield = 0x0096,\n        [Magic(\"Mine Square\")] MineSquare = 0x0097,\n        [Magic(\"Seeker Mine\")] SeekerMine = 0x0098,\n        [Magic(\"Zero Gravity\")] ZeroGravity = 0x0099,\n        [Magic(\"Zero Gravira\")] ZeroGravira = 0x009A,\n        [Magic(\"Zero Graviga\")] ZeroGraviga = 0x009B,\n        [Magic(\"Magnet\")] Magnet = 0x009C,\n        [Magic(\"Magnera\")] Magnera = 0x009D,\n        [Magic(\"Magnega\")] Magnega = 0x009E,\n        [Magic(\"Munny Magnet\")] MunnyMagnet = 0x009F,\n        [Magic(\"Energy Magnet\")] EnergyMagnet = 0x00A0,\n        [Magic(\"D-Link Magnet\")] DLinkMagnet = 0x00A1,\n        [Magic(\"Aero\")] Aero = 0x00A2,\n        [Magic(\"Aerora\")] Aerora = 0x00A3,\n        [Magic(\"Aeroga\")] Aeroga = 0x00A4,\n        [Magic(\"Warp\")] Warp = 0x00A5,\n        [Magic(\"Faith\")] Faith = 0x00A6,\n        [Magic(\"Deep Freeze\")] DeepFreeze = 0x00A7,\n        [Magic(\"Glacier\")] Glacier = 0x00A8,\n        [Magic(\"Ice Barrage\")] IceBarrage = 0x00A9,\n        [Magic(\"Firaga Burst\")] FiragaBurst = 0x00AA,\n        [Magic(\"Raging Storm\")] RagingStorm = 0x00AB,\n        [Magic(\"Mega Flare\")] MegaFlare = 0x00AC,\n        [Magic(\"Quake\")] Quake = 0x00AD,\n        [Magic(\"Tornado\")] Tornado = 0x00AE,\n        [Magic(\"Meteor\")] Meteor = 0x00AF,\n        [Magic(\"Transcendence\")] Transcendence = 0x00B0,\n        [Magic(\"Mini\")] Mini = 0x00B1,\n        [Magic(\"Blackout\")] Blackout = 0x00B2,\n        [Magic(\"Ignite\")] Ignite = 0x00B3,\n        [Magic(\"Confuse\")] Confuse = 0x00B4,\n        [Magic(\"Bind\")] Bind = 0x00B5,\n        [Magic(\"Poison\")] Poison = 0x00B6,\n        [Magic(\"Slow\")] Slow = 0x00B7,\n        [Magic(\"Stop\")] Stop = 0x00B8,\n        [Magic(\"Stopra\")] Stopra = 0x00B9,\n        [Magic(\"Stopga\")] Stopga = 0x00BA,\n        [Magic(\"Sleep\")] Sleep = 0x00BB,\n        [Consumable(\"Potion\")] Potion = 0x00BC,\n        [Consumable(\"Hi-Potion\")] HiPotion = 0x00BD,\n        [Consumable(\"Mega-Potion\")] MegaPotion = 0x00BE,\n        [Consumable(\"Ether\")] Ether = 0x00BF,\n        [Consumable(\"Mega-Ether\")] MegaEther = 0x00C0,\n        [Consumable(\"Panacea\")] Panacea = 0x00C1,\n        [Consumable(\"Elixir\")] Elixir = 0x00C2,\n        [Consumable(\"Megalixir\")] Megalixir = 0x00C3,\n        [Consumable(\"Balloon Letter\")] BalloonLetter = 0x00C4,\n        [Consumable(\"Vanilla Glitz\")] VanillaGlitz = 0x00C5,\n        [Consumable(\"Fabracadabra\")] Fabracadabra = 0x00C6,\n        [Consumable(\"Honeybunny\")] Honeybunny = 0x00C7,\n        [Consumable(\"Bueno Volcano\")] BuenoVolcanoFirestorm = 0x00C8,\n        [Consumable(\"Snow Bear\")] SnowBearDiamondDust = 0x00C9,\n        [Consumable(\"Spark Lemon\")] SparkLemonThunderbolt = 0x00CA,\n        [Consumable(\"Goofy Parfait\")] GoofyParfait = 0x00CB,\n        [Consumable(\"Royalberry\")] Royalberry = 0x00CC,\n        [Consumable(\"Sugary Skies\")] SugarySkies = 0x00CD,\n        [Consumable(\"Rockin' Crunch\")] RockinCrunch = 0x00CE,\n        [Consumable(\"Donald Fizz\")] DonaldFizz = 0x00CF,\n        [Consumable(\"Daisy Sorbet\")] DaisySorbet = 0x00D0,\n        [Consumable(\"Big Bad Pete\")] BigBadPete = 0x00D1,\n        [Consumable(\"Double Crunch\")] DoubleCrunch = 0x00D2,\n        [Friendship(\"Group Cure\")] GroupCure = 0x00D3,\n        [Friendship(\"Group Cura\")] GroupCura = 0x00D4,\n        [Friendship(\"Group Curaga\")] GroupCuraga = 0x00D5,\n        [Friendship(\"Group Esuna\")] GroupEsuna = 0x00D6,\n        [Friendship(\"Confetti\")] Confetti = 0x00D7,\n        [Friendship(\"Fireworks\")] Fireworks = 0x00D8,\n        [Friendship(\"Taunt\")] Taunt = 0x00D9,\n        [Friendship(\"Victory Pose\")] VictoryPose = 0x00DA,\n        [Info(\"Deck Scramble\")] DeckScramble = 0x00DB,\n        [Friendship(\"Vanish\")] Vanish = 0x00DC,\n        [Friendship(\"Unison Rush\")] UnisonRush = 0x00DD,\n        [Friendship(\"Voltage Stack\")] VoltageStack = 0x00DE,\n        [Friendship(\"Trinity Limit\")] TrinityLimit = 0x00DF,\n        [Info(\"Gold\")] Gold = 0x00E0,\n        [Info(\"Black\")] Black = 0x00E1,\n        [Info(\"Finish (Finish Command)\")] FinishFinishCommand = 0x00E2,\n        [Info(\"Wrath of Darkness (No Heart Fight)\")] WrathofDarkness = 0x00E3,\n        [Friendship(\"Sign of Faith (Mickey D-Link)\")] SignofFaith = 0x00E4,\n        [Friendship(\"Wish Circle (Cinderella D-Link)\")] WishCircle = 0x00E5,\n        [Friendship(\"Enchanted Step (Cinderella D-Link)\")] EnchantedStep = 0x00E6,\n        [Friendship(\"Wish Shot (Cinderella D-Link)\")] WishShot = 0x00E7,\n        [Friendship(\"Magic Mending (Cinderella D-Link)\")] MagicMending = 0x00E8,\n        [Friendship(\"Doc (Snow White D-Link)\")] Doc = 0x00E9,\n        [Friendship(\"Grumpy (Snow White D-Link)\")] Grumpy = 0x00EA,\n        [Friendship(\"Sneezy (Snow White D-Link)\")] Sneezy = 0x00EB,\n        [Friendship(\"Happy (Snow White D-Link)\")] Happy = 0x00EC,\n        [Friendship(\"Sleepy (Snow White D-Link)\")] Sleepy = 0x00ED,\n        [Friendship(\"Bashful (Snow White D-Link)\")] Bashful = 0x00EE,\n        [Friendship(\"Dopey (Snow White D-Link)\")] Dopey = 0x00EF,\n        [Friendship(\"Dark Spiral (Vanitas D-Link)\")] DarkSpiral = 0x00F0,\n        [Friendship(\"Dark Splicer (Vanitas D-Link)\")] DarkSplicer = 0x00F1,\n        [Friendship(\"Illusion-F\")] IllusionF = 0x00F2,\n        [Friendship(\"Illusion-L\")] IllusionL = 0x00F3,\n        [Friendship(\"Illusion-V\")] IllusionV = 0x00F4,\n        [Friendship(\"Illusion-R\")] IllusionR = 0x00F5,\n        [Friendship(\"Illusion-B\")] IllusionB = 0x00F6,\n        [Movement(\"Slide\")] Slide = 0x00F8,\n        [Movement(\"Jump\")] Jump = 0x00F9,\n        [Movement(\"High Jump\")] HighJump = 0x00FA,\n        [Movement(\"Dodge Roll\")] DodgeRoll = 0x00FB,\n        [Movement(\"Thunder Roll\")] ThunderRoll = 0x00FC,\n        [Movement(\"Cartwheel\")] Cartwheel = 0x00FD,\n        [Movement(\"Firewheel\")] Firewheel = 0x00FE,\n        [Movement(\"Air Slide\")] AirSlide = 0x00FF,\n        [Movement(\"Ice Slide\")] IceSlide = 0x0100,\n        [Movement(\"Reversal\")] Reversal = 0x0101,\n        [Movement(\"Glide\")] Glide = 0x0102,\n        [Movement(\"Superglide\")] Superglide = 0x0103,\n        [Movement(\"Fire Glide\")] FireGlide = 0x0104,\n        [Movement(\"Homing Slide\")] HomingSlide = 0x0105,\n        [Movement(\"Teleport\")] Teleport = 0x0106,\n        [Movement(\"Sonic Impact\")] SonicImpact = 0x0107,\n        [Movement(\"Doubleflight\")] Doubleflight = 0x0108,\n        [Defense(\"Block\")] Block = 0x0109,\n        [Defense(\"Renewal Block\")] RenewalBlock = 0x010A,\n        [Defense(\"Focus Guard\")] FocusGuard = 0x010B,\n        [Defense(\"Stun Block\")] StunBlock = 0x010C,\n        [Defense(\"Poison Block\")] PoisonBlock = 0x010D,\n        [Defense(\"Barrier\")] Barrier = 0x010E,\n        [Defense(\"Renewal Barrier\")] RenewalBarrier = 0x010F,\n        [Defense(\"Focus Barrier\")] FocusBarrier = 0x0110,\n        [Defense(\"Confuse Barrier\")] ConfuseBarrier = 0x0111,\n        [Defense(\"Stop Barrier\")] StopBarrier = 0x0112,\n        [Reprisal(\"Counter Rush\")] CounterRush = 0x0113,\n        [Reprisal(\"Counter Hammer\")] CounterHammer = 0x0114,\n        [Reprisal(\"Reversal Slash\")] ReversalSlash = 0x0115,\n        [Reprisal(\"Counter Barrier\")] CounterBarrier = 0x0116,\n        [Reprisal(\"Payback Raid\")] PaybackRaid = 0x0117,\n        [Reprisal(\"Payback Surge\")] PaybackSurge = 0x0118,\n        [Reprisal(\"Payback Fang\")] PaybackFang = 0x0119,\n        [Reprisal(\"Aerial Recovery\")] AerialRecovery = 0x011A,\n        [Shotlock(\"Shotlock\")] Shotlock = 0x011B,\n        [Shotlock(\"Meteor Shower\")] MeteorShower = 0x011C,\n        [Shotlock(\"Flame Salvo\")] FlameSalvo = 0x011D,\n        [Shotlock(\"Chaos Snake\")] ChaosSnake = 0x011E,\n        [Shotlock(\"Bubble Blaster\")] BubbleBlaster = 0x011F,\n        [Shotlock(\"Dark Volley\")] DarkVolley = 0x0120,\n        [Shotlock(\"Ragnarok\")] Ragnarok = 0x0121,\n        [Shotlock(\"Thunderstorm\")] Thunderstorm = 0x0122,\n        [Shotlock(\"Bio Barrage\")] BioBarrage = 0x0123,\n        [Shotlock(\"Prism Rain\")] PrismRain = 0x0124,\n        [Shotlock(\"Pulse Bomb\")] PulseBomb = 0x0125,\n        [Shotlock(\"Photon Charge\")] PhotonCharge = 0x0126,\n        [Shotlock(\"Absolute Zero\")] AbsoluteZero = 0x0127,\n        [Shotlock(\"Lightning Ray\")] LightningRay = 0x0128,\n        [Shotlock(\"Sonic Shadow\")] SonicShadow = 0x0129,\n        [Shotlock(\"Dark Link\")] DarkLink = 0x012A,\n        [Shotlock(\"Ultima Cannon\")] UltimaCannon = 0x012B,\n        [Shotlock(\"Lightbloom\")] Lightbloom = 0x012C,\n        [Shotlock(\"Multivortex\")] Multivortex = 0x012D,\n        [Info(\"Call\")] Call = 0x0137,\n        [Info(\"Last Dance\")] LastDance = 0x0138,\n        [Info(\"Saber Counter\")] SaberCounter = 0x0139,\n        [Info(\"Tornado Counter\")] TornadoCounter = 0x013A,\n        [Info(\"Rush Counter\")] RushCounter = 0x013B,\n        [Info(\"White Calm\")] WhiteCalm = 0x013C,\n        [Info(\"Selfless Prince\")] SelflessPrince = 0x013D,\n        [Info(\"Swing Slash\")] SwingSlash = 0x013E,\n        [Info(\"Astro Shot\")] AstroShot = 0x013F,\n        [Info(\"Astro Strike\")] AstroStrike = 0x0140,\n        [Info(\"Holy Burst\")] HolyBurstVentus = 0x0141,\n        [Info(\"Dual Limit\")] DualLimit = 0x0142,\n        [Info(\"Grab\")] Grab = 0x0143,\n        [Info(\"Bronco Strike\")] BroncoStrike = 0x0144,\n        [Info(\"Joint Force\")] JointForce = 0x0145,\n        [Info(\"Turn Over\")] TurnOver = 0x0146,\n        [Info(\"Heal Light\")] HealLight = 0x0149,\n        [Info(\"Nothing\")] Nothing = 0x0151,\n        [CommandStyleLevel1(\"Critical Impact\")] CriticalImpact = 0x0152,\n        [CommandStyleLevel1(\"Spellweaver\")] Spellweaver = 0x0153,\n        [CommandStyleLevel1(\"Fever Pitch\")] FeverPitch = 0x0154,\n        [CommandStyleLevel1(\"Firestorm\")] Firestorm = 0x0155,\n        [CommandStyleLevel1(\"Diamond Dust\")] DiamondDust = 0x0156,\n        [CommandStyleLevel1(\"Thunderbolt\")] Thunderbolt = 0x0157,\n        [CommandStyleLevel2(\"Cyclone\")] Cyclone = 0x0158,\n        [CommandStyleLevel2(\"Bladecharge\")] Bladecharge = 0x0159,\n        [CommandStyleLevel2(\"Sky Climber\")] SkyClimber = 0x015A,\n        [CommandStyleLevel2(\"Rockbreaker\")] Rockbreaker = 0x015B,\n        [CommandStyleLevel2(\"Ghost Drive\")] GhostDrive = 0x015C,\n        [CommandStyleLevel2(\"Rhythm Mixer\")] RhythmMixer = 0x015D,\n        [CommandStyleLevel2(\"Dark Impulse\")] DarkImpulse = 0x015E,\n        [CommandStyleLevel2(\"Wingblade\")] Wingblade = 0x015F,\n        [CommandStyleOther(\"Frozen Fortune\")] FrozenFortune = 0x0160,\n        [Info(\"-\")] Empty2 = 0x0161,\n        [Info(\"Nothing\")] Nothing2 = 0x0162,\n        [Dlink(\"Mickey\")] Mickey = 0x0163,\n        [Dlink(\"Donald\")] Donald = 0x0164,\n        [Dlink(\"Goofy\")] Goofy = 0x0165,\n        [Dlink(\"Experiment 626\")] Experiment626 = 0x0166,\n        [Dlink(\"Peter Pan\")] PeterPan = 0x0167,\n        [Dlink(\"Maleficent\")] Maleficent = 0x0168,\n        [Dlink(\"Cinderella\")] Cinderella = 0x0169,\n        [Dlink(\"Snow White\")] SnowWhite = 0x016A,\n        [Dlink(\"Zack\")] Zack = 0x016B,\n        [Dlink(\"Pete\")] Pete = 0x016C,\n        [Dlink(\"Aqua\")] Aqua = 0x016D,\n        [Dlink(\"Ventus\")] Ventus = 0x016E,\n        [Dlink(\"Terra\")] Terra = 0x016F,\n        [Dlink(\"X Aqua\")] XAqua = 0x0170,\n        [Dlink(\"X Ventus\")] XVentus = 0x0171,\n        [Dlink(\"X Terra\")] XTerra = 0x0172,\n        [Dlink(\"Vanitas\")] Vanitas = 0x0173,\n        [Dlink(\"Mickey\")] Mickey2 = 0x0174,\n        [Dlink(\"Donald\")] Donald2 = 0x0175,\n        [Dlink(\"Goofy\")] Goofy2 = 0x0176,\n        [Dlink(\"Experiment 626\")] Experiment6262 = 0x0177,\n        [Dlink(\"Peter Pan\")] PeterPan2 = 0x0178,\n        [Dlink(\"Maleficent\")] Maleficent2 = 0x0179,\n        [Dlink(\"Cinderella\")] Cinderella2 = 0x017A,\n        [Dlink(\"Snow White\")] SnowWhite2 = 0x017B,\n        [Dlink(\"Zack\")] Zack2 = 0x017C,\n        [Dlink(\"Pete\")] Pete2 = 0x017D,\n        [Dlink(\"Aqua\")] Aqua2 = 0x017E,\n        [Dlink(\"Ventus\")] Ventus2 = 0x017F,\n        [Dlink(\"Terra\")] Terra2 = 0x0180,\n        [Dlink(\"Player 1's Mirage Arena Name\")] Player1sMirageArenaName = 0x0181,\n        [Dlink(\"Player 2's Mirage Arena Name\")] Player2sMirageArenaName = 0x0182,\n        [Dlink(\"Player 3's Mirage Arena Name\")] Player3sMirageArenaName = 0x0183,\n        [Dlink(\"Player 4's Mirage Arena Name\")] Player4sMirageArenaName = 0x0184,\n        [Dlink(\"Player 5's Mirage Arena Name\")] Player5sMirageArenaName = 0x0185,\n        [Dlink(\"Player 6's Mirage Arena Name\")] Player6sMirageArenaName = 0x0186,\n        [Dlink(\"Player 7's Mirage Arena Name\")] Player7sMirageArenaName = 0x0187,\n        [Dlink(\"Player 8's Mirage Arena Name\")] Player8sMirageArenaName = 0x0188,\n        [Info(\"Return\")] Return = 0x0189,\n        [Info(\"Nothing\")] Nothing3 = 0x018A,\n        [Info(\"Illusion lvl\")] Illusionlvl = 0x018B,\n        [Info(\"Illusion-S\")] IllusionS = 0x018C,\n        [Info(\"Illusion-B\")] IllusionB2 = 0x018D,\n        [Info(\"Illusion-P\")] IllusionP = 0x018E,\n        [Info(\"Illusion-I\")] IllusionI = 0x018F,\n        [Friendship(\"Borrow/Surface\")] BorrowSurface = 0x019B,\n        [Attack(\"Stomp\")] Stomp = 0x019C,\n        [Magic(\"Aromatherapy\")] Aromatherapy = 0x019D,\n        [Attack(\"Bloody Bounce\")] BloodyBounce = 0x019F,\n        [Info(\"Avoid Jump\")] AvoidJump = 0x01A0,\n        [Info(\"Block\")] Block2 = 0x01A1,\n\n        //Move abilities into seperate enum for better accessibility\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Types/DifficultyType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibBbs.Types\n{\n    public enum DifficultyType : byte\n    {\n        [Info] Beginner = 0x8,\n        [Info] Standard = 0x48,\n        //[Info(\"Standard\")] Standard2 = 0x49, //weird thing on the european games, save this for now\n        [Info] Proud = 0x88,\n        [Info] Critical = 0xC8,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Types/WeaponType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibBbs.Types\n{\n    public enum WeaponType : ushort\n    {\n        [Keyblade(\"Wayward Wind\")] WaywardWind = 0x0001,\n        [Keyblade(\"Rainfell\")] Rainfell = 0x0002,\n        [Keyblade(\"Earthshaker\")] Earthshaker = 0x0003,\n        [Keyblade(\"Treasure Trove (Ventus)\")] TreasureTroveVentus = 0x0004,\n        [Keyblade(\"Treasure Trove (Aqua)\")] TreasureTroveAqua = 0x0005,\n        [Keyblade(\"Treasure Trove (Terra)\")] TreasureTroveTerra = 0x0006,\n        [Keyblade(\"Stroke of Midnight (Ventus)\")] StrokeofMidnightVentus = 0x0007,\n        [Keyblade(\"Stroke of Midnight (Aqua)\")] StrokeofMidnightAqua = 0x0008,\n        [Keyblade(\"Stroke of Midnight (Terra)\")] StrokeofMidnightTerra = 0x0009,\n        [Keyblade(\"Fairy Stars (Ventus)\")] FairyStarsVentus = 0x000A,\n        [Keyblade(\"Fairy Stars (Aqua)\")] FairyStarsAqua = 0x000B,\n        [Keyblade(\"Fairy Stars (Terra)\")] FairyStarsTerra = 0x000C,\n        [Keyblade(\"Victory Line (Ventus)\")] VictoryLineVentus = 0x000D,\n        [Keyblade(\"Victory Line (Aqua)\")] VictoryLineAqua = 0x000E,\n        [Keyblade(\"Victory Line (Terra)\")] VictoryLineTerra = 0x000F,\n        [Keyblade(\"Mark of a Hero (Ventus)\")] MarkofaHeroVentus = 0x0010,\n        [Keyblade(\"Mark of a Hero (Aqua)\")] MarkofaHeroAqua = 0x0011,\n        [Keyblade(\"Mark of a Hero (Terra)\")] MarkofaHeroTerra = 0x0012,\n        [Keyblade(\"Hyperdrive (Ventus)\")] HyperdriveVentus = 0x0013,\n        [Keyblade(\"Hyperdrive (Aqua)\")] HyperdriveAqua = 0x0014,\n        [Keyblade(\"Hyperdrive (Terra)\")] HyperdriveTerra = 0x0015,\n        [Keyblade(\"Pixie Petal (Ventus)\")] PixiePetalVentus = 0x0016,\n        [Keyblade(\"Pixie Petal (Aqua)\")] PixiePetalAqua = 0x0017,\n        [Keyblade(\"Pixie Petal (Terra)\")] PixiePetalTerra = 0x0018,\n        [Keyblade(\"Ultima Weapon (Ventus)\")] UltimaWeaponVentus = 0x0019,\n        [Keyblade(\"Ultima Weapon (Aqua)\")] UltimaWeaponAqua = 0x001A,\n        [Keyblade(\"Ultima Weapon (Terra)\")] UltimaWeaponTerra = 0x001B,\n        [Keyblade(\"Sweetstack (Ventus)\")] SweetstackVentus = 0x001C,\n        [Keyblade(\"Sweetstack (Aqua)\")] SweetstackAqua = 0x001D,\n        [Keyblade(\"Sweetstack (Terra)\")] SweetstackTerra = 0x001E,\n        [Keyblade(\"Frolic Flame\")] FrolicFlame = 0x0021,\n        [Keyblade(\"Lost Memory\")] LostMemory = 0x0022,\n        [Keyblade(\"Destiny's Embrace\")] DestinysEmbrace = 0x0023,\n        [Keyblade(\"Stormfall\")] Stormfall = 0x0024,\n        [Keyblade(\"Brightcrest\")] Brightcrest = 0x0025,\n        [Keyblade(\"Darkgnaw\")] Darkgnaw = 0x0026,\n        [Keyblade(\"Ends of the Earth\")] EndsoftheEarth = 0x0027,\n        [Keyblade(\"Chaos Ripper\")] ChaosRipper = 0x0028,\n        [Keyblade(\"Void Gear (Ventus)\")] VoidGearVentus = 0x0029,\n        [Keyblade(\"Void Gear (Aqua)\")] VoidGearAqua = 0x002A,\n        [Keyblade(\"Void Gear (Terra)\")] VoidGearTerra = 0x002B,\n        [Keyblade(\"No Name (Ventus)\")] NoNameVentus = 0x002C,\n        [Keyblade(\"No Name (Aqua)\")] NoNameAqua = 0x002D,\n        [Keyblade(\"No Name (Terra)\")] NoNameTerra = 0x002E,\n        [Keyblade(\"Royal Radiance (Ventus)\")] RoyalRadianceVentus = 0x002F,\n        [Keyblade(\"Royal Radiance (Aqua)\")] RoyalRadianceAqua = 0x0030,\n        [Keyblade(\"Royal Radiance (Terra)\")] RoyalRadianceTerra = 0x0031,\n        [Keyblade(\"Master's Defender\")] MastersDefender = 0x0032,\n        [Keyblade(\"Ultima Cannon\")] UltimaCannon = 0x0033,\n\n    }\n}\n"
  },
  {
    "path": "KHSave.LibBbs/Types/WorldType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibBbs.Types\n{\n    // https://openkh.dev/bbs/worlds.html\n    public enum WorldType : byte\n    {\n        [World(\"ex\", \"Generic\")] Generic = 0x0,\n        [World(\"dp\", \"Land of Departure\")] LandofDeparture = 0x1,\n        [World(\"sw\", \"Dwarf Woodlands\")] DwarfWoodlands = 0x2,\n        [World(\"cd\", \"Castle of Dreams\")] CastleofDreams = 0x3,\n        [World(\"sb\", \"Enchanted Dominion\")] EnchantedDominion = 0x4,\n        [World(\"yt\", \"The Mysterious Tower\")] MysteriousTower = 0x5,\n        [World(\"rg\", \"Radiant Garden\")] RadiantGarden = 0x6,\n        [World(\"jb\", \"Jungle Book (JP) / Miscellaneous / Realm of Darkness (FM)\")] RealmOfDarkness = 0x7,\n        [World(\"he\", \"Olympus Coliseum\")] Olympus = 0x8,\n        [World(\"ls\", \"Deep Space\")] DeepSpace = 0x9,\n        [World(\"di\", \"Destiny Island\")] DestinyIsland = 0xA,\n        [World(\"pp\", \"Neverland\")] Neverland = 0xB,\n        [World(\"dc\", \"Disney Town\")] DisneyTown = 0xC,\n        [World(\"kg\", \"Keyblade Graveyard\")] KeybladeGraveyard = 0xD,\n        [World(\"vs\", \"Mirage Arena\")] MirageArena = 0xF,\n        [World(\"bd\", \"Command Board\")] CommandBoard = 0x10,\n        [World(\"wm\", \"World Map\")] WorldMap = 0x11,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Attributes/CommandAttributes.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibDDD.Attributes\n{\n    public class AttackAttribute : InfoAttribute\n    {\n        public AttackAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class MovementAttribute : InfoAttribute\n    {\n        public MovementAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class DefenseAttribute : InfoAttribute\n    {\n        public DefenseAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class ReprisalAttribute : InfoAttribute\n    {\n        public ReprisalAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class FlowMotionAttribute : InfoAttribute\n    {\n        public FlowMotionAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class AbilityStatsAttribute : InfoAttribute\n    {\n        public AbilityStatsAttribute(string name = null) : base(name)\n        {\n        }\n    }\n\n    public class AbilitySpiritsAttribute : InfoAttribute\n    {\n        public AbilitySpiritsAttribute(string name = null) : base(name)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Attributes/DreamPiecesAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibDDD.Attributes\n{\n    public class DreamPiecesAttribute : InfoAttribute\n    {\n        public DreamPiecesAttribute(string info) : base(info)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Attributes/GlossaryAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibDDD.Attributes\n{\n    public class GlossaryAttribute : InfoAttribute\n    {\n        public GlossaryAttribute(string info) : base(info)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Attributes/MementoEntriesAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibDDD.Attributes\n{\n    public class MementoEntriesAttribute : InfoAttribute\n    {\n        public MementoEntriesAttribute(string info) : base(info)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Attributes/TrainingToysAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibDDD.Attributes\n{\n    public class TrainingToysAttribute : InfoAttribute\n    {\n        public TrainingToysAttribute(string info) : base(info)\n        { }\n    }\n\n    public class TrainingFoodAttribute : InfoAttribute\n    {\n        public TrainingFoodAttribute(string info) : base(info)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Attributes/TrainingToysFoodAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibDDD.Attributes\n{\n    public class TrainingToysFoodAttribute : InfoAttribute\n    {\n        public TrainingToysFoodAttribute(string info) : base(info)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Constants.cs",
    "content": "namespace KHSave.LibDDD\n{\n    class Constants\n    {\n        public const uint MagicCode3DSEu = 0x444d4f53;\n        public const byte Version3DS = 0x10;\n        public const byte VersionPS4 = 0x14;\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/ISaveKhDDD.cs",
    "content": "using KHSave.LibDDD.Model;\nusing KHSave.LibDDD.Types;\nusing System;\nusing System.IO;\n\nnamespace KHSave.LibDDD\n{\n    public interface ISaveKhDDD\n    {\n        uint GameTimeLoading { get; set; }\n        DifficultyType DifficultyLoading { get; set; }\n        uint SoraXpLoading { get; set; }\n        DifficultyType Difficulty { get; set; }\n        WorldType WorldId { get; set; }\n        byte RoomId { get; set; }\n        byte SpawnId { get; set; }\n        uint GameTime { get; set; }\n        DreamEater[] DreamEaters { get; set; }\n        CommandEntry[] CommandInventory { get; }\n        UInt32 SoraXp { get; set; }\n        ushort SoraDroplets { get; set; }\n        byte SoraLv { get; set; }\n        UInt32 RikuXp { get; set; }\n        ushort RikuDroplets { get; set; }\n        byte RikuLv { get; set; }\n        EquipmentType SoraKeyblade { get; set; }\n        EquipmentType RikuKeyblade { get; set; }\n        UInt32 Munny { get; set; }\n        IDeck[] SoraDecks { get; }\n        IDeck[] RikuDecks { get; }\n\n        void Write(Stream stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/KHSave.LibDDD.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n  \n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.LibDDD/Model/CommandEntry.cs",
    "content": "using KHSave.LibDDD.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibDDD.Model\n{\n    public class CommandEntry\n    {\n        [Data] public EquipmentType Id { get; set; }\n        [Data] public byte SoraEquipFlags { get; set; }\n        [Data] public byte RikuEquipFlags { get; set; }\n        [Data] public byte Unk04 { get; set; }\n        [Data] public byte Amount { get; set; }\n        [Data] public ushort Padding06 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Model/Deck.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibDDD.Model\n{\n    public class Deck : IDeck\n    {\n        [Data(Count = 220)] public byte[] Unk01 { get; set; }\n        [Data(Count = 16)] public byte[] Name { get; set; }\n        [Data(Count = 24)] public byte[] Unk02 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Model/DeckPS4.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibDDD.Model\n{\n    public class DeckPS4 : IDeck\n    {\n        [Data(Count = 220)] public byte[] Unk01 { get; set; }\n        [Data(Count = 43)] public byte[] Name { get; set; }\n        [Data(Count = 55)] public byte[] Unk02 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Model/DreamEater.cs",
    "content": "using KHSave.LibDDD.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibDDD.Model\n{\n    public class DreamEater\n    {\n        [Data] public DreamEaterType DreamEaterType { get; set; }\n        [Data(Count = 5)] public byte[] Unk01 { get; set; }\n        [Data(Count = 22)] public byte[] Name { get; set; }\n        [Data(Count = 33)] public byte[] Unk02 { get; set; }\n        [Data] public byte Attack { get; set; }\n        [Data] public byte Magic { get; set; }\n        [Data] public byte Defence { get; set; }\n        [Data(Count = 192)] public byte[] Unk03 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Model/IDeck.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace KHSave.LibDDD.Model\n{\n    public interface IDeck\n    {\n        public byte[] Unk01 { get; set; }\n        public byte[] Name { get; set; }\n        public byte[] Unk02 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/SaveKhDDD.3DS.cs",
    "content": "using KHSave.LibDDD.Types;\nusing System;\nusing System.IO;\nusing Xe.BinaryMapper;\nusing KHSave.LibDDD.Model;\n\n// A thank you to Hollow_Dragonite, darkmanwe4ever, Bweep, delebile  and all the other people who found parts of the values\n// https://gbatemp.net/threads/kingdom-hearts-3d-dream-drop-distance-save-hack.398408/\n\nnamespace KHSave.LibDDD\n{\n    public partial class SaveKhDDD\n    {\n        public class SaveKhDDD3DS : ISaveKhDDD\n        {\n            [Data(0, 0x163FF)] public byte[] Data { get; set; }\n            [Data(0x10)] public uint GameTimeLoading { get; set; }\n            [Data(0x20)] public DifficultyType DifficultyLoading { get; set; }\n            [Data(0x28)] public uint SoraXpLoading { get; set; }\n            [Data(0x92)] public DifficultyType Difficulty { get; set; }\n            [Data(0x94)] public WorldType WorldId { get; set; }\n            [Data] public byte RoomId { get; set; }\n            [Data] public byte SpawnId { get; set; }\n            [Data(0x98)] public uint GameTime { get; set; }\n            //3 in party and 99 on the bank\n            [Data(0x53a0, Count = 102)] public DreamEater[] DreamEaters { get; set; }\n\n            [Data(0xBFE0, Count = 511)] public CommandEntry[] CommandInventory { get; set; }\n\n            //SoraXp max value 786680?\n            [Data(0xd1cc)] public uint SoraXp { get; set; }\n            [Data(0xd1e0)] public ushort SoraDroplets { get; set; }\n            [Data(0xd1f0)] public byte SoraLv { get; set; }\n\n            //RikuXp max value 786680?\n            [Data(0xd248)] public uint RikuXp { get; set; }\n            [Data(0xd25c)] public ushort RikuDroplets { get; set; }\n            [Data(0xd26c)] public byte RikuLv { get; set; }\n            [Data(0xd2c4)] public EquipmentType SoraKeyblade { get; set; }\n            [Data(0xd2c6)] public EquipmentType RikuKeyblade { get; set; }\n            //Munny max value 999999?\n            [Data(0xd2c8)] public uint Munny { get; set; }\n            [Data(0xd2f0, Count = 3)] public Deck[] SoraDecks { get; set; }\n            [Data(0xd5fc, Count = 3)] public Deck[] RikuDecks { get; set; }\n\n            IDeck[] ISaveKhDDD.SoraDecks => Array.ConvertAll(SoraDecks, x => (IDeck)x);\n            IDeck[] ISaveKhDDD.RikuDecks => Array.ConvertAll(SoraDecks, x => (IDeck)x);\n\n            public void Write(Stream stream) =>\n                BinaryMapping.WriteObject(stream.FromBegin(), this);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/SaveKhDDD.PS4.cs",
    "content": "using KHSave.LibDDD.Types;\nusing System;\nusing System.IO;\nusing Xe.BinaryMapper;\nusing KHSave.LibDDD.Model;\n\nnamespace KHSave.LibDDD\n{\n    public partial class SaveKhDDD\n    {\n        public class SaveKhDDDPS4 : ISaveKhDDD\n        {\n            [Data(0, 0x165FF)] public byte[] Data { get; set; }\n            [Data(0x10)] public uint GameTimeLoading { get; set; }\n            [Data(0x20)] public DifficultyType DifficultyLoading { get; set; }\n            [Data(0x28)] public uint SoraXpLoading { get; set; }\n            [Data(0x92)] public DifficultyType Difficulty { get; set; }\n            [Data(0x94)] public WorldType WorldId { get; set; }\n            [Data] public byte RoomId { get; set; }\n            [Data] public byte SpawnId { get; set; }\n            [Data(0x98)] public uint GameTime { get; set; }\n            //3 in party and 99 on the bank\n            [Data(0x53a0, Count = 102)] public DreamEater[] DreamEaters { get; set; }\n\n            [Data(0xc004, Count = 511)] public CommandEntry[] CommandInventory { get; set; }\n\n            //SoraXp max value 786680?\n            [Data(0xd1f0)] public uint SoraXp { get; set; }\n            [Data(0xd204)] public ushort SoraDroplets { get; set; }\n            [Data(0xd214)] public byte SoraLv { get; set; }\n            //RikuXp max value 786680?\n            [Data(0xd26c)] public uint RikuXp { get; set; }\n            [Data(0xd280)] public ushort RikuDroplets { get; set; }\n            [Data(0xd290)] public byte RikuLv { get; set; }\n            [Data(0xd2e8)] public EquipmentType SoraKeyblade { get; set; }\n            [Data(0xd2ea)] public EquipmentType RikuKeyblade { get; set; }\n            //Munny max value 999999?\n            [Data(0xd2ec)] public uint Munny { get; set; }\n            [Data(0xd314, Count = 3)] public DeckPS4[] SoraDecks { get; set; }\n            [Data(0xd620, Count = 3)] public DeckPS4[] RikuDecks { get; set; }\n\n            IDeck[] ISaveKhDDD.SoraDecks => Array.ConvertAll(SoraDecks, x => (IDeck)x);\n            IDeck[] ISaveKhDDD.RikuDecks => Array.ConvertAll(SoraDecks, x => (IDeck)x);\n\n            public void Write(Stream stream) =>\n                BinaryMapping.WriteObject(stream.FromBegin(), this);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/SaveKhDDD.cs",
    "content": "using System;\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibDDD\n{\n    public partial class SaveKhDDD\n    {\n        internal static IBinaryMapping Mapper;\n\n        public static bool IsValid(Stream stream)\n        {\n            var prevPosition = stream.Position;\n            var magicCode = new BinaryReader(stream).ReadUInt32();\n            stream.Position = prevPosition;\n\n            switch (magicCode)\n            {\n                case Constants.MagicCode3DSEu:\n                    return true;\n                default:\n                    return false;\n            }\n        }\n\n        public static uint GetGameVersion(Stream stream)\n        {\n            if (!IsValid(stream))\n                return 0;\n\n            var prevPosition = stream.Position;\n            stream.Position = 0;\n            var version = new BinaryReader(stream).ReadUInt32();\n            stream.Position = prevPosition;\n\n            return version;\n        }\n\n        // File magic is the same for 3DS/PS4 version so check for save version number\n        public static byte GetFileVersion(Stream stream)\n        {\n            var prevPosition = stream.Position;\n            stream.Position = 4;\n            var version = new BinaryReader(stream).ReadByte();\n            stream.Position = prevPosition;\n\n            return version;\n        }\n\n        public static TSaveKhDDD Read<TSaveKhDDD>(Stream stream)\n            where TSaveKhDDD : class, ISaveKhDDD =>\n            BinaryMapping.ReadObject<TSaveKhDDD>(stream.SetPosition(0));\n\n        public static ISaveKhDDD Read(Stream stream)\n        {\n            switch (GetGameVersion(stream))\n            {\n                case Constants.MagicCode3DSEu:\n                    return ReadVersion(stream);\n\n                default:\n                    throw new NotSupportedException(\"The version is not supported.\");\n            }\n        }\n        public static ISaveKhDDD ReadVersion(Stream stream)\n        {\n            switch (GetFileVersion(stream))\n            {\n                case Constants.Version3DS:\n                    return Read<SaveKhDDD3DS>(stream);\n\n                case Constants.VersionPS4:\n                    return Read<SaveKhDDDPS4>(stream);\n\n                default:\n                    throw new NotSupportedException(\"The version is not supported.\");\n            }\n        }\n\n        public static void Write<TSaveKhDDD>(Stream stream, TSaveKhDDD save)\n            where TSaveKhDDD : class, ISaveKhDDD\n        {\n            BinaryMapping.WriteObject(stream.FromBegin(), save);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Types/DifficultyType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibDDD.Types\n{\n    public enum DifficultyType : byte\n    {\n        [Info] Beginner,\n        [Info] Standard,\n        [Info] Proud,\n        [Info] Critical\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Types/DreamEaterType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibDDD.Types\n{\n    public enum DreamEaterType : byte\n    {\n        [Info(\"Not Used\")] NotUsed,\n        [Info(\"Meow Wow\")] MeomWow,\n        [Info(\"Tama Sheep\")] TamaSheep,\n        [Info(\"Yoggy Ram\")] YoggyRam,\n        [Info(\"Komory Bat\")] KomoryBat,\n        [Info(\"Pricklemane\")] Pricklemane,\n        [Info(\"Hebby Repp\")] HebbyRepp,\n        [Info(\"Sir Kyroo\")] SirKyroo,\n        [Info(\"Toximander\")] Toximander,\n        [Info(\"Fin Fatale\")] FinFatale,\n        [Info(\"Tatsu Steed\")] TatsuSteed,\n        [Info(\"Necho Cat\")] NechoCat,\n        [Info(\"Thunderaffe\")] Thunderaffe,\n        [Info(\"Kooma Panda\")] KoomaPanda,\n        [Info(\"Pegaslick\")] Pegaslick,\n        [Info(\"Iceguin Ace\")] IceguinAce,\n        [Info(\"Peepsta Hoo\")] PeepstaHoo,\n        [Info(\"Escarglow\")] Escarglow,\n        [Info(\"KO Kabuto\")] KOKabuto,\n        [Info(\"Wheeflower\")] Wheeflower,\n        [Info(\"Ghostabocky\")] Ghostabocky,\n        [Info(\"Zolephant\")] Zolephant,\n        [Info(\"Juggle Pup\")] JugglePup,\n        [Info(\"Halbird\")] Halbird,\n        [Info(\"Staggerceps\")] Staggerceps,\n        [Info(\"Fishbone\")] Fishbone,\n        [Info(\"Flowbermeow\")] Flowbermeow,\n        [Info(\"Cyber Yog\")] CyberYog,\n        [Info(\"Chef Kyroo\")] ChefKyroo,\n        [Info(\"Lord Kyroo\")] LordKyroo,\n        [Info(\"Tatsu Blaze\")] TatsuBlaze,\n        [Info(\"Electricorn\")] Electricorn,\n        [Info(\"Woeflower\")] Woeflower,\n        [Info(\"Jestabocky\")] Jestabocky,\n        [Info(\"Eaglider\")] Eaglider,\n        [Info(\"Me Me Bunny\")] MemeBunny,\n        [Info(\"Drill Sye\")] DrillSye,\n        [Info(\"Tyranto Rex\")] TyrantoRex,\n        [Info(\"Majik Lapin\")] MajikLapin,\n        [Info(\"Cera Terror\")] CeraTerror,\n        [Info(\"Skelterwild\")] Skelterwild,\n        [Info(\"Ducky Goose\")] DuckyGoose,\n        [Info(\"Aura Lion\")] AuraLion,\n        [Info(\"Ryu Dragon\")] RyuDragon,\n        [Info(\"Drak Quack\")] DrakQuack,\n        [Info(\"Keeba Tiger\")] KeebaTiger,\n        [Info(\"Meowjesty\")] Meowjesty,\n        [Info(\"Sudo Neku\")] SudoNeku,\n        [Info(\"Frootz Cat\")] FrootzCat,\n        [Info(\"Ursa Circus\")] UrsaCircus,\n        [Info(\"Kab Kannon\")] KabKannon,\n        [Info(\"R & R Seal\")] RRSeal,\n        [Info(\"Spellican [Disabled, becomes R & R Seal.]\")] Spellican,\n        [Info(\"Commantis [Disabled, becomes R & R Seal.]\")] Commantis,\n        [Info(\"Char Clawbster [Disabled, becomes R & R Seal.]\")] CharClawbster,\n        [Info(\"Chill Clawbster [Disabled, becomes R & R Seal.]\")] ChillClawbster,\n        [Info(\"Hockomonkey [Disabled, becomes R & R Seal.]\")] Hockomonkey,\n        [Info(\"Holey Moley [Disabled, becomes R & R Seal.]\")] HoleyMoley,\n        [Info(\"Wargoyle [Disabled, becomes R & R Seal.]\")] Wargoyle,\n        [Info(\"Brawlamari [Disabled, becomes R & R Seal.]\")] Brawlamari,\n        [Info(\"Queen Buzzerfly [Disabled, becomes R & R Seal.]\")] QueenBuzzerfly,\n        [Info(\"Anti Black Coat [Disabled, becomes R & R Seal.]\")] AntiBlackCoat\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Types/EquipmentType.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibDDD.Attributes;\nusing System;\n\n// thank you HOLLOW_DRAGONITE for this list of ID's you made my life a lot easier\n\nnamespace KHSave.LibDDD.Types\n{\n    internal enum ItemType\n    {\n        CommandDeck = 0 << 8,\n        Keyblade = 2 << 8,\n        Recipe = 3 << 8,\n        KeyItem = 4 << 8,\n        Glossary = 5 << 8,\n        DreamPiece = 6 << 8,\n        TrainingFood = 7 << 8,\n        TrainingToy = 8 << 8,\n        Memento = 9 << 8,\n    }\n\n    public enum EquipmentType : short\n    {\n        [Info(\"Empty\")] Empty,\n        [Movement(\"Jump\")] Jump,\n        [Movement(\"High Jump\")] HighJump,\n        [Movement(\"Dodge Roll\")] DodgeRoll,\n        [Movement(\"Slide Roll\")] SlideRoll,\n        [Movement(\"Dark Roll\")] DarkRoll,\n        [Movement(\"Air Slide\")] AirSlide,\n        [Movement(\"Sonic Impact\")] SonicImpact,\n        [Movement(\"Double Impact\")] DoubleImpact,\n        [Movement(\"Glide\")] Glide,\n        [Movement(\"Superglide\")] Superglide,\n        [Movement(\"Shadow Slide\")] ShadowSlide,\n        [Movement(\"Doubleflight\")] Doubleflight,\n        [Defense(\"Block\")] Block,\n        [Defense(\"Wake-Up Block\")] WakeUpBlock,\n        [Defense(\"Link Block\")] LinkBlock,\n        [Defense(\"Sliding Block\")] SlidingBlock,\n        [Defense(\"Dark Barrier\")] DarkBarrier,\n        [Reprisal(\"Counter Rush\")] CounterRush,\n        [Reprisal(\"Counter Aura\")] CounterAura,\n        [Reprisal(\"Shadow Strike\")] ShadowStrike,\n        [Reprisal(\"Payback Raid\")] PaybackRaid,\n        [Reprisal(\"Payback Blast\")] PaybackBlast,\n        [Reprisal(\"Aerial Recovery\")] AerialRecovery,\n        [Reprisal(\"Steep Climb\")] SteepClimb,\n        [Reprisal(\"Rapid Descent\")] RapidDescent,\n        [Reprisal(\"Sliding Sidewinder\")] SlidingSidewinder,\n        [Reprisal(\"Sliding Crescent\")] SlidingCrescent,\n        [FlowMotion(\"Wall Kick\")] WallKick,\n        [FlowMotion(\"Pole Spin\")] PoleSpin,\n        [FlowMotion(\"Pole Swing\")] PoleSwing,\n        [FlowMotion(\"Rail Slide\")] RailSlide,\n        [FlowMotion(\"Superslide\")] Superslide,\n        [FlowMotion(\"Superjump\")] Superjump,\n        [FlowMotion(\"Kick Dive\")] KickDive,\n        [FlowMotion(\"Buzz Saw\")] BuzzSaw,\n        [FlowMotion(\"Blow-Off\")] BlowOff,\n        [FlowMotion(\"Wheel Rush\")] WheelRush,\n        [FlowMotion(\"Sliding Dive\")] SlidingDive,\n        [FlowMotion(\"Shock Dive\")] ShockDive,\n        [Attack(\"Quick Blitz\")] QuickBlitz,\n        [Attack(\"Blizzard Edge\")] BlizzardEdge,\n        [Attack(\"Dark Break\")] DarkBreak,\n        [Attack(\"Slot Edge\")] SlotEdge,\n        [Attack(\"Blitz\")] Blitz,\n        [Attack(\"Meteor Crash\")] MeteorCrash,\n        [Attack(\"Spark Dive\")] SparkDive,\n        [Attack(\"Poison Dive\")] PoisonDive,\n        [Attack(\"Drain Dive\")] DrainDive,\n        [Attack(\"Sliding Dash\")] SlidingDash,\n        [Attack(\"Thunder Dash\")] ThunderDash,\n        [Attack(\"Sonic Blade\")] SonicBlade,\n        [Attack(\"Dark Aura\")] DarkAura,\n        [Attack(\"Zantetsuken\")] Zantetsuken,\n        [Attack(\"Strike Raid\")] StrikeRaid,\n        [Attack(\"Spark Raid\")] SparkRaid,\n        [Attack(\"Circle Raid\")] CircleRaid,\n        [Attack(\"Aerial Slam\")] AerialSlam,\n        [Attack(\"Ars Arcanum\")] ArsArcanum,\n        [Attack(\"Dark Splicer\")] DarkSplicer,\n        [Attack(\"Gravity Strike\")] GravityStrike,\n        [Attack(\"Confusing Strike\")] ConfusingStrike,\n        [Attack(\"Tornado Strike\")] TornadoStrike,\n        [Attack(\"Prism Windmill\")] PrismWindmill,\n        [Attack(\"Timestorm\")] Timestorm,\n        [Attack(\"Fire Windmill\")] FireWindmill,\n        [Attack(\"Icebreaker\")] Icebreaker,\n        [Attack(\"Shadowbreaker\")] Shadowbreaker,\n        [Attack(\"Magnet Spiral\")] MagnetSpiral,\n        [Attack(\"Salvation\")] Salvation,\n        [Attack(\"Limit Storm\")] LimitStorm,\n        [Attack(\"Collision Magnet\")] CollisionMagnet,\n        [Attack(\"Sacrifice\")] Sacrifice,\n        [Attack(\"Break Time\")] BreakTime,\n        [Magic(\"Fire\")] Fire,\n        [Magic(\"Fira\")] Fira,\n        [Magic(\"Firaga\")] Firaga,\n        [Magic(\"Dark Firaga\")] DarkFiraga,\n        [Magic(\"Firaga Burst\")] FiragaBurst,\n        [Magic(\"Mega Flare\")] MegaFlare,\n        [Magic(\"Blizzard\")] Blizzard,\n        [Magic(\"Blizzara\")] Blizzara,\n        [Magic(\"Blizzaga\")] Blizzaga,\n        [Magic(\"Icicle Splitter\")] IcicleSplitter,\n        [Magic(\"Deep Freeze\")] DeepFreeze,\n        [Magic(\"Ice Barrage\")] IceBarrage,\n        [Magic(\"Thunder\")] Thunder,\n        [Magic(\"Thundara\")] Thundara,\n        [Magic(\"Thundaga\")] Thundaga,\n        [Magic(\"Triple Plasma\")] TriplePlasma,\n        [Magic(\"Cure\")] Cure,\n        [Magic(\"Cura\")] Cura,\n        [Magic(\"Curaga\")] Curaga,\n        [Magic(\"Esuna\")] Esuna,\n        [Magic(\"Zero Gravity\")] ZeroGravity,\n        [Magic(\"Zero Gravira\")] ZeroGravira,\n        [Magic(\"Zero Graviga\")] ZeroGraviga,\n        [Magic(\"Zero Graviza\")] ZeroGraviza,\n        [Magic(\"Balloon\")] Balloon,\n        [Magic(\"Balloonra\")] Balloonra,\n        [Magic(\"Balloonga\")] Balloonga,\n        [Magic(\"Spark\")] Spark,\n        [Magic(\"Sparkra\")] Sparkra,\n        [Magic(\"Sparkga\")] Sparkga,\n        [Magic(\"Faith\")] Faith,\n        [Magic(\"Tornado\")] Tornado,\n        [Magic(\"Meteor\")] Meteor,\n        [Magic(\"Mini\")] Mini,\n        [Magic(\"Blackout\")] Blackout,\n        [Magic(\"Time Bomb\")] TimeBomb,\n        [Magic(\"Confuse\")] Confuse,\n        [Magic(\"Bind\")] Bind,\n        [Magic(\"Poison\")] Poison,\n        [Magic(\"Slow\")] Slow,\n        [Magic(\"Sleep\")] Sleep,\n        [Magic(\"Sleepra\")] Sleepra,\n        [Magic(\"Sleepga\")] Sleepga,\n        [Magic(\"Stop\")] Stop,\n        [Magic(\"Vanish\")] Vanish,\n        [Consumable(\"Potion\")] Potion,\n        [Consumable(\"Hi-Potion\")] HiPotion,\n        [Consumable(\"Mega-Potion\")] MegaPotion,\n        [Consumable(\"Drop-Me-Not\")] DropMeNot,\n        [Consumable(\"Drop-Me-Never\")] DropMeNever,\n        [Consumable(\"Panacea\")] Panacea,\n        [Consumable(\"Elixir\")] Elixir,\n        [Consumable(\"Megalixir\")] Megalixir,\n        [Consumable(\"Dream Candy\")] DreamCandy,\n        [Info(\"Protect\")] Protect,\n        [Info(\"Shell\")] Shell,\n        [Info(\"Regen\")] Regen,\n        [Info(\"Haste\")] Haste,\n        [Info(\"Drain\")] Drain,\n        [Info(\"Combo Assist\")] ComboAssist,\n        [Info(\"Auto-Life\")] AutoLife,\n        [Info(\"Spirit Roar\")] SpiritRoar,\n        [Info(\"DUMMY\")] DUMMY,\n        [Info(\"Attack\")] Attack,\n        [Info(\"Save\")] Save,\n        [Info(\"Talk\")] Talk,\n        [Info(\"Open\")] Open,\n        [Info(\"Examine\")] Examine,\n        [Info(\"Shop\")] Shop,\n        [Info(\"Rescue\")] Rescue,\n        [Info(\"Finish\")] Finish,\n        [Info(\"Nightmare Clash\")] NightmareClash,\n        [Info(\"Finish\")] Finish146,\n        [Info(\"DUMMY\")] DUMMY147,\n        [Info(\"Link Portal\")] LinkPortal,\n        [Info(\"Meow Wounce\")] MeowWounce,\n        [Info(\"Berserker Bronco\")] BerserkerBronco,\n        [Info(\"Unwind\")] Unwind,\n        [Info(\"Debug Jump\")] DebugJump,\n        [Info(\"? ? ?\")] Unnamed153,\n        [Info(\"Meow Wounce\")] MeowWounce154,\n        [Info(\"Roll Call\")] RollCall,\n        [Info(\"Whirling Bronco\")] WhirlingBronco,\n        [Info(\"Fly-By Knight\")] FlyByKnight,\n        [Info(\"Hammer Throw\")] HammerThrow,\n        [Info(\"Flame Thrower\")] FlameThrower,\n        [Info(\"Decussation\")] Decussation,\n        [Info(\"Poison Dash\")] PoisonDash,\n        [Info(\"Water Blaster\")] WaterBlaster,\n        [Info(\"Bubble Blaster\")] BubbleBlaster,\n        [Info(\"Paw Groove\")] PawGroove,\n        [Info(\"Equestrian Raid\")] EquestrianRaid,\n        [Info(\"Swing Fling\")] SwingFling,\n        [Info(\"Equestrian Raid\")] EquestrianRaid167,\n        [Info(\"Belly Raid\")] BellyRaid,\n        [Info(\"Fly-By Knight\")] FlyByKnight169,\n        [Info(\"Roll Call\")] RollCall170,\n        [Info(\"Target Shot\")] TargetShot,\n        [Info(\"Cure Sun\")] CureSun,\n        [Info(\"Vacuum Ghost\")] VacuumGhost,\n        [Info(\"Berserker Bronco\")] BerserkerBronco174,\n        [Info(\"Lucky Dice\")] LuckyDice,\n        [Info(\"Fly-By Knight\")] FlyByKnight176,\n        [Info(\"Trap Shot\")] TrapShot,\n        [Info(\"Water Blaster\")] WaterBlaster178,\n        [Info(\"Meow Wounce\")] MeowWounce179,\n        [Info(\"Whirling Bronco\")] WhirlingBronco180,\n        [Info(\"Decussation\")] Decussation181,\n        [Info(\"Decussation\")] Decussation182,\n        [Info(\"Fire Blaster\")] FireBlaster,\n        [Info(\"Equestrian Raid\")] EquestrianRaid184,\n        [Info(\"Poison Rain\")] PoisonRain,\n        [Info(\"Vacuum Ghost\")] VacuumGhost186,\n        [Info(\"Fly-By Knight\")] FlyByKnight187,\n        [Info(\"Swing Fling\")] SwingFling188,\n        [Info(\"Roll Call\")] RollCall189,\n        [Info(\"Flame Raid\")] FlameRaid,\n        [Info(\"Swing Fling\")] SwingFling191,\n        [Info(\"Roll Call\")] RollCall192,\n        [Info(\"Ice Raid\")] IceRaid,\n        [Info(\"Tail Groove\")] TailGroove,\n        [Info(\"Aura Raid\")] AuraRaid,\n        [Info(\"Decussation\")] Decussation196,\n        [Info(\"Tail Groove\")] TailGroove197,\n        [Info(\"Aura Raid\")] AuraRaid198,\n        [Info(\"Meow Wounce\")] MeowWounce199,\n        [Info(\"Flame Thrower\")] FlameThrower200,\n        [Info(\"Paw Groove\")] PawGroove201,\n        [Info(\"Swing Fling\")] SwingFling202,\n        [Info(\"Target Shot\")] TargetShot203,\n        [Info(\"Lucky Dice\")] LuckyDice204,\n        [Info(\"Ragnarok\")] Ragnarok,\n        [Info(\"Prism Light\")] PrismLight,\n        [Info(\"Chaos Snake\")] ChaosSnake,\n        [Info(\"Trinity Limit\")] TrinityLimit,\n        [Info(\"Ice Wave\")] IceWave,\n        [Info(\"Whomperstomp\")] Whomperstomp,\n        [Info(\"Comet\")] Comet,\n        [Info(\"Unison Rush\")] UnisonRush,\n        [Info(\"Dream Shot\")] DreamShot,\n        [Info(\"Shadowblade\")] Shadowblade,\n        [Info(\"? ? ?\")] Unknown215,\n        [Info(\"Shining Hammer\")] ShiningHammer,\n        [Info(\"Fire Raid\")] FireRaid,\n        [Info(\"Wavesurfer\")] Wavesurfer,\n        [Info(\"Thunderstorm\")] Thunderstorm,\n        [Info(\"Darkest Fears\")] DarkestFears,\n        [Info(\"Rising Wing\")] RisingWing,\n        [Info(\"Bladecharge\")] Bladecharge,\n        [Info(\"Ghost Drive\")] GhostDrive,\n        [Info(\"Tron\")] Tron,\n        [Info(\"Code Break\")] CodeBreak,\n        [Info(\"Wonder Comic\")] WonderComic,\n        [Info(\"Bubble Burst\")] BubbleBurst,\n        [Info(\"Melody Catcher\")] MelodyCatcher,\n        [Info(\"Slingshot\")] Slingshot,\n        [Info(\"Faithline\")] Faithline,\n        [Info(\"Nightmare's End\")] NightmareEnd,\n        [Info(\"Mirage Split\")] MirageSplit,\n        [Info(\"? ? ?\")] Unnamed232,\n        [Info(\"? ? ?\")] Unnamed233,\n        [Info(\"? ? ?\")] Unnamed234,\n        [AbilityStats(\"HP Boost\")] HPBoost,\n        [AbilityStats(\"Fire Boost\")] FireBoost,\n        [AbilityStats(\"Blizzard Boost\")] BlizzardBoost,\n        [AbilityStats(\"Thunder Boost\")] ThunderBoost,\n        [AbilityStats(\"Water Boost\")] WaterBoost,\n        [AbilityStats(\"Cure Boost\")] CureBoost,\n        [AbilityStats(\"Item Boost\")] ItemBoost,\n        [AbilityStats(\"Attack Haste\")] AttackHaste,\n        [AbilityStats(\"Magic Haste\")] MagicHaste,\n        [AbilityStats(\"Attack Boost\")] AttackBoost,\n        [AbilityStats(\"Magic Boost\")] MagicBoost,\n        [AbilityStats(\"Defense Boost\")] DefenseBoost,\n        [AbilityStats(\"Fire Screen\")] FireScreen,\n        [AbilityStats(\"Blizzard Screen\")] BlizzardScreen,\n        [AbilityStats(\"Thunder Screen\")] ThunderScreen,\n        [AbilityStats(\"Water Screen\")] WaterScreen,\n        [AbilityStats(\"Dark Screen\")] DarkScreen,\n        [AbilityStats(\"Light Screen\")] LightScreen,\n        [AbilityStats(\"Mini Block\")] MiniBlock,\n        [AbilityStats(\"Blindness Block\")] BlindnessBlock,\n        [AbilityStats(\"Confusion Block\")] ConfusionBlock,\n        [AbilityStats(\"Bind Block\")] BindBlock,\n        [AbilityStats(\"Poison Block\")] PoisonBlock,\n        [AbilityStats(\"Slow Block\")] SlowBlock,\n        [AbilityStats(\"Sleep Block\")] SleepBlock,\n        [AbilityStats(\"Stop Block\")] StopBlock,\n        [AbilityStats(\"Reload Boost\")] ReloadBoost,\n        [AbilityStats(\"Defender\")] Defender,\n        [AbilitySupport(\"Combo Plus\")] ComboPlus,\n        [AbilitySupport(\"Air Combo Plus\")] AirComboPlus,\n        [AbilitySupport(\"Combo Master\")] ComboMaster,\n        [AbilitySupport(\"EXP Boost\")] EXPBoost,\n        [AbilitySupport(\"EXP Walker\")] EXPWalker,\n        [AbilitySupport(\"EXP Zero\")] EXPZero,\n        [AbilitySupport(\"Damage Syphon\")] DamageSyphon,\n        [AbilitySupport(\"Second Chance\")] SecondChance,\n        [AbilitySupport(\"Once More\")] OnceMore,\n        [AbilitySupport(\"Scan\")] Scan,\n        [AbilitySupport(\"Leaf Bracer\")] LeafBracer,\n        [AbilitySupport(\"Treasure Magnet\")] TreasureMagnet,\n        [AbilitySpirits(\"Link Critical\")] LinkCritical,\n        [AbilitySpirits(\"Support Boost\")] SupportBoost,\n        [AbilitySpirits(\"Waking Dream\")] WakingDream,\n        [Info(\"? ? ?\")] Unknown279,\n        [Info(\"? ? ?\")] Unknown280,\n        [Info(\"Link Accelerator\")] LinkAccelerator,\n        [Info(\"Flowmotion Turbo\")] FlowmotionTurbo,\n        [Info(\"Drop Decelerator\")] DropDecelerator,\n        [Info(\"Attack Gain\")] AttackGain,\n        [Info(\"Magic Gain\")] MagicGain,\n        [Info(\"Defense Gain\")] DefenseGain,\n        [Info(\"Affinity Gain\")] AffinityGain,\n        [Info(\"Spirit Auto-Life\")] SpiritAutoLife,\n        [Info(\"Ordinary Day\")] OrdinaryDay,\n        [Info(\"HP Showers\")] HPShowers,\n        [Info(\"Munnystorm\")] Munnystorm,\n        [Info(\"Treasure Front\")] TreasureFront,\n        [Info(\"Bargain Flurry\")] BargainFlurry,\n        [Info(\"Risky Winds\")] RiskyWinds,\n        [Info(\"Overcast\")] Overcast,\n        [Info(\"? ? ?\")] Unknown296,\n        [Info(\"HP Prize S\")] HPPrizeS,\n        [Info(\"HP Prize L\")] HPPrizeL,\n        [Info(\"Munny Prize S\")] MunnyPrizeS,\n        [Info(\"Munny Prize M\")] MunnyPrizeM,\n        [Info(\"Munny Prize L\")] MunnyPrizeL,\n        [Info(\"Droplet S\")] DropletS,\n        [Info(\"Droplet L\")] DropletL,\n        [Info(\"Prize Box\")] PrizeBox,\n        [Info(\"Rare Prize Box\")] RarePrizeBox,\n        [Info(\"PRIZE_ID_Dream1\")] PRIZE_ID_Dream1,\n        [Info(\"PRIZE_ID_Dream2\")] PRIZE_ID_Dream2,\n        [Info(\"PRIZE_ID_Dream3\")] PRIZE_ID_Dream3,\n        [Info(\"PRIZE_ID_Dream4\")] PRIZE_ID_Dream4,\n        [Info(\"PRIZE_ID_Dream5\")] PRIZE_ID_Dream5,\n        [Info(\"PRIZE_ID_Dream6\")] PRIZE_ID_Dream6,\n        [Info(\"PRIZE_ID_Dream7\")] PRIZE_ID_Dream7,\n        [Info(\"PRIZE_ID_Dream8\")] PRIZE_ID_Dream8,\n        [Info(\"PRIZE_ID_Dream9\")] PRIZE_ID_Dream9,\n        [Info(\"PRIZE_ID_Dream10\")] PRIZE_ID_Dream10,\n        [Info(\"PRIZE_ID_Dream11\")] PRIZE_ID_Dream11,\n        [Info(\"PRIZE_ID_Dream12\")] PRIZE_ID_Dream12,\n        [Info(\"PRIZE_ID_Dream13\")] PRIZE_ID_Dream13,\n        [Info(\"PRIZE_ID_Dream14\")] PRIZE_ID_Dream14,\n        [Info(\"PRIZE_ID_Dream15\")] PRIZE_ID_Dream15,\n        [Info(\"PRIZE_ID_Dream16\")] PRIZE_ID_Dream16,\n        [Info(\"PRIZE_ID_Dream17\")] PRIZE_ID_Dream17,\n        [Info(\"PRIZE_ID_Dream18\")] PRIZE_ID_Dream18,\n        [Info(\"PRIZE_ID_Dream19\")] PRIZE_ID_Dream19,\n        [Info(\"PRIZE_ID_Dream20\")] PRIZE_ID_Dream20,\n        [Info(\"PRIZE_ID_Dream21\")] PRIZE_ID_Dream21,\n        [Info(\"PRIZE_ID_Dream22\")] PRIZE_ID_Dream22,\n        [Info(\"PRIZE_ID_Dream23\")] PRIZE_ID_Dream23,\n        [Info(\"PRIZE_ID_Dream24\")] PRIZE_ID_Dream24,\n        [Info(\"PRIZE_ID_Dream25\")] PRIZE_ID_Dream25,\n        [Info(\"PRIZE_ID_Dream26\")] PRIZE_ID_Dream26,\n        [Info(\"PRIZE_ID_Dream27\")] PRIZE_ID_Dream27,\n        [Info(\"PRIZE_ID_Dream28\")] PRIZE_ID_Dream28,\n        [Info(\"PRIZE_ID_Dream29\")] PRIZE_ID_Dream29,\n        [Info(\"PRIZE_ID_Dream30\")] PRIZE_ID_Dream30,\n        [Info(\"PRIZE_ID_Dream31\")] PRIZE_ID_Dream31,\n        [Info(\"PRIZE_ID_Dream32\")] PRIZE_ID_Dream32,\n        [Info(\"PRIZE_ID_Dream33\")] PRIZE_ID_Dream33,\n        [Info(\"PRIZE_ID_Dream34\")] PRIZE_ID_Dream34,\n        [Info(\"PRIZE_ID_Dream35\")] PRIZE_ID_Dream35,\n        [Info(\"PRIZE_ID_Dream36\")] PRIZE_ID_Dream36,\n        [Info(\"PRIZE_ID_Dream37\")] PRIZE_ID_Dream37,\n        //[Info(\"? ? ?\")] ???,\n        //[Info(\"? ? ?\")] ???,\n        //[Magic(\"Fire\")] Fire,\n        //[Magic(\"Fira\")] Fira,\n        //[Magic(\"Firaga\")] Firaga,\n        //[Magic(\"Dark Firaga\")] DarkFiraga,\n        //[Magic(\"Firaga Burst\")] FiragaBurst,\n        //[Magic(\"Mega Flare\")] MegaFlare,\n        //[Magic(\"Blizzard\")] Blizzard,\n        //[Magic(\"Blizzara\")] Blizzara,\n        //[Magic(\"Blizzaga\")] Blizzaga,\n        //[Magic(\"Icicle Splitter\")] IcicleSplitter,\n        //[Magic(\"Deep Freeze\")] DeepFreeze,\n        //[Magic(\"Ice Barrage\")] IceBarrage,\n        //[Magic(\"Thunder\")] Thunder,\n        //[Magic(\"Thundara\")] Thundara,\n        //[Magic(\"Thundaga\")] Thundaga,\n        //[Magic(\"Triple Plasma\")] TriplePlasma,\n        //[Magic(\"Cure\")] Cure,\n        //[Magic(\"Cura\")] Cura,\n        //[Magic(\"Curaga\")] Curaga,\n        //[Magic(\"Esuna\")] Esuna,\n        //[Magic(\"Zero Gravity\")] ZeroGravity,\n        //[Magic(\"Zero Gravira\")] ZeroGravira,\n        //[Magic(\"Zero Graviga\")] ZeroGraviga,\n        //[Magic(\"Zero Graviza\")] ZeroGraviza,\n        //[Magic(\"Balloon\")] Balloon,\n        //[Magic(\"Balloonra\")] Balloonra,\n        //[Magic(\"Balloonga\")] Balloonga,\n        //[Magic(\"Spark\")] Spark,\n        //[Magic(\"Sparkra\")] Sparkra,\n        //[Magic(\"Sparkga\")] Sparkga,\n        //[Magic(\"Faith\")] Faith,\n        //[Magic(\"Tornado\")] Tornado,\n        //[Magic(\"Meteor\")] Meteor,\n        //[Magic(\"Mini\")] Mini,\n        //[Magic(\"Blackout\")] Blackout,\n        //[Magic(\"Time Bomb\")] TimeBomb,\n        //[Magic(\"Confuse\")] Confuse,\n        //[Magic(\"Bind\")] Bind,\n        //[Magic(\"Poison\")] Poison,\n        //[Magic(\"Slow\")] Slow,\n        //[Magic(\"Sleep\")] Sleep,\n        //[Magic(\"Sleepra\")] Sleepra,\n        //[Magic(\"Sleepga\")] Sleepga,\n        //[Magic(\"Stop\")] Stop,\n        //[Magic(\"Vanish\")] Vanish,\n        //[Consumable(\"Potion\")] Potion,\n        //[Consumable(\"Hi-Potion\")] HiPotion,\n        //[Consumable(\"Mega-Potion\")] MegaPotion,\n        //[Consumable(\"Wakey Waker\")] WakeyWaker,\n        //[Consumable(\"Wakey Wham\")] WakeyWham,\n        //[Consumable(\"Panacea\")] Panacea,\n        //[Consumable(\"Elixir\")] Elixir,\n        //[Consumable(\"Megalixir\")] Megalixir,\n        //[Consumable(\"Dream Candy\")] DreamCandy,\n        //[Info(\"Protect\")] Protect,\n        //[Info(\"Shell\")] Shell,\n        //[Info(\"Regen\")] Regen,\n        //[Info(\"Haste\")] Haste,\n        //[Info(\"Drain\")] Drain,\n        //[Info(\"Combo Assist\")] ComboAssist,\n        //[Info(\"Auto-Life\")] AutoLife,\n        //[Info(\"Spirit Roar\")] SpiritRoar,\n        //[Info(\"Faith\")] Faith,\n        //[Info(\"Dark Mist\")] DarkMist,\n        //[Consumable(\"Elixir\")] Elixir,\n        //[Magic(\"Ice Zone\")] IceZone,\n        //[Magic(\"Thundaga\")] Thundaga,\n        //[Magic(\"Mega Flare\")] MegaFlare,\n        //[Magic(\"Waterga\")] Waterga,\n        //[Magic(\"Magnet Freeze\")] MagnetFreeze,\n        //[Magic(\"Laser Spin\")] LaserSpin,\n        //[Magic(\"Mega Flare\")] MegaFlare,\n\n        // xx02 - keyblades\n        [Keyblade(\"Kingdom Key\")] KingdomKey = ItemType.Keyblade,\n        [Keyblade(\"Skull Noise (Sora)\")] SkullNoiseS,\n        [Keyblade(\"Guardian Bell (Sora)\")] GuardianBellS,\n        [Keyblade(\"Ferris Gear\")] FerrisGear,\n        [Keyblade(\"Dual Disc (Sora)\")] DualDiscS,\n        [Keyblade(\"All for One (Sora)\")] AllForOneS,\n        [Keyblade(\"Counterpoint (Sora)\")] CounterpointS,\n        [Keyblade(\"Sweet Dreams (Sora)\")] SweetDreamsS,\n        [Keyblade(\"Ultima Weapon (Sora)\")] UltimaWeaponS,\n        [Keyblade(\"Unbound (Sora)\")] UnboundS,\n        [Keyblade(\"Divewing (Sora)\")] DiveWingS,\n        [Keyblade(\"End of Pain (Sora)\")] EndOfPainS,\n        [Keyblade(\"Knockout Punch (Sora)\")] KnockoutPunchS,\n        [Keyblade(\"UNNAMED (RS-READY LARGE KEYBLADE ROSE HELP)\")] UnnamedK1,\n        [Keyblade(\"UNNAMED (RS-READY LARGE KEYBLADE ASSEMBLY HELP)\")] UnnamedK2,\n        [Keyblade(\"SORA UNUSED KBLADE (SORA UNUSED KEYBLADE 3 HELP)\")] UnusedK1,\n        [Keyblade(\"Soul Eater\")] SoulEater,\n        [Keyblade(\"Skull Noise (Riku)\")] SkullNoiseR,\n        [Keyblade(\"Guardian Bell (Riku)\")] GuardianBellR,\n        [Keyblade(\"Ocean's Rage\")] OceansRage,\n        [Keyblade(\"Dual Disc (Riku)\")] DualDiscR,\n        [Keyblade(\"All for One (Riku)\")] AllForOneR,\n        [Keyblade(\"Counterpoint (Riku)\")] CounterpointR,\n        [Keyblade(\"Sweet Dreams (Riku)\")] SweetDreamsR,\n        [Keyblade(\"Ultima Weapon (Riku)\")] UltimaWeaponR,\n        [Keyblade(\"Unbound (Riku)\")] UnboundR,\n        [Keyblade(\"Divewing (Riku)\")] DiveWingR,\n        [Keyblade(\"End of Pain (Riku)\")] EndOfPainR,\n        [Keyblade(\"Knockout Punch (Riku)\")] KnockoutPunchR,\n        [Keyblade(\"UNNAMED\")] Unused1D02,\n        [Keyblade(\"UNNAMED\")] Unused1E02,\n        [Keyblade(\"Way to the Dawn\")] WayToTheDawn,\n\n        [Recipe(\"Meow Wow Recipe\")] MeowWowRecipe = ItemType.Recipe,\n        [Recipe(\"Tama Sheep Recipe\")] TamaSheepRecipe,\n        [Recipe(\"Yoggy Ram Recipe\")] YoggyRamRecipe,\n        [Recipe(\"Komory Bat Recipe\")] KomoryBatRecipe,\n        [Recipe(\"Pricklemane Recipe\")] PricklemaneRecipe,\n        [Recipe(\"Hebby Repp Recipe\")] HebbyReppRecipe,\n        [Recipe(\"Sir Kyroo Recipe\")] SirKyrooRecipe,\n        [Recipe(\"Toximander Recipe\")] ToximanderRecipe,\n        [Recipe(\"Fin Fatale Recipe\")] FinFataleRecipe,\n        [Recipe(\"Tatsu Steed Recipe\")] TatsuSteedRecipe,\n        [Recipe(\"Necho Cat Recipe\")] NechoCatRecipe,\n        [Recipe(\"Thunderaffe Recipe\")] ThunderaffeRecipe,\n        [Recipe(\"Kooma Panda Recipe\")] KoomaPandaRecipe,\n        [Recipe(\"Pegaslick Recipe\")] PegaslickRecipe,\n        [Recipe(\"Iceguin Ace Recipe\")] IceguinAceRecipe,\n        [Recipe(\"Peepsta Hoo Recipe\")] PeepstaHooRecipe,\n        [Recipe(\"Escarglow Recipe\")] EscarglowRecipe,\n        [Recipe(\"KO Kabuto Recipe\")] KOKabutoRecipe,\n        [Recipe(\"Wheeflower Recipe\")] WheeflowerRecipe,\n        [Recipe(\"Ghostabocky Recipe\")] GhostabockyRecipe,\n        [Recipe(\"Zolephant Recipe\")] ZolephantRecipe,\n        [Recipe(\"Juggle Pup Recipe\")] JugglePupRecipe,\n        [Recipe(\"Halbird Recipe\")] HalbirdRecipe,\n        [Recipe(\"Staggerceps Recipe\")] StaggercepsRecipe,\n        [Recipe(\"Fishbon\")] Fishbon,\n        [Recipe(\"Unused Recipe\")] UnusedRecipe,\n        [Recipe(\"Flowbermeow Recipe\")] FlowbermeowRecipe,\n        [Recipe(\"Cyber Yog Recipe\")] CyberYogRecipe,\n        [Recipe(\"Chef Kyroo Recipe\")] ChefKyrooRecipe,\n        [Recipe(\"Lord Kyroo Recipe\")] LordKyrooRecipe,\n        [Recipe(\"Tatsu Blaze Recipe\")] TatsuBlazeRecipe,\n        [Recipe(\"Electricorn Recipe\")] ElectricornRecipe,\n        [Recipe(\"Woeflower Recipe\")] WoeflowerRecipe,\n        [Recipe(\"Jestabocky Recipe\")] JestabockyRecipe,\n        [Recipe(\"Eaglider Recipe\")] EagliderRecipe,\n        [Recipe(\"Me Me Bunny Recipe\")] MeMeBunnyRecipe,\n        [Recipe(\"Drill Sye Recipe\")] DrillSyeRecipe,\n        [Recipe(\"Tyranto Rex Recipe\")] TyrantoRexRecipe,\n        [Recipe(\"Majik Lapin Recipe\")] MajikLapinRecipe,\n        [Recipe(\"Cera Terror Recipe\")] CeraTerrorRecipe,\n        [Recipe(\"Skelterwild Recipe\")] SkelterwildRecipe,\n        [Recipe(\"Ducky Goose Recipe\")] DuckyGooseRecipe,\n        [Recipe(\"Aura Lion Recipe\")] AuraLionRecipe,\n        [Recipe(\"Ryu Dragon Recipe\")] RyuDragonRecipe,\n        [Recipe(\"Drak Quack Recipe\")] DrakQuackRecipe,\n        [Recipe(\"Keeba Tiger Recipe\")] KeebaTigerRecipe,\n        [Recipe(\"Meowjesty Recipe\")] MeowjestyRecipe,\n        [Recipe(\"Sudo Neku Recipe\")] SudoNekuRecipe,\n        [Recipe(\"Frootz Cat Recipe\")] FrootzCatRecipe,\n        [Recipe(\"Ursa Circus Recipe\")] UrsaCircusRecipe,\n        [Recipe(\"Kab Kannon Recipe\")] KabKannonRecipe,\n        [Recipe(\"R & R Seal Recipe\")] RAndRSealRecipe,\n        [Recipe(\"Catanuki Recipe\")] CatanukiRecipe,\n        [Recipe(\"Beatalike Recipe\")] BeatalikeRecipe,\n        [Recipe(\"Tubguin Ace Recipe\")] TubguinAceRecipe,\n        [Recipe(\"RECIPE 55\")] RECIPE_55,\n        [Recipe(\"RECIPE 56\")] RECIPE_56,\n        [Recipe(\"RECIPE 57\")] RECIPE_57,\n        [Recipe(\"RECIPE 58\")] RECIPE_58,\n        [Recipe(\"RECIPE 59\")] RECIPE_59,\n        [Recipe(\"RECIPE 60\")] RECIPE_60,\n\n        [KeyItem(\"Stage Gadget\")] StageGadget = ItemType.KeyItem,\n        [KeyItem(\"KEY ITEM 2\")] KEY_ITEM_2,\n        [KeyItem(\"KEY ITEM 3\")] KEY_ITEM_3,\n        [KeyItem(\"KEY ITEM 4\")] KEY_ITEM_4,\n        [KeyItem(\"KEY ITEM 5\")] KEY_ITEM_5,\n        [KeyItem(\"KEY ITEM 6\")] KEY_ITEM_6,\n        [KeyItem(\"KEY ITEM 7\")] KEY_ITEM_7,\n        [KeyItem(\"KEY ITEM 8\")] KEY_ITEM_8,\n        [KeyItem(\"KEY ITEM 9\")] KEY_ITEM_9,\n        [KeyItem(\"KEY ITEM 10\")] KEY_ITEM_10,\n        [KeyItem(\"KEY ITEM 11\")] KEY_ITEM_11,\n        [KeyItem(\"KEY ITEM 12\")] KEY_ITEM_12,\n        [KeyItem(\"KEY ITEM 13\")] KEY_ITEM_13,\n        [KeyItem(\"KEY ITEM 14\")] KEY_ITEM_14,\n        [KeyItem(\"KEY ITEM 15\")] KEY_ITEM_15,\n        [KeyItem(\"KEY ITEM 16\")] KEY_ITEM_16,\n        [KeyItem(\"KEY ITEM 17\")] KEY_ITEM_17,\n        [KeyItem(\"KEY ITEM 18\")] KEY_ITEM_18,\n        [KeyItem(\"KEY ITEM 19\")] KEY_ITEM_19,\n        [KeyItem(\"KEY ITEM 20\")] KEY_ITEM_20,\n        [KeyItem(\"KEY ITEM 21\")] KEY_ITEM_21,\n        [KeyItem(\"KEY ITEM 22\")] KEY_ITEM_22,\n        [KeyItem(\"KEY ITEM 23\")] KEY_ITEM_23,\n        [KeyItem(\"KEY ITEM 24\")] KEY_ITEM_24,\n        [KeyItem(\"KEY ITEM 25\")] KEY_ITEM_25,\n        [KeyItem(\"KEY ITEM 26\")] KEY_ITEM_26,\n        [KeyItem(\"KEY ITEM 27\")] KEY_ITEM_27,\n        [KeyItem(\"KEY ITEM 28\")] KEY_ITEM_28,\n        [KeyItem(\"KEY ITEM 29\")] KEY_ITEM_29,\n        [KeyItem(\"KEY ITEM 30\")] KEY_ITEM_30,\n        [KeyItem(\"KEY ITEM 31\")] KEY_ITEM_31,\n        [KeyItem(\"KEY ITEM 32\")] KEY_ITEM_32,\n        [KeyItem(\"KEY ITEM 33\")] KEY_ITEM_33,\n        [KeyItem(\"KEY ITEM 34\")] KEY_ITEM_34,\n        [KeyItem(\"KEY ITEM 35\")] KEY_ITEM_35,\n        [KeyItem(\"KEY ITEM 36\")] KEY_ITEM_36,\n        [KeyItem(\"KEY ITEM 37\")] KEY_ITEM_37,\n        [KeyItem(\"KEY ITEM 38\")] KEY_ITEM_38,\n        [KeyItem(\"KEY ITEM 39\")] KEY_ITEM_39,\n        [KeyItem(\"KEY ITEM 40\")] KEY_ITEM_40,\n\n        [Glossary(\"Keyblades\")] Keyblades = ItemType.Glossary,\n        [Glossary(\"Keyblade Masters\")] KeybladeMasters,\n        [Glossary(\"Master Xehanort\")] MasterXehanort,\n        [Glossary(\"The Keyblade War\")] TheKeybladeWar,\n        [Glossary(\"Heartless\")] Heartless,\n        [Glossary(\"Kingdom Hearts\")] KingdomHearts,\n        [Glossary(\"Nobodies\")] Nobodies,\n        [Glossary(\"Organization \")] Organization,\n        [Glossary(\"Seven Princesses\")] SevenPrincesses,\n        [Glossary(\"Recusant's Sigil\")] RecusantSigil,\n        [Glossary(\"χ-blade\")] XBlade,\n        [Glossary(\"Hearts Tied to Sora\")] HeartsTiedtoSora,\n        [Glossary(\"Secret Message\")] SecretMessage,\n        [Glossary(\"GLOSSARY 14\")] GLOSSARY_14,\n        [Glossary(\"GLOSSARY 15\")] GLOSSARY_15,\n        [Glossary(\"GLOSSARY 16\")] GLOSSARY_16,\n        [Glossary(\"GLOSSARY 17\")] GLOSSARY_17,\n        [Glossary(\"GLOSSARY 18\")] GLOSSARY_18,\n        [Glossary(\"GLOSSARY 19\")] GLOSSARY_19,\n        [Glossary(\"GLOSSARY 20\")] GLOSSARY_20,\n\n        [DreamPieces(\"Fleeting Figment\")] FleetingFigment = ItemType.DreamPiece,\n        [DreamPieces(\"Fleeting Fancy\")] FleetingFancy,\n        [DreamPieces(\"Fleeting Fantasy\")] FleetingFantasy,\n        [DreamPieces(\"Lofty Figment\")] LoftyFigment,\n        [DreamPieces(\"Lofty Fancy\")] LoftyFancy,\n        [DreamPieces(\"Lofty Fantasy\")] LoftyFantasy,\n        [DreamPieces(\"Rampant Figment\")] RampantFigment,\n        [DreamPieces(\"Rampant Fancy\")] RampantFancy,\n        [DreamPieces(\"Rampant Fantasy\")] RampantFantasy,\n        [DreamPieces(\"Dulcet Figment\")] DulcetFigment,\n        [DreamPieces(\"Dulcet Fancy\")] DulcetFancy,\n        [DreamPieces(\"Dulcet Fantasy\")] DulcetFantasy,\n        [DreamPieces(\"Malleable Fantasy\")] MalleableFantasy,\n        [DreamPieces(\"Prickly Fantasy\")] PricklyFantasy,\n        [DreamPieces(\"Wild Fantasy\")] WildFantasy,\n        [DreamPieces(\"Epic Fantasy\")] EpicFantasy,\n        [DreamPieces(\"Charming Fantasy\")] CharmingFantasy,\n        [DreamPieces(\"Brilliant Fantasy\")] BrilliantFantasy,\n        [DreamPieces(\"Intrepid Figment\")] IntrepidFigment,\n        [DreamPieces(\"Intrepid Fancy\")] IntrepidFancy,\n        [DreamPieces(\"Intrepid Fantasy\")] IntrepidFantasy,\n        [DreamPieces(\"Savage Fantasy\")] SavageFantasy,\n        [DreamPieces(\"Noble Figment\")] NobleFigment,\n        [DreamPieces(\"Noble Fancy\")] NobleFancy,\n        [DreamPieces(\"Noble Fantasy\")] NobleFantasy,\n        [DreamPieces(\"Grim Figment\")] GrimFigment,\n        [DreamPieces(\"Grim Fancy\")] GrimFancy,\n        [DreamPieces(\"Grim Fantasy\")] GrimFantasy,\n        [DreamPieces(\"Vibrant Figment\")] VibrantFigment,\n        [DreamPieces(\"Vibrant Fancy\")] VibrantFancy,\n        [DreamPieces(\"Vibrant Fantasy\")] VibrantFantasy,\n        [DreamPieces(\"Troubling Figment\")] TroublingFigment,\n        [DreamPieces(\"Troubling Fancy\")] TroublingFancy,\n        [DreamPieces(\"Troubling Fantasy\")] TroublingFantasy,\n        [DreamPieces(\"Wondrous Figment\")] WondrousFigment,\n        [DreamPieces(\"Wondrous Fancy\")] WondrousFancy,\n        [DreamPieces(\"Wondrous Fantasy\")] WondrousFantasy,\n\n        [TrainingFood(\"Confetti Candy\")] ConfettiCandy = ItemType.TrainingFood,\n        [TrainingFood(\"Shield Cookie\")] ShieldCookie,\n        [TrainingFood(\"Block-It Chocolate\")] BlockItChocolate,\n        [TrainingFood(\"Ice Dream Cone\")] IceDreamCone,\n        [TrainingFood(\"Royal Cake\")] RoyalCake,\n        [TrainingFood(\"Confetti Candy 2\")] ConfettiCandy2,\n        [TrainingFood(\"Shield Cookie 2\")] ShieldCookie2,\n        [TrainingFood(\"Block-It Chocolate 2\")] BlockItChocolate2,\n        [TrainingFood(\"Ice Dream Cone 2\")] IceDreamCone2,\n        [TrainingFood(\"Confetti Candy 3\")] ConfettiCandy3,\n        [TrainingFood(\"Shield Cookie 3\")] ShieldCookie3,\n        [TrainingFood(\"Block-It Chocolate 3\")] BlockItChocolate3,\n        [TrainingFood(\"Ice Dream Cone 3\")] IceDreamCone3,\n        [TrainingFood(\"FOOD ITEM 16\")] FOOD_ITEM_16,\n        [TrainingFood(\"FOOD ITEM 17\")] FOOD_ITEM_17,\n        [TrainingFood(\"FOOD ITEM 18\")] FOOD_ITEM_18,\n        [TrainingFood(\"FOOD ITEM 19\")] FOOD_ITEM_19,\n        [TrainingFood(\"FOOD ITEM 20\")] FOOD_ITEM_20,\n\n        [TrainingToys(\"Balloon\")] BalloonToy = ItemType.TrainingToy,\n        [TrainingToys(\"Candy Goggles\")] CandyGoggles,\n        [TrainingToys(\"Water Barrel\")] WaterBarrel,\n        [TrainingToys(\"Paint Gun: Red\")] PaintGun_Red,\n        [TrainingToys(\"Paint Gun: Blue\")] PaintGun_Blue,\n        [TrainingToys(\"Paint Gun: Green\")] PaintGun_Green,\n        [TrainingToys(\"Paint Gun: Yellow\")] PaintGun_Yellow,\n        [TrainingToys(\"Paint Gun: White\")] PaintGun_White,\n        [TrainingToys(\"Paint Gun: Black\")] PaintGun_Black,\n        [TrainingToys(\"Paint Gun: Purple\")] PaintGun_Purple,\n        [TrainingToys(\"Paint Gun: Sky Blue\")] PaintGun_SkyBlue,\n        [TrainingToys(\"TOY 14\")] TOY_14,\n        [TrainingToys(\"TOY 15\")] TOY_15,\n        [TrainingToys(\"TOY 16\")] TOY_16,\n        [TrainingToys(\"TOY 17\")] TOY_17,\n        [TrainingToys(\"TOY 18\")] TOY_18,\n        [TrainingToys(\"TOY 19\")] TOY_19,\n        [TrainingToys(\"TOY 20\")] TOY_20,\n\n        // xx09 - Memento Entries\n    }\n}\n"
  },
  {
    "path": "KHSave.LibDDD/Types/WorldType.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibDDD.Types\n{\n    public enum WorldType : byte\n    {\n        [World(\"ex\", \"ex\")] WorldEx,\n        [World(\"de\", \"Destiny Island\")] DestinyIsland,\n        [World(\"yt\", \"Mysterious Tower\")] MysteriousTower,\n        [World(\"tw\", \"Traverse Town\")] TraverseTown,\n        [World(\"tm\", \"Country of the Musketeers\")] CountryOfTheMusketeers,\n        [World(\"fa\", \"Symphony of Sorcery\")] SymphonyOfSorcery,\n        [World(\"pi\", \"Pranksters Paradise\")] PrankstersParadise,\n        [World(\"rg\", \"Radiant Garden\")] RadiantGarden,\n        [World(\"nd\", \"La Cite des Cloches\")] LaCiteDesCloches,\n        [World(\"tl\", \"The Grid\")] TheGrid,\n        [World(\"eh\", \"The World That Never Was\")] TheWorldThatNeverWas,\n        [World(\"wm\", \"World Map\")] WorldMap,\n        [World(\"di\", \"Spirit Space\")] SpiritSpace,\n        [World(\"zz\", \"World ZZ\")] WorldZz,\n        [World(\"unk1\", \"Traverse Town (Revisited)\")] TraverseTownRevisited,\n        [World(\"unk2\", \"Ending\")] Ending,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Chunks/Chunk.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Chunks\n{\n    public class ChunkHeader\n    {\n        [Data] public byte Unknown00 { get; set; }\n        [Data] public byte Unknown01 { get; set; }\n        [Data] public byte Unknown02 { get; set; }\n        [Data] public byte Unused03 { get; set; }\n        [Data] public int NextChunkOffset { get; set; }\n        [Data] public int Unused08 { get; set; }\n        [Data] public int Unused0c { get; set; }\n\n        public bool IsTail =>\n            NextChunkOffset == 0 &&\n            Unknown00 == 4 &&\n            Unknown01 == 0 &&\n            Unknown02 == 1;\n    }\n\n    public class ChunkContent\n    {\n        [Data(Count = 0x10)] public string MagicCode { get; set; }\n        [Data] public int Unknown10 { get; set; }\n        [Data] public int ChunkLength { get; set; }\n        public byte[] RawData { get; set; }\n    }\n\n    public class Chunk\n    {\n        public enum Type\n        {\n            RESD = 0x0004ffe8,\n            LOSD = 0x660e8,\n            TAIL = 0\n        }\n\n        public const int HeaderLength = 0x10;\n        public const int ContentHeaderLength = 0x18;\n        public const int TotalHeaderLength = HeaderLength + ContentHeaderLength;\n\n        public ChunkHeader Header { get; }\n        public ChunkContent Content { get; }\n\n        public bool IsLastChunk => Header.IsTail;\n        public bool IsEmpty => Content.ChunkLength == 0;\n\n        public Chunk(ChunkHeader header, ChunkContent content)\n        {\n            Header = header;\n            Content = content;\n        }\n\n        public static Chunk Read(Stream stream, Type type)\n        {\n            var header = BinaryMapping.ReadObject<ChunkHeader>(stream);\n            if (header.IsTail)\n                return new Chunk(header, null);\n\n            var content = BinaryMapping.ReadObject<ChunkContent>(stream);\n            var expectedSize = (int)type;\n            content.RawData = stream.ReadBytes(expectedSize);\n\n            if (header.NextChunkOffset > 0)\n                stream.Position = header.NextChunkOffset;\n\n            return new Chunk(header, content);\n        }\n\n        public void Write(Stream stream)\n        {\n            BinaryMapping.WriteObject(stream, Header);\n            if (!IsLastChunk)\n            {\n                BinaryMapping.WriteObject(stream, Content);\n                stream.Write(Content.RawData, 0, Content.RawData.Length);\n            }\n        }\n\n        public override string ToString()\n        {\n            var h = $\"H({Header.Unknown00:X02}, {Header.Unknown01:X02}, {Header.Unknown02:X02})\";\n            if (IsEmpty)\n                return $\"{h} EMPTY\";\n            if (!IsLastChunk)\n                return $\"{h} C({Content.MagicCode}, {Content.Unknown10:X}\";\n            else\n                return $\"{h} END\";\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Chunks/ChunkChapter.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.LibFf7Remake.Types;\nusing System.Linq;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Chunks\n{\n    public class ChunkChapter\n    {\n        private const int Length = 0x660E8;\n        private const int MaxNpcEntryCount = 0x800;\n        private const int MaxObjectEntryCount = 0x100;\n        private const int MaxEnemyEntryCount = 0x400;\n\n        [Data(Count = Length)] public byte[] Data { get; set; }\n\n        [Data(0)] public byte IsChapterInPlay { get; set; }\n        [Data(1)] public byte ChapterId { get; set; }\n        [Data(3)] public byte PlayableCharacter { get; set; }\n        [Data(4, Count = SaveFf7Remake.CharacterCount)] public CharacterStatusType[] CharacterStatus { get; set; }\n        [Data(0xc, Count = SaveFf7Remake.CharacterCount)] public Vector3f[] Positions { get; set; }\n        [Data(0x6c, Count = SaveFf7Remake.CharacterCount)] public Vector3f[] Rotations { get; set; }\n        [Data(0x1a2)] public ushort Bgm { get; set; }\n        [Data(0xcbd8, Count = MaxNpcEntryCount, Stride = 0x20)] public ChapterObject[] Npc { get; set; }\n        [Data(0x2abd8, Count = MaxObjectEntryCount, Stride = 0x20)] public ChapterObject[] Objects { get; set; }\n        [Data(0x2cbd8, Count = MaxEnemyEntryCount, Stride = 0x20)] public ChapterObject[] Enemies { get; set; }\n\n        public ChunkChapter()\n        {\n            Data = new byte[Length];\n            CharacterStatus = new CharacterStatusType[SaveFf7Remake.CharacterCount];\n            Positions = Enumerable.Range(0, SaveFf7Remake.CharacterCount).Select(x => new Vector3f()).ToArray();\n            Rotations = Enumerable.Range(0, SaveFf7Remake.CharacterCount).Select(x => new Vector3f()).ToArray();\n            Npc = Enumerable.Range(0, MaxNpcEntryCount).Select(x => new ChapterObject()).ToArray();\n            Objects = Enumerable.Range(0, MaxObjectEntryCount).Select(x => new ChapterObject()).ToArray();\n            Enemies = Enumerable.Range(0, MaxEnemyEntryCount).Select(x => new ChapterObject()).ToArray();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Chunks/ChunkCommon.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake.Models;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Chunks\n{\n    public class ChunkCommon\n    {\n        [Data(Count = 0x4FFE8)] public byte[] Data { get; set; }\n\n        [Data(0)] public byte CurrentChapterChunk { get; set; }\n        [Data] public byte Unk01 { get; set; }\n        [Data] public byte Unk02 { get; set; }\n        [Data] public byte Unk03 { get; set; }\n        [Data] public byte Unk04 { get; set; }\n        [Data] public byte Unk05 { get; set; }\n        [Data(6)] public byte CurrentChapterId { get; set; }\n        [Data(7)] public byte CurrentChapterChunk2 { get; set; }\n        [Data(8, Count = SaveFf7Remake.CharacterCount, Stride = 0x40)] public Character[] Characters { get; set; }\n        [Data(0x208, Count = SaveFf7Remake.CharacterCount, Stride = 0x10)] public CharacterStats[] CharactersStats { get; set; }\n        [Data(0x288)] public int Unk288 { get; set; }\n        [Data(0x28c)] public int Unk28c { get; set; }\n        [Data(0x290)] public float Unk290 { get; set; }\n        [Data(0x294)] public int Unk294 { get; set; }\n        [Data(0x298, Count = SaveFf7Remake.CharacterCount)] public Vector3f[] Positions { get; set; }\n        [Data(0x2F8, Count = SaveFf7Remake.CharacterCount)] public Vector3f[] Rotations { get; set; }\n        [Data(0x358, Count = 0x340)] public byte[] Unk358 { get; set; }\n        [Data(0x698, Count = SaveFf7Remake.CharacterCount, Stride = 0x10)] public UnknownStructure[] CharactersUnknown { get; set; }\n        [Data(0x718, Count = 0x80, Stride = 0x10)] public UnknownStructure2[] UnknownStructure2 { get; set; }\n        [Data(0xf18, Count = 0x80, Stride = 0x10)] public WeaponFound[] WeaponFound { get; set; }\n        [Data(0x1718, Count = SaveFf7Remake.CharacterCount, Stride = 0x20)] public CharacterEquipment[] CharactersEquipment { get; set; }\n        [Data(0x1818, Count = 1000, Stride = 0x20)] public Materia[] Materia { get; set; }\n        // [...]\n        [Data(0x34DA8, Count = 0x800, Stride = 0x18)] public Inventory[] Inventory { get; set; }\n        [Data(0x40DA8, Count = SaveFf7Remake.CharacterCount, Stride = 0x30)] public MateriaEquipment[] CharacterMateria { get; set; }\n        [Data(0x40F28, Count = 0x78, Stride = 0x30)] public MateriaEquipment[] WeaponMateria { get; set; }\n        // [425A8...]\n\n        // 0x42862 Cloud Dress\n\n        [Data(0x42F5C)] public byte PlayableCharacter { get; set; }\n        [Data(0x42F5D)] public byte CurrentChapter { get; set; }\n        [Data(0x44EAC, Count = SaveFf7Remake.CharacterCount)] public int[] SummonMateria { get; set; }\n        [Data(0x46DC4, Count = 100, Stride = 0x30)] public UnknownStructure3[] UnknownStructure3 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/KHSave.LibFf7Remake.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/ChapterObject.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class ChapterObject\n    {\n        [Data] public int Index { get; set; }\n        [Data] public float Unknown04 { get; set; }\n        [Data] public int Unknown08 { get; set; }\n        [Data] public float Unknown0c { get; set; }\n        [Data] public float PositionX { get; set; }\n        [Data] public float PositionY { get; set; }\n        [Data] public float PositionZ { get; set; }\n        [Data] public float Rotation { get; set; }\n\n        public override string ToString() =>\n            $\"{Index} {Unknown08} POS({PositionX:F0}, {PositionY:F0}, {PositionZ:F0} {Unknown0c:F0} A({Unknown04:F0}, {Rotation:F0})\";\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/Character.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class Character\n    {\n        [Data] public byte Level { get; set; }\n        [Data] public bool IsUnlocked { get; set; }\n        [Data] public byte AtbBarCount { get; set; }\n        [Data] public byte Speed { get; set; }\n        [Data] public int Limit { get; set; }\n        [Data] public int Unknown08 { get; set; }\n        [Data] public int Unknown0c { get; set; }\n        [Data] public int CurrentHp { get; set; }\n        [Data] public int MaxHp { get; set; }\n        [Data] public int CurrentMp { get; set; }\n        [Data] public int MaxMp { get; set; }\n        [Data] public int Experience { get; set; }\n        [Data] public int Unknown14 { get; set; }\n        [Data] public int Attack { get; set; }\n        [Data] public int MagicAttack { get; set; }\n        [Data] public int Defense { get; set; }\n        [Data] public int MagicDefense { get; set; }\n        [Data] public int Luck { get; set; }\n        [Data] public int Unknown3c { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/CharacterEquipment.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class CharacterEquipment\n    {\n        [Data] public int Weapon { get; set; }\n        [Data] public int Armor { get; set; }\n        [Data] public int Accessory { get; set; }\n        [Data] public int Unused0c { get; set; }\n        [Data] public int Unused10 { get; set; }\n        [Data] public int Unused14 { get; set; }\n        [Data] public int Unused18 { get; set; }\n        [Data] public int Unused1c { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/CharacterStats.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class CharacterStats\n    {\n        [Data] public int Strength { get; set; }\n        [Data] public int Magic { get; set; }\n        [Data] public int Vitality { get; set; }\n        [Data] public int Spirit { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/Inventory.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class Inventory\n    {\n        [Data] public uint UnixTimestamp { get; set; }\n        [Data] public int Unused04 { get; set; }\n        [Data] public InventoryType Type { get; set; }\n        [Data] public int Count { get; set; }\n        [Data] public int Unknown10 { get; set; }\n        [Data] public int Unused14 { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/Materia.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class Materia\n    {\n        [Data] public byte Level { get; set; }\n        [Data] public byte Character { get; set; }\n        [Data] public byte IsObtained { get; set; }\n        [Data] public byte Unused03 { get; set; }\n        [Data] public int ItemId { get; set; }\n        [Data] public int AbilityPoint { get; set; }\n        [Data] public int Unknown0c { get; set; }\n        [Data] public uint UnixTimestamp { get; set; }\n        [Data] public int Unknown14 { get; set; }\n        [Data] public int Index { get; set; }\n        [Data] public int Unknown1c { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/MateriaEquipment.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class MateriaEquipment\n    {\n        [Data] public int Character { get; set; }\n        [Data] public int ItemId { get; set; }\n        [Data] public int Unknown08 { get; set; }\n        [Data] public int Unknown0c { get; set; }\n        [Data(0x10, Count = 8)] public int[] MateriaIndex { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/UnknownStructure.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class UnknownStructure\n    {\n        [Data] public byte Unknown00 { get; set; }\n        [Data] public byte Unknown01 { get; set; }\n        [Data] public byte Unknown02 { get; set; }\n        [Data] public byte Unknown03 { get; set; }\n        [Data] public int Unknown04 { get; set; }\n        [Data] public int Unknown08 { get; set; }\n        [Data] public int KillCount { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/UnknownStructure2.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class UnknownStructure2\n    {\n        [Data] public byte Unknown00 { get; set; }\n        [Data] public byte Unknown01 { get; set; }\n        [Data] public byte Unknown02 { get; set; }\n        [Data] public byte Unknown03 { get; set; }\n        [Data] public int ItemId { get; set; }\n        [Data] public int Unknown08 { get; set; }\n        [Data] public int Unknown0c { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/UnknownStructure3.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class UnknownStructure3\n    {\n        [Data] public byte Character { get; set; }\n        [Data] public byte Unknown01 { get; set; }\n        [Data] public byte Unknown02 { get; set; }\n        [Data] public byte Unused03 { get; set; }\n        [Data] public int Unknown04 { get; set; }\n        [Data] public int Unknown08 { get; set; }\n        [Data] public int Unknown0c { get; set; }\n        [Data] public int Unknown10 { get; set; }\n        [Data(Count = 12)] public byte[] Characters { get; set; }\n        [Data] public int Unused20 { get; set; }\n        [Data] public int Unused24 { get; set; }\n        [Data] public int Unused28 { get; set; }\n        [Data] public int Unused2c { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/Vector3f.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class Vector3f\n    {\n        [Data] public float X { get; set; }\n        [Data] public float Y { get; set; }\n        [Data] public float Z { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Models/WeaponFound.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake.Models\n{\n    public class WeaponFound\n    {\n        [Data] public int ItemId { get; set; }\n        [Data] public int Index { get; set; }\n        [Data] public int Unused08 { get; set; }\n        [Data] public int Unused0c { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/SaveFf7Remake.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake.Chunks;\nusing KHSave.LibFf7Remake.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibFf7Remake\n{\n    public class SaveFf7Remake\n    {\n        public const int ChapterCount = 18;\n        public const int CharacterCount = 8;\n        public const int Cloud = 0;\n        public const int Barret = 1;\n        public const int Tifa = 2;\n        public const int Aerith = 3;\n        public const int Red13 = 4;\n        public const int Yuffie = 5;\n        public const int Sonon = 6;\n        public const int LastKnownCharacter = Sonon;\n        public const int Unequipped = 9;\n\n        private SaveFf7Remake(List<Chunk> chunks)\n        {\n            Chunks = chunks.ToArray();\n            Chapters = new ChunkChapter[21];\n            ReimportChunks();\n        }\n\n        public SaveFf7Remake Write(Stream stream)\n        {\n            WriteChunk(ChunkCommon, 0);\n            WriteChunk(Chapters[0], 1);\n            WriteChunk(Chapters[1], 2);\n            WriteChunk(Chapters[2], 3);\n            WriteChunk(Chapters[3], 4);\n            WriteChunk(Chapters[4], 5);\n            WriteChunk(Chapters[5], 6);\n            WriteChunk(Chapters[6], 7);\n            WriteChunk(Chapters[7], 8);\n            WriteChunk(Chapters[8], 9);\n            WriteChunk(Chapters[9], 10);\n            WriteChunk(Chapters[10], 11);\n            WriteChunk(Chapters[11], 12);\n            WriteChunk(Chapters[12], 13);\n            WriteChunk(Chapters[13], 14);\n            WriteChunk(Chapters[14], 15);\n            WriteChunk(Chapters[15], 16);\n            WriteChunk(Chapters[16], 17);\n            WriteChunk(Chapters[17], 18);\n            WriteChunk(ChunkCommonPrev, 19);\n            WriteChunk(Chapters[18], 20);\n            WriteChunk(Chapters[19], 21);\n            WriteChunk(Chapters[20], 22);\n\n            foreach (var chunk in Chunks)\n                chunk.Write(stream);\n\n            return this;\n        }\n\n        public ChunkCommon ChunkCommon { get; private set; }\n        public ChunkCommon ChunkCommonPrev { get; private set; }\n\n        public Chunk[] Chunks { get; private set; }\n\n        public byte CurrentChapterChunk { get => ChunkCommon.CurrentChapterChunk; set => ChunkCommon.CurrentChapterChunk = value; }\n        public byte CurrentChapterId { get => ChunkCommon.CurrentChapterId; set => ChunkCommon.CurrentChapterId = value; }\n        public byte CurrentChapterChunk2 { get => ChunkCommon.CurrentChapterChunk2; set => ChunkCommon.CurrentChapterChunk2 = value; }\n        public Character[] Characters { get => ChunkCommon.Characters; set => ChunkCommon.Characters = value; }\n        public CharacterStats[] CharactersStats { get => ChunkCommon.CharactersStats; set => ChunkCommon.CharactersStats = value; }\n        public CharacterEquipment[] CharactersEquipment { get => ChunkCommon.CharactersEquipment; set => ChunkCommon.CharactersEquipment = value; }\n        public Materia[] Materia { get => ChunkCommon.Materia; set => ChunkCommon.Materia = value; }\n        public Inventory[] Inventory { get => ChunkCommon.Inventory; set => ChunkCommon.Inventory = value; }\n        public MateriaEquipment[] CharacterMateria { get => ChunkCommon.CharacterMateria; set => ChunkCommon.CharacterMateria = value; }\n        public MateriaEquipment[] WeaponMateria { get => ChunkCommon.WeaponMateria; set => ChunkCommon.WeaponMateria = value; }\n        public WeaponFound[] WeaponFound { get => ChunkCommon.WeaponFound; set => ChunkCommon.WeaponFound = value; }\n        public byte PlayableCharacter { get => ChunkCommon.PlayableCharacter; set => ChunkCommon.PlayableCharacter = value; }\n        public byte CurrentChapter { get => ChunkCommon.CurrentChapter; set => ChunkCommon.CurrentChapter = value; }\n        public int[] SummonMateria { get => ChunkCommon.SummonMateria; set => ChunkCommon.SummonMateria = value; }\n        public ChunkChapter[] Chapters { get; set; }\n\n        public void ReimportChunks()\n        {\n            ChunkCommon = ReadChunk<ChunkCommon>(0);\n            Chapters[0] = ReadChunk<ChunkChapter>(1);\n            Chapters[1] = ReadChunk<ChunkChapter>(2);\n            Chapters[2] = ReadChunk<ChunkChapter>(3);\n            Chapters[3] = ReadChunk<ChunkChapter>(4);\n            Chapters[4] = ReadChunk<ChunkChapter>(5);\n            Chapters[5] = ReadChunk<ChunkChapter>(6);\n            Chapters[6] = ReadChunk<ChunkChapter>(7);\n            Chapters[7] = ReadChunk<ChunkChapter>(8);\n            Chapters[8] = ReadChunk<ChunkChapter>(9);\n            Chapters[9] = ReadChunk<ChunkChapter>(10);\n            Chapters[10] = ReadChunk<ChunkChapter>(11);\n            Chapters[11] = ReadChunk<ChunkChapter>(12);\n            Chapters[12] = ReadChunk<ChunkChapter>(13);\n            Chapters[13] = ReadChunk<ChunkChapter>(14);\n            Chapters[14] = ReadChunk<ChunkChapter>(15);\n            Chapters[15] = ReadChunk<ChunkChapter>(16);\n            Chapters[16] = ReadChunk<ChunkChapter>(17);\n            Chapters[17] = ReadChunk<ChunkChapter>(18);\n            ChunkCommonPrev = ReadChunk<ChunkCommon>(19);\n            Chapters[18] = ReadChunk<ChunkChapter>(20);\n            Chapters[19] = ReadChunk<ChunkChapter>(21);\n            Chapters[20] = ReadChunk<ChunkChapter>(22);\n        }\n\n        private T ReadChunk<T>(int index)\n            where T : class\n        {\n            var chunk = Chunks[index];\n            if ((chunk?.Content?.RawData?.Length ?? 0) == 0)\n                return default;\n\n            using var stream = new MemoryStream(chunk.Content.RawData);\n            return BinaryMapping.ReadObject<T>(stream);\n        }\n\n        private void WriteChunk<T>(T item, int index)\n            where T : class\n        {\n            var chunk = Chunks[index];\n            using var stream = new MemoryStream(chunk.Content.RawData);\n            BinaryMapping.WriteObject(stream, item);\n        }\n\n        public static bool IsValid(Stream stream)\n        {\n            stream.Position = 0x10;\n            return stream.ReadByte() == 0x52 && stream.ReadByte() == 0x45 &&\n                stream.ReadByte() == 0x53 && stream.ReadByte() == 0x44 &&\n                stream.ReadByte() == 0x52 && stream.ReadByte() == 0x45 &&\n                stream.ReadByte() == 0x53 && stream.ReadByte() == 0x44 &&\n                stream.ReadByte() == 0x52 && stream.ReadByte() == 0x45 &&\n                stream.ReadByte() == 0x53 && stream.ReadByte() == 0x44 &&\n                stream.ReadByte() == 0x52 && stream.ReadByte() == 0x45 &&\n                stream.ReadByte() == 0x53 && stream.ReadByte() == 0x44;\n        }\n\n        private static readonly Chunk.Type[] ReadPattern = new[]\n        {\n            Chunk.Type.RESD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.RESD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.LOSD,\n            Chunk.Type.TAIL,\n        };\n\n        public static SaveFf7Remake Read(Stream stream)\n        {\n            stream.SetPosition(0);\n            var chunks = ReadPattern\n                .Select(x => Chunk.Read(stream, x))\n                .ToList();\n            return new SaveFf7Remake(chunks);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Types/CharacterStatusType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.LibFf7Remake.Types\n{\n    public enum CharacterStatusType : byte\n    {\n        [Info(\"Hidden\")] Hidden,\n        [Info(\"In party\")] InParty,\n        [Info(\"Out party\")] OutParty,\n        [Info(\"3\")] Unk3,\n        [Info(\"4\")] Unk4,\n        [Info(\"Guest\")] Guest,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Types/CharacterType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.LibFf7Remake.Types\n{\n    public enum CharacterType\n    {\n        [Info(\"Cloud\")] Cloud = SaveFf7Remake.Cloud,\n        [Info(\"Barret\")] Barret = SaveFf7Remake.Barret,\n        [Info(\"Tifa\")] Tifa = SaveFf7Remake.Tifa,\n        [Info(\"Aerith\")] Aerith = SaveFf7Remake.Aerith,\n        [Info(\"Red XIII\")] Red13 = SaveFf7Remake.Red13,\n        [Info(\"Yuffie\")] Yuffie = SaveFf7Remake.Yuffie,\n        [Info(\"Sonon\")] Sonon = SaveFf7Remake.Sonon,\n        [Info(\"7\")] Unused7,\n        [Info(\"8\")] Unused8,\n        [Info(\"None\")] None = SaveFf7Remake.Unequipped,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Types/InventoryType.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\n\nnamespace KHSave.LibFf7Remake.Types\n{\n    public enum InventoryType\n    {\n        [Info(\"Disabled\")] Disabled = -1,\n        [Info(\"Empty\")] Empty = 0,\n        [Consumable(\"Potion\")] Potion = 1,\n        [Consumable(\"Hi-Potion\")] HiPotion,\n        [Consumable] Ether,\n        [Consumable(\"Turbo Ether\")] TurboEther,\n        [Consumable] Elixir,\n        [Consumable(\"Phoenix Down\")] PhoenixDown,\n        [Consumable] Antidote,\n        [Consumable(\"Echo Mist\")] EchoMist,\n        [Consumable] Adrenaline,\n        [Consumable] Sedative,\n        [Consumable] Remedy,\n        [Consumable] Celeris,\n        [Consumable] Grenade,\n        [Consumable] Spiderweb,\n        [Consumable(\"Hazardous Material\")] HazardousMaterial,\n        [Consumable(\"Big Bomber\")] BigBomber,\n        [Consumable(\"Motolov Cocktail\")] MotolovCocktail,\n        [Consumable(\"Orb of Gravity\")] OrbOfGravity,\n        [Consumable(\"Smelling Salts\")] SmellingSalts,\n        [Money(\"Gil\")] Gil,\n        [Consumable(\"Maiden's Kiss\")] MaidensKiss,\n        [Consumable(\"Mega-Potion\")] MegaPotion,\n\n        [Consumable(\"AI Programming Core\")] AiProgrammingCore = 31,\n        [Consumable(\"Fuzzy Wuzzy\")] FuzzyWuzzy,\n        [Consumable(\"Mr. Cuddlesworth\")] MrCuddlesWorth,\n\n        [KeyItem(\"Sector 5 Reactor Card\")] Sector5ReactorCard = 100,\n        [KeyItem(\"Tournament Entry Form\")] TournamentEntryForm = 102,\n        [KeyItem(\"Madam M's Endorsement\")] MadamEndorsement,\n        [KeyItem(\"Andrea Endorsement\")] AndreaEndorsement,\n        [KeyItem(\"Shinra ID Card\")] ShinraIDCard = 111,\n\n        [KeyItem(\"Grappling Gun\")] GrapplingGun = 115,\n        [KeyItem(\"Grappling Gun\")] GrapplingGun2,\n        [KeyItem(\"Key to the Sewers\")] KeySewers,\n        [Money(\"Moogle Medal\")] MoogleMedal,\n        [KeyItem(\"Sam’s Coin\")] SamCoin,\n        [KeyItem(\"Shinra Keycard (59th floor)\")] ShinraKeycard59,\n        [KeyItem(\"Hojo's Research Lab Keycard\")] HojoResearchLabKeycard,\n        [KeyItem(\"Combat Analyzer\")] CombatAnalyzer,\n        [KeyItem(\"Watch Security Key\")] WatchSecurityKey,\n        [KeyItem(\"Handmade Necklace\")] HandmadeNecklace,\n        [KeyItem(\"Behemoth Horn\")] BehemothHorn = 126,\n        [KeyItem(\"Medicinal Flowers\")] MedicinalFlowers = 127,\n        [KeyItem(\"Sam's Delivery Lifetime Pass\")] SamDeliveryLifetimePass = 132,\n\n        [KeyItem(\"Madam M’s Requests\")] MadamMRequest = 139,\n        [KeyItem(\"Sam's Requests\")] SamRequest,\n        [KeyItem(\"The Sauce\")] TheSauce,\n        [KeyItem(\"Medicine Voucher\")] MedicineVoucher,\n        [KeyItem(\"VIP Card\")] VipCard,\n        [KeyItem(\"Yellow Flower\")] YellowFlower,\n\n        [KeyItem(\"Graveyard Key\")] GraveyardKey = 148,\n        [KeyItem(\"Guardian Angel’s Calling Cards\")] GuardianAngelCallingCards,\n        [KeyItem(\"Vialabrew\")] Vialabrew,\n        [KeyItem(\"Crimson Spike\")] CrimsonSpike,\n        [KeyItem(\"Bottle of Antiemetic\")] BottleOfAntiemetic,\n        [KeyItem(\"Deodorizing Tablets\")] DeodorizingTablets,\n        [KeyItem(\"Packets of Antacid\")] PacketsOfAntacid,\n        [KeyItem(\"Moogle Membership Card\")] MoogleMembershipCard,\n        [KeyItem(\"Gysahl Greens\")] GysahlGreens,\n        [KeyItem(\"Doctor's List\")] DoctorsList,\n        [KeyItem(\"Moogle's Mortar\")] MooglesMortar,\n        [KeyItem(\"Map to the Hideout\")] MapToTheHideout,\n        [KeyItem(\"Ruby Tiara\")] RubyTiara,\n        [KeyItem(\"Diamond Tiara\")] DiamondTiara,\n        [KeyItem(\"Emerald Tiara\")] EmeraldTiara,\n        [KeyItem(\"Johnny's Wallet\")] JohnnysWallet,\n        [KeyItem(\"Corneo Vault Key\")] CorneoVaultKey,\n        [KeyItem(\"Shinra Keycard (60th floor)\")] ShinraKeycard60,\n        [KeyItem(\"Shinra Keycard (61st floor)\")] ShinraKeycard61,\n        [KeyItem(\"Shinra Keycard (63rd floor)\")] ShinraKeycard63,\n        [KeyItem(\"Shinra Executive Keycard (64th floor)\")] ShinraExecutiveKeycard,\n        [KeyItem(\"Letter from the Guardian Angel\")] LetterFromTheGuardianAngel,\n        [KeyItem(\"Andrea's Earrings\")] AndreaEarrings,\n        [KeyItem(\"Real Calling Card\")] RealCallingCard,\n        [KeyItem(\"Fake Calling Card\")] FakeCallingCard,\n        [KeyItem(\"Corneo Vault Note\")] CorneoVaultNote,\n\n        [WeaponCloud(\"Buster Sword\")] BusterSword = 1001,\n        [WeaponCloud(\"Iron Blade\")] IronBlade,\n        [WeaponCloud(\"Hardedge\")] Hardedge,\n        [WeaponCloud(\"Mythril Saber\")] MythrilSaber,\n        [WeaponCloud(\"Twin Stinger\")] TwinStinger,\n        [WeaponCloud(\"Nail Bat\")] NailBat,\n\n        [WeaponBarret(\"Gatilg Gun\")] GatilgGun = 2001,\n        [WeaponBarret(\"Light Machine Gun\")] LightMachineGun,\n        [WeaponBarret(\"Steel Pincers\")] SteelPincers,\n        [WeaponBarret(\"Big Bertha\")] BigBertha,\n        [WeaponBarret(\"EKG Cannon\")] EkgCannon,\n        [WeaponBarret(\"Wrecking Ball\")] WreckingBall,\n\n        [WeaponTifa(\"Leather Gloves\")] LeatherGloves = 3001,\n        [WeaponTifa(\"Metal Knuckles\")] MetalKnuckles,\n        [WeaponTifa(\"Feathered Gloves\")] FeatheredGloves,\n        [WeaponTifa(\"Mythril Claws\")] MythrilClaws,\n        [WeaponTifa(\"Purple Pain\")] PurplePain,\n        [WeaponTifa(\"Sonic Strikers\")] SonicStrikers,\n\n        [WeaponYuffie(\"4-Point Shuriken\")] FourPointShuriken = 3423,\n\n        [WeaponAerith(\"Guard Stick\")] GuardStick = 4001,\n        [WeaponAerith(\"Silver Staff\")] SilverStaff,\n        [WeaponAerith(\"Bladed Staff\")] BladedStaff,\n        [WeaponAerith(\"Mythril Rod\")] MythrilRod,\n        [WeaponAerith(\"Reinforced Staff\")] ReinforcedStaff,\n        [WeaponAerith(\"Arcane Scepter\")] ArcaneScepter,\n\n        [Weapon(\"Mythril Collar\")] MythrilCollar = 5001,\n\n        [WeaponSonon(\"Marshalist's Staff\")] MarshalistStaff = 8181,\n\n        [Armor(\"Bronze Bangle\")] BronzeBangle = 9001,\n        [Armor(\"Iron Bangle\")] IronBangle,\n        [Armor(\"Titanium Bangle\")] TitaniumBangle,\n        [Armor(\"Gothic Bangle\")] GothicBangle,\n\n        [Armor(\"Leather Bracer\")] LeatherBracer = 9007,\n        [Armor(\"Studder Bracer\")] StudderBracer,\n        [Armor(\"Heavy-Duty Bracer\")] HeavyDutyBracer,\n\n        [Armor(\"Mesmeric Bracelet\")] MesmericBracelet = 9012,\n        [Armor(\"Mythril Bracelet\")] MythrilBracelet,\n        [Armor(\"Sorcerer's Bracelet\")] SorcererBracelet,\n\n        [Accessory(\"Power Wristguards\")] PowerWristguards = 9017,\n        [Accessory(\"Bulletproof Vest\")] BulletproofVest,\n        [Accessory(\"Earrings\")] Earrings,\n        [Accessory(\"Talisman\")] Talisman,\n        [Accessory(\"Headband\")] Headband,\n        [Accessory(\"Star Pendant\")] StarPendant,\n        [Accessory(\"Fury Ring\")] FuryRing,\n        [Accessory(\"Revival Earrings\")] RevivalEarrings,\n        [Accessory(\"Whistlewind Scarf\")] WhistlewindScarf,\n        [Accessory(\"Mythical Amulet\")] MythicalAmulet,\n        [Accessory(\"Healing Carcanet\")] HealingCarcanet,\n        [Accessory(\"Clarity Pendant\")] ClarityPendant,\n        [Accessory(\"Transference Module\")] TransferenceModule,\n        [Accessory(\"Spectral Cogwheel\")] SpectralCogwheel,\n        [Accessory(\"Moogle's Amulet\")] MoogleAmulet,\n        [Accessory(\"Enfeeblement Ring\")] EnfeeblementRing,\n        [Accessory(\"Crescent Moon Charm\")] CrescentMoonCharm,\n        [Accessory(\"Champion Belt\")] ChampionBelt,\n        [Accessory(\"Protective Boots\")] ProtectiveBoots,\n        [Accessory(\"Circlet\")] Circlet,\n        [Accessory(\"Tarot Cards\")] TarotCards,\n        [Accessory(\"Otherworldly Crystal\")] OtherworldlyCrystal,\n        [Accessory(\"Salvation Badge\")] SalvationBadge,\n\n        [MagicMateria(\"Healing\")] Healing = 10001,\n        [MagicMateria(\"Cleansing\")] Cleansing,\n        [MagicMateria(\"Revival\")] Revival,\n        [MagicMateria(\"Fire\")] Fire,\n        [MagicMateria(\"Ice\")] Ice,\n        [MagicMateria(\"Lightning\")] Lightning,\n        [MagicMateria(\"Wind\")] Wind,\n        [MagicMateria(\"Poison\")] Poison,\n        [MagicMateria(\"Binding\")] Binding,\n        [MagicMateria(\"Time\")] Time,\n        [MagicMateria(\"Barrier\")] Barrier,\n        [MagicMateria(\"Subversion\")] Subversion,\n\n        [SupportMateria(\"Magnify\")] Magnify = 11001,\n        [SupportMateria(\"Elemental Materia\")] Elemental,\n        [SupportMateria(\"Warding Materia\")] Warding,\n        [SupportMateria(\"HP Absorption Materia\")] HPAbsorption,\n        [SupportMateria(\"MP Absorption Materia\")] MPAbsorption,\n        [SupportMateria(\"Synergy Materia\")] Synergy,\n        [SupportMateria(\"AP Up Materia\")] APUp,\n\n        [CommandMateria(\"Steal Materia\")] Steal = 12001,\n        [CommandMateria(\"Assess Materia\")] Assess,\n        [CommandMateria(\"Enemy Skill Materia\")] EnemySkill,\n        [CommandMateria(\"Chakra Materia\")] Chakra,\n        [CommandMateria(\"Prayer Materia\")] Prayer,\n        [CommandMateria(\"ATB Boost Materia\")] ATBBoost,\n\n        [CompleteMateria(\"HP Up Materia\")] HPUp = 13001,\n        [CompleteMateria(\"MP Up Materia\")] MPUp,\n        [CompleteMateria(\"Magic Up Materia\")] MagicUp,\n        [CompleteMateria(\"Luck Up Materia\")] LuckUp,\n        [CompleteMateria(\"Gil Up Materia\")] GilUp,\n        [CompleteMateria(\"EXP Up Materia\")] EXPUp,\n        [CompleteMateria(\"Item Master Materia\")] ItemMaster,\n        [CompleteMateria(\"ATB Stagger Materia\")] ATBStagger,\n        [CompleteMateria(\"First Strike Materia\")] FirstStrike,\n        [CompleteMateria(\"Steadfast Block Materia\")] SteadfastBlock,\n        [CompleteMateria(\"Skill Master Materia\")] SkillMaster,\n        [CompleteMateria(\"Deadly Dodge Materia\")] DeadlyDodge,\n        [CompleteMateria(\"Parry Materia\")] Parry,\n        [CompleteMateria(\"ATB Assist Materia\")] ATBAssist,\n        [CompleteMateria(\"Auto-Cure  Materia\")] AutoCure,\n        [CompleteMateria(\"Provoke Materia\")] Provoke,\n        [CompleteMateria(\"Pedometer Materia\")] Pedometer,\n        [CompleteMateria(\"Refocus Materia\")] Refocus,\n\n        [SummonMateria(\"Chocobo & Moogle Materia\")] ChocoboAndMoogle = 14001,\n        [SummonMateria(\"Shiva Materia\")] Shiva,\n        [SummonMateria(\"Ifrit Materia\")] Ifrit,\n        [SummonMateria(\"Leviathan Materia\")] Leviathan,\n        [SummonMateria(\"Bahamut Materia\")] Bahamut,\n        [SummonMateria(\"Fat Chocobo Materia\")] FatChocobo,\n        [SummonMateria(\"Carbuncle Materia\")] Carbuncle,\n        [SummonMateria(\"Cactuar Materia\")] Cactuar,\n        [SummonMateria(\"Chocobo Chick Materia\")] ChocoboChick,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibFf7Remake/Types/ItemCategory.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibFf7Remake.Types\n{\n    public enum ItemCategory\n    {\n        [Info] Consumable,\n        [Info] Gil,\n        [Info] Key,\n        [Unused] Unused03,\n        [Unused] Unused04,\n        [Unused] Unused05,\n        [Unused] Unused06,\n        [Unused] Unused07,\n        [Info] Armor,\n        [Info] Accessory,\n        [Info] Track,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/KHSave.LibPersona3.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.LibPersona3/Models/Character.cs",
    "content": "using KHSave.LibPersona5.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona5.Models\n{\n    public class Character\n    {\n        //[Data(Count = 0x2a8)] public byte[] Data { get; set; }\n\n        //[Data(0)] public short Unknown00 { get; set; }\n        //[Data] public short Unknown02 { get; set; }\n        //[Data] public int Unknown04 { get; set; }\n        //[Data] public int Unknown08 { get; set; }\n        //[Data] public int Unknown0c { get; set; }\n        //[Data] public int Unknown10 { get; set; }\n        //[Data] public int CurrentHp { get; set; }\n        //[Data] public int CurrentMp { get; set; }\n        //[Data] public int Unknown1c { get; set; }\n        //[Data(0x24)] public int Experience { get; set; }\n        //[Data(0x4c, Count = 12, Stride = 0x30)] public Persona[] Persona { get; set; }\n        //[Data] public Equipment MeleeWeapon { get; set; }\n        //[Data] public Equipment Protector { get; set; }\n        //[Data] public Equipment Accessory { get; set; }\n        //[Data] public Equipment Outfit { get; set; }\n        //[Data] public Equipment RangeWeapon { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/Models/Persona.cs",
    "content": "using KHSave.LibPersona3.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona3.Models\n{\n    public record Persona\n    {\n        [Data(Count = 0x34)] public byte[] Data { get; set; }\n\n        [Data(0)] public short Flags { get; set; }\n        [Data] public Demons Id { get; set; }\n        [Data] public byte Level { get; set; }\n        [Data] public byte Break { get; set; }\n        [Data] public short Unk { get; set; }\n        [Data] public int Experience { get; set; }\n        [Data(Count = 8)] public Skill[] Skills { get; set; }\n        [Data] public byte Strength { get; set; }\n        [Data] public byte Magic { get; set; }\n        [Data] public byte Endurance { get; set; }\n        [Data] public byte Agility { get; set; }\n        [Data] public byte Luck { get; set; }\n        [Data] public byte Unk21 { get; set; }\n        [Data] public short Unk22 { get; set; }\n        [Data] public short Unk24 { get; set; }\n        [Data] public short Unk26 { get; set; }\n        [Data] public int Unk28 { get; set; }\n        [Data] public int OverThanatos { get; set; }\n        [Data] public int Unk30 { get; set; }\n\n        public override string ToString() =>\n            $\"{Id}: LV {Level}, St {Strength}, Ma {Magic}, En {Endurance}, Ag {Agility}, Lu {Luck}\\nSkills: {string.Join(\", \", Skills)}\";\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/Models/SocialLinks.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona3.Models\n{\n    public enum SocialLinkArcana\n    {\n        Fool,\n        Magician,\n        Priestess_Beta,\n        Empress_Beta,\n        Emperor,\n        Hiero,\n        Lovers,\n        Priestess,\n        Empress,\n        Lovers_Beta,\n        Strength,\n        Justice,\n        Chariot_TrackTeam,\n        Chariot_KendoTeam,\n        Chariot_SwimTeam,\n        Justice_Beta,\n        Hermit,\n        Fortune_PhotographyClub,\n        Fortune_ArtClub,\n        Fortune_MusicClub,\n        Strenght_Beta,\n        Hanged,\n        Death,\n        Temper,\n        Devil,\n        Tower,\n        Star,\n        Moon,\n        Sun,\n        Judgement,\n    }\n\n    public record SocialLinks\n    {\n        public record Unk\n        {\n            [Data] public int Unk00 { get; set; }\n            [Data] public int Unk04 { get; set; }\n        }\n\n\n        private const int SL_Num = 30;\n\n        [Data] public short Flag { get; set; } // word_859574 (flags, max 0xFF)\n        [Data(Count = SL_Num)] public byte[] Ranks { get; set; } // byte_859576 (min 0, max 10)\n        [Data(Count = SL_Num)] public int[] RankData { get; set; } // //dword_859594[30] ?\n        [Data(Count = SL_Num)] public byte[] dword_859594 { get; set; } //byte_85960C[30] (min 0, max 9)\n        [Data(Count = SL_Num)] public short[] word_85962A { get; set; } //word_85962A[30] (min 0, max 360)\n        [Data(Count = SL_Num)] public short[] word_859666 { get; set; } //word_859666[30] (min 0, max 360)\n        [Data(Count = SL_Num)] public short[] word_8596A2 { get; set; } //word_8596A2[30] (min 0, max 360)\n        [Data(Count = 0x7A)] public byte[] unused_16A { get; set; }\n        [Data] public int dword_859758 { get; set; } // dword_859758\n        [Data] public int unused_1E8 { get; set; }\n        [Data] public byte byte_859760 { get; set; } // byte_859760 (always 0?)\n        [Data] public byte unused_1ED { get; set; }\n        [Data] public short unused_1EE { get; set; }\n        [Data] public int unused_1F0 { get; set; }\n        [Data] public int dword_859768 { get; set; } //dword_859768 (either 0 or 1)\n        [Data(Count = 0x10)] public byte[] unused_1F8 { get; set; }\n        [Data] public byte byte_85977C { get; set; } //byte_85977C (never set?)\n        [Data] public byte unused_209 { get; set; }\n        [Data] public short unused_20A { get; set; }\n        [Data] public byte byte_859790 { get; set; } //byte_859790 (always 1?)\n        [Data] public byte unused_20D { get; set; }\n        [Data] public short word_859792 { get; set; } //word_859792 (always 0?)\n        [Data] public int word_859794 { get; set; } //word_859794 (copied from word_859A9C?)\n        [Data(Count = 9)] public int[] dword_859798 { get; set; } //dword_859798[9] (?)\n        [Data(Count = 7, Stride = 8)] public Unk[] byte_8597BC { get; set; } //byte_8597BC[7][8]\n        [Data(Count = 0x40)] public int[] dword_8597F4 { get; set; } //dword_8597F4[0x40]\n        [Data(Count = 0x40)] public int[] dword_8598F4 { get; set; } //dword_8598F4[0x40]\n        [Data(Count = 0x40)] public byte[] byte_8599F4 { get; set; } //byte_8599F4[0x40]\n        [Data(Count = SL_Num)] public byte[] byte_859A34 { get; set; } //byte_859A34[30]\n        [Data(Count = SL_Num)] public byte[] byte_859A52 { get; set; } //byte_859A52[30]\n        [Data(Count = 8)] public byte[] byte_859A70 { get; set; } //byte_859A70[8]\n\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/Models/SocialLinksPortable.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona3.Models\n{\n    public enum SocialLinkArcanaPortable\n    {\n        Empty,\n        Fool,\n        Magician,\n        Emperor,\n        Hiero,\n        Lovers,\n        Priestess,\n        Empress,\n        Aeon,\n        Hermit_HealthCommittee,\n        Hermit_Librarian,\n        Chariot_Volleyball,\n        Chariot_Tennis,\n        Strength,\n        Fortune_LoveRoute,\n        Fortune,\n        Justice_LoveRoute,\n        Justice,\n        Hanged,\n        Death,\n        Temper,\n        Devil,\n        Tower,\n        Star_LoveRoute,\n        Star,\n        Sun,\n        Judgement,\n        Moon,\n    }\n\n    public record SocialLinksPortable\n    {\n        public record Entry\n        {\n            [Data] public short Arcana { get; set; }\n            [Data] public short Rank { get; set; }\n            [Data] public short Points { get; set; }\n            [Data] public short Unk06 { get; set; }\n            [Data] public short Unk08 { get; set; }\n            [Data] public short Unk0A { get; set; }\n            [Data] public short Unk0C { get; set; }\n            [Data] public short Unk0E { get; set; }\n        }\n\n        public record RankHistoryEntry\n        {\n            [Data] public byte Month { get; set; }\n            [Data] public byte Day { get; set; }\n        }\n\n        public record RankHistory\n        {\n            [Data(Count = 11)] public RankHistoryEntry[] History { get; set; }\n        }\n\n        [Data] public int Unk08 { get; set; }\n        [Data] public int Unk0C { get; set; }\n        [Data(Count = 0x1C, Stride = 0x10)] public Entry[] Entries { get; set; }\n        [Data(Count = 0x1C, Stride = 0x16)] public RankHistory[] History { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/Presets.cs",
    "content": "using System.Collections.Generic;\n\nnamespace KHSave.LibPersona3\n{\n    public static partial class Presets\n    {\n        public record Field\n        {\n            public int Zone { get; set; }\n            public int Room { get; set; }\n            public GameVersion Game { get; set; }\n            public string Description { get; set; }\n        }\n\n        private static Field FieldVF_(int category, int map, string description) => new()\n            { Zone = category, Room = map, Description = description, Game = GameVersion.Vanilla | GameVersion.FES };\n        private static Field FieldVFP(int category, int map, string description) => new()\n            { Zone = category, Room = map, Description = description, Game = GameVersion.Vanilla | GameVersion.FES | GameVersion.Portable };\n        private static Field Field_F_(int category, int map, string description) => new()\n            { Zone = category, Room = map, Description = description, Game = GameVersion.FES };\n        private static Field Field_FP(int category, int map, string description) => new()\n            { Zone = category, Room = map, Description = description, Game = GameVersion.FES | GameVersion.Portable };\n        private static Field Field__P(int category, int map, string description) => new()\n            { Zone = category, Room = map, Description = description, Game = GameVersion.Portable };\n\n        public static List<Field> Fields = new()\n        {\n            FieldVFP(  0,   0, \"\"),\n            FieldVF_(  0,   2, \"\"),\n            FieldVF_(  1,   0, \"\"),\n            FieldVFP(  1,   1, \"City map\"),\n            Field_F_(  4,   2, \"\"),\n            Field_F_(  4,   3, \"\"),\n            Field_F_(  4,   4, \"\"),\n            Field_F_(  4,   5, \"\"),\n            Field_F_(  4,   6, \"\"),\n            Field_F_(  4,   7, \"\"),\n            Field_F_(  4,  10, \"\"),\n            Field_F_(  5,   1, \"\"),\n            Field_F_(  5,   2, \"\"),\n            Field_F_(  5,   3, \"\"),\n            FieldVFP(  6,   1, \"Gekkoukan High, 1st Floor, Main Lobby\"),\n            FieldVFP(  6,   2, \"Gekkoukan High, School Entranceway\"),\n            FieldVFP(  6,   3, \"Gekkoukan High, Classroom 2-F\"),\n            FieldVFP(  6,   4, \"Gekkoukan High, 2nd Floor, Hallway\"),\n            FieldVFP(  6,   5, \"Gekkoukan High, Rooftop\"),\n            FieldVFP(  6,   6, \"Gekkoukan High, School Entranceway\"),\n            FieldVFP(  6,   7, \"Gekkoukan High, 1st Floor, Near Faculty\"),\n            FieldVFP(  6,   8, \"Gekkoukan High, Faculty Office\"),\n            FieldVFP(  6,   9, \"Gekkoukan High, (TODO)\"),\n            FieldVFP(  6,  10, \"Gekkoukan High, Library\"),\n            FieldVFP(  6,  11, \"Gekkoukan High, 1st Floor, Near Clubs\"),\n            FieldVFP(  6,  12, \"Gekkoukan High, Fashion club\"),\n            FieldVFP(  6,  13, \"Gekkoukan High, Photography club\"),\n            FieldVFP(  6,  14, \"Gekkoukan High, Music club\"),\n            FieldVFP(  6,  15, \"Gekkoukan High, Art club\"),\n            FieldVFP(  6,  16, \"Gekkoukan High, 1st Floor, Corridor\"),\n            FieldVFP(  6,  17, \"Gekkoukan High, Track Team\"),\n            FieldVFP(  6,  18, \"Gekkoukan High, Swim Team\"),\n            FieldVFP(  6,  19, \"Gekkoukan High, Kendo Team\"),\n            FieldVFP(  6,  20, \"Gekkoukan High, 1st Floor, Hallway (team)\"),\n            FieldVFP(  6,  21, \"Gekkoukan High, Speech room\"),\n            FieldVFP(  6,  22, \"Gekkoukan High, Classroom unused\"),\n            FieldVFP(  6,  23, \"Gekkoukan High, (TODO)\"),\n            Field__P(  6,  24, \"Gekkoukan High, (TODO)\"),\n            Field__P(  6,  25, \"Gekkoukan High, (TODO)\"),\n            Field__P(  6,  26, \"Gekkoukan High, (TODO)\"),\n            FieldVFP(  7,   1, \"Dorm, Your Room\"),\n            FieldVFP(  7,   2, \"Dorm, 1st Floor, Lounge\"),\n            FieldVFP(  7,   3, \"Dorm, 2nd Floor, Hallway\"),\n            FieldVFP(  7,   4, \"Dorm, 3rd Floor, Hallway\"),\n            FieldVFP(  7,   5, \"Dorm, 4th Floor, Hallway\"),\n            FieldVFP(  7,   6, \"Dorm, Command Room\"),\n            FieldVFP(  7,   7, \"Dorm, 5th Floor, Hallway\"),\n            FieldVFP(  7,   8, \"Dorm, Terrace\"),\n            FieldVFP(  7,   9, \"Dorm, Entrance\"),\n            FieldVFP(  7,  10, \"Dorm, Aegis Room\"),\n            FieldVFP(  7,  11, \"Dorm, (TODO)\"),\n            FieldVFP(  7,  12, \"Dorm, (TODO)\"),\n            FieldVFP(  7,  13, \"Dorm, (TODO)\"),\n            FieldVFP(  7,  14, \"Dorm, Vacant Room\"),\n            FieldVFP(  7,  15, \"Dorm, Vacant Room\"),\n            Field_FP(  7,  16, \"Dorm, (TODO)\"),\n            Field_FP(  7,  17, \"Dorm, (TODO)\"),\n            Field_FP(  7,  18, \"Dorm, (TODO)\"),\n            Field__P(  7,  19, \"Dorm, (TODO)\"),\n            Field__P(  7,  20, \"Dorm, (TODO)\"),\n            Field__P(  7,  21, \"Dorm, (TODO)\"),\n            Field__P(  7,  22, \"Dorm, (TODO)\"),\n            FieldVFP(  8,   1, \"Paulownia Mall\"),\n            FieldVFP(  8,   2, \"Paulownia Mall, Club Escapade\"),\n            FieldVFP(  8,   3, \"Paulownia Mall, Velvet Room\"),\n            FieldVFP(  8,   4, \"Paulownia Mall, Grocery Shop\"),\n            FieldVFP(  8,   5, \"Paulownia Mall, Police Station\"),\n            FieldVFP(  8,   6, \"Paulownia Mall, Jewlery Shop\"),\n            FieldVFP(  8,   7, \"Paulownia Mall, (TODO)\"),\n            FieldVFP(  8,   8, \"Paulownia Mall, (TODO)\"),\n            FieldVFP(  8,   9, \"Paulownia Mall, Back Alley\"),\n            Field__P(  8,  10, \"Paulownia Mall, (TODO)\"),\n            Field__P(  8,  11, \"Paulownia Mall, (TODO)\"),\n            Field__P(  8,  12, \"Paulownia Mall, (TODO)\"),\n            Field__P(  8,  13, \"Paulownia Mall, (TODO)\"),\n            Field__P(  8,  14, \"Paulownia Mall, (TODO)\"),\n            Field__P(  8,  15, \"Paulownia Mall, (TODO)\"),\n            Field__P(  8,  16, \"Paulownia Mall, (TODO)\"),\n            Field__P(  8,  17, \"Paulownia Mall, (TODO)\"),\n            Field__P(  8,  18, \"Paulownia Mall, (TODO)\"),\n            FieldVFP(  9,   1, \"Iwatodai Strip Mall, 1F\"),\n            FieldVFP(  9,   2, \"Iwatodai Strip Mall, Iwatoday Station\"),\n            FieldVFP(  9,   3, \"Iwatodai Strip Mall, Fast food\"),\n            FieldVFP(  9,   4, \"Iwatodai Strip Mall, (TODO)\"),\n            FieldVFP(  9,   5, \"Iwatodai Strip Mall, Ramen Restaurant\"),\n            FieldVFP(  9,   6, \"Iwatodai Strip Mall, (TODO)\"),\n            FieldVFP(  9,   7, \"Iwatodai Strip Mall, (TODO)\"),\n            Field__P(  9,   8, \"Iwatodai Strip Mall, 2F\"),\n            Field__P(  9,   9, \"Iwatodai Strip Mall, (TODO)\"),\n            FieldVFP( 10,   1, \"Port Island Station\"),\n            FieldVFP( 10,   2, \"Station Outskirts\"),\n            FieldVF_( 10,   3, \"\"),\n            FieldVFP( 12,   1, \"Naganaki Shrine\"),\n            FieldVFP( 13,   1, \"\"),\n            FieldVFP( 13,   2, \"Mansion - Corridor\"),\n            FieldVF_( 13,   3, \"\"),\n            FieldVFP( 14,   1, \"Fishing area\"),\n            FieldVFP( 14,   2, \"Godaigo, 1st Floor\"),\n            FieldVFP( 14,   3, \"Godaigo, 2st Floor\"),\n            FieldVFP( 14,   4, \"Godaigo, 3st Floor\"),\n            FieldVFP( 14,   5, \"Godaigo, Big Hot Spring\"),\n            FieldVFP( 14,   6, \"Godaigo, Men's Room\"),\n            FieldVFP( 14,   7, \"Godaigo, Men's Room\"),\n            FieldVFP( 14,   8, \"Godaigo, Men's Room\"),\n            FieldVFP( 14,   9, \"Godaigo, Men's Room\"),\n            FieldVFP( 14,  10, \"Godaigo, Men's Room\"),\n            Field__P( 14,  11, \"Women's Room\"),\n            Field__P( 14,  12, \"Women's Room\"),\n            Field__P( 14,  13, \"Women's Room\"),\n            Field__P( 14,  14, \"Women's Room\"),\n            Field__P( 14,  15, \"Women's Room\"),\n            Field__P( 14,  16, \"Godaigo, 3rd Floor\"),\n            FieldVFP( 15,   1, \"Hospital Room\"),\n            FieldVFP( 15,   2, \"Hospital Room\"),\n            FieldVFP( 15,   3, \"Hospital Room\"),\n            FieldVFP( 15,   4, \"Champs De Fleurs Entrance\"),\n            FieldVFP( 15,   5, \"\"),\n            FieldVFP( 15,   6, \"\"),\n            Field_F_( 15,   7, \"\"),\n            Field_FP( 15,   8, \"\"),\n            Field_F_( 15,   9, \"\"),\n            Field_FP( 15,  10, \"\"),\n            Field__P( 15,  11, \"\"),\n            Field__P( 15,  12, \"\"),\n            Field__P( 15,  13, \"\"),\n            Field__P( 15,  14, \"\"),\n            Field__P( 15,  15, \"\"),\n            Field__P( 15,  16, \"\"),\n            Field__P( 15,  17, \"\"),\n            Field__P( 15,  18, \"\"),\n            Field__P( 15,  19, \"\"),\n            Field__P( 15,  20, \"\"),\n            Field__P( 15,  21, \"\"),\n            Field__P( 15,  22, \"\"),\n            Field__P( 15,  23, \"\"),\n            Field__P( 15,  24, \"\"),\n            Field__P( 15,  25, \"\"),\n            Field__P( 15,  26, \"\"),\n            Field__P( 15,  27, \"\"),\n            Field__P( 15,  28, \"\"),\n            Field__P( 15,  29, \"\"),\n            FieldVFP( 16,   1, \"\"),\n            FieldVFP( 16,   2, \"\"),\n            FieldVFP( 16,   3, \"\"),\n            FieldVFP( 16,   4, \"\"),\n            FieldVFP( 16,   5, \"\"),\n            FieldVF_( 20,   1, \"\"),\n            FieldVF_( 20,   2, \"\"),\n            FieldVF_( 20,   3, \"\"),\n            FieldVF_( 20,   4, \"\"),\n            FieldVF_( 20,   5, \"\"),\n            FieldVF_( 20,   6, \"\"),\n            FieldVF_( 20,   7, \"\"),\n            FieldVF_( 20,   8, \"\"),\n            FieldVF_( 20,   9, \"\"),\n            FieldVF_( 20,  10, \"\"),\n            FieldVF_( 20,  11, \"\"),\n            FieldVF_( 20,  12, \"\"),\n            FieldVF_( 20,  13, \"\"),\n            FieldVF_( 20,  14, \"\"),\n            FieldVF_( 20,  15, \"\"),\n            FieldVF_( 20,  16, \"\"),\n            FieldVF_( 20,  17, \"\"),\n            FieldVF_( 20,  18, \"\"),\n            FieldVF_( 20,  19, \"\"),\n            FieldVFP( 21,   0, \"\"),\n            FieldVFP( 21,   1, \"\"),\n            FieldVFP( 21,   2, \"\"),\n            FieldVFP( 21,   3, \"\"),\n            FieldVFP( 21,   4, \"\"),\n            FieldVFP( 21,   5, \"\"),\n            FieldVFP( 21,   6, \"\"),\n            FieldVFP( 21,   7, \"\"),\n            FieldVFP( 21,   8, \"\"),\n            FieldVFP( 21,   9, \"\"),\n            FieldVFP( 21,  11, \"\"),\n            FieldVFP( 21,  13, \"\"),\n            FieldVFP( 21,  14, \"\"),\n            FieldVFP( 21,  16, \"\"),\n            FieldVFP( 21,  17, \"\"),\n            FieldVFP( 21,  18, \"\"),\n            FieldVFP( 21,  19, \"\"),\n            FieldVFP( 21,  30, \"\"),\n            FieldVFP( 21,  50, \"\"),\n            FieldVFP( 22,   0, \"\"),\n            FieldVFP( 22,   1, \"\"),\n            FieldVFP( 22,   2, \"\"),\n            FieldVFP( 22,   3, \"\"),\n            FieldVFP( 22,   4, \"\"),\n            FieldVFP( 22,   5, \"\"),\n            FieldVFP( 22,   6, \"\"),\n            FieldVFP( 22,   7, \"\"),\n            FieldVFP( 22,   8, \"\"),\n            FieldVFP( 22,  18, \"\"),\n            FieldVFP( 22,  50, \"\"),\n            FieldVFP( 22,  51, \"\"),\n            FieldVFP( 23,   0, \"\"),\n            FieldVFP( 23,   1, \"\"),\n            FieldVFP( 23,   2, \"\"),\n            FieldVFP( 23,   3, \"\"),\n            FieldVFP( 23,   4, \"\"),\n            FieldVFP( 23,   5, \"\"),\n            FieldVFP( 23,   6, \"\"),\n            FieldVFP( 23,   7, \"\"),\n            FieldVFP( 23,   8, \"\"),\n            FieldVFP( 23,  18, \"\"),\n            FieldVFP( 23,  50, \"\"),\n            FieldVFP( 23,  51, \"\"),\n            FieldVFP( 24,   0, \"\"),\n            FieldVFP( 24,   1, \"\"),\n            FieldVFP( 24,   2, \"\"),\n            FieldVFP( 24,   3, \"\"),\n            FieldVFP( 24,   4, \"\"),\n            FieldVFP( 24,   5, \"\"),\n            FieldVFP( 24,   6, \"\"),\n            FieldVFP( 24,   7, \"\"),\n            FieldVFP( 24,   8, \"\"),\n            FieldVFP( 24,  18, \"\"),\n            FieldVFP( 24,  50, \"\"),\n            FieldVFP( 24,  51, \"\"),\n            FieldVFP( 25,   0, \"\"),\n            FieldVFP( 25,   1, \"\"),\n            FieldVFP( 25,   2, \"\"),\n            FieldVFP( 25,   3, \"\"),\n            FieldVFP( 25,   4, \"\"),\n            FieldVFP( 25,   5, \"\"),\n            FieldVFP( 25,   6, \"\"),\n            FieldVFP( 25,   7, \"\"),\n            FieldVFP( 25,   8, \"\"),\n            FieldVFP( 25,  18, \"\"),\n            FieldVFP( 25,  50, \"\"),\n            FieldVFP( 26,   0, \"\"),\n            FieldVFP( 26,   1, \"\"),\n            FieldVFP( 26,   2, \"\"),\n            FieldVFP( 26,   3, \"\"),\n            FieldVFP( 26,   4, \"\"),\n            FieldVFP( 26,   5, \"\"),\n            FieldVFP( 26,   6, \"\"),\n            FieldVFP( 26,   7, \"\"),\n            FieldVFP( 26,   8, \"\"),\n            FieldVFP( 26,  18, \"\"),\n            FieldVFP( 26,  50, \"\"),\n            FieldVFP( 26,  51, \"\"),\n            FieldVF_( 26,  52, \"\"),\n            FieldVF_( 26,  53, \"\"),\n            FieldVFP( 27,   0, \"\"),\n            FieldVFP( 27,   1, \"\"),\n            FieldVFP( 27,   2, \"\"),\n            FieldVFP( 27,   3, \"\"),\n            FieldVFP( 27,   4, \"\"),\n            FieldVFP( 27,   5, \"\"),\n            FieldVFP( 27,   6, \"\"),\n            FieldVFP( 27,   7, \"\"),\n            FieldVFP( 27,   8, \"\"),\n            FieldVFP( 27,  18, \"\"),\n            FieldVFP( 27,  50, \"\"),\n            FieldVF_( 28,   0, \"\"),\n            FieldVFP( 31,   1, \"Monoral Bridge\"),\n            FieldVFP( 31,   2, \"10th/11th Carriage\"),\n            FieldVFP( 31,   3, \"8th/9th Carriage\"),\n            FieldVFP( 31,   4, \"6th/7th Carriage\"),\n            FieldVFP( 31,   5, \"4th/5th Carriage\"),\n            FieldVFP( 31,   6, \"2th/3rd Carriage\"),\n            FieldVFP( 31,   7, \"1st Carriagewe\"),\n            FieldVFP( 32,   1, \"Tartarus, School Entrance\"),\n            FieldVFP( 32,   2, \"Tartarus, 1st Floor, Lounge\"),\n            Field_FP( 32,   3, \"\"),\n            FieldVFP( 32,   4, \"\"),\n            FieldVFP( 32,   5, \"Tartarus, Last Floor\"),\n            FieldVFP( 32,   6, \"Tartarus, Rooftop\"),\n            FieldVFP( 32,   7, \"\"),\n            FieldVFP( 32,   8, \"Tartarus, School Entrance\"),\n            FieldVFP( 32,   9, \"Tartarus, Entrance (cutscene)\"),\n            FieldVFP( 33,   1, \"Beach\"),\n            FieldVFP( 33,   2, \"Forest\"),\n            FieldVFP( 33,   3, \"Forest\"),\n            FieldVFP( 34,   1, \"Hallway, 1st Floor\"),\n            FieldVFP( 34,   2, \"Hallway, 2nd Floor\"),\n            FieldVFP( 34,   3, \"Hallway, 2nd Floor\"),\n            FieldVFP( 34,   4, \"Hallway, 3rd Floor\"),\n            FieldVFP( 34,   5, \"Room 101\"),\n            FieldVFP( 34,   6, \"Room 201\"),\n            FieldVFP( 34,   7, \"Room 202\"),\n            FieldVFP( 34,   8, \"Room 203\"),\n            FieldVFP( 34,   9, \"Room 204\"),\n            FieldVFP( 34,  10, \"Room 205\"),\n            FieldVFP( 34,  11, \"Room 201\"),\n            FieldVFP( 34,  12, \"Room 202\"),\n            FieldVFP( 34,  13, \"Room 203\"),\n            FieldVFP( 34,  14, \"Room 204\"),\n            FieldVFP( 34,  15, \"Room 205\"),\n            FieldVFP( 34,  16, \"Room 301\"),\n            FieldVFP( 34,  17, \"Room 302\"),\n            FieldVFP( 34,  18, \"Room 303\"),\n            FieldVFP( 34,  19, \"Room 304\"),\n            FieldVFP( 34,  20, \"Hierophant's Chamber\"),\n            FieldVFP( 35,   1, \"13m Underground\"),\n            FieldVFP( 35,   2, \"17m Underground\"),\n            FieldVFP( 35,   3, \"21m Underground\"),\n            FieldVFP( 35,   4, \"27m Underground\"),\n            FieldVFP( 35,   5, \"30m Underground\"),\n            FieldVFP( 35,   6, \"30m Underground\"),\n            FieldVFP( 35,   7, \"21m Underground\"),\n            FieldVFP( 35,   8, \"Station Outskirts\"),\n            FieldVFP( 35,   9, \"Station Outskirts\"),\n            FieldVFP( 35,  10, \"33m Underground\"),\n            FieldVFP( 35,  11, \"33m Underground\"),\n            FieldVFP( 35,  12, \"33m Underground\"),\n            FieldVFP( 35,  13, \"33m Underground\"),\n            FieldVFP( 35,  14, \"33m Underground\"),\n            FieldVFP( 35,  15, \"33m Underground\"),\n            FieldVFP( 35,  16, \"33m Underground\"),\n            FieldVFP( 35,  17, \"38m Underground\"),\n            FieldVFP( 37,   1, \"Moonlight Bridge\"),\n            Field__P( 37,   2, \"\"),\n            Field__P( 38,   1, \"\"),\n            Field_FP( 39,   1, \"Colosseo Purgatorio\"),\n            Field_F_( 39,   2, \"\"),\n            Field_F_( 39,   3, \"\"),\n            Field_FP( 40,   1, \"\"),\n            Field_F_( 41,   0, \"\"),\n            Field_FP( 41,   1, \"\"),\n            Field_F_( 41,   2, \"\"),\n            Field_F_( 41,   3, \"\"),\n            Field_F_( 41,   4, \"\"),\n            Field_F_( 41,   5, \"\"),\n            Field_F_( 41,   6, \"\"),\n            Field_F_( 41,   7, \"\"),\n            Field_F_( 41,   8, \"\"),\n            Field_F_( 41,  18, \"\"),\n            Field_F_( 41,  50, \"\"),\n            Field_F_( 42,   0, \"\"),\n            Field_FP( 42,   1, \"\"),\n            Field_F_( 42,   2, \"\"),\n            Field_F_( 42,   3, \"\"),\n            Field_F_( 42,   4, \"\"),\n            Field_F_( 42,   5, \"\"),\n            Field_F_( 42,   6, \"\"),\n            Field_F_( 42,   7, \"\"),\n            Field_F_( 42,   8, \"\"),\n            Field_F_( 42,  18, \"\"),\n            Field_F_( 42,  50, \"\"),\n            Field_F_( 43,   0, \"\"),\n            Field_FP( 43,   1, \"\"),\n            Field_F_( 43,   2, \"\"),\n            Field_F_( 43,   3, \"\"),\n            Field_F_( 43,   4, \"\"),\n            Field_F_( 43,   5, \"\"),\n            Field_F_( 43,   6, \"\"),\n            Field_F_( 43,   7, \"\"),\n            Field_F_( 43,   8, \"\"),\n            Field_F_( 43,  18, \"\"),\n            Field_F_( 43,  50, \"\"),\n            Field_F_( 44,   0, \"\"),\n            Field_FP( 44,   1, \"\"),\n            Field_F_( 44,   2, \"\"),\n            Field_F_( 44,   3, \"\"),\n            Field_F_( 44,   4, \"\"),\n            Field_F_( 44,   5, \"\"),\n            Field_F_( 44,   6, \"\"),\n            Field_F_( 44,   7, \"\"),\n            Field_F_( 44,   8, \"\"),\n            Field_F_( 44,  18, \"\"),\n            Field_F_( 44,  50, \"\"),\n            Field_F_( 45,   0, \"\"),\n            Field_FP( 45,   1, \"\"),\n            Field_F_( 45,   2, \"\"),\n            Field_F_( 45,   3, \"\"),\n            Field_F_( 45,   4, \"\"),\n            Field_F_( 45,   5, \"\"),\n            Field_F_( 45,   6, \"\"),\n            Field_F_( 45,   7, \"\"),\n            Field_F_( 45,   8, \"\"),\n            Field_F_( 45,  18, \"\"),\n            Field_F_( 45,  50, \"\"),\n            Field__P( 46,   1, \"\"),\n            Field_F_( 46,  50, \"\"),\n            Field__P( 47,   1, \"\"),\n            Field_F_( 47,  50, \"\"),\n            Field__P( 48,   1, \"\"),\n            Field__P( 49,   1, \"\"),\n            Field__P( 50,   1, \"\"),\n            FieldVFP( 51,   1, \"Block 1, Boss Room\"),\n            FieldVFP( 51,   2, \"Block 1, Boss Room\"),\n            FieldVFP( 51,   3, \"Block 1, Boss Room\"),\n            FieldVFP( 51,   4, \"Block 1, Boss Room\"),\n            FieldVFP( 52,   1, \"Block 2, Boss Room\"),\n            FieldVFP( 52,   2, \"Block 2, Boss Room\"),\n            FieldVFP( 52,   3, \"Block 2, Boss Room\"),\n            FieldVFP( 52,   4, \"Block 2, Boss Room\"),\n            FieldVFP( 52,   5, \"Block 2, Boss Room\"),\n            FieldVFP( 52,   6, \"Block 2, Boss Room\"),\n            FieldVFP( 52,   7, \"Block 2, Boss Room\"),\n            FieldVFP( 53,   1, \"Block 3, Boss Room\"),\n            FieldVFP( 53,   2, \"Block 3, Boss Room\"),\n            FieldVFP( 53,   3, \"Block 3, Boss Room\"),\n            FieldVFP( 53,   4, \"Block 3, Boss Room\"),\n            FieldVFP( 54,   1, \"Block 4, Boss Room\"),\n            FieldVFP( 54,   2, \"Block 4, Boss Room\"),\n            FieldVFP( 54,   3, \"Block 4, Boss Room\"),\n            FieldVFP( 54,   4, \"Block 4, Boss Room\"),\n            FieldVFP( 55,   1, \"Block 5, Boss Room\"),\n            FieldVFP( 55,   2, \"Block 5, Boss Room\"),\n            FieldVFP( 55,   3, \"Block 5, Boss Room\"),\n            FieldVFP( 55,   4, \"Block 5, Boss Room\"),\n            FieldVFP( 55,   5, \"Block 5, Boss Room\"),\n            FieldVFP( 56,   1, \"Block 6, Boss Room\"),\n            FieldVFP( 56,   2, \"Block 6, Boss Room\"),\n            FieldVFP( 56,   3, \"Block 6, Boss Room\"),\n            FieldVFP( 56,   4, \"Block 6, Boss Room\"),\n            FieldVFP( 56,   5, \"Block 6, Boss Room\"),\n            Field_F_( 71,   1, \"\"),\n            Field_F_( 71,   2, \"\"),\n            Field_F_( 71,   3, \"\"),\n            Field_F_( 71,   4, \"\"),\n            Field_F_( 71,   5, \"\"),\n            Field_F_( 71,   6, \"\"),\n            Field_F_( 72,   1, \"\"),\n            Field_F_( 72,   2, \"\"),\n            Field_F_( 72,   3, \"\"),\n            Field_F_( 72,   4, \"\"),\n            Field_F_( 73,   1, \"\"),\n            Field_F_( 73,   2, \"\"),\n            Field_F_( 73,   3, \"\"),\n            Field_F_( 73,   4, \"\"),\n            Field_F_( 73,   5, \"\"),\n            Field_F_( 73,   6, \"\"),\n            Field_F_( 74,   1, \"\"),\n            Field_F_( 74,   2, \"\"),\n            Field_F_( 74,   3, \"\"),\n            Field_F_( 74,   4, \"\"),\n            Field_F_( 75,   1, \"\"),\n            Field_F_( 75,   2, \"\"),\n            Field_F_( 75,   3, \"\"),\n            Field_F_( 75,   4, \"\"),\n            Field_F_( 75,   5, \"\"),\n            FieldVFP(200,   0, \"\"),\n            FieldVFP(221,   0, \"\"),\n            FieldVFP(221,   1, \"\"),\n            FieldVFP(221,   2, \"\"),\n            FieldVFP(221,   3, \"\"),\n            Field__P(221,  50, \"\"),\n            FieldVFP(222,   1, \"\"),\n            FieldVFP(222,   2, \"\"),\n            Field__P(222,  50, \"\"),\n            Field__P(222,  51, \"\"),\n            FieldVFP(223,   1, \"\"),\n            FieldVFP(223,   2, \"\"),\n            Field__P(223,  50, \"\"),\n            Field__P(223,  51, \"\"),\n            FieldVFP(224,   1, \"\"),\n            FieldVFP(224,   2, \"\"),\n            FieldVFP(224,   3, \"\"),\n            Field__P(224,  50, \"\"),\n            Field__P(224,  51, \"\"),\n            FieldVFP(225,   1, \"\"),\n            FieldVFP(225,   2, \"\"),\n            Field__P(225,  50, \"\"),\n            FieldVFP(226,   1, \"\"),\n            FieldVFP(226,   2, \"\"),\n            Field__P(226,  50, \"\"),\n            Field__P(226,  51, \"\"),\n            FieldVFP(227,   1, \"\"),\n            FieldVFP(227,   2, \"\"),\n            Field__P(227,  50, \"\"),\n            FieldVFP(228,   1, \"\"),\n            FieldVFP(228,   2, \"\"),\n            FieldVFP(230,   1, \"\"),\n            Field_F_(230,   2, \"\"),\n            FieldVFP(231,   1, \"\"),\n            FieldVFP(231,   2, \"\"),\n            FieldVFP(232,   1, \"\"),\n            FieldVFP(232,   2, \"\"),\n            FieldVFP(232,   3, \"\"),\n            FieldVFP(232,   4, \"\"),\n            FieldVFP(232,   5, \"\"),\n            FieldVFP(232,   6, \"\"),\n            FieldVFP(232,   7, \"\"),\n            FieldVFP(234,   1, \"\"),\n            FieldVFP(234,   2, \"\"),\n            FieldVFP(234,   3, \"\"),\n            FieldVFP(235,   1, \"\"),\n            FieldVFP(235,   2, \"\"),\n            FieldVFP(235,   3, \"\"),\n            FieldVFP(236,   1, \"\"),\n            FieldVFP(237,   2, \"\"),\n            FieldVFP(237,   3, \"\"),\n            FieldVFP(238,   1, \"\"),\n            Field_F_(239,   1, \"\"),\n            Field_F_(239,   4, \"\"),\n            Field_F_(239,   5, \"\"),\n            Field_F_(241,   1, \"\"),\n            Field_F_(242,   1, \"\"),\n            Field_F_(243,   1, \"\"),\n            Field_F_(244,   1, \"\"),\n            Field_F_(245,   1, \"\"),\n            FieldVFP(251,   1, \"\"),\n            Field__P(251,   2, \"\"),\n            FieldVFP(251,   3, \"\"),\n            Field__P(251,   4, \"\"),\n            FieldVFP(252,   1, \"\"),\n            Field__P(252,   2, \"\"),\n            Field__P(252,   3, \"\"),\n            Field__P(252,   4, \"\"),\n            Field__P(252,   5, \"\"),\n            Field__P(252,   6, \"\"),\n            Field__P(252,   7, \"\"),\n            FieldVFP(253,   1, \"\"),\n            Field__P(253,   2, \"\"),\n            Field__P(253,   3, \"\"),\n            Field__P(253,   4, \"\"),\n            FieldVFP(254,   1, \"\"),\n            Field__P(254,   2, \"\"),\n            Field__P(254,   3, \"\"),\n            Field__P(254,   4, \"\"),\n            FieldVFP(255,   1, \"\"),\n            Field__P(255,   2, \"\"),\n            Field__P(255,   3, \"\"),\n            Field__P(255,   4, \"\"),\n            Field__P(255,   5, \"\"),\n            FieldVFP(256,   1, \"\"),\n            Field__P(256,   2, \"\"),\n            Field__P(256,   3, \"\"),\n            Field__P(256,   4, \"\"),\n            Field__P(256,   5, \"\"),\n            FieldVF_(257,   1, \"\"),\n            Field_F_(271,   1, \"\"),\n            Field_F_(272,   1, \"\"),\n            Field_F_(273,   1, \"\"),\n            Field_F_(274,   1, \"\"),\n            Field_F_(275,   1, \"\"),\n        };\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/SavePersona3.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibPersona3.Models;\nusing KHSave.LibPersona3.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona3\n{\n    [Flags]\n    public enum GameVersion\n    {\n        Vanilla = 1,\n        FES = 2,\n        Portable = 4,\n    }\n\n    public enum TimeOfTheDay : byte\n    {\n        [Info(\"Late Night?\")] Default,\n        [Info(\"Early morning\")] EarlyMorning,\n        [Info] Morning,\n        [Info] Lunchtime,\n        [Info] Afternoon,\n        [Info(\"After School\")] AfterSchool,\n        [Info] Evening,\n        [Info(\"Late Night\")] LateNight,\n        [Info(\"Dark Hour\")] DarkHour,\n    }\n    \n    public enum McStatus : short\n    {\n        [Info] Good,\n        [Info(\"-\")] Status01,\n        [Info] Great,\n        [Info] Tired,\n        [Info(\"-\")] Status04,\n        [Info] Sick\n    }\n\n    public class SavePersona3\n    {\n        public enum SectionType\n        {\n            End = -1,\n            Header,\n\n            SocialLinks = 3,\n            Inventory = 7,\n            CalendarDisplay = 8,\n            TimeOfTheDay = 9,\n            Calendar = 11,\n            Unknown12,\n\n            EquippedPersona = 14,\n            Persona,\n            Compendium,\n            GameFlags,\n            Money,\n            BattlePartyMembers,\n            Unknown20,\n            FieldZone,\n            FieldZoneRoom,\n            ForceTartarus,\n\n            PortableInventory = 6,\n        }\n\n        private enum Flags\n        {\n            FemaleProtagonist = 4103,\n        }\n        \n        internal static IBinaryMapping Mapper;\n\n        static SavePersona3()\n        {\n            Mapper = MappingConfiguration\n                .DefaultConfiguration(Encoding.UTF8)\n                .Build();\n        }\n\n        public readonly Dictionary<SectionType, byte[]> Sections = new();\n\n        public GameVersion Version { get; private set; }\n\n        public short[] ExpendableItems { get; private set; }\n        public TimeOfTheDay TimeOfTheDay { get; set; }\n        public short CalendarDate { get; set; }\n        public byte Unknown12 { get; set; }\n        public short EquippedPersona { get; set; }\n        public Persona[] Persona { get; private set; }\n        public Persona[] Compendium { get; private set; }\n        public SocialLinks SocialLinks { get; set; }\n        public SocialLinksPortable SocialLinksPortable { get; set; }\n\n        public int Money { get; set; }\n        public Characters BattlePartyMember1 { get; set; }\n        public Characters BattlePartyMember2 { get; set; }\n        public Characters BattlePartyMember3 { get; set; }\n        public Characters BattlePartyMember4 { get; set; }\n        public int Unknown20 { get; set; }\n        public int FieldZone { get; set; }\n        public int FieldZoneRoom { get; set; }\n        public bool ForceTartarus { get; set; }\n\n        // Game flags\n        public bool IsFemaleProtagonist { get; set; }\n\n        private SavePersona3(Stream stream)\n        {\n            var reader = new BinaryReader(stream);\n            var gameIdentifier = reader.ReadInt32();\n            if (gameIdentifier == 3)\n            {\n                Sections[SectionType.Header] = reader.ReadBytes(0x34);\n                Version = GameVersion.Vanilla;\n            }\n            else if (gameIdentifier == 0)\n            {\n                Version = GameVersion.Portable;\n            }\n            else\n                throw new Exception(\"This Persona 3 save is not recognized.\");\n\n            SectionType sectionId;\n            while (true)\n            {\n                sectionId = (SectionType)reader.ReadInt32();\n                if (sectionId == SectionType.End)\n                    break;\n                var length = reader.ReadInt32();\n                Sections[sectionId] = reader.ReadBytes(length);\n            }\n\n            Task.WaitAll(\n                Task.Run(() =>\n                {\n                    ReadSectionInt16(SectionType.CalendarDisplay); // ignore\n                    TimeOfTheDay = (TimeOfTheDay)ReadSectionByte(SectionType.TimeOfTheDay);\n                    CalendarDate = ReadSectionInt16(SectionType.Calendar);\n                    Unknown12 = ReadSectionByte(SectionType.Unknown12);\n                    EquippedPersona = ReadSectionInt16(SectionType.EquippedPersona);\n                    Money = ReadSectionInt32(SectionType.Money);\n                    Unknown20 = ReadSectionInt32(SectionType.Unknown20);\n                    FieldZone = ReadSectionInt32(SectionType.FieldZone);\n                    FieldZoneRoom = ReadSectionInt32(SectionType.FieldZoneRoom);\n                    ForceTartarus = ReadSectionInt32(SectionType.ForceTartarus) != 0;\n                }),\n                Task.Run(() =>\n                {\n                    IsFemaleProtagonist = GetGameFlag(Flags.FemaleProtagonist);\n                }),\n                Task.Run(() =>\n                {\n                    if (Sections.TryGetValue(SectionType.SocialLinks, out var data))\n                    {\n                        switch (data.Length)\n                        {\n                            case 0x430:\n                                SocialLinksPortable = TryReadSection<SocialLinksPortable>(SectionType.SocialLinks);\n                                break;\n                            case 0x508:\n                                SocialLinks = TryReadSection<SocialLinks>(SectionType.SocialLinks);\n                                break;\n                        }\n                    }\n                }),\n                Task.Run(() =>\n                {\n                    if (Version == GameVersion.Portable)\n                    {\n                        using var stream = new MemoryStream(Sections[SectionType.PortableInventory]);\n                        using var reader = new BinaryReader(stream);\n                        ExpendableItems = new short[(int)stream.Length / sizeof(byte)];\n                        for (var i = 0; i < ExpendableItems.Length; i++)\n                            ExpendableItems[i] = reader.ReadByte();\n                    }\n                    else\n                    {\n                        using var stream = new MemoryStream(Sections[SectionType.Inventory]);\n                        using var reader = new BinaryReader(stream);\n                        ExpendableItems = new short[(int)stream.Length / sizeof(short)];\n                        for (var i = 0; i < ExpendableItems.Length; i++)\n                            ExpendableItems[i] = reader.ReadInt16();\n                    }\n                }),\n                Task.Run(() => Persona = ReadSectionArray<Persona>(SectionType.Persona)),\n                Task.Run(() => Compendium = ReadSectionArray<Persona>(SectionType.Compendium)),\n                Task.Run(() =>\n                {\n                    using var stream = new MemoryStream(Sections[SectionType.BattlePartyMembers]);\n                    using var reader = new BinaryReader(stream);\n                    BattlePartyMember1 = (Characters)reader.ReadInt16();\n                    BattlePartyMember2 = (Characters)reader.ReadInt16();\n                    BattlePartyMember3 = (Characters)reader.ReadInt16();\n                    BattlePartyMember4 = (Characters)reader.ReadInt16();\n                })\n            );\n\n            var path = $\"D:\\\\{Version}\";\n            Directory.CreateDirectory(path);\n            foreach (var s in Sections)\n            {\n                using var _stream = File.Create($\"{path}\\\\{(int)s.Key}\");\n                var _writer = new BinaryWriter(_stream);\n                _writer.Write((int)s.Key);\n                _writer.Write(s.Value.Length);\n                _writer.Write(s.Value);\n            }\n        }\n\n        public static SavePersona3 Read(Stream stream) => new(stream);\n\n        public static bool IsValid(Stream stream)\n        {\n            stream.Position = 0;\n            var reader = new BinaryReader(stream);\n            var result = IsValidInternal(reader);\n            stream.Position = 0;\n            return result;\n        }\n\n        private static bool IsValidInternal(BinaryReader reader)\n        {\n            switch (reader.ReadInt32())\n            {\n                case 0:\n                    break;\n                case 3:\n                    reader.BaseStream.Position += 0x34;\n                    break;\n                default:\n                    return false;\n            }\n\n            while (true)\n            {\n                if ((SectionType)reader.ReadInt32() == SectionType.End)\n                    return true;\n\n                var length = reader.ReadInt32();\n                if (length < 0)\n                    return false;\n\n                reader.BaseStream.Position += length;\n                if (reader.BaseStream.Position > reader.BaseStream.Length)\n                    return false;\n            }\n        }\n\n        public void Write(Stream stream)\n        {\n            var writer = new BinaryWriter(stream);\n            switch (Version)\n            {\n                case GameVersion.Vanilla:\n                    writer.Write(3);\n                    writer.Write(Sections[SectionType.Header]);\n                    break;\n                case GameVersion.Portable:\n                    writer.Write(0);\n                    break;\n                default:\n                    throw new Exception(\"This Persona 3 save is not allowed to be saved. Save Editor bug?\");\n            }\n\n            Task.WhenAll(\n                Task.Run(() =>\n                {\n                    WriteSection(SectionType.CalendarDisplay, CalendarDate);\n                    WriteSection(SectionType.TimeOfTheDay, (byte)TimeOfTheDay);\n                    WriteSection(SectionType.Calendar, CalendarDate);\n                    WriteSection(SectionType.Unknown12, Unknown12);\n                    WriteSection(SectionType.EquippedPersona, EquippedPersona);\n                    WriteSection(SectionType.Money, Money);\n                    WriteSection(SectionType.Unknown20, Unknown20);\n                    WriteSection(SectionType.FieldZone, FieldZone);\n                    WriteSection(SectionType.FieldZoneRoom, FieldZoneRoom);\n                    WriteSection(SectionType.ForceTartarus, ForceTartarus ? 1 : 0);\n                }),\n                Task.Run(() =>\n                {\n                    SetGameFlag(Flags.FemaleProtagonist, IsFemaleProtagonist);\n                }),\n                Task.Run(() =>\n                {\n                    MemoryStream stream;\n                    if (SocialLinksPortable != null)\n                    {\n                        stream = new MemoryStream(0x430);\n                        Mapper.WriteObject(stream, SocialLinksPortable);\n                    }\n                    else\n                    {\n                        stream = new MemoryStream(0x508);\n                        Mapper.WriteObject(stream, SocialLinks);\n                    }\n                    Sections[SectionType.Inventory] = stream.GetBuffer();\n                }),\n                Task.Run(() =>\n                {\n                    if (Version == GameVersion.Portable)\n                    {\n                        using var stream = new MemoryStream(Sections[SectionType.PortableInventory]);\n                        using var writer = new BinaryWriter(stream);\n                        for (int i = 0; i < ExpendableItems.Length; i++)\n                            writer.Write((byte)ExpendableItems[i]);\n                    }\n                    else\n                    {\n                        using var stream = new MemoryStream(Sections[SectionType.Inventory]);\n                        using var writer = new BinaryWriter(stream);\n                        for (int i = 0; i < ExpendableItems.Length; i++)\n                            writer.Write(ExpendableItems[i]);\n                    }\n                }),\n                Task.Run(() => WriteSection(SectionType.Persona, Persona)),\n                Task.Run(() => WriteSection(SectionType.Compendium, Compendium)),\n                Task.Run(() =>\n                {\n                    using var stream = new MemoryStream(Sections[SectionType.BattlePartyMembers]);\n                    using var writer = new BinaryWriter(stream);\n                    writer.Write((short)BattlePartyMember1);\n                    writer.Write((short)BattlePartyMember2);\n                    writer.Write((short)BattlePartyMember3);\n                    writer.Write((short)BattlePartyMember4);\n                })\n            );\n\n            foreach (var section in Sections.OrderBy(x => x.Key))\n            {\n                if (section.Key == SectionType.Header)\n                    continue;\n\n                writer.Write((int)section.Key);\n                writer.Write(section.Value.Length);\n                writer.Write(section.Value);\n            }\n            writer.Write((int)SectionType.End);\n\n            if (Version == GameVersion.Portable)\n            {\n                var dummyData = new byte[0x4000];\n                writer.Write(dummyData);\n                writer.Write(dummyData);\n                writer.Write(dummyData);\n                writer.Write(dummyData);\n            }\n        }\n\n        public void ConvertToPortable()\n        {\n            Sections.Remove(SectionType.Header);\n            // TODO fix 3\n            // TODO fix inventory\n            // TODO fix 26\n            // TODO fix 30\n            // TODO fix 31\n        }\n\n        private bool GetGameFlag(Flags flagId)\n        {\n            if (!Sections.TryGetValue(SectionType.GameFlags, out var data))\n                return default;\n            var index = (int)flagId / 8;\n            if (index > data.Length)\n                return default;\n            return (data[index] & (1 << ((int)flagId & 7))) != 0;\n        }\n\n        private void SetGameFlag(Flags flagId, bool value)\n        {\n            if (!Sections.TryGetValue(SectionType.GameFlags, out var data))\n                return;\n            var index = (int)flagId / 8;\n            if (index > data.Length)\n                return;\n            if (value)\n                data[index] = (byte)(data[index] | (1 << ((int)flagId & 7)));\n            else\n                data[index] = (byte)(data[index] & ~(1 << ((int)flagId & 7)));\n        }\n\n        private byte ReadSectionByte(SectionType section) => TryReadSection(section, reader => reader.ReadByte());\n        private short ReadSectionInt16(SectionType section) => TryReadSection(section, reader => reader.ReadInt16());\n        private int ReadSectionInt32(SectionType section) => TryReadSection(section, reader => reader.ReadInt32());\n        private T[] ReadSectionArray<T>(SectionType section) where T : class\n        {\n            using var stream = new MemoryStream(Sections[section]);\n            var list = new List<T>();\n\n            var prevPosition = -1L;\n            while (stream.Position < stream.Length && prevPosition < stream.Position)\n            {\n                prevPosition = stream.Position;\n                list.Add(Mapper.ReadObject<T>(stream, (int)stream.Position));\n            }\n            return list.ToArray();\n        }\n\n        private void WriteSection(SectionType section, byte value) => TryWriteSection(section, writer => writer.Write(value));\n        private void WriteSection(SectionType section, short value) => TryWriteSection(section, writer => writer.Write(value));\n        private void WriteSection(SectionType section, int value) => TryWriteSection(section, writer => writer.Write(value));\n        private void WriteSection<T>(SectionType section, T[] array) where T : class\n        {\n            using var stream = new MemoryStream(Sections[section]);\n            foreach (var item in array)\n                Mapper.WriteObject<T>(stream, item, (int)stream.Position);\n        }\n\n        private T TryReadSection<T>(SectionType section, Func<BinaryReader, T> actionReader)\n        {\n            if (!Sections.TryGetValue(section, out var data))\n                return default;\n            using var stream = new MemoryStream(data);\n            return actionReader(new BinaryReader(stream));\n        }\n\n        private T TryReadSection<T>(SectionType section) where T : class\n        {\n            if (!Sections.TryGetValue(section, out var data))\n                return default;\n            using var stream = new MemoryStream(data);\n            return Mapper.ReadObject<T>(stream);\n        }\n\n        private void TryWriteSection(SectionType section, Action<BinaryWriter> actionWriter)\n        {\n            if (!Sections.TryGetValue(section, out var data))\n                return;\n            using var stream = new MemoryStream(data);\n            actionWriter(new BinaryWriter(stream));\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/Types/ArcanaType.cs",
    "content": "namespace KHSave.LibPersona5.Types\n{\n    public enum ArcanaType : byte\n    {\n        Null,\n        Fool,\n        Magician,\n        Priestess,\n        Empress,\n        Emperor,\n        Hierophant,\n        Lovers,\n        Chariot,\n        Justice,\n        Hermit,\n        Fortune,\n        Strength,\n        Hanged,\n        Death,\n        Temperance,\n        Devil,\n        Tower,\n        Star,\n        Moon,\n        Sun,\n        Judgement,\n        Aeon,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/Types/Characters.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibPersona3.Types\n{\n    public enum Characters : short\n    {\n        [Info(\"-\")] Empty,\n        [Info] Protagonist,\n        [Info] Yukari,\n        [Info] Aegis,\n        [Info] Mitsuru,\n        [Info] Junpei,\n        [Info] Fuuka,\n        [Info] Akihiko,\n        [Info] Ken,\n        [Info] Shinjiro,\n        [Info] Koromaru,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/Types/Demon.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Extensions;\n\nnamespace KHSave.LibPersona3.Types\n{\n    public class DemonAttribute : InfoAttribute\n    {\n        public bool Royal { get; }\n        public string Arcana { get; }\n\n        public DemonAttribute(string name = null, bool royal = false, string tarot = null) : base(name)\n        {\n            Royal = royal;\n            Arcana = tarot ?? string.Empty;\n        }\n\n        public static string GetArcana(object obj) =>\n            obj.GetAttribute<DemonAttribute>()?.Arcana;\n    }\n    public class MagicianAttribute : DemonAttribute\n    {\n        public MagicianAttribute(string name = null, bool royal = false) : base(name, royal, \"Magician\") { }\n    }\n    public class JusticeAttribute : DemonAttribute\n    {\n        public JusticeAttribute(string name = null, bool royal = false) : base(name, royal, \"Justice\") { }\n    }\n    public class DevilAttribute : DemonAttribute\n    {\n        public DevilAttribute(string name = null, bool royal = false) : base(name, royal, \"Devil\") { }\n    }\n    public class StarAttribute : DemonAttribute\n    {\n        public StarAttribute(string name = null, bool royal = false) : base(name, royal, \"Star\") { }\n    }\n    public class LoversAttribute : DemonAttribute\n    {\n        public LoversAttribute(string name = null, bool royal = false) : base(name, royal, \"Lovers\") { }\n    }\n    public class ChariotAttribute : DemonAttribute\n    {\n        public ChariotAttribute(string name = null, bool royal = false) : base(name, royal, \"Chariot\") { }\n    }\n    public class EmperorAttribute : DemonAttribute\n    {\n        public EmperorAttribute(string name = null, bool royal = false) : base(name, royal, \"Emperor\") { }\n    }\n    public class HangedAttribute : DemonAttribute\n    {\n        public HangedAttribute(string name = null, bool royal = false) : base(name, royal, \"Hanged\") { }\n    }\n    public class FoolAttribute : DemonAttribute\n    {\n        public FoolAttribute(string name = null, bool royal = false) : base(name, royal, \"Fool\") { }\n    }\n    public class TowerAttribute : DemonAttribute\n    {\n        public TowerAttribute(string name = null, bool royal = false) : base(name, royal, \"Tower\") { }\n    }\n    public class HierophantAttribute : DemonAttribute\n    {\n        public HierophantAttribute(string name = null, bool royal = false) : base(name, royal, \"Hierophant\") { }\n    }\n    public class PriestessAttribute : DemonAttribute\n    {\n        public PriestessAttribute(string name = null, bool royal = false) : base(name, royal, \"Priestess\") { }\n    }\n    public class StrengthAttribute : DemonAttribute\n    {\n        public StrengthAttribute(string name = null, bool royal = false) : base(name, royal, \"Strength\") { }\n    }\n    public class EmpressAttribute : DemonAttribute\n    {\n        public EmpressAttribute(string name = null, bool royal = false) : base(name, royal, \"Empress\") { }\n    }\n    public class SunAttribute : DemonAttribute\n    {\n        public SunAttribute(string name = null, bool royal = false) : base(name, royal, \"Sun\") { }\n    }\n    public class MoonAttribute : DemonAttribute\n    {\n        public MoonAttribute(string name = null, bool royal = false) : base(name, royal, \"Moon\") { }\n    }\n    public class JudgementAttribute : DemonAttribute\n    {\n        public JudgementAttribute(string name = null, bool royal = false) : base(name, royal, \"Judgement\") { }\n    }\n    \n    public class AeonAttribute : DemonAttribute\n    {\n        public AeonAttribute(string name = null, bool royal = false) : base(name, royal, \"Aeon\") { }\n    }\n\n    public enum Demons : short\n    {\n        [Unused] Invalid = -1,\n        [Demon(\"-\")] Empty,\n        [Fool(\"Orpheus\")] Orpheus,\n        [Fool(\"Susano-o\")] Susanoo,\n        [Hierophant(\"Flauros\")] Flauros,\n        [Fool(\"Loki\")] Loki,\n        [Magician(\"Nekomata\")] Nekomata,\n        [Magician(\"Pyro Jack\")] PyroJack,\n        [Magician(\"Jack Frost\")] JackFrost,\n        [Priestess(\"Scathach\")] Scathach,\n        [Magician(\"Rangda\")] Rangda,\n        [Chariot(\"Nata Taishi\")] NataTaishi,\n        [Tower(\"Cu Chulainn\")] CuChulainn,\n        [Fool(\"Ose\")] Ose,\n        [Demon(\"Kusi Mitama\")] KusiMitama,\n        [Demon(\"Apsaras\")] Apsaras,\n        [Demon(\"Laksmi\")] Laksmi,\n        [Demon(\"Parvati\")] Parvati,\n        [Demon(\"Kikuri-Hime\")] KikuriHime,\n        [Demon(\"Sati\")] Sati,\n        [Demon(\"Sarasvati\")] Sarasvati,\n        [Demon(\"Unicorn\")] Unicorn,\n        [Demon(\"Cybele\")] Cybele,\n        [Demon(\"Skadi\")] Skadi,\n        [Demon(\"Hariti\")] Hariti,\n        [Demon(\"Kali\")] Kali,\n        [Demon(\"Ganga\")] Ganga,\n        [Demon(\"Taraka\")] Taraka,\n        [Demon(\"Lamia\")] Lamia,\n        [Demon(\"Odin\")] Odin,\n        [Demon(\"King Frost\")] KingFrost,\n        [Demon(\"Okuninushi\")] Okuninushi,\n        [Demon(\"Kingu\")] Kingu,\n        [Demon(\"Naga Raja\")] NagaRaja,\n        [Demon(\"Forneus\")] Forneus,\n        [Demon(\"Kohryu\")] Kohryu,\n        [Demon(\"Mithra\")] Mithra,\n        [Demon(\"Daisoujou\")] Daisoujou,\n        [Demon(\"Ananta\")] Ananta,\n        [Demon(\"Omoikane\")] Omoikane,\n        [Demon(\"Principality\")] Principality,\n        [Demon(\"Raphael\")] Raphael,\n        [Demon(\"Titania\")] Titania,\n        [Demon(\"Oberon\")] Oberon,\n        [Demon(\"Narcissus\")] Narcissus,\n        [Demon(\"Queen Mab\")] QueenMab,\n        [Demon(\"Leanan Sidhe\")] LeananSidhe,\n        [Demon(\"Pixie\")] Pixie,\n        [Demon(\"Uriel\")] Uriel,\n        [Demon(\"Surt\")] Surt,\n        [Demon(\"Throne\")] Throne,\n        [Demon(\"Ares\")] Ares,\n        [Demon(\"Titan\")] Titan,\n        [Demon(\"Chimera\")] Chimera,\n        [Demon(\"Ara Mitama\")] AraMitama,\n        [Demon(\"Valkyrie\")] Valkyrie,\n        [Demon(\"Melchizedek\")] Melchizedek,\n        [Demon(\"Dominion\")] Dominion,\n        [Demon(\"Siegfried\")] Siegfried,\n        [Demon(\"Virtue\")] Virtue,\n        [Demon(\"Power\")] Power,\n        [Demon(\"Archangel\")] Archangel,\n        [Demon(\"Angel\")] Angel,\n        [Demon(\"Alilat\")] Alilat,\n        [Demon(\"Arahabaki\")] Arahabaki,\n        [Demon(\"Nebiros\")] Nebiros,\n        [Demon(\"Decarabia\")] Decarabia,\n        [Demon(\"Kurama Tengu\")] KuramaTengu,\n        [Demon(\"Yomotsu Shikome\")] YomotsuShikome,\n        [Demon(\"Naga\")] Naga,\n        [Demon(\"Norn\")] Norn,\n        [Demon(\"Atropos\")] Atropos,\n        [Demon(\"Orobas\")] Orobas,\n        [Demon(\"Lachesis\")] Lachesis,\n        [Demon(\"Saki Mitama\")] SakiMitama,\n        [Demon(\"Eligor\")] Eligor,\n        [Demon(\"Clotho\")] Clotho,\n        [Demon(\"Fortuna\")] Fortuna,\n        [Demon(\"Thor\")] Thor,\n        [Demon(\"Bishamonten\")] Bishamonten,\n        [Demon(\"Take-Mikazuchi\")] TakeMikazuchi,\n        [Demon(\"Jikokuten\")] Jikokuten,\n        [Demon(\"Hanuman\")] Hanuman,\n        [Demon(\"Koumokuten\")] Koumokuten,\n        [Demon(\"Zouchouten\")] Zouchouten,\n        [Demon(\"Attis\")] Attis,\n        [Demon(\"Vasuki\")] Vasuki,\n        [Demon(\"Orthrus\")] Orthrus,\n        [Demon(\"Take-Minakata\")] TakeMinakata,\n        [Demon(\"Ubelluris\")] Ubelluris,\n        [Demon(\"Inugami\")] Inugami,\n        [Demon(\"Thanatos\")] Thanatos,\n        [Demon(\"Alice\")] Alice,\n        [Demon(\"Seth\")] Seth,\n        [Demon(\"Mot\")] Mot,\n        [Demon(\"Samael\")] Samael,\n        [Demon(\"Vetala\")] Vetala,\n        [Demon(\"Loa\")] Loa,\n        [Demon(\"Pale Rider\")] PaleRider,\n        [Demon(\"Michael\")] Michael,\n        [Demon(\"Byakko\")] Byakko,\n        [Demon(\"Suzaku\")] Suzaku,\n        [Demon(\"Seiryuu\")] Seiryuu,\n        [Demon(\"Nigi Mitama\")] NigiMitama,\n        [Demon(\"Genbu\")] Genbu,\n        [Demon(\"Beelzebub\")] Beelzebub,\n        [Demon(\"Mother Harlot\")] MotherHarlot,\n        [Demon(\"Abaddon\")] Abaddon,\n        [Demon(\"Lilith\")] Lilith,\n        [Demon(\"Incubus\")] Incubus,\n        [Demon(\"Succubus\")] Succubus,\n        [Demon(\"Lilim\")] Lilim,\n        [Demon(\"Chi You\")] ChiYou,\n        [Demon(\"Shiva\")] Shiva,\n        [Demon(\"Masakado\")] Masakado,\n        [Demon(\"Seiten Taisei\")] SeitenTaisei,\n        [Demon(\"Yamatano-orochi\")] Yamatanoorochi,\n        [Demon(\"Oumitsunu\")] Oumitsunu,\n        [Demon(\"Helel\")] Helel,\n        [Demon(\"Sandalphon\")] Sandalphon,\n        [Demon(\"Black Frost\")] BlackFrost,\n        [Demon(\"Garuda\")] Garuda,\n        [Demon(\"Kaiwan\")] Kaiwan,\n        [Demon(\"Ganesha\")] Ganesha,\n        [Demon(\"Nandi\")] Nandi,\n        [Demon(\"Chernobog\")] Chernobog,\n        [Demon(\"Dionysus\")] Dionysus,\n        [Demon(\"Narasimha\")] Narasimha,\n        [Demon(\"Girimehkala\")] Girimehkala,\n        [Demon(\"Gurr\")] Gurr,\n        [Demon(\"Legion\")] Legion,\n        [Demon(\"Berith\")] Berith,\n        [Demon(\"Saturnus\")] Saturnus,\n        [Demon(\"Vishnu\")] Vishnu,\n        [Demon(\"Barong\")] Barong,\n        [Demon(\"Jatayu\")] Jatayu,\n        [Demon(\"Horus\")] Horus,\n        [Demon(\"Quetzalcoatl\")] Quetzalcoatl,\n        [Demon(\"Yatagarasu\")] Yatagarasu,\n        [Demon(\"Messiah\")] Messiah,\n        [Demon(\"Asura\")] Asura,\n        [Demon(\"Metatron\")] Metatron,\n        [Demon(\"Satan\")] Satan,\n        [Demon(\"Gabriel\")] Gabriel,\n        [Demon(\"Hokuto Seikun\")] HokutoSeikun,\n        [Demon(\"Trumpeter\")] Trumpeter,\n        [Demon(\"Anubis\")] Anubis,\n        [Demon(\"Slime\")] Slime, // FES, P3P\n        [Demon(\"Hua Po\")] HuaPo, // FES, P3P\n        [Demon(\"High Pixie\")] HighPixie, // FES, P3P\n        [Demon(\"Yaksini\")] Yaksini, // FES, P3P\n        [Demon(\"Shiisaa\")] Shiisaa, // FES, P3P\n        [Demon(\"Thoth\")] Thoth, // FES, P3P\n        [Demon(\"Alp\")] Alp, // FES, P3P\n        [Demon(\"Mothman\")] Mothman, // FES, P3P\n        [Demon(\"Kumbhanda\")] Kumbhanda, // FES, P3P\n        [Demon(\"Empusa\")] Empusa, // FES, P3P\n        [Demon(\"Rakshasa\")] Rakshasa, // FES, P3P\n        [Demon(\"Hecatoncheires\")] Hecatoncheires, // FES, P3P\n        [Demon(\"Hell Biker\")] HellBiker, // FES, P3P\n        [Demon(\"Ghoul\")] Ghoul, // FES, P3P\n        [Demon(\"Yurlungur\")] Yurlungur,\n        [Demon(\"Pazuzu\")] Pazuzu, // FES, P3P\n        [Demon(\"Mara\")] Mara, // FES, P3P\n        [Demon(\"Kartikeya\")] Kartikeya, // FES, P3P\n        [Demon(\"Baal Zebul\")] BaalZebul, // FES, P3P\n        [Demon(\"Suparna\")] Suparna, // FES, P3P\n        [Demon(\"Lucifer\")] Lucifer, // FES, P3P\n        [Demon(\"Nidhoggr\")] Nidhoggr, // FES, P3P\n        [Demon(\"Atavaka\")] Atavaka, // FES, P3P\n        [Demon(\"Orpheus Telos\")] OrpheusTelos, // FES, P3P\n        [Demon(\"Mokoi\")] Mokoi, // P3P\n        [Demon(\"Neko Shogun\")] NekoShogun, // P3P\n        [Demon(\"Setanta\")] Setanta, // P3P\n        [Demon(\"Tam Lin\")] TamLin, // P3P\n        [Demon(\"Orpheus (female)\")] OrpheusFemale, // P3P\n        [Unused] Demon0AF,\n        [Unused] Demon0B0,\n        [Unused] Demon0B1,\n        [Unused] Demon0B2,\n        [Unused] Demon0B3,\n        [Unused] Demon0B4,\n        [Unused] Demon0B5,\n        [Unused] Demon0B6,\n        [Unused] Demon0B7,\n        [Unused] Demon0B8,\n        [Unused] Demon0B9,\n        [Unused] Demon0BA,\n        [Unused] Demon0BB,\n        [Unused] Demon0BC,\n        [Unused] Demon0BD,\n        [Unused] Demon0BE,\n        [Demon(\"Universe\")] Universe,\n        [Demon(\"Isis\")] Isis,\n        [Demon(\"Palladion\")] Palladion,\n        [Demon(\"Athena\")] Athena,\n        [Demon(\"Penthesilea\")] Penthesilea,\n        [Demon(\"Artemisia\")] Artemisia,\n        [Demon(\"Hermes\")] Hermes,\n        [Demon(\"Trismegistus\")] Trismegistus,\n        [Demon(\"Lucia\")] Lucia,\n        [Demon(\"Juno\")] Juno,\n        [Demon(\"Polydeuces\")] Polydeuces,\n        [Demon(\"Caesar\")] Caesar,\n        [Demon(\"Nemesis\")] Nemesis,\n        [Demon(\"Kala-Nemi\")] KalaNemi,\n        [Demon(\"Castor\")] Castor,\n        [Demon(\"Cerberus\")] Cerberus,\n        [Demon(\"Hypnos\")] Hypnos,\n        [Demon(\"Moros\")] Moros,\n        [Demon(\"Medea\")] Medea,\n        [Demon(\"Psyche\")] Psyche, // FES, P3P\n        [Unused] Demon0D3,\n        [Unused] Demon0D4,\n        [Unused] Demon0D5,\n        [Unused] Demon0D6,\n        [Unused] Demon0D7,\n        [Unused] Demon0D8,\n        [Unused] Demon0D9,\n        [Unused] Demon0DA,\n        [Unused] Demon0DB,\n        [Unused] Demon0DC,\n        [Unused] Demon0DD,\n        [Unused] Demon0DE,\n        [Unused] Demon0DF,\n        [Unused] Demon0E0,\n        [Unused] Demon0E1,\n        [Unused] Demon0E2,\n        [Unused] Demon0E3,\n        [Unused] Demon0E4,\n        [Unused] Demon0E5,\n        [Unused] Demon0E6,\n        [Unused] Demon0E7,\n        [Unused] Demon0E8,\n        [Unused] Demon0E9,\n        [Unused] Demon0EA,\n        [Unused] Demon0EB,\n        [Unused] Demon0EC,\n        [Unused] Demon0ED,\n        [Unused] Demon0EE,\n        [Unused] Demon0EF,\n        [Unused] Demon0F0,\n        [Unused] Demon0F1,\n        [Unused] Demon0F2,\n        [Unused] Demon0F3,\n        [Unused] Demon0F4,\n        [Unused] Demon0F5,\n        [Unused] Demon0F6,\n        [Unused] Demon0F7,\n        [Unused] Demon0F8,\n        [Unused] Demon0F9,\n        [Unused] Demon0FA,\n        [Unused] Demon0FB,\n        [Unused] Demon0FC,\n        [Unused] Demon0FD,\n        [Unused] Demon0FE,\n        [Unused] Demon0FF,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/Types/ExpendableItems.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibPersona3.Types\n{\n    public enum ExpendableItems\n    {\n        [Consumable] Dummy,\n        [Consumable] Medicine,\n        [Consumable(\"Medical Powder\")] MedicalPowder,\n        [Consumable(\"Bead\")] Bead,\n        [Consumable(\"Snuff Soul\")] SnuffSoul,\n        [Consumable(\"Chewing Soul\")] ChewingSoul,\n        [Consumable(\"Precious Egg\")] PreciousEgg,\n        [Consumable(\"Soma\")] Soma,\n        [Consumable(\"Dis-Poison\")] DisPoison,\n        [Consumable(\"Revival Bead\")] RevivalBead,\n        [Consumable(\"Balm of Life\")] BalmOfLife,\n        [Consumable(\"Me Patra Gem\")] MePatraGem,\n        [Consumable(\"Muscle Drink\")] MuscleDrink,\n        [Consumable(\"Odd Morsel\")] OddMorsel,\n        [Consumable(\"Rancid Gravy\")] RancidGravy,\n        [Consumable(\"Powerful Drug\")] PowerfulDrug,\n        [Unused] Consumable4010,\n        [Unused] Consumable4011,\n        [Unused] Consumable4012,\n        [Consumable(\"Dis-Rage\")] DisRage,\n        [Consumable(\"Dis-Charm\")] DisCharm,\n        [Unused] Consumable4015,\n        [Unused] Consumable4016,\n        [Unused] Consumable4017,\n        [Unused] Consumable4018,\n        [Unused] Consumable4019,\n        [Unused] Consumable401A,\n        [Unused] Consumable401B,\n        [Unused] Consumable401C,\n        [Unused] Consumable401D,\n        [Unused] Consumable401E,\n        [Unused] Consumable401F,\n        [Consumable(\"Patra Gem\")] PatraGem,\n        [Consumable(\"Traesto Gem\")] TraestoGem,\n        [Consumable(\"Bead Chain\")] BeadChain,\n        [Consumable(\"Magic Mirror\")] MagicMirror,\n        [Consumable(\"Attack Mirror\")] AttackMirror,\n        [Consumable(\"Dekaja Gem\")] DekajaGem,\n        [Consumable(\"Dekunda Gem\")] DekundaGem,\n        [Consumable(\"Homunculus\")] Homunculus,\n        [Consumable(\"Plume of Dusk\")] PlumeOfDusk,\n        [Consumable(\"Agilao Gem\")] AgilaoGem,\n        [Consumable(\"Maragi Gem\")] MaragiGem,\n        [Consumable(\"Bufula Gem\")] BufulaGem,\n        [Consumable(\"Mabufu Gem\")] MabufuGem,\n        [Consumable(\"Garula Gem\")] GarulaGem,\n        [Consumable(\"Magaru Gem\")] MagaruGem,\n        [Consumable(\"Zionga Gem\")] ZiongaGem,\n        [Consumable(\"Mazio Gem\")] MazioGem,\n        [Consumable(\"Megido Gem\")] MegidoGem,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/Types/Inventory.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibPersona5.Types\n{\n    public class ConsumableHpAttribute : ConsumableAttribute\n    {\n        public ConsumableHpAttribute(string name = null) : base(name) { }\n    }\n\n    public enum Inventory\n    {\n        [Consumable(\"Blank\")] Blank,\n        [ConsumableHp(\"Devil Fruit\")] DevilFruit,\n        [Consumable(\"Recov-R: 50mg\")] Item2,\n        [Consumable(\"Recov-R: 100mg\")] Item3,\n        [Consumable(\"Takemedic\")] Item4,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona3/Types/Skill.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibPersona3.Types\n{\n    public class SkillAttribute : InfoAttribute\n    {\n        public SkillAttribute(string name = null) : base(name) { }\n    }\n    public class HitSkillAttribute : SkillAttribute\n    {\n        public HitSkillAttribute(string name = null) : base(name) { }\n    }\n    public class GunSkillAttribute : SkillAttribute\n    {\n        public GunSkillAttribute(string name = null) : base(name) { }\n    }\n    public class FireSkillAttribute : SkillAttribute\n    {\n        public FireSkillAttribute(string name = null) : base(name) { }\n    }\n    public class IceSkillAttribute : SkillAttribute\n    {\n        public IceSkillAttribute(string name = null) : base(name) { }\n    }\n    public class WindSkillAttribute : SkillAttribute\n    {\n        public WindSkillAttribute(string name = null) : base(name) { }\n    }\n    public class ThunderSkillAttribute : SkillAttribute\n    {\n        public ThunderSkillAttribute(string name = null) : base(name) { }\n    }\n    public class BlessSkillAttribute : SkillAttribute\n    {\n        public BlessSkillAttribute(string name = null) : base(name) { }\n    }\n    public class DeathSkillAttribute : SkillAttribute\n    {\n        public DeathSkillAttribute(string name = null) : base(name) { }\n    }\n    public class AlmightySkillAttribute : SkillAttribute\n    {\n        public AlmightySkillAttribute(string name = null) : base(name) { }\n    }\n    public class SupportSkillAttribute : SkillAttribute\n    {\n        public SupportSkillAttribute(string name = null) : base(name) { }\n    }\n    public class AutoSkillAttribute : SkillAttribute\n    {\n        public AutoSkillAttribute(string name = null) : base(name) { }\n    }\n    public class PoisonSkillAttribute : SkillAttribute\n    {\n        public PoisonSkillAttribute(string name = null) : base(name) { }\n    }\n    public class HealSkillAttribute : SkillAttribute\n    {\n        public HealSkillAttribute(string name = null) : base(name) { }\n    }\n\n    public enum Skill : short\n    {\n        [Skill(\"-\")] Empty,\n        [FireSkill(\"Agi\")] Agi,\n        [FireSkill(\"Agilao\")] Agilao,\n        [FireSkill(\"Agidyne\")] Agidyne,\n        [FireSkill(\"Maragi\")] Maragi,\n        [FireSkill(\"Maragion\")] Maragion,\n        [FireSkill(\"Maragidyne\")] Maragidyne,\n        [FireSkill(\"Maralagidyne\")] Maralagidyne, // FES, P3P\n        [Unused] Skill008,\n        [FireSkill(\"Ragnarok\")] Ragnarok,\n        [WindSkill(\"Garu\")] Garu,\n        [WindSkill(\"Garula\")] Garula,\n        [WindSkill(\"Garudyne\")] Garudyne,\n        [WindSkill(\"Magaru\")] Magaru,\n        [WindSkill(\"Magarula\")] Magarula,\n        [WindSkill(\"Magarudyne\")] Magarudyne,\n        [Unused] Skill010,\n        [Unused] Skill011,\n        [WindSkill(\"Panta Rhei\")] PantaRhei,\n        [IceSkill(\"Bufu\")] Bufu,\n        [IceSkill(\"Bufula\")] Bufula,\n        [IceSkill(\"Bufudyne\")] Bufudyne,\n        [IceSkill(\"Mabufu\")] Mabufu,\n        [IceSkill(\"Mabufula\")] Mabufula,\n        [IceSkill(\"Mabufudyne\")] Mabufudyne,\n        [Unused] Skill019,\n        [Unused] Skill01A,\n        [IceSkill(\"Niflheim\")] Niflheim,\n        [ThunderSkill(\"Zio\")] Zio,\n        [ThunderSkill(\"Zionga\")] Zionga,\n        [ThunderSkill(\"Ziodyne\")] Ziodyne,\n        [ThunderSkill(\"Mazio\")] Mazio,\n        [ThunderSkill(\"Mazionga\")] Mazionga,\n        [ThunderSkill(\"Maziodyne\")] Maziodyne,\n        [Unused] Skill022,\n        [Unused] Skill023,\n        [ThunderSkill(\"Thunder Reign\")] ThunderReign,\n        [AlmightySkill(\"Megido\")] Megido,\n        [AlmightySkill(\"Megidola\")] Megidola,\n        [AlmightySkill(\"Megidolaon\")] Megidolaon,\n        [AlmightySkill(\"Last Resort\")] LastResort,\n        [Unused] Skill029,\n        [Unused] Skill02A,\n        [AlmightySkill(\"Black Viper\")] BlackViper,\n        [AlmightySkill(\"Morning Star\")] MorningStar,\n        [BlessSkill(\"Hama\")] Hama,\n        [BlessSkill(\"Mahama\")] Mahama,\n        [BlessSkill(\"Hamaon\")] Hamaon,\n        [BlessSkill(\"Mahamaon\")] Mahamaon,\n        [Unused] Skill031,\n        [BlessSkill(\"Samsara\")] Samsara,\n        [DeathSkill(\"Mudo\")] Mudo,\n        [DeathSkill(\"Mamudo\")] Mamudo,\n        [DeathSkill(\"Mudoon\")] Mudoon,\n        [DeathSkill(\"Mamudoon\")] Mamudoon,\n        [Unused] Skill037,\n        [DeathSkill(\"Die for Me!\")] DieforMe,\n        [PoisonSkill(\"Marin Karin\")] MarinKarin,\n        [PoisonSkill(\"Sexy Dance\")] SexyDance,\n        [PoisonSkill(\"Bewilder\")] Bewilder,\n        [PoisonSkill(\"Eerie Sound\")] EerieSound,\n        [PoisonSkill(\"Pulinpa\")] Pulinpa,\n        [PoisonSkill(\"Tentarafoo\")] Tentarafoo,\n        [PoisonSkill(\"Evil Touch\")] EvilTouch,\n        [PoisonSkill(\"Evil Smile\")] EvilSmile,\n        [PoisonSkill(\"Ghastly Wail\")] GhastlyWail,\n        [PoisonSkill(\"Provoke\")] Provoke,\n        [PoisonSkill(\"Infuriate\")] Infuriate,\n        [PoisonSkill(\"Poisma\")] Poisma,\n        [PoisonSkill(\"Poison Mist\")] PoisonMist,\n        [PoisonSkill(\"Virus Breath\")] VirusBreath,\n        [Unused] Skill047,\n        [Unused] Skill048,\n        [AlmightySkill(\"Foul Breath\")] FoulBreath,\n        [AlmightySkill(\"Stagnant Air\")] StagnantAir,\n        [AlmightySkill(\"Life Drain\")] LifeDrain,\n        [AlmightySkill(\"Spirit Drain\")] SpiritDrain,\n        [Unused] Skill04D,\n        [Unused] Skill04E,\n        [Unused] Skill04F,\n        [FireSkill(\"Maragidyne (Velvet)\")] MaragidyneVelvet,\n        [WindSkill(\"Magarudyne (Velvet)\")] MagarudyneVelvet,\n        [IceSkill(\"Mabufudyne (Velvet)\")] MabufudyneVelvet,\n        [ThunderSkill(\"Maziodyne (Velvet)\")] MaziodyneVelvet,\n        [AlmightySkill(\"Megidolaon (Velvet)\")] MegidolaonVelvet,\n        [BlessSkill(\"Mahamaon (Velvet)\")] MahamaonVelvet,\n        [DeathSkill(\"Mamudoon (Velvet)\")] MamudoonVelvet,\n        [PoisonSkill(\"Sexy Dance\")] SexyDance2,\n        [PoisonSkill(\"Eerie Sound\")] EerieSound2,\n        [PoisonSkill(\"Tentarafoo\")] Tentarafoo2,\n        [PoisonSkill(\"Evil Smile\")] EvilSmile2,\n        [PoisonSkill(\"Poison Mist\")] PoisonMist2,\n        [PoisonSkill(\"Holy Arrow\")] HolyArrow,\n        [PoisonSkill(\"Life Drain\")] LifeDrain2,\n        [PoisonSkill(\"Spirit Drain\")] SpiritDrain2,\n        [Unused] Skill05F,\n        [Skill(\"Death\")] Death,\n        [Skill(\"Yell\")] Yell,\n        [Skill(\"Yell\")] Yell2,\n        [Skill(\"Death\")] Death3,\n        [Skill(\"Death\")] Death4,\n        [Skill(\"Death\")] Death5,\n        [Skill(\"Moonless Gown\")] MoonlessGown,\n        [Skill(\"Moonless Gown\")] MoonlessGown2,\n        [Skill(\"Summon\")] Summon,\n        [Skill(\"Slash Attack\")] SlashAttack,\n        [Skill(\"Pierce Attack\")] PierceAttack,\n        [Skill(\"Strike Attack\")] StrikeAttack,\n        [Skill(\"Yell\")] Yell3,\n        [GunSkill(\"Pierce Attack\")] PierceAttack3, // FES, P3P\n        [FireSkill(\"Fire Attack\")] FireAttack, // FES, P3P\n        [AlmightySkill(\"Almighty Attack\")] AlmightyAttack, // FES, P3P\n        [HitSkill(\"Bash\")] Bash,\n        [HitSkill(\"Assault Dive\")] AssaultDive,\n        [HitSkill(\"Kill Rush\")] KillRush,\n        [HitSkill(\"Swift Strike\")] SwiftStrike,\n        [HitSkill(\"Sonic Punch\")] SonicPunch,\n        [HitSkill(\"Heat Wave\")] HeatWave,\n        [HitSkill(\"Gigantic Fist\")] GiganticFist,\n        [HitSkill(\"Akasha Arts\")] AkashaArts,\n        [HitSkill(\"God's Hand\")] GodsHand,\n        [HitSkill(\"Cleave\")] Cleave,\n        [HitSkill(\"Fatal End\")] FatalEnd,\n        [HitSkill(\"Getsu-ei\")] Getsuei,\n        [HitSkill(\"Zan-ei\")] Zanei,\n        [HitSkill(\"Mighty Swing\")] MightySwing,\n        [HitSkill(\"Double Fangs\")] DoubleFangs,\n        [HitSkill(\"Blade of Fury\")] BladeofFury,\n        [HitSkill(\"Deathbound\")] Deathbound,\n        [HitSkill(\"Tempest Slash\")] TempestSlash,\n        [HitSkill(\"Heaven's Blade\")] HeavensBlade,\n        [GunSkill(\"Pralaya\")] Pralaya,\n        [HitSkill(\"Power Slash\")] PowerSlash, // FES, P3P\n        [HitSkill(\"Gale Slash\")] GaleSlash, // FES, P3P\n        [HitSkill(\"Brave Blade\")] BraveBlade, // FES, P3P\n        [HitSkill(\"Herculean Strike\")] HerculeanStrike, // FES, P3P\n        [HitSkill(\"Vicious Strike\")] ViciousStrike, // FES, P3P\n        [GunSkill(\"Single Shot\")] SingleShot, // FES, P3P\n        [GunSkill(\"Twin Shot\")] TwinShot,\n        [GunSkill(\"Holy Arrow\")] HolyArrow2,\n        [GunSkill(\"Torrent Shot\")] TorrentShot,\n        [GunSkill(\"Arrow Rain\")] ArrowRain,\n        [GunSkill(\"Myriad Arrows\")] MyriadArrows,\n        [GunSkill(\"Primal Force\")] PrimalForce,\n        [HitSkill(\"Vorpal Blade\")] VorpalBlade,\n        [HitSkill(\"Weary Thrust\")] WearyThrust,\n        [GunSkill(\"Cruel Attack\")] CruelAttack,\n        [GunSkill(\"Vile Assault\")] VileAssault,\n        [GunSkill(\"Poison Arrow\")] PoisonArrow, // FES, P3P\n        [HitSkill(\"Weary Thrust\")] WearyThrust2, // FES, P3P\n        [HitSkill(\"Vorpal Blade\")] VorpalBlade2, // FES, P3P\n        [Skill(\"Junpei Co-Op\")] JunpeiCoOp, // P3P\n        [Skill(\"Yukari Co-Op\")] YukariCoOp, // P3P\n        [Skill(\"Akihiko Co-Op\")] AkihikoCoOp, // P3P\n        [Skill(\"Mitsuru Co-Op\")] MitsuruCoOp, // P3P\n        [Skill(\"Aigis Co-Op\")] AigisCoOp, // P3P\n        [Skill(\"Ken Co-Op\")] KenCoOp, // P3P\n        [Skill(\"Shinjiro Co-Op\")] ShinjiroCoOp, // P3P\n        [Skill(\"Koromaru Co-Op\")] KoromaruCoOp, // P3P\n        [Unused] Skill09F,\n        [Skill(\"+charm(low)\")] SkillcharmLow,\n        [Skill(\"+charm(med)\")] SkillcharmMed,\n        [Skill(\"+charm(high)\")] SkillcharmHigh,\n        [Skill(\"+distress(low)\")] SkilldistressLow,\n        [Skill(\"+distress(med)\")] SkilldistressMed,\n        [Skill(\"+distress(high)\")] SkilldistressHigh,\n        [Skill(\"+panic(low)\")] SkillpanicLow,\n        [Skill(\"+panic(med)\")] SkillpanicMed,\n        [Skill(\"+panic(high)\")] SkillpanicHigh,\n        [Skill(\"+fear(low)\")] SkillfearLow,\n        [Skill(\"+fear(med)\")] SkillfearMed,\n        [Skill(\"+fear(high)\")] SkillfearHigh,\n        [Skill(\"+rage(low)\")] SkillrageLow,\n        [Skill(\"+rage(med)\")] SkillrageMed,\n        [Skill(\"+rage(high)\")] SkillrageHigh,\n        [Skill(\"+poison(low)\")] SkillpoisonLow,\n        [Unused] Skill0B0,\n        [Unused] Skill0B1,\n        [Unused] Skill0B2,\n        [Unused] Skill0B3,\n        [Unused] Skill0B4,\n        [Unused] Skill0B5,\n        [Unused] Skill0B6,\n        [Unused] Skill0B7,\n        [Unused] Skill0B8,\n        [Unused] Skill0B9,\n        [Unused] Skill0BA,\n        [Unused] Skill0BB,\n        [Unused] Skill0BC,\n        [Unused] Skill0BD,\n        [Unused] Skill0BE,\n        [Unused] Skill0BF,\n        [HealSkill(\"Dia\")] Dia,\n        [HealSkill(\"Diarama\")] Diarama,\n        [HealSkill(\"Diarahan\")] Diarahan,\n        [HealSkill(\"Media\")] Media,\n        [HealSkill(\"Mediarama\")] Mediarama,\n        [HealSkill(\"Mediarahan\")] Mediarahan,\n        [HealSkill(\"Salvation\")] Salvation,\n        [HealSkill(\"Patra\")] Patra,\n        [HealSkill(\"Me Patra\")] MePatra,\n        [HealSkill(\"Re Patra\")] RePatra,\n        [HealSkill(\"Posumudi\")] Posumudi,\n        [HealSkill(\"Amrita\")] Amrita,\n        [HealSkill(\"Recarm\")] Recarm,\n        [HealSkill(\"Samarecarm\")] Samarecarm,\n        [SupportSkill(\"Tarunda\")] Tarunda,\n        [SupportSkill(\"Matarunda\")] Matarunda,\n        [SupportSkill(\"Sukunda\")] Sukunda,\n        [SupportSkill(\"Masukunda\")] Masukunda,\n        [SupportSkill(\"Rakunda\")] Rakunda,\n        [SupportSkill(\"Marakunda\")] Marakunda,\n        [SupportSkill(\"Dekunda\")] Dekunda,\n        [Unused] Skill0D5,\n        [SupportSkill(\"Tarukaja\")] Tarukaja,\n        [SupportSkill(\"Matarukaja\")] Matarukaja,\n        [SupportSkill(\"Sukukaja\")] Sukukaja,\n        [SupportSkill(\"Masukukaja\")] Masukukaja,\n        [SupportSkill(\"Rakukaja\")] Rakukaja,\n        [SupportSkill(\"Marakukaja\")] Marakukaja,\n        [SupportSkill(\"Power Charge\")] PowerCharge,\n        [SupportSkill(\"Mind Charge\")] MindCharge,\n        [Unused] Skill0DE,\n        [SupportSkill(\"Dekaja\")] Dekaja,\n        [SupportSkill(\"Tetrakarn\")] Tetrakarn,\n        [SupportSkill(\"Makarakarn\")] Makarakarn,\n        [SupportSkill(\"Rebellion\")] Rebellion,\n        [SupportSkill(\"Revolution\")] Revolution,\n        [Unused] Skill0E4,\n        [SupportSkill(\"Fire Break\")] FireBreak,\n        [SupportSkill(\"Ice Break\")] IceBreak,\n        [SupportSkill(\"Wind Break\")] WindBreak,\n        [SupportSkill(\"Elec Break\")] ElecBreak,\n        [SupportSkill(\"Traesto\")] Traesto,\n        [SupportSkill(\"Trafuri\")] Trafuri,\n        [SupportSkill(\"Healing Wave\")] HealingWave,\n        [HealSkill(\"Recarmdra\")] Recarmdra,\n        [HealSkill(\"Charmdi\")] Charmdi,\n        [HealSkill(\"Enradi\")] Enradi,\n        [Skill(\"Junpei Co-Op\")] JunpeiCoOp2, // P3P\n        [Skill(\"Yukari Co-Op\")] YukariCoOp2, // P3P\n        [Skill(\"Akihiko Co-Op\")] AkihikoCoOp2, // P3P\n        [Skill(\"Mitsuru Co-Op\")] MitsuruCoOp2, // P3P\n        [Skill(\"Aigis Co-Op\")] AigisCoOp2, // P3P\n        [Skill(\"Ken Co-Op\")] KenCoOp2, // P3P\n        [Skill(\"Shinjiro Co-Op\")] ShinjiroCoOp2, // P3P\n        [Skill(\"Koromaru Co-Op\")] KoromaruCoOp2, // P3P\n        [Skill(\"Aigis Co-Op\")] AigisCoOp3, // P3P\n        [Skill(\"Aigis Co-Op\")] AigisCoOp4, // P3P\n        [Skill(\"Aigis Co-Op\")] AigisCoOp5, // P3P\n        [Skill(\"Aigis Co-Op\")] AigisCoOp6, // P3P\n        [Unused] Skill0FB,\n        [Unused] Skill0FC,\n        [Unused] Skill0FD,\n        [Unused] Skill0FE,\n        [Unused] Skill0FF,\n        [Skill(\"Summer Dream\")] SummerDream,\n        [Skill(\"Summer Dream\")] SummerDream2,\n        [Skill(\"Summer Dream\")] SummerDream3,\n        [Skill(\"Summer Dream\")] SummerDream4,\n        [Skill(\"Summer Dream\")] SummerDream5,\n        [Skill(\"Summer Dream\")] SummerDream6,\n        [Skill(\"Summer Dream\")] SummerDream7,\n        [Skill(\"Summer Dream\")] SummerDream8,\n        [Skill(\"Summer Dream\")] SummerDream9,\n        [Skill(\"Summer Dream\")] SummerDream10,\n        [Skill(\"Summer Dream\")] SummerDream11,\n        [Skill(\"Summer Dream\")] SummerDream12,\n        [Skill(\"Summer Dream\")] SummerDream13,\n        [Skill(\"Summer Dream\")] SummerDream14,\n        [Skill(\"Summer Dream\")] SummerDream15,\n        [Skill(\"Summer Dream\")] SummerDream16,\n        [Skill(\"Jack Brothers\")] JackBrothers,\n        [Skill(\"Ardhanari\")] Ardhanari,\n        [Skill(\"Trickster\")] Trickster,\n        [Skill(\"Infinity\")] Infinity,\n        [Skill(\"Valhalla\")] Valhalla,\n        [Skill(\"Summer Dream\")] SummerDream17,\n        [Skill(\"Armageddon\")] Armageddon,\n        [Skill(\"Cadenza\")] Cadenza,\n        [Skill(\"Scarlet Havoc\")] ScarletHavoc,\n        [Skill(\"Frolic\")] Frolic,\n        [Skill(\"Dreamfest\")] Dreamfest,\n        [Skill(\"King and I\")] KingandI,\n        [Skill(\"Best Friends\")] BestFriends,\n        [Skill(\"Shadow Hound\")] ShadowHound,\n        [Skill(\"Thunder Call\")] ThunderCall,\n        [Skill(\"Last Judge\")] LastJudge,\n        [Skill(\"Raktapaksha\")] Raktapaksha,\n        [Skill(\"Justice\")] Justice,\n        [Skill(\"Trickster\")] Trickster2,\n        [Unused] Skill123,\n        [Unused] Skill124,\n        [Skill(\"Primal Darkness\")] PrimalDarkness, // FES, P3P\n        [Skill(\"Dark Embrace\")] DarkEmbrace, // FES, P3P\n        [Skill(\"Primal Darkness\")] PrimalDarkness2, // FES, P3P\n        [Skill(\"Primal Darkness\")] PrimalDarkness3, // FES, P3P\n        [Skill(\"Heartbreaker\")] Heartbreaker, // P3P\n        [Skill(\"Pierce Attack\")] PierceAttack6, // P3P\n        [Skill(\"Pierce Attack\")] PierceAttack7, // P3P\n        [Skill(\"Giga Spark\")] GigaSpark, // P3P\n        [Skill(\"Sacrifice\")] Sacrifice, // P3P\n        [Unused] Skill12E,\n        [Unused] Skill12F,\n        [Skill(\"Pierce Attack\")] PierceAttack2,\n        [Skill(\"Fire Attack\")] FireAttack2,\n        [Skill(\"Summon\")] Summon2,\n        [Skill(\"Summon\")] Summon3,\n        [Skill(\"Armed&Ready\")] ArmedAndReady,\n        [Skill(\"Sacrifice\")] Sacrifice3,\n        [Skill(\"Arcana Shift\")] ArcanaShift,\n        [Skill(\"Arcana Shift\")] ArcanaShift2,\n        [Skill(\"Arcana Shift\")] ArcanaShift3,\n        [Skill(\"Arcana Shift\")] ArcanaShift4,\n        [Skill(\"Arcana Shift\")] ArcanaShift5,\n        [Skill(\"Arcana Shift\")] ArcanaShift6,\n        [Skill(\"Arcana Shift\")] ArcanaShift7,\n        [Skill(\"Arcana Shift\")] ArcanaShift8,\n        [Skill(\"Arcana Shift\")] ArcanaShift9,\n        [Skill(\"Night Queen\")] NightQueen,\n        [Skill(\"All-Out 2\")] AllOut2,\n        [Skill(\"All-Out 3\")] AllOut3,\n        [Skill(\"All-Out 4\")] AllOut4,\n        [Skill(\"Plume of Dusk\")] PlumeofDusk,\n        [Skill(\"Analyze\")] Analyze,\n        [Skill(\"Oracle\")] Oracle,\n        [Skill(\"Full Analysis\")] FullAnalysis,\n        [Skill(\"Oracle\")] Oracle2,\n        [Skill(\"Oracle\")] Oracle3,\n        [Skill(\"Oracle\")] Oracle4,\n        [Skill(\"Oracle\")] Oracle5,\n        [Skill(\"Oracle\")] Oracle6,\n        [Skill(\"All-Out 2L\")] AllOut2L,\n        [Skill(\"All-Out 3L\")] AllOut3L,\n        [Skill(\"All-Out 4L\")] AllOut4L,\n        [Skill(\"Support Scan\")] SupportScan,\n        [Skill(\"Third Eye\")] ThirdEye,\n        [Skill(\"Mind DJ\")] MindDJ,\n        [Skill(\"DJ Queen\")] DJQueen,\n        [Skill(\"Escape Route\")] EscapeRoute,\n        [Skill(\"Healing Wave\")] HealingWave2,\n        [Skill(\"Summon\")] Summon4,\n        [Skill(\"Orgia Mode\")] OrgiaMode,\n        [Skill(\"Great Seal\")] GreatSeal,\n        [Skill(\"Great Seal\")] GreatSeal2, // P3P\n        [Unused] Skill159,\n        [IceSkill(\"Ice Attack\")] IceAttack, // FES, P3P\n        [WindSkill(\"Wind Attack\")] WindAttack,\n        [ThunderSkill(\"Elec Attack\")] ElecAttack,\n        [FireSkill(\"Fire Attack\")] FireAttack3,\n        [Skill(\"Pierce Attack\")] PierceAttack8,\n        [Skill(\"Strike Attack\")] StrikeAttack2,\n        [Skill(\"Summon\")] Summon5,\n        [Skill(\"Summon\")] Summon6,\n        [Skill(\"Summon\")] Summon7,\n        [Skill(\"Prophecy of Ruin\")] ProphecyofRuin,\n        [Skill(\"Heartbreaker\")] Heartbreaker2,\n        [Skill(\"Unite\")] Unite,\n        [Skill(\"Separate\")] Separate,\n        [Skill(\"Pierce Attack\")] PierceAttack4,\n        [Skill(\"Pierce Attack\")] PierceAttack5,\n        [Skill(\"Samarecarm\")] Samarecarm2,\n        [Skill(\"Samarecarm\")] Samarecarm3,\n        [Skill(\"Charge\")] Charge,\n        [Skill(\"Giga Spark\")] GigaSpark2,\n        [Skill(\"Wheel of Fortune\")] WheelofFortune,\n        [Skill(\"Wheel of Fortune\")] WheelofFortune2,\n        [Skill(\"Wheel of Fortune\")] WheelofFortune3,\n        [Skill(\"Paradigm Shift\")] ParadigmShift,\n        [Skill(\"Wheel of Fortune\")] WheelofFortune4,\n        [Skill(\"Wheel of Fortune\")] WheelofFortune5,\n        [Skill(\"E Attack Up\")] EAttackUp,\n        [Skill(\"P Attack Up\")] PAttackUp,\n        [Skill(\"E Attack Down\")] EAttackDown,\n        [Skill(\"P Attack Down\")] PAttackDown,\n        [Skill(\"E Defense Up\")] EDefenseUp,\n        [Skill(\"P Defense Up\")] PDefenseUp,\n        [Skill(\"E Defense Down\")] EDefenseDown,\n        [Skill(\"P Defense Down\")] PDefenseDown,\n        [Skill(\"E Panic\")] EPanic,\n        [Skill(\"P Panic\")] PPanic,\n        [Skill(\"E Rage\")] ERage,\n        [Skill(\"P Rage\")] PRage,\n        [Skill(\"E Distress\")] EDistress,\n        [Skill(\"P Distress\")] PDistress,\n        [Skill(\"E Fear\")] EFear,\n        [Skill(\"P Fear\")] PFear,\n        [Skill(\"E Damage Low\")] EDamageLow,\n        [Skill(\"P Damage Low\")] PDamageLow,\n        [Skill(\"E Damage Mid\")] EDamageMid,\n        [Skill(\"P Damage Mid\")] PDamageMid,\n        [Skill(\"E Damage High\")] EDamageHigh,\n        [Skill(\"P Damage High\")] PDamageHigh,\n        [Skill(\"E Heal\")] EHeal,\n        [Skill(\"P Heal\")] PHeal,\n        [Skill(\"Almighty Attack\")] AlmightyAttack2,\n        [Skill(\"Arcana Shift\")] ArcanaShift10,\n        [Skill(\"Arcana Shift\")] ArcanaShift11,\n        [Skill(\"Arcana Shift\")] ArcanaShift12,\n        [Skill(\"Arcana Shift\")] ArcanaShift13,\n        [Consumable(\"Band Aid\")] BandAid,\n        [Consumable(\"Medicine\")] Medicine,\n        [Consumable(\"Bead\")] Bead,\n        [Consumable(\"Snuff Soul\")] SnuffSoul,\n        [Consumable(\"Chewing Soul\")] ChewingSoul,\n        [Consumable(\"Precious Egg\")] PreciousEgg,\n        [Consumable(\"Soma\")] Soma,\n        [Unused] Skill197,\n        [Unused] Skill198,\n        [Unused] Skill199,\n        [Unused] Skill19A,\n        [Consumable(\"Muscle Drink\")] MuscleDrink,\n        [Consumable(\"Odd Morsel\")] OddMorsel,\n        [Consumable(\"Rancid Gravy\")] RancidGravy,\n        [Consumable(\"Powerful Drug\")] PowerfulDrug,\n        [Consumable(\"Cold Medicine\")] ColdMedicine,\n        [Consumable(\"Energy Drink\")] EnergyDrink,\n        [Unused] Skill1A1,\n        [Unused] Skill1A2,\n        [Unused] Skill1A3,\n        [Unused] Skill1A4,\n        [Unused] Skill1A5,\n        [Unused] Skill1A6,\n        [Unused] Skill1A7,\n        [Unused] Skill1A8,\n        [Unused] Skill1A9,\n        [Unused] Skill1AA,\n        [Unused] Skill1AB,\n        [Unused] Skill1AC,\n        [Unused] Skill1AD,\n        [Unused] Skill1AE,\n        [Unused] Skill1AF,\n        [Unused] Skill1B0,\n        [Unused] Skill1B1,\n        [Unused] Skill1B2,\n        [Unused] Skill1B3,\n        [Unused] Skill1B4,\n        [Unused] Skill1B5,\n        [Skill(\"Homunculus\")] Homunculus,\n        [Skill(\"Plume of Dusk\")] PlumeofDusk2,\n        [Unused] Skill1B8,\n        [Unused] Skill1B9,\n        [Unused] Skill1BA,\n        [Unused] Skill1BB,\n        [Unused] Skill1BC,\n        [Unused] Skill1BD,\n        [Unused] Skill1BE,\n        [Unused] Skill1BF,\n        [Unused] Skill1C0,\n        [Unused] Skill1C1,\n        [Unused] Skill1C2,\n        [Unused] Skill1C3,\n        [Unused] Skill1C4,\n        [Unused] Skill1C5,\n        [Unused] Skill1C6,\n        [Unused] Skill1C7,\n        [Unused] Skill1C8,\n        [Unused] Skill1C9,\n        [Unused] Skill1CA,\n        [Unused] Skill1CB,\n        [Unused] Skill1CC,\n        [Unused] Skill1CD,\n        [Unused] Skill1CE,\n        [Unused] Skill1CF,\n        [AutoSkill(\"Resist Slash\")] ResistSlash,\n        [AutoSkill(\"Null Slash\")] NullSlash,\n        [AutoSkill(\"Repel Slash\")] RepelSlash,\n        [AutoSkill(\"Absorb Slash\")] AbsorbSlash,\n        [AutoSkill(\"Resist Strike\")] ResistStrike,\n        [AutoSkill(\"Null Strike\")] NullStrike,\n        [AutoSkill(\"Repel Strike\")] RepelStrike,\n        [AutoSkill(\"Absorb Strike\")] AbsorbStrike,\n        [AutoSkill(\"Resist Pierce\")] ResistPierce,\n        [AutoSkill(\"Null Pierce\")] NullPierce,\n        [AutoSkill(\"Repel Pierce\")] RepelPierce,\n        [AutoSkill(\"Absorb Pierce\")] AbsorbPierce,\n        [AutoSkill(\"Resist Fire\")] ResistFire,\n        [AutoSkill(\"Null Fire\")] NullFire,\n        [AutoSkill(\"Repel Fire\")] RepelFire,\n        [AutoSkill(\"Absorb Fire\")] AbsorbFire,\n        [AutoSkill(\"Resist Ice\")] ResistIce,\n        [AutoSkill(\"Null Ice\")] NullIce,\n        [AutoSkill(\"Repel Ice\")] RepelIce,\n        [AutoSkill(\"Absorb Ice\")] AbsorbIce,\n        [AutoSkill(\"Resist Elec\")] ResistElec,\n        [AutoSkill(\"Null Elec\")] NullElec,\n        [AutoSkill(\"Repel Elec\")] RepelElec,\n        [AutoSkill(\"Absorb Elec\")] AbsorbElec,\n        [AutoSkill(\"Resist Wind\")] ResistWind,\n        [AutoSkill(\"Null Wind\")] NullWind,\n        [AutoSkill(\"Repel Wind\")] RepelWind,\n        [AutoSkill(\"Absorb Wind\")] AbsorbWind,\n        [AutoSkill(\"Resist Light\")] ResistLight,\n        [AutoSkill(\"Null Light\")] NullLight,\n        [AutoSkill(\"Repel Light\")] RepelLight,\n        [AutoSkill(\"Resist Dark\")] ResistDark,\n        [AutoSkill(\"Null Dark\")] NullDark,\n        [AutoSkill(\"Repel Dark\")] RepelDark,\n        [AutoSkill(\"Null Charm\")] NullCharm,\n        [AutoSkill(\"Null Distress\")] NullDistress,\n        [AutoSkill(\"Null Panic\")] NullPanic,\n        [AutoSkill(\"Null Fear\")] NullFear,\n        [AutoSkill(\"Null Rage\")] NullRage,\n        [AutoSkill(\"Null Freeze\")] NullFreeze,\n        [AutoSkill(\"Null Shock\")] NullShock,\n        [AutoSkill(\"Null Poison\")] NullPoison,\n        [AutoSkill(\"Unshaken Will\")] UnshakenWill,\n        [AutoSkill(\"Masakados\")] Masakados,\n        [AutoSkill(\"Dodge Slash\")] DodgeSlash,\n        [AutoSkill(\"Evade Slash\")] EvadeSlash,\n        [AutoSkill(\"Dodge Strike\")] DodgeStrike,\n        [AutoSkill(\"Evade Strike\")] EvadeStrike,\n        [AutoSkill(\"Dodge Pierce\")] DodgePierce,\n        [AutoSkill(\"Evade Pierce\")] EvadePierce,\n        [AutoSkill(\"Dodge Fire\")] DodgeFire,\n        [AutoSkill(\"Evade Fire\")] EvadeFire,\n        [AutoSkill(\"Dodge Ice\")] DodgeIce,\n        [AutoSkill(\"Evade Ice\")] EvadeIce,\n        [AutoSkill(\"Dodge Wind\")] DodgeWind,\n        [AutoSkill(\"Evade Wind\")] EvadeWind,\n        [AutoSkill(\"Dodge Elec\")] DodgeElec,\n        [AutoSkill(\"Evade Elec\")] EvadeElec,\n        [AutoSkill(\"Stamina Up 1\")] StaminaUp1, // FES, P3P\n        [AutoSkill(\"Stamina Up 2\")] StaminaUp2, // FES, P3P\n        [AutoSkill(\"Stamina Up 3\")] StaminaUp3, // FES, P3P\n        [Unused] Skill20D,\n        [AutoSkill(\"Premonition\")] Premonition,\n        [AutoSkill(\"Angelic Grace\")] AngelicGrace,\n        [AutoSkill(\"Fire Boost\")] FireBoost,\n        [AutoSkill(\"Fire Amp\")] FireAmp,\n        [AutoSkill(\"Ice Boost\")] IceBoost,\n        [AutoSkill(\"Ice Amp\")] IceAmp,\n        [AutoSkill(\"Elec Boost\")] ElecBoost,\n        [AutoSkill(\"Elec Amp\")] ElecAmp,\n        [AutoSkill(\"Wind Boost\")] WindBoost,\n        [AutoSkill(\"Wind Amp\")] WindAmp,\n        [AutoSkill(\"Fast Retreat\")] FastRetreat,\n        [AutoSkill(\"HP Up 1\")] HPUp1,\n        [AutoSkill(\"HP Up 2\")] HPUp2,\n        [AutoSkill(\"HP Up 3\")] HPUp3,\n        [AutoSkill(\"SP Up 1\")] SPUp1,\n        [AutoSkill(\"SP Up 2\")] SPUp2,\n        [AutoSkill(\"SP Up 3\")] SPUp3,\n        [AutoSkill(\"Raging Tiger\")] RagingTiger,\n        [AutoSkill(\"Counter\")] Counter,\n        [AutoSkill(\"Counterstrike\")] Counterstrike,\n        [AutoSkill(\"High Counter\")] HighCounter,\n        [AutoSkill(\"Regenerate 1\")] Regenerate1,\n        [AutoSkill(\"Regenerate 2\")] Regenerate2,\n        [AutoSkill(\"Regenerate 3\")] Regenerate3,\n        [AutoSkill(\"Invigorate 1\")] Invigorate1,\n        [AutoSkill(\"Invigorate 2\")] Invigorate2,\n        [AutoSkill(\"Invigorate 3\")] Invigorate3,\n        [AutoSkill(\"Growth 1\")] Growth1,\n        [AutoSkill(\"Growth 2\")] Growth2,\n        [AutoSkill(\"Growth 3\")] Growth3,\n        [Unused] Skill22C,\n        [AutoSkill(\"Auto-Tarukaja\")] AutoTarukaja,\n        [AutoSkill(\"Auto-Rakukaja\")] AutoRakukaja,\n        [AutoSkill(\"Auto-Sukukaja\")] AutoSukukaja,\n        [AutoSkill(\"Alertness\")] Alertness,\n        [AutoSkill(\"Sharp Student\")] SharpStudent,\n        [AutoSkill(\"Apt Pupil\")] AptPupil,\n        [AutoSkill(\"Ali Dance\")] AliDance,\n        [AutoSkill(\"Firm Stance\")] FirmStance,\n        [AutoSkill(\"Spell Master\")] SpellMaster,\n        [AutoSkill(\"Arms Master\")] ArmsMaster,\n        [AutoSkill(\"HP Up\")] HPUp,\n        [AutoSkill(\"SP Up\")] SPUp,\n        [Unused] Skill239,\n        [AutoSkill(\"Divine Grace\")] DivineGrace,\n        [AutoSkill(\"Endure\")] Endure,\n        [AutoSkill(\"Enduring Soul\")] EnduringSoul,\n        [AutoSkill(\"Heavy Master\")] HeavyMaster,\n        [AutoSkill(\"Magic Skill Up\")] MagicSkillUp,\n        [AutoSkill(\"Phys Skill Up\")] PhysSkillUp,\n        [Unused] Skill240,\n        [Unused] Skill241,\n        [Unused] Skill242,\n        [Unused] Skill243,\n        [AutoSkill(\"Rosary\")] Rosary,\n        [AutoSkill(\"Prayer Beads\")] PrayerBeads,\n        [AutoSkill(\"Spear Master\")] SpearMaster,\n        [AutoSkill(\"Bow Master\")] BowMaster,\n        [AutoSkill(\"1hSwd Master\")] Skill1hSwdMaster,\n        [AutoSkill(\"2hSwd Master\")] Skill2hSwdMaster,\n        [AutoSkill(\"Fist Master\")] FistMaster,\n        [AutoSkill(\"Survive Light\")] SurviveLight,\n        [AutoSkill(\"Survive Dark\")] SurviveDark,\n        [AutoSkill(\"Auto-Maraku\")] AutoMaraku,\n        [AutoSkill(\"Auto-Mataru\")] AutoMataru,\n        [AutoSkill(\"Auto-Masuku\")] AutoMasuku,\n        [AutoSkill(\"Charm Boost\")] CharmBoost,\n        [AutoSkill(\"Poison Boost\")] PoisonBoost,\n        [AutoSkill(\"Distress Boost\")] DistressBoost,\n        [AutoSkill(\"Panic Boost\")] PanicBoost,\n        [AutoSkill(\"Fear Boost\")] FearBoost,\n        [AutoSkill(\"Rage Boost\")] RageBoost,\n        [AutoSkill(\"Ailment Boost\")] AilmentBoost,\n        [AutoSkill(\"Hama Boost\")] HamaBoost,\n        [AutoSkill(\"Mudo Boost\")] MudoBoost,\n        [AutoSkill(\"Endure Light\")] EndureLight,\n        [AutoSkill(\"Endure Dark\")] EndureDark,\n        [AutoSkill(\"Weapons Master\")] WeaponsMaster, // P3P\n        [Unused] Skill25C,\n        [AutoSkill(\"Cool Breeze\")] CoolBreeze,\n        [AutoSkill(\"Victory Cry\")] VictoryCry,\n        [AutoSkill(\"Spring of Life\")] SpringofLife,\n        [AutoSkill(\"Spring of Life\")] SpringofLife2,\n        [Skill(\"Infinite Endure\")] InfiniteEndure, // For Debug in P3 and FES, Infinite Endure in P3P\n        [Skill(\"Fast-Heal\")] FastHeal, // FES, P3P\n        [Skill(\"Insta-Heal\")] InstaHeal, // FES, P3P\n        [AutoSkill(\"Resist Charm\")] ResistCharm, // FES, P3P\n        [AutoSkill(\"Resist Distress\")] ResistDistress, // FES, P3P\n        [AutoSkill(\"Resist Panic\")] ResistPanic, // FES, P3P\n        [AutoSkill(\"Resist Fear\")] ResistFear, // FES, P3P\n        [AutoSkill(\"Resist Rage\")] ResistRage, // FES, P3P\n        [AutoSkill(\"Resist Freeze\")] ResistFreeze, // FES, P3P\n        [AutoSkill(\"Resist Shock\")] ResistShock, // FES, P3P\n        [AutoSkill(\"Resist Poison\")] ResistPoison, // FES, P3P\n        [AutoSkill(\"HP Up High\")] HPUpHigh, // FES, P3P\n        [AutoSkill(\"SP Up High\")] SPUpHigh, // FES, P3P\n        [Skill(\"High Endure\")] HighEndure, // P3P\n        [Skill(\"Blank\")] Blank, // P3P\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/KHSave.LibPersona5.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"Resources\\**\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.LibPersona5/Models/Character.cs",
    "content": "using KHSave.LibPersona5.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona5.Models\n{\n    public class Character\n    {\n        [Data(Count = 0x2a8)] public byte[] Data { get; set; }\n\n        [Data(0)] public short Unknown00 { get; set; }\n        [Data] public short Unknown02 { get; set; }\n        [Data] public int Unknown04 { get; set; }\n        [Data] public int Unknown08 { get; set; }\n        [Data] public int Unknown0c { get; set; }\n        [Data] public int Unknown10 { get; set; }\n        [Data] public int CurrentHp { get; set; }\n        [Data] public int CurrentMp { get; set; }\n        [Data] public int Unknown1c { get; set; }\n        [Data(0x24)] public int Experience { get; set; }\n        [Data(0x4c, Count = 12, Stride = 0x30)] public Persona[] Persona { get; set; }\n        [Data] public Equipment MeleeWeapon { get; set; }\n        [Data] public Equipment Protector { get; set; }\n        [Data] public Equipment Accessory { get; set; }\n        [Data] public Equipment Outfit { get; set; }\n        [Data] public Equipment RangeWeapon { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Models/Persona.cs",
    "content": "using KHSave.LibPersona5.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona5.Models\n{\n    public class Persona\n    {\n        [Data(Count = 0x30)] public byte[] Data { get; set; }\n\n        [Data(0)] public short Flags { get; set; }\n        [Data] public short Id { get; set; }\n        [Data] public byte Level { get; set; }\n        [Data] public byte Unknown05 { get; set; }\n        [Data] public Trait Trait { get; set; }\n        [Data] public int Experience { get; set; }\n        [Data(Count = 8)] public Skill[] Skills { get; set; }\n        [Data] public byte Strength { get; set; }\n        [Data] public byte Magic { get; set; }\n        [Data] public byte Endurance { get; set; }\n        [Data] public byte Agility { get; set; }\n        [Data] public byte Luck { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Persona5Royal.cs",
    "content": "using KHSave.LibPersona5.Models;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona5\n{\n    internal class Persona5Royal : ISavePersona5\n    {\n        public bool IsRoyal => true;\n\n        [Data(Count = 256 * 1024)] public byte[] Data { get; set; }\n\n        [Data(0x0006)] public short CalendarDay1 { get; set; }\n        //[Data(0x14, Count = 12)] public string ProtagonistLastName { get; set; }\n        //[Data(Count = 12)] public string ProtagonistFirstName { get; set; }\n\n        [Data(0x48, Count = 10, Stride = 0x2a8)] public Character[] Characters { get; set; }\n        [Data(0x2252, Count = 0x500)] public byte[] InventoryCount { get; set; }\n        [Data(0x357c)] public int Money { get; set; }\n        [Data(0x3b4c)] public bool PartyModifierKasumi { get; set; }\n        [Data(0x3b4d)] public bool PartyModifierRyuji { get; set; }\n        [Data] public bool PartyModifierMorgana { get; set; }\n        [Data] public bool PartyModifierAnn { get; set; }\n        [Data] public bool PartyModifierYusuke { get; set; }\n        [Data] public bool PartyModifierMakoto { get; set; }\n        [Data] public bool PartyModifierHaru { get; set; }\n        [Data] public bool PartyModifierFutaba { get; set; }\n        [Data] public bool PartyModifierAkechi { get; set; }\n        [Data(0x41d8, Count = 0x1D0, Stride = 0x30)] public Persona[] Compendium { get; set; }\n        [Data(0xA5F4)] public short CalendarDay2 { get; set; }\n        [Data(0xA5F8)] public short CalendarDay3 { get; set; }\n        [Data(0x13878)] public short RoomCategory { get; set; }\n        [Data(0x1387a)] public short RoomMap { get; set; }\n        [Data(0x13882)] public float PositionX { get; set; }\n        [Data(0x13886)] public float PositionY { get; set; }\n        [Data(0x1388a)] public float PositionZ { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Persona5Vanilla.cs",
    "content": "using KHSave.LibPersona5.Models;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona5\n{\n    internal class Persona5Vanilla : ISavePersona5\n    {\n        public bool IsRoyal => false;\n\n        [Data(Count = 192 * 1024)] public byte[] Data { get; set; }\n\n        [Data(0x0006)] public short CalendarDay1 { get; set; }\n        //[Data(0x14, Count = 12)] public string ProtagonistLastName { get; set; }\n        //[Data(Count = 12)] public string ProtagonistFirstName { get; set; }\n        [Data(0x48, Count = 9, Stride = 0x2a8)] public Character[] Characters { get; set; }\n        [Data(0x2252, Count = 0x500)] public byte[] InventoryCount { get; set; }\n        [Data(0x2d5a)] public int Money { get; set; }\n        [Data(0x318b)] public bool PartyModifierRyuji { get; set; }\n        [Data] public bool PartyModifierMorgana { get; set; }\n        [Data] public bool PartyModifierAnn { get; set; }\n        [Data] public bool PartyModifierYusuke { get; set; }\n        [Data] public bool PartyModifierMakoto { get; set; }\n        [Data] public bool PartyModifierHaru { get; set; }\n        [Data] public bool PartyModifierFutaba { get; set; }\n        [Data] public bool PartyModifierAkechi { get; set; }\n        [Data(0x35d6, Count = 0x1D0, Stride = 0x30)] public Persona[] Compendium { get; set; }\n        [Data(0x92be)] public short CalendarDay2 { get; set; }\n        [Data(0x92c2)] public short CalendarDay3 { get; set; }\n        [Data(0x12512)] public short SocialStatKnowledge { get; set; }\n        [Data] public short SocialStatCharm { get; set; }\n        [Data] public short SocialStatProficency { get; set; }\n        [Data] public short SocialStatGuts { get; set; }\n        [Data] public short SocialStatKindness { get; set; }\n        [Data(0x12524)] public short RoomCategory { get; set; }\n        [Data(0x12526)] public short RoomMap { get; set; }\n        [Data(0x1252c)] public float PositionX { get; set; }\n        [Data(0x12530)] public float PositionY { get; set; }\n        [Data(0x12534)] public float PositionZ { get; set; }\n\n        // Royal exclusive content\n        public bool PartyModifierKasumi { get => false; set { } }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Presets.Items.cs",
    "content": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing Xe.BinaryMapper;\n\n/// <summary>\n/// A big THANK YOU to TGEnigma, who made this possible:\n/// https://github.com/TGEnigma/010-Editor-Templates\n/// </summary>\nnamespace KHSave.LibPersona5\n{\n    public static partial class Presets\n    {\n        public const int Protagonist = 0x0002;\n        public const int Ryuji = 0x0004;\n        public const int Morgana = 0x0008;\n        public const int Ann = 0x0010;\n        public const int Yusuke = 0x0020;\n        public const int Makoto = 0x0040;\n        public const int Haru = 0x0080;\n        public const int Futaba = 0x0100;\n        public const int Goro = 0x0200;\n        public const int Violet = 0x0400;\n\n        public const int ArmorEquipMaleMask = Protagonist | Ryuji | Yusuke | Goro;\n        public const int ArmorEquipFemaleMask = Ann | Makoto | Haru | Futaba;\n        public const int ArmorEquipCatMask = Morgana;\n        public const int ArmorEquipUnisexMask = ArmorEquipMaleMask | ArmorEquipFemaleMask;\n        public const int ArmorEquipAllMask = ArmorEquipUnisexMask | ArmorEquipCatMask;\n\n        public interface IItem\n        {\n            int Id { get; set; }\n            string Name { get; set; }\n        }\n\n        public class Items\n        {\n            public IEnumerable<Accessory> Accessories { get; set; }\n            public IEnumerable<Armor> Armors { get; set; }\n            public IEnumerable<Consumable> Consumables { get; set; }\n            public IEnumerable<KeyItem> KeyItems { get; set; }\n            public IEnumerable<Material> Materials { get; set; }\n            public IEnumerable<MeleeWeapon> MeleeWeapons { get; set; }\n            public IEnumerable<Outfit> Outfits { get; set; }\n            public IEnumerable<SkillCard> SkillCards { get; set; }\n            public IEnumerable<RangeWeapon> RangeWeapons { get; set; }\n        }\n\n        public class Accessory : IItem\n        {\n            public int Id { get; set; }\n            public string Name { get; set; }\n            [Data(Count = 0x40)] public byte[] Ignore { get; set; }\n        }\n\n        public class Armor : IItem\n        {\n            public int Id { get; set; }\n            public string Name { get; set; }\n\n            [Data] public int Unk00 { get; set; }\n            [Data] public short Unk04 { get; set; }\n            [Data] public short Unk06 { get; set; }\n            [Data] public short Unk08 { get; set; }\n            [Data] public short EquippableFlags { get; set; }\n            [Data(Count = 0x24)] public byte[] Ignore { get; set; }\n        }\n\n        public class Consumable : IItem\n        {\n            public int Id { get; set; }\n            public string Name { get; set; }\n        }\n\n        public class KeyItem : IItem\n        {\n            public int Id { get; set; }\n            public string Name { get; set; }\n        }\n\n        public class Material : IItem\n        {\n            public int Id { get; set; }\n            public string Name { get; set; }\n        }\n\n        public class MeleeWeapon : IItem\n        {\n            public int Id { get; set; }\n            public string Name { get; set; }\n            [Data] public int Unk00 { get; set; }\n            [Data] public short Unk04 { get; set; }\n            [Data] public short Unk06 { get; set; }\n            [Data] public short Unk08 { get; set; }\n            [Data] public short EquippableFlags { get; set; }\n            [Data(Count = 0x24)] public byte[] Ignore { get; set; }\n        }\n\n        public class Outfit : IItem\n        {\n            public int Id { get; set; }\n            public string Name { get; set; }\n        }\n\n        public class SkillCard : IItem\n        {\n            public int Id { get; set; }\n            public string Name { get; set; }\n        }\n\n        public class RangeWeapon : IItem\n        {\n            public int Id { get; set; }\n            public string Name { get; set; }\n            [Data] public int Unk00 { get; set; }\n            [Data] public short Unk04 { get; set; }\n            [Data] public short Unk06 { get; set; }\n            [Data] public short Unk08 { get; set; }\n            [Data] public short EquippableFlags { get; set; }\n            [Data(Count = 0x28)] public byte[] Ignore { get; set; }\n        }\n\n        public static Items GetItems(bool isRoyal)\n        {\n            using (var stream = File.OpenRead(GetResourceFileName(\"Item.bin\", isRoyal)))\n            {\n                return new Items\n                {\n                    Accessories = GetItems<Accessory>(stream, 0x40, \"AccessoryNames\", isRoyal),\n                    Armors = GetItems<Armor>(stream, 0x30, \"ArmorNames\", isRoyal),\n                    Consumables = GetItems<Consumable>(stream, 0x30, \"ConsumableItemNames\", isRoyal),\n                    KeyItems = GetItems<KeyItem>(stream, 0xc, \"KeyItemNames\", isRoyal),\n                    Materials = GetItems<Material>(stream, 0x2c, \"MaterialNames\", isRoyal),\n                    MeleeWeapons = GetItems<MeleeWeapon>(stream, 0x30, \"MeleeWeaponNames\", isRoyal),\n                    Outfits = GetItems<Outfit>(stream, 0x20, \"OutfitNames\", isRoyal),\n                    SkillCards = GetItems<SkillCard>(stream, 0x18, \"SkillCardNames\", isRoyal),\n                    RangeWeapons = GetItems<RangeWeapon>(stream, 0x34, \"RangedWeaponNames\", isRoyal),\n                };\n            }\n        }\n\n        private static IEnumerable<TItem> GetItems<TItem>(\n            Stream stream, int stride, string namesSource, bool isRoyal)\n            where TItem : class, IItem\n        {\n            var length = stream.ReadInt32BE();\n            var count = length / stride;\n            var startPosition = stream.Position;\n\n            var names = File.ReadAllLines(GetResourceFileName($\"{namesSource}.txt\", isRoyal));\n            var items = Enumerable.Range(0, count)\n                .Select(i => SavePersona5.Mapper.ReadObject<TItem>(stream))\n                .ToList();\n            for (var i = 0; i < count; i++)\n            {\n                var item = items[i];\n                item.Id = i;\n                item.Name = i < names.Length ? names[i] : $\"##{i}\";\n            }\n\n            var nextPosition = startPosition + length;\n            while ((nextPosition % 16) != 0)\n                nextPosition++;\n            stream.Position = nextPosition;\n\n            return items;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Presets.Persona.cs",
    "content": "using KHSave.LibPersona5.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona5\n{\n    public static partial class Presets\n    {\n        public class Persona\n        {\n            [Data] public byte Unk00 { get; set; }\n            [Data] public byte Unk01 { get; set; }\n            [Data] public ArcanaType Arcana { get; set; }\n            [Data] public byte Level { get; set; }\n            [Data] public byte Strength { get; set; }\n            [Data] public byte Magic { get; set; }\n            [Data] public byte Endurance { get; set; }\n            [Data] public byte Agility { get; set; }\n            [Data] public byte Luck { get; set; }\n            [Data] public byte Unk09 { get; set; }\n            [Data] public byte Unk0a { get; set; }\n            [Data] public byte Unk0b { get; set; }\n            [Data] public byte Unk0c { get; set; }\n            [Data] public byte Unk0d { get; set; }\n            public int Id { get; set; }\n            public string Name { get; set; }\n            public List<ushort> Skills { get; set; }\n\n            public override string ToString() =>\n                $\"{Unk00:X02} {Unk01:X02} {Level:D02} {Name}\";\n        }\n\n        private class PersonaSkillset\n        {\n            [Data] public ushort Unk00 { get; set; }\n            [Data] public ushort Unk02 { get; set; }\n            [Data] public ushort Unk04 { get; set; }\n            [Data(Count = 16)] public PersonaSkill[] Skills { get; set; }\n        }\n\n        private class PersonaSkill\n        {\n            [Data] public byte Level { get; set; }\n            [Data] public byte Enabled { get; set; }\n            [Data] public ushort SkillId { get; set; }\n        }\n\n        private static string GetResourceFileName(string fileName, bool isRoyal) => Path.Combine(\n            AppContext.BaseDirectory,\n            $\"Resources/Persona5/{(isRoyal ? \"Royal\" : \"Vanilla\")}_{fileName}\");\n\n        public static List<Persona> GetPersona(bool isRoyal)\n        {\n            var names = File.ReadAllLines(GetResourceFileName(\"Demon.txt\", isRoyal));\n            using (var stream = File.OpenRead(GetResourceFileName(\"Demon.bin\", isRoyal)))\n            {\n                var length = stream.ReadInt32BE();\n                var count = length / 14;\n\n                var persona = Enumerable.Range(0, count)\n                    .Select(_ => SavePersona5.Mapper.ReadObject<Persona>(stream))\n                    .ToList();\n\n                while ((stream.Position % 16) != 0)\n                    stream.Position++;\n                length = (stream.ReadByte() << 24) |\n                    (stream.ReadByte() << 16) |\n                    (stream.ReadByte() << 8) |\n                    (stream.ReadByte() << 0);\n                count = length / 70;\n                var skillSets = Enumerable.Range(0, count)\n                    .Select(_ => SavePersona5.Mapper.ReadObject<PersonaSkillset>(stream))\n                    .ToList();\n\n                count = Math.Min(count, persona.Count);\n                for (var i = 0; i < count; i++)\n                {\n                    persona[i].Id = i;\n                    persona[i].Name = i < names.Length ? names[i] : \"Unused\";\n                    persona[i].Skills = skillSets[i].Skills\n                        .Where(x => x.Enabled > 0)\n                        .Select(x => x.SkillId)\n                        .ToList();\n                }\n\n                return persona\n                    .Where(x => (x.Unk01 & 8) != 8)\n                    .ToList();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Presets.cs",
    "content": "using System.Collections.Generic;\nusing System.IO;\n\nnamespace KHSave.LibPersona5\n{\n    public static partial class Presets\n    {\n        public class Field\n        {\n            public int Category { get; set; }\n            public int Map { get; set; }\n            public bool Vanilla { get; set; }\n            public bool Royal { get; set; }\n            public string Description { get; set; }\n        }\n\n        private static int ReadInt32BE(this Stream stream) =>\n            (stream.ReadByte() << 24) |\n            (stream.ReadByte() << 16) |\n            (stream.ReadByte() << 8) |\n            (stream.ReadByte() << 0);\n\n        private static Field FieldAll(int category, int map, string description) =>\n            new Field { Category = category, Map = map, Vanilla = true, Royal = true, Description = description };\n        private static Field FieldVanilla(int category, int map, string description) =>\n            new Field { Category = category, Map = map, Vanilla = true, Royal = false, Description = description };\n        private static Field FieldRoyal(int category, int map, string description) =>\n            new Field { Category = category, Map = map, Vanilla = false, Royal = true, Description = description };\n\n        public static List<Field> Fields = new List<Field>\n        {\n            FieldAll    (  0,  2, \"Title screen\"),\n            FieldAll    (  0,100, \"Template map\"),\n            FieldAll    (  1,  1, \"Shibuya - Station Square\"),\n            FieldAll    (  1,  2, \"Shibuya - Underground Walkway\"),\n            FieldAll    (  1,  3, \"Shibuya - Central Street\"),\n            FieldAll    (  1,  4, \"Shibuya - Underground Mall\"),\n            FieldAll    (  1,  5, \"Teikyu Building - Ginza Line Gate\"),\n            FieldAll    (  1,  6, \"Teikyu Building - Meeting point\"),\n            FieldAll    (  1,  7, \"FREEZE\"),\n            FieldAll    (  1, 11, \"Shibuya - Station Square (cutscene\"),\n            FieldAll    (  1, 13, \"Shibuya - Central Street #1 (cutscene)\"),\n            FieldAll    (  1,103, \"Shibuya - Central Street #2 (cutscene)\"),\n            FieldAll    (  1,203, \"Shibuya - Central Street #3 (cutscene)\"),\n            FieldAll    (  1,204, \"Shibuya - Central Street #4 (cutscene)\"),\n            FieldAll    (  2,  1, \"Shujin Academy - School gate\"),\n            FieldAll    (  2,  2, \"Shujin Academy - Classroom Building\"),\n            FieldAll    (  2,  3, \"Shujin Academy - Practice Building\"),\n            FieldAll    (  2,  4, \"Shujin Academy - Courtyard\"),\n            FieldAll    (  2,  5, \"Shujin Academy - Rooftop\"),\n            FieldAll    (  2,  6, \"Shujin Academy - Classroom\"),\n            FieldAll    (  2,  7, \"Shujin Academy - PE Faculty Office\"),\n            FieldAll    (  2,  8, \"Shujin Academy - Library\"),\n            FieldAll    (  2,  9, \"Shujin Academy - Gymnasium\"),\n            FieldAll    (  2, 10, \"Shujin Academy - Faculty Room\"),\n            FieldAll    (  2, 11, \"Shujin Academy - Generic room (cutscene)\"),\n            FieldAll    (  2, 12, \"Shujin Academy - Cafeteria\"),\n            FieldAll    (  2, 13, \"Shujin Academy - Way to school (cutscene)\"),\n            FieldAll    (  2, 14, \"Shujin Academy - Celebration (cutscene)\"),\n            FieldAll    (  2, 20, \"Shujin Academy - Classroom Building (cutscene)\"),\n            FieldAll    (  2, 21, \"Shujin Academy - Courtyard (cutscene)\"),\n            FieldAll    (  2,102, \"Shujin Academy - Classroom Building 2F (cutscene)\"),\n            FieldAll    (  3,  2, \"Cafe Leblanc\"),\n            FieldAll    (  3, 10, \"Shibuya - Convenience Store\"),\n            FieldAll    (  3,102, \"Cafe Leblanc (cutscene)\"),\n            FieldAll    (  4,  5, \"Teikyu Building - Maradame's Exhibition\"),\n            FieldAll    (  5,  7, \"FREEZE\"),\n            FieldAll    (  6,  1, \"Shinjuku - Red-light District\"),\n            FieldAll    (  6, 11, \"Shinjuku (cutscene)\"),\n            FieldAll    (  6, 12, \"FREEZE\"),\n            FieldAll    (  7,  1, \"\"),\n            FieldAll    (  7, 11, \"\"),\n            FieldAll    (  8,  1, \"\"),\n            FieldAll    (  8,  2, \"\"),\n            FieldAll    (  9,  1, \"\"),\n            FieldAll    (  9,  2, \"\"),\n            FieldAll    (  9,  3, \"\"),\n            FieldAll    (  9,  4, \"\"),\n            FieldAll    (  9,  5, \"\"),\n            FieldAll    (  9,102, \"\"),\n            FieldAll    ( 10,  1, \"\"),\n            FieldAll    ( 10,  2, \"\"),\n            FieldAll    ( 10,  3, \"\"),\n            FieldAll    ( 10,  4, \"\"),\n            FieldAll    ( 10,  5, \"\"),\n            FieldAll    ( 10,  6, \"\"),\n            FieldVanilla( 10,  7, \"\"),\n            FieldAll    ( 10,  8, \"\"),\n            FieldAll    ( 10,  9, \"\"),\n            FieldAll    ( 10, 10, \"\"),\n            FieldAll    ( 10, 11, \"\"),\n            FieldAll    ( 10, 12, \"\"),\n            FieldAll    ( 10, 13, \"\"),\n            FieldAll    ( 10, 15, \"\"),\n            FieldAll    ( 10, 16, \"\"),\n            FieldAll    ( 10, 17, \"\"),\n            FieldAll    ( 10, 18, \"\"),\n            FieldAll    ( 10, 19, \"\"),\n            FieldAll    ( 10, 20, \"\"),\n            FieldAll    ( 10, 21, \"\"),\n            FieldRoyal  ( 10, 22, \"\"),\n            FieldVanilla( 10, 30, \"\"),\n            FieldVanilla( 10, 31, \"\"),\n            FieldVanilla( 10, 32, \"\"),\n            FieldAll    ( 10,103, \"\"),\n            FieldAll    ( 10,130, \"\"),\n            FieldVanilla( 11,  1, \"\"),\n            FieldVanilla( 11,  2, \"\"),\n            FieldAll    ( 11,  3, \"\"),\n            FieldAll    ( 11,  4, \"\"),\n            FieldAll    ( 11,  6, \"\"),\n            FieldAll    ( 12,  1, \"\"),\n            FieldAll    ( 12,  2, \"\"),\n            FieldAll    ( 12,  3, \"\"),\n            FieldAll    ( 12,  5, \"\"),\n            FieldAll    ( 12,  6, \"\"),\n            FieldAll    ( 12,  7, \"\"),\n            FieldAll    ( 12,  8, \"\"),\n            FieldAll    ( 12,  9, \"\"),\n            FieldAll    ( 12, 10, \"\"),\n            FieldAll    ( 12, 11, \"\"),\n            FieldAll    ( 12, 12, \"\"),\n            FieldAll    ( 12, 13, \"\"),\n            FieldAll    ( 12, 14, \"\"),\n            FieldAll    ( 12, 15, \"\"),\n            FieldAll    ( 12, 16, \"\"),\n            FieldAll    ( 12, 17, \"\"),\n            FieldAll    ( 12, 18, \"\"),\n            FieldAll    ( 12, 20, \"\"),\n            FieldAll    ( 12, 21, \"\"),\n            FieldAll    ( 12, 22, \"\"),\n            FieldAll    ( 12, 23, \"\"),\n            FieldAll    ( 12, 24, \"\"),\n            FieldAll    ( 12, 25, \"\"),\n            FieldAll    ( 12, 26, \"\"),\n            FieldRoyal  ( 12, 27, \"\"),\n            FieldRoyal  ( 12, 28, \"\"),\n            FieldRoyal  ( 12, 29, \"\"),\n            FieldRoyal  ( 12, 30, \"\"),\n            FieldRoyal  ( 12, 31, \"\"),\n            FieldRoyal  ( 12, 38, \"\"),\n            FieldRoyal  ( 12, 39, \"\"),\n            FieldRoyal  ( 12, 40, \"\"),\n            FieldRoyal  ( 12, 41, \"\"),\n            FieldRoyal  ( 12, 42, \"\"),\n            FieldRoyal  ( 12, 43, \"\"),\n            FieldRoyal  ( 12, 44, \"\"),\n            FieldRoyal  ( 12, 45, \"\"),\n            FieldRoyal  ( 12, 46, \"\"),\n            FieldRoyal  ( 12, 47, \"\"),\n            FieldRoyal  ( 12, 49, \"\"),\n            FieldAll    ( 12,103, \"\"),\n            FieldAll    ( 13,  1, \"\"),\n            FieldAll    ( 13,  2, \"\"),\n            FieldAll    ( 13,  3, \"\"),\n            FieldAll    ( 13,  4, \"\"),\n            FieldAll    ( 13,  5, \"\"),\n            FieldAll    ( 13,  6, \"\"),\n            FieldAll    ( 13,  8, \"\"),\n            FieldAll    ( 13,  9, \"\"),\n            FieldAll    ( 13, 10, \"\"),\n            FieldAll    ( 13, 11, \"\"),\n            FieldAll    ( 13, 12, \"\"),\n            FieldAll    ( 13, 13, \"\"),\n            FieldAll    ( 13, 14, \"\"),\n            FieldAll    ( 13, 15, \"\"),\n            FieldAll    ( 13, 16, \"\"),\n            FieldAll    ( 13, 17, \"\"),\n            FieldAll    ( 13, 18, \"\"),\n            FieldAll    ( 13, 19, \"\"),\n            FieldAll    ( 13, 20, \"\"),\n            FieldAll    ( 13, 21, \"\"),\n            FieldAll    ( 13, 22, \"\"),\n            FieldRoyal  ( 13, 23, \"\"),\n            FieldRoyal  ( 13, 24, \"\"),\n            FieldRoyal  ( 13, 25, \"\"),\n            FieldRoyal  ( 13, 26, \"\"),\n            FieldRoyal  ( 13, 27, \"\"),\n            FieldAll    ( 14,  1, \"\"),\n            FieldAll    ( 14,  2, \"\"),\n            FieldAll    ( 14,  3, \"\"),\n            FieldAll    ( 14,  4, \"\"),\n            FieldAll    ( 14,  5, \"\"),\n            FieldAll    ( 14,  6, \"\"),\n            FieldAll    ( 15,  1, \"\"),\n            FieldAll    ( 20,  1, \"\"),\n            FieldAll    ( 20,  2, \"\"),\n            FieldAll    ( 20,  3, \"\"),\n            FieldAll    ( 20,  4, \"\"),\n            FieldAll    ( 20,  5, \"\"),\n            FieldAll    ( 20,  6, \"\"),\n            FieldAll    ( 20,  7, \"\"),\n            FieldAll    ( 20,  8, \"\"),\n            FieldAll    ( 20,  9, \"\"),\n            FieldAll    ( 20, 10, \"\"),\n            FieldAll    ( 20, 11, \"\"),\n            FieldAll    ( 20, 12, \"\"),\n            FieldAll    ( 20, 13, \"\"),\n            FieldAll    ( 20, 14, \"\"),\n            FieldAll    ( 20, 20, \"\"),\n            FieldAll    ( 20, 21, \"\"),\n            FieldAll    ( 20, 22, \"\"),\n            FieldRoyal  ( 20, 23, \"\"),\n            FieldRoyal  ( 20, 24, \"\"),\n            FieldAll    ( 21,  1, \"\"),\n            FieldRoyal  ( 22,  1, \"\"),\n            FieldVanilla( 30,  1, \"\"),\n            FieldAll    ( 50, 10, \"\"),\n            FieldAll    ( 50, 11, \"\"),\n            FieldAll    ( 50, 20, \"\"),\n            FieldAll    ( 50, 21, \"\"),\n            FieldAll    ( 50, 30, \"\"),\n            FieldRoyal  ( 50, 31, \"\"),\n            FieldRoyal  ( 50, 32, \"\"),\n            FieldAll    ( 51, 10, \"\"),\n            FieldAll    ( 51, 20, \"\"),\n            FieldAll    ( 51, 21, \"\"),\n            FieldVanilla( 51, 22, \"\"),\n            FieldAll    ( 51, 30, \"\"),\n            FieldAll    ( 51, 31, \"\"),\n            FieldAll    ( 51, 32, \"\"),\n            FieldAll    ( 51, 33, \"\"),\n            FieldAll    ( 51, 40, \"\"),\n            FieldAll    ( 51, 41, \"\"),\n            FieldAll    ( 51, 42, \"\"),\n            FieldAll    ( 51, 43, \"\"),\n            FieldAll    ( 51, 50, \"\"),\n            FieldAll    ( 51, 51, \"\"),\n            FieldAll    ( 51, 52, \"\"),\n            FieldRoyal  ( 51, 53, \"\"),\n            FieldAll    ( 51, 60, \"\"),\n            FieldAll    ( 51, 61, \"\"),\n            FieldRoyal  ( 51, 52, \"\"),\n            FieldAll    ( 51, 70, \"\"),\n            FieldVanilla( 51, 80, \"\"),\n            FieldAll    ( 51, 90, \"\"),\n            FieldAll    ( 51,100, \"\"),\n            FieldAll    ( 51,110, \"\"),\n            FieldAll    ( 51,120, \"\"),\n            FieldAll    ( 51,130, \"\"),\n            FieldAll    ( 51,140, \"\"),\n            FieldAll    ( 51,150, \"\"),\n            FieldAll    ( 52, 10, \"\"),\n            FieldAll    ( 52, 11, \"\"),\n            FieldAll    ( 52, 20, \"\"),\n            FieldAll    ( 52, 21, \"\"),\n            FieldAll    ( 52, 22, \"\"),\n            FieldAll    ( 52, 30, \"\"),\n            FieldAll    ( 52, 31, \"\"),\n            FieldAll    ( 52, 32, \"\"),\n            FieldAll    ( 52, 40, \"\"),\n            FieldAll    ( 52, 41, \"\"),\n            FieldAll    ( 52, 42, \"\"),\n            FieldAll    ( 52, 43, \"\"),\n            FieldAll    ( 52, 44, \"\"),\n            FieldAll    ( 52, 45, \"\"),\n            FieldAll    ( 52, 50, \"\"),\n            FieldVanilla( 52, 51, \"\"),\n            FieldVanilla( 52, 52, \"\"),\n            FieldAll    ( 52, 53, \"\"),\n            FieldRoyal  ( 52, 55, \"\"),\n            FieldAll    ( 52, 70, \"\"),\n            FieldVanilla( 52, 71, \"\"),\n            FieldAll    ( 52, 80, \"\"),\n            FieldAll    ( 52, 90, \"\"),\n            FieldAll    ( 53, 10, \"\"),\n            FieldAll    ( 53, 11, \"\"),\n            FieldAll    ( 53, 12, \"\"),\n            FieldAll    ( 53, 20, \"\"),\n            FieldAll    ( 53, 21, \"\"),\n            FieldAll    ( 53, 22, \"\"),\n            FieldAll    ( 53, 30, \"\"),\n            FieldAll    ( 53, 31, \"\"),\n            FieldAll    ( 53, 33, \"\"),\n            FieldAll    ( 53, 34, \"\"),\n            FieldRoyal  ( 53, 35, \"\"),\n            FieldAll    ( 53, 50, \"\"),\n            FieldAll    ( 53, 51, \"\"),\n            FieldAll    ( 53, 52, \"\"),\n            FieldAll    ( 53, 60, \"\"),\n            FieldAll    ( 53, 61, \"\"),\n            FieldAll    ( 53, 62, \"\"),\n            FieldAll    ( 53, 63, \"\"),\n            FieldAll    ( 53, 64, \"\"),\n            FieldAll    ( 53, 70, \"\"),\n            FieldAll    ( 53, 71, \"\"),\n            FieldAll    ( 53, 72, \"\"),\n            FieldRoyal  ( 53, 73, \"\"),\n            FieldAll    ( 53, 80, \"\"),\n            FieldAll    ( 53, 81, \"\"),\n            FieldAll    ( 53, 82, \"\"),\n            FieldAll    ( 53, 83, \"\"),\n            FieldRoyal  ( 53, 84, \"\"),\n            FieldAll    ( 53, 90, \"\"),\n            FieldAll    ( 53, 91, \"\"),\n            FieldAll    ( 53, 92, \"\"),\n            FieldAll    ( 53, 93, \"\"),\n            FieldRoyal  ( 53, 94, \"\"),\n            FieldAll    ( 53,110, \"\"),\n            FieldAll    ( 53,111, \"\"),\n            FieldAll    ( 54, 10, \"\"),\n            FieldAll    ( 54, 11, \"\"),\n            FieldAll    ( 54, 20, \"\"),\n            FieldAll    ( 54, 21, \"\"),\n            FieldAll    ( 54, 22, \"\"),\n            FieldAll    ( 54, 30, \"\"),\n            FieldAll    ( 54, 31, \"\"),\n            FieldAll    ( 54, 32, \"\"),\n            FieldAll    ( 54, 33, \"\"),\n            FieldRoyal  ( 54, 34, \"\"),\n            FieldAll    ( 54, 50, \"\"),\n            FieldAll    ( 54, 51, \"\"),\n            FieldAll    ( 54, 52, \"\"),\n            FieldRoyal  ( 54, 53, \"\"),\n            FieldRoyal  ( 54, 54, \"\"),\n            FieldRoyal  ( 54, 55, \"\"),\n            FieldAll    ( 54, 70, \"\"),\n            FieldAll    ( 54, 71, \"\"),\n            FieldAll    ( 54, 80, \"\"),\n            FieldAll    ( 54, 81, \"\"),\n            FieldAll    ( 54, 90, \"\"),\n            FieldAll    ( 54, 91, \"\"),\n            FieldAll    ( 54, 92, \"\"),\n            FieldRoyal  ( 54, 93, \"\"),\n            FieldAll    ( 54,100, \"\"),\n            FieldAll    ( 54,110, \"\"),\n            FieldAll    ( 54,111, \"\"),\n            FieldRoyal  ( 54,112, \"\"),\n            FieldVanilla( 54,120, \"\"),\n            FieldVanilla( 54,121, \"\"),\n            FieldVanilla( 54,130, \"\"),\n            FieldVanilla( 54,131, \"\"),\n            FieldVanilla( 54,132, \"\"),\n            FieldAll    ( 54,140, \"\"),\n            FieldAll    ( 54,141, \"\"),\n            FieldAll    ( 54,150, \"\"),\n            FieldAll    ( 55, 10, \"\"),\n            FieldAll    ( 55, 11, \"\"),\n            FieldAll    ( 55, 20, \"\"),\n            FieldAll    ( 55, 21, \"\"),\n            FieldAll    ( 55, 22, \"\"),\n            FieldAll    ( 55, 23, \"\"),\n            FieldAll    ( 55, 24, \"\"),\n            FieldAll    ( 55, 30, \"\"),\n            FieldAll    ( 55, 31, \"\"),\n            FieldAll    ( 55, 32, \"\"),\n            FieldAll    ( 55, 33, \"\"),\n            FieldRoyal  ( 55, 34, \"\"),\n            FieldAll    ( 55, 40, \"\"),\n            FieldAll    ( 55, 41, \"\"),\n            FieldAll    ( 55, 42, \"\"),\n            FieldAll    ( 55, 50, \"\"),\n            FieldAll    ( 55, 60, \"\"),\n            FieldAll    ( 55, 61, \"\"),\n            FieldAll    ( 55, 62, \"\"),\n            FieldRoyal  ( 55, 63, \"\"),\n            FieldAll    ( 55, 70, \"\"),\n            FieldAll    ( 55, 71, \"\"),\n            FieldAll    ( 55, 72, \"\"),\n            FieldAll    ( 55, 73, \"\"),\n            FieldAll    ( 55, 80, \"\"),\n            FieldAll    ( 55, 90, \"\"),\n            FieldAll    ( 55, 91, \"\"),\n            FieldAll    ( 55,100, \"\"),\n            FieldVanilla( 55,120, \"\"),\n            FieldAll    ( 55,130, \"\"),\n            FieldAll    ( 55,131, \"\"),\n            FieldAll    ( 55,132, \"\"),\n            FieldAll    ( 55,133, \"\"),\n            FieldAll    ( 55,220, \"\"),\n            FieldAll    ( 56,  1, \"\"),\n            FieldAll    ( 56, 10, \"\"),\n            FieldAll    ( 56, 20, \"\"),\n            FieldAll    ( 56, 21, \"\"),\n            FieldAll    ( 56, 30, \"\"),\n            FieldAll    ( 56, 31, \"\"),\n            FieldAll    ( 56, 32, \"\"),\n            FieldRoyal  ( 56, 33, \"\"),\n            FieldAll    ( 56, 40, \"\"),\n            FieldAll    ( 56, 41, \"\"),\n            FieldAll    ( 56, 42, \"\"),\n            FieldAll    ( 56, 43, \"\"),\n            FieldAll    ( 56, 44, \"\"),\n            FieldRoyal  ( 56, 45, \"\"),\n            FieldRoyal  ( 56, 46, \"\"),\n            FieldAll    ( 56, 50, \"\"),\n            FieldAll    ( 56, 51, \"\"),\n            FieldAll    ( 56, 52, \"\"),\n            FieldRoyal  ( 56, 53, \"\"),\n            FieldAll    ( 56, 60, \"\"),\n            FieldAll    ( 56, 61, \"\"),\n            FieldAll    ( 56, 62, \"\"),\n            FieldRoyal  ( 56, 63, \"\"),\n            FieldAll    ( 56, 70, \"\"),\n            FieldAll    ( 56, 71, \"\"),\n            FieldAll    ( 56, 72, \"\"),\n            FieldRoyal  ( 56, 73, \"\"),\n            FieldAll    ( 56, 80, \"\"),\n            FieldAll    ( 56, 81, \"\"),\n            FieldVanilla( 56, 82, \"\"),\n            FieldAll    ( 56, 90, \"\"),\n            FieldAll    ( 56, 91, \"\"),\n            FieldAll    ( 56, 92, \"\"),\n            FieldAll    ( 56, 93, \"\"),\n            FieldAll    ( 56,100, \"\"),\n            FieldAll    ( 56,101, \"\"),\n            FieldAll    ( 56,110, \"\"),\n            FieldAll    ( 56,120, \"\"),\n            FieldAll    ( 56,130, \"\"),\n            FieldAll    ( 56,131, \"\"),\n            FieldAll    ( 56,132, \"\"),\n            FieldAll    ( 56,133, \"\"),\n            FieldAll    ( 56,134, \"\"),\n            FieldRoyal  ( 56,135, \"\"),\n            FieldAll    ( 57,  1, \"\"),\n            FieldAll    ( 57, 10, \"\"),\n            FieldAll    ( 57, 40, \"\"),\n            FieldAll    ( 57, 41, \"\"),\n            FieldAll    ( 57, 50, \"\"),\n            FieldAll    ( 57, 51, \"\"),\n            FieldAll    ( 57, 52, \"\"),\n            FieldAll    ( 57, 53, \"\"),\n            FieldRoyal  ( 57, 54, \"\"),\n            FieldAll    ( 57, 60, \"\"),\n            FieldAll    ( 57, 72, \"\"),\n            FieldAll    ( 57, 80, \"\"),\n            FieldAll    ( 57, 81, \"\"),\n            FieldAll    ( 57, 82, \"\"),\n            FieldRoyal  ( 57, 83, \"\"),\n            FieldAll    ( 57, 90, \"\"),\n            FieldAll    ( 57, 91, \"\"),\n            FieldRoyal  ( 57, 92, \"\"),\n            FieldAll    ( 57,100, \"\"),\n            FieldAll    ( 57,110, \"\"),\n            FieldAll    ( 57,111, \"\"),\n            FieldAll    ( 57,120, \"\"),\n            FieldAll    ( 57,121, \"\"),\n            FieldAll    ( 57,122, \"\"),\n            FieldAll    ( 57,130, \"\"),\n            FieldAll    ( 57,131, \"\"),\n            FieldAll    ( 57,150, \"\"),\n            FieldAll    ( 57,151, \"\"),\n            FieldAll    ( 57,160, \"\"),\n            FieldAll    ( 57,161, \"\"),\n            FieldAll    ( 57,180, \"\"),\n            FieldAll    ( 59,  1, \"\"),\n            FieldAll    ( 59, 10, \"\"),\n            FieldAll    ( 59, 11, \"\"),\n            FieldAll    ( 59, 20, \"\"),\n            FieldAll    ( 59, 30, \"\"),\n            FieldAll    ( 59, 31, \"\"),\n            FieldAll    ( 59, 32, \"\"),\n            FieldAll    ( 59, 60, \"\"),\n            FieldAll    ( 59, 61, \"\"),\n            FieldAll    ( 59, 62, \"\"),\n            FieldAll    ( 59, 70, \"\"),\n            FieldAll    ( 59, 71, \"\"),\n            FieldAll    ( 59, 80, \"\"),\n            FieldAll    ( 59, 90, \"\"),\n            FieldAll    ( 59,100, \"\"),\n            FieldAll    ( 59,101, \"\"),\n            FieldAll    ( 59,110, \"\"),\n            FieldAll    ( 59,111, \"\"),\n            FieldAll    ( 59,112, \"\"),\n            FieldRoyal  ( 59,113, \"\"),\n            FieldRoyal  ( 59,114, \"\"),\n            FieldAll    ( 59,120, \"\"),\n            FieldAll    ( 59,121, \"\"),\n            FieldAll    ( 59,130, \"\"),\n            FieldAll    ( 59,131, \"\"),\n            FieldAll    ( 59,132, \"\"),\n            FieldAll    ( 59,170, \"\"),\n            FieldAll    ( 59,180, \"\"),\n            FieldAll    ( 59,181, \"\"),\n            FieldAll    ( 59,182, \"\"),\n            FieldAll    ( 59,183, \"\"),\n            FieldAll    ( 59,184, \"\"),\n            FieldAll    ( 59,185, \"\"),\n            FieldAll    ( 59,186, \"\"),\n            FieldAll    ( 59,187, \"\"),\n            FieldRoyal  ( 59,188, \"\"),\n            FieldAll    ( 59,190, \"\"),\n            FieldAll    ( 59,191, \"\"),\n            FieldAll    ( 59,192, \"\"),\n            FieldAll    ( 59,193, \"\"),\n            FieldAll    ( 59,194, \"\"),\n            FieldAll    ( 59,195, \"\"),\n            FieldAll    ( 59,196, \"\"),\n            FieldVanilla( 59,197, \"\"),\n            FieldVanilla( 59,198, \"\"),\n            FieldVanilla( 59,199, \"\"),\n            FieldAll    ( 59,200, \"\"),\n            FieldAll    ( 59,201, \"\"),\n            FieldAll    ( 59,202, \"\"),\n            FieldAll    ( 59,203, \"\"),\n            FieldAll    ( 59,204, \"\"),\n            FieldAll    ( 59,205, \"\"),\n            FieldAll    ( 59,206, \"\"),\n            FieldAll    ( 59,207, \"\"),\n            FieldVanilla( 59,208, \"\"),\n            FieldVanilla( 59,209, \"\"),\n            FieldVanilla( 59,210, \"\"),\n            FieldAll    ( 59,220, \"\"),\n            FieldAll    ( 59,221, \"\"),\n            FieldAll    ( 59,222, \"\"),\n            FieldAll    ( 59,223, \"\"),\n            FieldAll    ( 59,224, \"\"),\n            FieldAll    ( 59,225, \"\"),\n            FieldAll    ( 59,226, \"\"),\n            FieldAll    ( 60, 10, \"\"),\n            FieldAll    ( 60, 11, \"\"),\n            FieldAll    ( 60, 12, \"\"),\n            FieldAll    ( 60, 20, \"\"),\n            FieldAll    ( 60, 21, \"\"),\n            FieldAll    ( 60, 30, \"\"),\n            FieldAll    ( 60, 31, \"\"),\n            FieldAll    ( 60, 40, \"\"),\n            FieldAll    ( 60, 41, \"\"),\n            FieldAll    ( 60, 42, \"\"),\n            FieldAll    ( 60, 50, \"\"),\n            FieldAll    ( 60, 60, \"\"),\n            FieldAll    ( 60, 61, \"\"),\n            FieldAll    ( 60,100, \"\"),\n            FieldAll    ( 60,101, \"\"),\n            FieldAll    ( 60,102, \"\"),\n            FieldAll    ( 60,103, \"\"),\n            FieldRoyal  ( 60,104, \"\"),\n            FieldAll    ( 60,110, \"\"),\n            FieldAll    ( 60,111, \"\"),\n            FieldAll    ( 60,112, \"\"),\n            FieldAll    ( 61, 11, \"\"),\n            FieldAll    ( 61, 12, \"\"),\n            FieldAll    ( 61, 20, \"\"),\n            FieldAll    ( 61, 21, \"\"),\n            FieldAll    ( 61, 22, \"\"),\n            FieldRoyal  ( 61, 23, \"\"),\n            FieldAll    ( 61, 30, \"\"),\n            FieldAll    ( 61, 31, \"\"),\n            FieldAll    ( 61, 32, \"\"),\n            FieldAll    ( 61, 40, \"\"),\n            FieldAll    ( 61, 41, \"\"),\n            FieldAll    ( 61, 42, \"\"),\n            FieldAll    ( 61, 50, \"\"),\n            FieldAll    ( 61, 51, \"\"),\n            FieldAll    ( 61, 52, \"\"),\n            FieldAll    ( 61, 53, \"\"),\n            FieldAll    ( 61, 60, \"\"),\n            FieldAll    ( 61, 61, \"\"),\n            FieldAll    ( 61, 62, \"\"),\n            FieldAll    ( 61, 70, \"\"),\n            FieldAll    ( 61, 80, \"\"),\n            FieldAll    ( 61, 81, \"\"),\n            FieldAll    ( 61, 82, \"\"),\n            FieldAll    ( 61, 90, \"\"),\n            FieldAll    ( 61, 91, \"\"),\n            FieldAll    ( 61,100, \"\"),\n            FieldAll    ( 61,101, \"\"),\n            FieldAll    ( 61,102, \"\"),\n            FieldRoyal  ( 61,103, \"\"),\n            FieldAll    ( 61,110, \"\"),\n            FieldRoyal  ( 62,  1, \"\"),\n            FieldRoyal  ( 62, 10, \"\"),\n            FieldRoyal  ( 62, 11, \"\"),\n            FieldRoyal  ( 62, 20, \"\"),\n            FieldRoyal  ( 62, 21, \"\"),\n            FieldRoyal  ( 62, 22, \"\"),\n            FieldRoyal  ( 62, 23, \"\"),\n            FieldRoyal  ( 62, 30, \"\"),\n            FieldRoyal  ( 62, 31, \"\"),\n            FieldRoyal  ( 62, 32, \"\"),\n            FieldRoyal  ( 62, 40, \"\"),\n            FieldRoyal  ( 62, 41, \"\"),\n            FieldRoyal  ( 62, 42, \"\"),\n            FieldRoyal  ( 62, 43, \"\"),\n            FieldRoyal  ( 62, 50, \"\"),\n            FieldRoyal  ( 62, 51, \"\"),\n            FieldRoyal  ( 62, 52, \"\"),\n            FieldRoyal  ( 62, 53, \"\"),\n            FieldRoyal  ( 62, 54, \"\"),\n            FieldRoyal  ( 62, 55, \"\"),\n            FieldRoyal  ( 62, 56, \"\"),\n            FieldRoyal  ( 62, 70, \"\"),\n            FieldRoyal  ( 62, 71, \"\"),\n            FieldRoyal  ( 62, 72, \"\"),\n            FieldRoyal  ( 62, 73, \"\"),\n            FieldRoyal  ( 62, 74, \"\"),\n            FieldRoyal  ( 62, 75, \"\"),\n            FieldRoyal  ( 62, 90, \"\"),\n            FieldRoyal  ( 62, 91, \"\"),\n            FieldRoyal  ( 62, 92, \"\"),\n            FieldRoyal  ( 62, 93, \"\"),\n            FieldRoyal  ( 62,100, \"\"),\n            FieldRoyal  ( 62,110, \"\"),\n            FieldRoyal  ( 62,111, \"\"),\n            FieldRoyal  ( 62,112, \"\"),\n            FieldRoyal  ( 62,113, \"\"),\n            FieldRoyal  ( 62,114, \"\"),\n            FieldRoyal  ( 62,120, \"\"),\n            FieldRoyal  ( 62,121, \"\"),\n            FieldRoyal  ( 62,122, \"\"),\n            FieldRoyal  ( 62,123, \"\"),\n            FieldRoyal  ( 62,124, \"\"),\n            FieldRoyal  ( 62,125, \"\"),\n            FieldRoyal  ( 62,126, \"\"),\n            FieldRoyal  ( 62,127, \"\"),\n            FieldRoyal  ( 62,140, \"\"),\n            FieldRoyal  ( 62,141, \"\"),\n            FieldRoyal  ( 62,142, \"\"),\n            FieldRoyal  ( 62,150, \"\"),\n            FieldRoyal  ( 62,151, \"\"),\n            FieldRoyal  ( 62,152, \"\"),\n            FieldRoyal  ( 62,153, \"\"),\n            FieldRoyal  ( 62,154, \"\"),\n            FieldRoyal  ( 62,160, \"\"),\n            FieldRoyal  ( 62,161, \"\"),\n            FieldRoyal  ( 62,162, \"\"),\n            FieldRoyal  ( 62,163, \"\"),\n            FieldRoyal  ( 62,190, \"\"),\n            FieldRoyal  ( 62,221, \"\"),\n            FieldVanilla(150,  1, \"Nijima Palace (intro) - Entrance\"),\n            FieldAll    (150,  2, \"Nijima Palace (intro) - Escape\"),\n            FieldAll    (150,  3, \"Nijima Palace (intro) - Escape 2\"),\n            FieldAll    (151,  1, \"Kamoshida Palace - Entrance\"),\n            FieldAll    (151,  2, \"Kamoshida Palace - Central Hall\"),\n            FieldAll    (151,  3, \"\"),\n            FieldAll    (151,  4, \"\"),\n            FieldAll    (151,  5, \"\"),\n            FieldAll    (151,  6, \"\"),\n            FieldAll    (151,  7, \"\"),\n            FieldVanilla(151,  8, \"Kamoshida Palace - Unused map\"),\n            FieldAll    (151,  9, \"\"),\n            FieldAll    (151, 10, \"\"),\n            FieldAll    (151, 11, \"\"),\n            FieldAll    (151, 12, \"\"),\n            FieldAll    (151, 13, \"\"),\n            FieldAll    (151, 14, \"\"),\n            FieldAll    (151, 15, \"\"),\n            FieldAll    (151, 16, \"\"),\n            FieldAll    (151, 17, \"\"),\n            FieldAll    (151, 19, \"\"),\n            FieldAll    (151, 51, \"\"),\n            FieldAll    (152,  1, \"Kamoshida Palace - Prison\"),\n            FieldAll    (152,  2, \"Kamoshida Palace - Underground Prison\"),\n            FieldAll    (152,  4, \"\"),\n            FieldAll    (152,  5, \"\"),\n            FieldAll    (152,  6, \"\"),\n            FieldAll    (152, 51, \"\"),\n            FieldAll    (152, 52, \"\"),\n            FieldAll    (152, 53, \"\"),\n            FieldAll    (153,  1, \"Madarame Palace - Entrance\"),\n            FieldAll    (153,  2, \"\"),\n            FieldAll    (153,  3, \"\"),\n            FieldAll    (153,  5, \"\"),\n            FieldAll    (153,  6, \"\"),\n            FieldAll    (153,  7, \"\"),\n            FieldAll    (153,  8, \"\"),\n            FieldAll    (153,  9, \"\"),\n            FieldAll    (153, 11, \"\"),\n            FieldAll    (153, 12, \"\"),\n            FieldAll    (153, 51, \"\"),\n            FieldAll    (154,  1, \"Kaneshido Palace - Entrance\"),\n            FieldAll    (154,  2, \"\"),\n            FieldAll    (154,  3, \"\"),\n            FieldAll    (154,  5, \"\"),\n            FieldAll    (154,  7, \"\"),\n            FieldAll    (154,  8, \"\"),\n            FieldAll    (154,  9, \"\"),\n            FieldAll    (154, 10, \"\"),\n            FieldAll    (154, 11, \"\"),\n            FieldVanilla(154, 12, \"Kaneshido Palace - Unused beta map\"),\n            FieldVanilla(154, 13, \"\"),\n            FieldAll    (154, 14, \"\"),\n            FieldAll    (154, 15, \"\"),\n            FieldAll    (154, 16, \"\"),\n            FieldAll    (154, 51, \"\"),\n            FieldAll    (155,  1, \"\"),\n            FieldAll    (155,  2, \"\"),\n            FieldAll    (155,  3, \"\"),\n            FieldAll    (155,  4, \"\"),\n            FieldAll    (155,  5, \"\"),\n            FieldAll    (155,  6, \"\"),\n            FieldAll    (155,  7, \"\"),\n            FieldAll    (155,  8, \"\"),\n            FieldAll    (155,  9, \"\"),\n            FieldAll    (155, 10, \"\"),\n            FieldAll    (155, 11, \"\"),\n            FieldVanilla(155, 12, \"\"),\n            FieldAll    (155, 13, \"\"),\n            FieldAll    (155, 51, \"\"),\n            FieldAll    (156,  1, \"Okumura Palace - Entrance\"),\n            FieldAll    (156,  2, \"\"),\n            FieldAll    (156,  3, \"\"),\n            FieldAll    (156,  4, \"\"),\n            FieldAll    (156,  5, \"\"),\n            FieldAll    (156,  6, \"\"),\n            FieldAll    (156,  7, \"\"),\n            FieldAll    (156,  8, \"\"),\n            FieldAll    (156,  9, \"\"),\n            FieldAll    (156, 10, \"\"),\n            FieldAll    (156, 11, \"\"),\n            FieldAll    (156, 12, \"\"),\n            FieldAll    (156, 13, \"\"),\n            FieldVanilla(156, 14, \"\"),\n            FieldVanilla(156, 15, \"\"),\n            FieldAll    (156, 51, \"\"),\n            FieldAll    (157,  1, \"Nijima Palace - Entrance\"),\n            FieldVanilla(157,  3, \"\"),\n            FieldAll    (157,  4, \"\"),\n            FieldAll    (157,  5, \"\"),\n            FieldAll    (157,  6, \"\"),\n            FieldAll    (157,  7, \"\"),\n            FieldAll    (157,  8, \"\"),\n            FieldAll    (157,  9, \"\"),\n            FieldAll    (157, 10, \"\"),\n            FieldAll    (157, 11, \"\"),\n            FieldAll    (157, 12, \"\"),\n            FieldAll    (157, 13, \"\"),\n            FieldAll    (157, 15, \"\"),\n            FieldAll    (157, 16, \"\"),\n            FieldAll    (157, 18, \"\"),\n            FieldAll    (157, 51, \"\"),\n            FieldAll    (157, 52, \"\"),\n            FieldAll    (159,  1, \"Shido Palace - Entrance\"),\n            FieldAll    (159,  2, \"\"),\n            FieldAll    (159,  3, \"\"),\n            FieldAll    (159,  4, \"\"),\n            FieldAll    (159,  6, \"\"),\n            FieldAll    (159,  7, \"\"),\n            FieldAll    (159,  8, \"\"),\n            FieldAll    (159,  9, \"\"),\n            FieldAll    (159, 10, \"\"),\n            FieldAll    (159, 11, \"\"),\n            FieldAll    (159, 12, \"\"),\n            FieldAll    (159, 13, \"\"),\n            FieldAll    (159, 20, \"\"),\n            FieldVanilla(159, 21, \"\"),\n            FieldVanilla(159, 22, \"\"),\n            FieldAll    (159, 25, \"\"),\n            FieldVanilla(159, 26, \"\"),\n            FieldVanilla(159, 27, \"\"),\n            FieldAll    (159, 30, \"\"),\n            FieldVanilla(159, 31, \"\"),\n            FieldVanilla(159, 32, \"\"),\n            FieldVanilla(159, 33, \"\"),\n            FieldAll    (159, 35, \"\"),\n            FieldVanilla(159, 36, \"\"),\n            FieldAll    (159, 51, \"\"),\n            FieldAll    (160,  1, \"Qliphoth World - Entrance\"),\n            FieldAll    (160,  2, \"\"),\n            FieldAll    (160,  3, \"\"),\n            FieldAll    (160,  4, \"\"),\n            FieldAll    (160,  5, \"\"),\n            FieldAll    (160,  6, \"\"),\n            FieldAll    (160, 10, \"Qliphoth World - Velvet Room\"),\n            FieldAll    (160,101, \"\"),\n            FieldAll    (161,  1, \"Depths of Mementos - Entrance\"),\n            FieldAll    (161,  2, \"Depths of Mementos - Large Opening\"),\n            FieldAll    (161,  3, \"\"),\n            FieldAll    (161,  4, \"\"),\n            FieldAll    (161,  5, \"\"),\n            FieldAll    (161,  6, \"\"),\n            FieldAll    (161,  7, \"\"),\n            FieldAll    (161,  8, \"\"),\n            FieldAll    (161,  9, \"\"),\n            FieldAll    (161, 10, \"Depths of Mementos - Prison Passageway\"),\n            FieldAll    (161, 11, \"Depths of Mementos - Mysterious Shirine\"),\n            FieldAll    (161, 51, \"Depths of Mementos - Safe Room\"),\n            FieldRoyal  (162,  1, \"\"),\n            FieldRoyal  (162,  2, \"\"),\n            FieldRoyal  (162,  3, \"\"),\n            FieldRoyal  (162,  4, \"\"),\n            FieldRoyal  (162,  5, \"\"),\n            FieldRoyal  (162,  7, \"\"),\n            FieldRoyal  (162,  9, \"\"),\n            FieldRoyal  (162, 10, \"\"),\n            FieldRoyal  (162, 11, \"\"),\n            FieldRoyal  (162, 12, \"\"),\n            FieldRoyal  (162, 14, \"\"),\n            FieldRoyal  (162, 15, \"\"),\n            FieldRoyal  (162, 16, \"\"),\n            FieldAll    (190,  1, \"\"),\n            FieldVanilla(190,  2, \"\"),\n            FieldVanilla(190,  3, \"\"),\n            FieldVanilla(190,  4, \"\"),\n            FieldVanilla(190,  5, \"\"),\n            FieldVanilla(190,  6, \"\"),\n            FieldVanilla(190,  7, \"\"),\n            FieldVanilla(190,  8, \"\"),\n            FieldVanilla(190,  9, \"\"),\n            FieldVanilla(190, 10, \"\"),\n            FieldVanilla(190, 11, \"\"),\n            FieldVanilla(190, 12, \"\"),\n            FieldVanilla(190, 13, \"\"),\n            FieldVanilla(190, 14, \"\"),\n            FieldVanilla(190, 15, \"\"),\n            FieldVanilla(190, 16, \"\"),\n            FieldVanilla(190, 17, \"\"),\n            FieldVanilla(190, 18, \"\"),\n            FieldVanilla(190, 19, \"\"),\n            FieldVanilla(190, 20, \"\"),\n            FieldVanilla(190, 21, \"\"),\n            FieldVanilla(190, 22, \"\"),\n            FieldVanilla(190, 23, \"\"),\n            FieldVanilla(190, 24, \"\"),\n            FieldVanilla(190, 25, \"\"),\n            FieldVanilla(190, 26, \"\"),\n            FieldVanilla(190, 27, \"\"),\n            FieldVanilla(190, 28, \"\"),\n            FieldVanilla(190, 29, \"\"),\n            FieldVanilla(190, 30, \"\"),\n            FieldVanilla(190, 31, \"\"),\n            FieldVanilla(190, 32, \"\"),\n            FieldVanilla(190, 33, \"\"),\n            FieldVanilla(190, 34, \"\"),\n            FieldVanilla(190, 35, \"\"),\n            FieldVanilla(190, 36, \"\"),\n            FieldVanilla(190, 37, \"\"),\n            FieldVanilla(190, 38, \"\"),\n            FieldVanilla(190, 39, \"\"),\n            FieldVanilla(190, 40, \"\"),\n            FieldVanilla(190, 41, \"\"),\n            FieldVanilla(190, 42, \"\"),\n            FieldVanilla(190, 43, \"\"),\n            FieldVanilla(190, 44, \"\"),\n            FieldVanilla(190, 45, \"\"),\n            FieldVanilla(190, 46, \"\"),\n            FieldVanilla(190, 47, \"\"),\n            FieldVanilla(190, 48, \"\"),\n            FieldVanilla(190, 49, \"\"),\n            FieldVanilla(190, 50, \"\"),\n            FieldAll    (190, 51, \"\"),\n            FieldAll    (190, 52, \"\"),\n            FieldAll    (190, 53, \"\"),\n            FieldAll    (190, 54, \"\"),\n            FieldVanilla(190, 55, \"\"),\n            FieldVanilla(190, 56, \"\"),\n            FieldVanilla(190, 57, \"\"),\n            FieldVanilla(190, 58, \"\"),\n            FieldVanilla(190, 59, \"\"),\n            FieldVanilla(190, 60, \"\"),\n            FieldVanilla(190, 61, \"\"),\n            FieldVanilla(190, 62, \"\"),\n            FieldVanilla(190, 63, \"\"),\n            FieldVanilla(190, 64, \"\"),\n            FieldVanilla(190, 65, \"\"),\n            FieldVanilla(190, 66, \"\"),\n            FieldVanilla(190, 67, \"\"),\n            FieldVanilla(190, 68, \"\"),\n            FieldVanilla(190, 69, \"\"),\n            FieldVanilla(190, 70, \"\"),\n            FieldVanilla(190, 71, \"\"),\n            FieldVanilla(190, 72, \"\"),\n            FieldVanilla(190, 73, \"\"),\n            FieldVanilla(190, 74, \"\"),\n            FieldVanilla(190, 75, \"\"),\n            FieldVanilla(190, 76, \"\"),\n            FieldVanilla(190, 77, \"\"),\n            FieldVanilla(190, 78, \"\"),\n            FieldVanilla(190, 79, \"\"),\n            FieldVanilla(190, 80, \"\"),\n            FieldVanilla(190, 81, \"\"),\n            FieldVanilla(190, 82, \"\"),\n            FieldVanilla(190, 83, \"\"),\n            FieldVanilla(190, 84, \"\"),\n            FieldVanilla(190, 85, \"\"),\n            FieldVanilla(190, 86, \"\"),\n            FieldVanilla(190, 87, \"\"),\n            FieldVanilla(190, 88, \"\"),\n            FieldVanilla(190, 89, \"\"),\n            FieldVanilla(190, 90, \"\"),\n            FieldVanilla(190, 91, \"\"),\n            FieldVanilla(190, 92, \"\"),\n            FieldVanilla(190, 93, \"\"),\n            FieldVanilla(190, 94, \"\"),\n            FieldVanilla(190, 95, \"\"),\n            FieldVanilla(190, 96, \"\"),\n            FieldVanilla(190, 97, \"\"),\n            FieldVanilla(190, 98, \"\"),\n            FieldVanilla(190, 99, \"\"),\n            FieldAll    (191,  1, \"\"),\n            FieldVanilla(191,  2, \"\"),\n            FieldVanilla(191,  3, \"\"),\n            FieldVanilla(191,  4, \"\"),\n            FieldVanilla(191,  5, \"\"),\n            FieldVanilla(191,  6, \"\"),\n            FieldVanilla(191,  7, \"\"),\n            FieldVanilla(191,  8, \"\"),\n            FieldVanilla(191,  9, \"\"),\n            FieldVanilla(191, 10, \"\"),\n            FieldAll    (191, 11, \"\"),\n            FieldVanilla(191, 12, \"\"),\n            FieldVanilla(191, 13, \"\"),\n            FieldVanilla(191, 14, \"\"),\n            FieldVanilla(191, 15, \"\"),\n            FieldVanilla(191, 16, \"\"),\n            FieldVanilla(191, 17, \"\"),\n            FieldVanilla(191, 18, \"\"),\n            FieldVanilla(191, 19, \"\"),\n            FieldVanilla(191, 20, \"\"),\n            FieldAll    (191, 21, \"\"),\n            FieldVanilla(191, 22, \"\"),\n            FieldVanilla(191, 23, \"\"),\n            FieldVanilla(191, 24, \"\"),\n            FieldAll    (191, 25, \"\"),\n            FieldVanilla(191, 26, \"\"),\n            FieldVanilla(191, 27, \"\"),\n            FieldVanilla(191, 28, \"\"),\n            FieldVanilla(191, 29, \"\"),\n            FieldVanilla(191, 30, \"\"),\n            FieldVanilla(191, 31, \"\"),\n            FieldVanilla(191, 32, \"\"),\n            FieldVanilla(191, 33, \"\"),\n            FieldVanilla(191, 34, \"\"),\n            FieldVanilla(191, 35, \"\"),\n            FieldVanilla(191, 36, \"\"),\n            FieldVanilla(191, 37, \"\"),\n            FieldVanilla(191, 38, \"\"),\n            FieldVanilla(191, 39, \"\"),\n            FieldVanilla(191, 40, \"\"),\n            FieldVanilla(191, 41, \"\"),\n            FieldVanilla(191, 42, \"\"),\n            FieldVanilla(191, 43, \"\"),\n            FieldVanilla(191, 44, \"\"),\n            FieldVanilla(191, 45, \"\"),\n            FieldVanilla(191, 46, \"\"),\n            FieldVanilla(191, 47, \"\"),\n            FieldVanilla(191, 48, \"\"),\n            FieldVanilla(191, 49, \"\"),\n            FieldAll    (191, 50, \"\"),\n            FieldAll    (191, 51, \"\"),\n            FieldVanilla(191, 52, \"\"),\n            FieldVanilla(191, 53, \"\"),\n            FieldVanilla(191, 54, \"\"),\n            FieldVanilla(191, 55, \"\"),\n            FieldVanilla(191, 56, \"\"),\n            FieldVanilla(191, 57, \"\"),\n            FieldVanilla(191, 58, \"\"),\n            FieldVanilla(191, 59, \"\"),\n            FieldVanilla(191, 60, \"\"),\n            FieldAll    (191, 61, \"\"),\n            FieldVanilla(191, 62, \"\"),\n            FieldVanilla(191, 63, \"\"),\n            FieldVanilla(191, 64, \"\"),\n            FieldAll    (191, 65, \"\"),\n            FieldVanilla(191, 66, \"\"),\n            FieldVanilla(191, 67, \"\"),\n            FieldVanilla(191, 68, \"\"),\n            FieldVanilla(191, 69, \"\"),\n            FieldVanilla(191, 70, \"\"),\n            FieldAll    (191, 71, \"\"),\n            FieldVanilla(191, 72, \"\"),\n            FieldVanilla(191, 73, \"\"),\n            FieldVanilla(191, 74, \"\"),\n            FieldVanilla(191, 75, \"\"),\n            FieldVanilla(191, 76, \"\"),\n            FieldVanilla(191, 77, \"\"),\n            FieldVanilla(191, 78, \"\"),\n            FieldVanilla(191, 79, \"\"),\n            FieldVanilla(191, 80, \"\"),\n            FieldVanilla(191, 81, \"\"),\n            FieldVanilla(191, 82, \"\"),\n            FieldVanilla(191, 83, \"\"),\n            FieldVanilla(191, 84, \"\"),\n            FieldVanilla(191, 85, \"\"),\n            FieldVanilla(191, 86, \"\"),\n            FieldVanilla(191, 87, \"\"),\n            FieldVanilla(191, 88, \"\"),\n            FieldVanilla(191, 89, \"\"),\n            FieldVanilla(191, 90, \"\"),\n            FieldVanilla(191, 91, \"\"),\n            FieldVanilla(191, 92, \"\"),\n            FieldVanilla(191, 93, \"\"),\n            FieldVanilla(191, 94, \"\"),\n            FieldVanilla(191, 95, \"\"),\n            FieldVanilla(191, 96, \"\"),\n            FieldVanilla(191, 97, \"\"),\n            FieldVanilla(191, 98, \"\"),\n            FieldVanilla(191, 99, \"\"),\n            FieldAll    (192,  1, \"\"),\n            FieldVanilla(192,  2, \"\"),\n            FieldVanilla(192,  3, \"\"),\n            FieldVanilla(192,  4, \"\"),\n            FieldVanilla(192,  5, \"\"),\n            FieldVanilla(192,  6, \"\"),\n            FieldVanilla(192,  7, \"\"),\n            FieldVanilla(192,  8, \"\"),\n            FieldVanilla(192,  9, \"\"),\n            FieldVanilla(192, 10, \"\"),\n            FieldAll    (192, 11, \"\"),\n            FieldVanilla(192, 12, \"\"),\n            FieldVanilla(192, 13, \"\"),\n            FieldVanilla(192, 14, \"\"),\n            FieldAll    (192, 15, \"\"),\n            FieldVanilla(192, 16, \"\"),\n            FieldVanilla(192, 17, \"\"),\n            FieldVanilla(192, 18, \"\"),\n            FieldVanilla(192, 19, \"\"),\n            FieldVanilla(192, 20, \"\"),\n            FieldAll    (192, 21, \"\"),\n            FieldVanilla(192, 22, \"\"),\n            FieldVanilla(192, 23, \"\"),\n            FieldVanilla(192, 24, \"\"),\n            FieldVanilla(192, 25, \"\"),\n            FieldVanilla(192, 26, \"\"),\n            FieldVanilla(192, 27, \"\"),\n            FieldVanilla(192, 28, \"\"),\n            FieldVanilla(192, 29, \"\"),\n            FieldVanilla(192, 30, \"\"),\n            FieldVanilla(192, 31, \"\"),\n            FieldVanilla(192, 32, \"\"),\n            FieldVanilla(192, 33, \"\"),\n            FieldVanilla(192, 34, \"\"),\n            FieldVanilla(192, 35, \"\"),\n            FieldVanilla(192, 36, \"\"),\n            FieldVanilla(192, 37, \"\"),\n            FieldVanilla(192, 38, \"\"),\n            FieldVanilla(192, 39, \"\"),\n            FieldVanilla(192, 40, \"\"),\n            FieldVanilla(192, 41, \"\"),\n            FieldVanilla(192, 42, \"\"),\n            FieldVanilla(192, 43, \"\"),\n            FieldVanilla(192, 44, \"\"),\n            FieldVanilla(192, 45, \"\"),\n            FieldVanilla(192, 46, \"\"),\n            FieldVanilla(192, 47, \"\"),\n            FieldVanilla(192, 48, \"\"),\n            FieldVanilla(192, 49, \"\"),\n            FieldVanilla(192, 50, \"\"),\n            FieldVanilla(192, 51, \"\"),\n            FieldVanilla(192, 52, \"\"),\n            FieldVanilla(192, 53, \"\"),\n            FieldVanilla(192, 54, \"\"),\n            FieldVanilla(192, 55, \"\"),\n            FieldVanilla(192, 56, \"\"),\n            FieldVanilla(192, 57, \"\"),\n            FieldVanilla(192, 58, \"\"),\n            FieldVanilla(192, 59, \"\"),\n            FieldVanilla(192, 60, \"\"),\n            FieldAll    (192, 61, \"Path of Iweleth\"),\n            FieldAll    (192, 62, \"\"),\n            FieldVanilla(192, 63, \"\"),\n            FieldVanilla(192, 64, \"\"),\n            FieldVanilla(192, 65, \"\"),\n            FieldVanilla(192, 66, \"\"),\n            FieldVanilla(192, 67, \"\"),\n            FieldVanilla(192, 68, \"\"),\n            FieldVanilla(192, 69, \"\"),\n            FieldVanilla(192, 70, \"\"),\n            FieldVanilla(192, 71, \"\"),\n            FieldVanilla(192, 72, \"\"),\n            FieldVanilla(192, 73, \"\"),\n            FieldVanilla(192, 74, \"\"),\n            FieldVanilla(192, 75, \"\"),\n            FieldVanilla(192, 76, \"\"),\n            FieldVanilla(192, 77, \"\"),\n            FieldVanilla(192, 78, \"\"),\n            FieldVanilla(192, 79, \"\"),\n            FieldVanilla(192, 80, \"\"),\n            FieldVanilla(192, 81, \"\"),\n            FieldVanilla(192, 82, \"\"),\n            FieldVanilla(192, 83, \"\"),\n            FieldVanilla(192, 84, \"\"),\n            FieldVanilla(192, 85, \"\"),\n            FieldVanilla(192, 86, \"\"),\n            FieldVanilla(192, 87, \"\"),\n            FieldVanilla(192, 88, \"\"),\n            FieldVanilla(192, 89, \"\"),\n            FieldVanilla(192, 90, \"\"),\n            FieldVanilla(192, 91, \"\"),\n            FieldVanilla(192, 92, \"\"),\n            FieldVanilla(192, 93, \"\"),\n            FieldVanilla(192, 94, \"\"),\n            FieldVanilla(192, 95, \"\"),\n            FieldVanilla(192, 96, \"\"),\n            FieldVanilla(192, 97, \"\"),\n            FieldVanilla(192, 98, \"\"),\n            FieldVanilla(192, 99, \"\"),\n            FieldAll    (193,  1, \"\"),\n            FieldVanilla(193,  2, \"\"),\n            FieldVanilla(193,  3, \"\"),\n            FieldVanilla(193,  4, \"\"),\n            FieldVanilla(193,  5, \"\"),\n            FieldVanilla(193,  6, \"\"),\n            FieldVanilla(193,  7, \"\"),\n            FieldVanilla(193,  8, \"\"),\n            FieldVanilla(193,  9, \"\"),\n            FieldVanilla(193, 10, \"\"),\n            FieldAll    (193, 11, \"\"),\n            FieldVanilla(193, 12, \"\"),\n            FieldVanilla(193, 13, \"\"),\n            FieldVanilla(193, 14, \"\"),\n            FieldVanilla(193, 15, \"\"),\n            FieldVanilla(193, 16, \"\"),\n            FieldVanilla(193, 17, \"\"),\n            FieldVanilla(193, 18, \"\"),\n            FieldVanilla(193, 19, \"\"),\n            FieldVanilla(193, 20, \"\"),\n            FieldAll    (193, 21, \"\"),\n            FieldVanilla(193, 22, \"\"),\n            FieldVanilla(193, 23, \"\"),\n            FieldVanilla(193, 24, \"\"),\n            FieldVanilla(193, 25, \"\"),\n            FieldVanilla(193, 26, \"\"),\n            FieldVanilla(193, 27, \"\"),\n            FieldVanilla(193, 28, \"\"),\n            FieldVanilla(193, 29, \"\"),\n            FieldVanilla(193, 30, \"\"),\n            FieldVanilla(193, 31, \"\"),\n            FieldVanilla(193, 32, \"\"),\n            FieldVanilla(193, 33, \"\"),\n            FieldVanilla(193, 34, \"\"),\n            FieldVanilla(193, 35, \"\"),\n            FieldVanilla(193, 36, \"\"),\n            FieldVanilla(193, 37, \"\"),\n            FieldVanilla(193, 38, \"\"),\n            FieldVanilla(193, 39, \"\"),\n            FieldVanilla(193, 40, \"\"),\n            FieldVanilla(193, 41, \"\"),\n            FieldVanilla(193, 42, \"\"),\n            FieldVanilla(193, 43, \"\"),\n            FieldVanilla(193, 44, \"\"),\n            FieldVanilla(193, 45, \"\"),\n            FieldVanilla(193, 46, \"\"),\n            FieldVanilla(193, 47, \"\"),\n            FieldVanilla(193, 48, \"\"),\n            FieldVanilla(193, 49, \"\"),\n            FieldVanilla(193, 50, \"\"),\n            FieldAll    (193, 51, \"\"),\n            FieldVanilla(193, 52, \"\"),\n            FieldVanilla(193, 53, \"\"),\n            FieldVanilla(193, 54, \"\"),\n            FieldVanilla(193, 55, \"\"),\n            FieldVanilla(193, 56, \"\"),\n            FieldVanilla(193, 57, \"\"),\n            FieldVanilla(193, 58, \"\"),\n            FieldVanilla(193, 59, \"\"),\n            FieldVanilla(193, 60, \"\"),\n            FieldAll    (193, 61, \"\"),\n            FieldVanilla(193, 62, \"\"),\n            FieldVanilla(193, 63, \"\"),\n            FieldVanilla(193, 64, \"\"),\n            FieldAll    (193, 65, \"\"),\n            FieldVanilla(193, 66, \"\"),\n            FieldVanilla(193, 67, \"\"),\n            FieldVanilla(193, 68, \"\"),\n            FieldVanilla(193, 69, \"\"),\n            FieldVanilla(193, 70, \"\"),\n            FieldAll    (193, 71, \"\"),\n            FieldVanilla(193, 72, \"\"),\n            FieldVanilla(193, 73, \"\"),\n            FieldVanilla(193, 74, \"\"),\n            FieldVanilla(193, 75, \"\"),\n            FieldVanilla(193, 76, \"\"),\n            FieldVanilla(193, 77, \"\"),\n            FieldVanilla(193, 78, \"\"),\n            FieldVanilla(193, 79, \"\"),\n            FieldVanilla(193, 80, \"\"),\n            FieldVanilla(193, 81, \"\"),\n            FieldVanilla(193, 82, \"\"),\n            FieldVanilla(193, 83, \"\"),\n            FieldVanilla(193, 84, \"\"),\n            FieldVanilla(193, 85, \"\"),\n            FieldVanilla(193, 86, \"\"),\n            FieldVanilla(193, 87, \"\"),\n            FieldVanilla(193, 88, \"\"),\n            FieldVanilla(193, 89, \"\"),\n            FieldVanilla(193, 90, \"\"),\n            FieldVanilla(193, 91, \"\"),\n            FieldVanilla(193, 92, \"\"),\n            FieldVanilla(193, 93, \"\"),\n            FieldVanilla(193, 94, \"\"),\n            FieldVanilla(193, 95, \"\"),\n            FieldVanilla(193, 96, \"\"),\n            FieldVanilla(193, 97, \"\"),\n            FieldVanilla(193, 98, \"\"),\n            FieldVanilla(193, 99, \"\"),\n            FieldAll    (194,  1, \"\"),\n            FieldVanilla(194,  2, \"\"),\n            FieldVanilla(194,  3, \"\"),\n            FieldVanilla(194,  4, \"\"),\n            FieldVanilla(194,  5, \"\"),\n            FieldVanilla(194,  6, \"\"),\n            FieldVanilla(194,  7, \"\"),\n            FieldVanilla(194,  8, \"\"),\n            FieldVanilla(194,  9, \"\"),\n            FieldVanilla(194, 10, \"\"),\n            FieldAll    (194, 11, \"\"),\n            FieldVanilla(194, 12, \"\"),\n            FieldVanilla(194, 13, \"\"),\n            FieldVanilla(194, 14, \"\"),\n            FieldAll    (194, 15, \"\"),\n            FieldVanilla(194, 16, \"\"),\n            FieldVanilla(194, 17, \"\"),\n            FieldVanilla(194, 18, \"\"),\n            FieldVanilla(194, 19, \"\"),\n            FieldVanilla(194, 20, \"\"),\n            FieldAll    (194, 21, \"\"),\n            FieldVanilla(194, 22, \"\"),\n            FieldVanilla(194, 23, \"\"),\n            FieldVanilla(194, 24, \"\"),\n            FieldVanilla(194, 25, \"\"),\n            FieldVanilla(194, 26, \"\"),\n            FieldVanilla(194, 27, \"\"),\n            FieldVanilla(194, 28, \"\"),\n            FieldVanilla(194, 29, \"\"),\n            FieldVanilla(194, 30, \"\"),\n            FieldVanilla(194, 31, \"\"),\n            FieldVanilla(194, 32, \"\"),\n            FieldVanilla(194, 33, \"\"),\n            FieldVanilla(194, 34, \"\"),\n            FieldVanilla(194, 35, \"\"),\n            FieldVanilla(194, 36, \"\"),\n            FieldVanilla(194, 37, \"\"),\n            FieldVanilla(194, 38, \"\"),\n            FieldVanilla(194, 39, \"\"),\n            FieldVanilla(194, 40, \"\"),\n            FieldVanilla(194, 41, \"\"),\n            FieldVanilla(194, 42, \"\"),\n            FieldVanilla(194, 43, \"\"),\n            FieldVanilla(194, 44, \"\"),\n            FieldVanilla(194, 45, \"\"),\n            FieldVanilla(194, 46, \"\"),\n            FieldVanilla(194, 47, \"\"),\n            FieldVanilla(194, 48, \"\"),\n            FieldVanilla(194, 49, \"\"),\n            FieldVanilla(194, 50, \"\"),\n            FieldAll    (194, 51, \"\"),\n            FieldVanilla(194, 52, \"\"),\n            FieldVanilla(194, 53, \"\"),\n            FieldVanilla(194, 54, \"\"),\n            FieldVanilla(194, 55, \"\"),\n            FieldVanilla(194, 56, \"\"),\n            FieldVanilla(194, 57, \"\"),\n            FieldVanilla(194, 58, \"\"),\n            FieldVanilla(194, 59, \"\"),\n            FieldVanilla(194, 60, \"\"),\n            FieldAll    (194, 61, \"\"),\n            FieldVanilla(194, 62, \"\"),\n            FieldVanilla(194, 63, \"\"),\n            FieldVanilla(194, 64, \"\"),\n            FieldAll    (194, 65, \"\"),\n            FieldVanilla(194, 66, \"\"),\n            FieldVanilla(194, 67, \"\"),\n            FieldVanilla(194, 68, \"\"),\n            FieldVanilla(194, 69, \"\"),\n            FieldVanilla(194, 70, \"\"),\n            FieldAll    (194, 71, \"\"),\n            FieldVanilla(194, 72, \"\"),\n            FieldAll    (194, 73, \"\"),\n            FieldVanilla(194, 74, \"\"),\n            FieldVanilla(194, 75, \"\"),\n            FieldVanilla(194, 76, \"\"),\n            FieldVanilla(194, 77, \"\"),\n            FieldVanilla(194, 78, \"\"),\n            FieldVanilla(194, 79, \"\"),\n            FieldVanilla(194, 80, \"\"),\n            FieldVanilla(194, 81, \"\"),\n            FieldVanilla(194, 82, \"\"),\n            FieldVanilla(194, 83, \"\"),\n            FieldVanilla(194, 84, \"\"),\n            FieldVanilla(194, 85, \"\"),\n            FieldVanilla(194, 86, \"\"),\n            FieldVanilla(194, 87, \"\"),\n            FieldVanilla(194, 88, \"\"),\n            FieldVanilla(194, 89, \"\"),\n            FieldVanilla(194, 90, \"\"),\n            FieldVanilla(194, 91, \"\"),\n            FieldVanilla(194, 92, \"\"),\n            FieldVanilla(194, 93, \"\"),\n            FieldVanilla(194, 94, \"\"),\n            FieldVanilla(194, 95, \"\"),\n            FieldVanilla(194, 96, \"\"),\n            FieldVanilla(194, 97, \"\"),\n            FieldVanilla(194, 98, \"\"),\n            FieldVanilla(194, 99, \"\"),\n            FieldAll    (195,  1, \"\"),\n            FieldVanilla(195,  2, \"\"),\n            FieldVanilla(195,  3, \"\"),\n            FieldVanilla(195,  4, \"\"),\n            FieldVanilla(195,  5, \"\"),\n            FieldVanilla(195,  6, \"\"),\n            FieldVanilla(195,  7, \"\"),\n            FieldVanilla(195,  8, \"\"),\n            FieldVanilla(195,  9, \"\"),\n            FieldVanilla(195, 10, \"\"),\n            FieldAll    (195, 11, \"\"),\n            FieldVanilla(195, 12, \"\"),\n            FieldVanilla(195, 13, \"\"),\n            FieldVanilla(195, 14, \"\"),\n            FieldAll    (195, 15, \"\"),\n            FieldVanilla(195, 16, \"\"),\n            FieldVanilla(195, 17, \"\"),\n            FieldVanilla(195, 18, \"\"),\n            FieldVanilla(195, 19, \"\"),\n            FieldVanilla(195, 20, \"\"),\n            FieldAll    (195, 21, \"\"),\n            FieldVanilla(195, 22, \"\"),\n            FieldVanilla(195, 23, \"\"),\n            FieldVanilla(195, 24, \"\"),\n            FieldVanilla(195, 25, \"\"),\n            FieldVanilla(195, 26, \"\"),\n            FieldVanilla(195, 27, \"\"),\n            FieldVanilla(195, 28, \"\"),\n            FieldVanilla(195, 29, \"\"),\n            FieldVanilla(195, 30, \"\"),\n            FieldVanilla(195, 31, \"\"),\n            FieldVanilla(195, 32, \"\"),\n            FieldVanilla(195, 33, \"\"),\n            FieldVanilla(195, 34, \"\"),\n            FieldVanilla(195, 35, \"\"),\n            FieldVanilla(195, 36, \"\"),\n            FieldVanilla(195, 37, \"\"),\n            FieldVanilla(195, 38, \"\"),\n            FieldVanilla(195, 39, \"\"),\n            FieldVanilla(195, 40, \"\"),\n            FieldVanilla(195, 41, \"\"),\n            FieldVanilla(195, 42, \"\"),\n            FieldVanilla(195, 43, \"\"),\n            FieldVanilla(195, 44, \"\"),\n            FieldVanilla(195, 45, \"\"),\n            FieldVanilla(195, 46, \"\"),\n            FieldVanilla(195, 47, \"\"),\n            FieldVanilla(195, 48, \"\"),\n            FieldVanilla(195, 49, \"\"),\n            FieldVanilla(195, 50, \"\"),\n            FieldVanilla(195, 51, \"\"),\n            FieldVanilla(195, 52, \"\"),\n            FieldVanilla(195, 53, \"\"),\n            FieldVanilla(195, 54, \"\"),\n            FieldVanilla(195, 55, \"\"),\n            FieldVanilla(195, 56, \"\"),\n            FieldVanilla(195, 57, \"\"),\n            FieldVanilla(195, 58, \"\"),\n            FieldVanilla(195, 59, \"\"),\n            FieldVanilla(195, 60, \"\"),\n            FieldVanilla(195, 61, \"\"),\n            FieldVanilla(195, 62, \"\"),\n            FieldVanilla(195, 63, \"\"),\n            FieldVanilla(195, 64, \"\"),\n            FieldVanilla(195, 65, \"\"),\n            FieldVanilla(195, 66, \"\"),\n            FieldVanilla(195, 67, \"\"),\n            FieldVanilla(195, 68, \"\"),\n            FieldVanilla(195, 69, \"\"),\n            FieldVanilla(195, 70, \"\"),\n            FieldVanilla(195, 71, \"\"),\n            FieldVanilla(195, 72, \"\"),\n            FieldVanilla(195, 73, \"\"),\n            FieldVanilla(195, 74, \"\"),\n            FieldVanilla(195, 75, \"\"),\n            FieldVanilla(195, 76, \"\"),\n            FieldVanilla(195, 77, \"\"),\n            FieldVanilla(195, 78, \"\"),\n            FieldVanilla(195, 79, \"\"),\n            FieldVanilla(195, 80, \"\"),\n            FieldVanilla(195, 81, \"\"),\n            FieldVanilla(195, 82, \"\"),\n            FieldVanilla(195, 83, \"\"),\n            FieldVanilla(195, 84, \"\"),\n            FieldVanilla(195, 85, \"\"),\n            FieldVanilla(195, 86, \"\"),\n            FieldVanilla(195, 87, \"\"),\n            FieldVanilla(195, 88, \"\"),\n            FieldVanilla(195, 89, \"\"),\n            FieldVanilla(195, 90, \"\"),\n            FieldVanilla(195, 91, \"\"),\n            FieldVanilla(195, 92, \"\"),\n            FieldVanilla(195, 93, \"\"),\n            FieldVanilla(195, 94, \"\"),\n            FieldVanilla(195, 95, \"\"),\n            FieldVanilla(195, 96, \"\"),\n            FieldVanilla(195, 97, \"\"),\n            FieldVanilla(195, 98, \"\"),\n            FieldVanilla(195, 99, \"\"),\n            FieldRoyal  (200, 10, \"\"),\n            FieldRoyal  (250,  1, \"\"),\n            FieldAll    (251,  1, \"Kamoshida Palace - Battle 1\"),\n            FieldAll    (251,  2, \"Kamoshida Palace - Battle 2\"),\n            FieldAll    (251,  3, \"\"),\n            FieldAll    (251,  4, \"\"),\n            FieldAll    (251, 10, \"\"),\n            FieldAll    (252,  1, \"\"),\n            FieldAll    (252,  2, \"\"),\n            FieldAll    (252,  3, \"\"),\n            FieldAll    (253,  1, \"\"),\n            FieldAll    (253,  2, \"\"),\n            FieldAll    (253,  3, \"\"),\n            FieldAll    (253, 10, \"\"),\n            FieldAll    (254,  1, \"\"),\n            FieldAll    (254,  2, \"\"),\n            FieldAll    (254, 10, \"\"),\n            FieldAll    (255,  1, \"\"),\n            FieldAll    (255,  2, \"\"),\n            FieldAll    (255,  3, \"\"),\n            FieldAll    (255, 10, \"\"),\n            FieldAll    (256,  1, \"\"),\n            FieldAll    (256,  2, \"\"),\n            FieldAll    (256,  3, \"\"),\n            FieldAll    (256,  4, \"\"),\n            FieldAll    (256, 10, \"\"),\n            FieldAll    (257,  1, \"\"),\n            FieldAll    (257,  2, \"\"),\n            FieldAll    (257,  3, \"\"),\n            FieldAll    (257,  4, \"\"),\n            FieldAll    (257,  5, \"\"),\n            FieldAll    (257,  6, \"\"),\n            FieldAll    (257, 10, \"\"),\n            FieldAll    (259,  1, \"\"),\n            FieldAll    (259,  2, \"\"),\n            FieldAll    (259,  3, \"\"),\n            FieldAll    (259,  4, \"\"),\n            FieldAll    (259, 10, \"\"),\n            FieldAll    (259, 11, \"\"),\n            FieldAll    (259, 12, \"\"),\n            FieldAll    (259, 13, \"\"),\n            FieldAll    (259, 14, \"\"),\n            FieldAll    (259, 15, \"\"),\n            FieldAll    (260,  1, \"Qliphoth World - Battle\"),\n            FieldAll    (260, 10, \"Qliphoth World - Holy Grail 1st Battle\"),\n            FieldAll    (260, 11, \"Qliphoth World - Yaldabaoth Battle\"),\n            FieldAll    (260, 12, \"Qliphoth World - Holy Grail 2nd Battle\"),\n            FieldAll    (260, 13, \"Qliphoth World - Velvet Room Story Battle\"),\n            FieldAll    (260, 14, \"Qliphoth World - Twin Battle\"),\n            FieldAll    (261,  1, \"\"),\n            FieldRoyal  (261,  6, \"\"),\n            FieldRoyal  (262,  1, \"\"),\n            FieldRoyal  (262,  2, \"\"),\n            FieldRoyal  (262,  3, \"\"),\n            FieldRoyal  (262,  4, \"\"),\n            FieldRoyal  (262,  5, \"\"),\n            FieldRoyal  (262,  6, \"\"),\n            FieldRoyal  (262,  7, \"\"),\n            FieldRoyal  (262,  8, \"\"),\n            FieldRoyal  (262,  9, \"\"),\n            FieldRoyal  (262, 10, \"\"),\n            FieldRoyal  (262, 11, \"\"),\n            FieldRoyal  (262, 12, \"\"),\n            FieldRoyal  (262, 13, \"\"),\n            FieldAll    (291,  1, \"\"),\n            FieldAll    (292,  1, \"\"),\n            FieldAll    (293,  1, \"\"),\n            FieldAll    (294,  1, \"\"),\n            FieldRoyal  (295,  1, \"\"),\n            FieldRoyal  (295, 10, \"\"),\n        };\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_AccessoryNames.txt",
    "content": "BLANK\nHip Glasses\nSuspenders\nFanny Pack\nHairpin\nSilver Key Ring\nBlack Tights\nDotted Tights\nHeadphones\nBlack Necktie\nRESERVE\nBreath Ring\nEnergy Ring\nRing of Vitality\nRESERVE\nRESERVE\nRESERVE\nChakra Choker\nMind Choker\nSoul Choker\nRESERVE\nRESERVE\nRESERVE\nRed Band\nBlue Band\nGreen Band\nYellow Band\nLantern Necklace\nRESERVE\nRESERVE\nRESERVE\nStar Bracelet\nCircular Band\nWhite Band\nBlack Band\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRaging Wristband\nEccentric Belt\nRESERVE\nMagnetic Necklace\nPick-Me-Up Tie\nSturdy Suspenders\nStrength Belt\nWood Clappers\nHot Water Pouch\nRubber Gloves\nShield Goggles\nCalming Mask\nWooden Clogs\nNotebook\nWell-Fed Cape\nSleepless Gem\nCalming Cape\nCape of Hope\nRESERVE\nBrain Guard\nBurn Charm\nFreeze Charm\nGrand Slam Charm\nShockproof Charm\nRESERVE\nFearless Cape\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nDespair Charm\nRESERVE\nRESERVE\nRevenge Mirror\nReprisal Mirror\nRetribution Mirror\nCaffeine Patch\nPeaceful Potpourri\nPositivity Calendar\nDesigner Shades\nClarity Cape\nOil Pack\nCooling Pack\nPortable Battery\nDizzy Mask\nMysterious Mask\nSinister Mask\nForgetful Mask\nDrowsy Mask\nClown Mask\nCorrupting Mask\nOccult Mask\nRing of Lust\nRing of Vanity\nRing of Gluttony\nRing of Wrath\nRing of Greed\nRing of Envy\nRing of Pride\nRing of Sorrow\nCrystal of Lust\nCrystal of Vanity\nCrystal of Gluttony\nCrystal of Wrath\nCrystal of Greed\nCrystal of Envy\nCrystal of Pride\nCrystal of Sorrow\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRakshasa Belt\nVajra Belt\nSkanda Belt\nAce Cap\nWillful Belt\nLure Keychain\nBravery Sash\nMagic Misanga\nHades Harp\nHades Harp R\nDarkness Ring\nDarkness Ring R\nWhite Headband\nWhite Headband R\nBlack Headband\nBlack Headband R\nRed String\nRed String R\nBlazing Horns\nInferno Horns\nBlack Moon\nBlack Moon R\nRESERVE\nGraceful Harp\nGraceful Harp R\nKugelbein\nKugelbein R\nShiny Belt\nShiny Belt R\nPicaresque Hat\nPicaresque Crown\nRESERVE\nRESERVE\nBold Eyepatch\nCompression Socks\nRESERVE\nFireproof Choker\nFireproof Bracelet\nRESERVE\nIceproof Choker\nIceproof Bracelet\nRESERVE\nElecproof Choker\nElecproof Bracelet\nRESERVE\nWindproof Choker\nWindproof Bracelet\nRESERVE\nNukeproof Choker\nNukeproof Bracelet\nRESERVE\nPsyproof Choker\nPsyproof Bracelet\nRESERVE\nBlessproof Choker\nBlessproof Bracelet\nRESERVE\nCurseproof Choker\nApotropaic Hairpin\nRESERVE\nAngel Badge\nRESERVE\nRESERVE\nExpedite Ring\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRegent\nQueen's Necklace\nStone of Scone\nKoh-i-Noor\nOrlov\nEmperor's Charm\nHope Diamond\nCrystal Skull\nCross-Shaped Charm\nUmi Sachihiko's Belt\nIdaten's Belt\nHall of Fame Belt\nThief Mask\nBlack Rock\nSkull Charm\nCrimson Necklace\nSilver Ice Necklace\nJade Wind Necklace\nPurple Bolt Necklace\nAtom Necklace\nPsy Necklace\nHeavenly Necklace\nNight Necklace\nRESERVE\nMenehune Dolls\nHawaiian Ring\nForneus Badge\nTrain Badge\nPI Badge\nPunch Badge\nGambla Badge\nGolfer Badge\nTough Belt\nDandy Mirror\nLeblanc Charm\nBoss Undies\n2nd Mate Badge\n1st Mate Badge\nCaptain Badge\nRegen Patch 1\nRegen Patch 2\nRegen Patch 3\nSP Adhesive 1\nSP Adhesive 2\nSP Adhesive 3\nRESERVE\nRESERVE\nThe Victory Cup\nFish God's Badge\nOmnipotent Orb\nDivine Pillar\nInvisible Veil\nRESERVE\nAttachment Pearl\nNuisance Belt\nRESERVE\nRESERVE\nRESERVE\nHoly Stone\nTeam Glasses\nS.E.E.S. Armband\nSevens Emblem\nSt. Hermelin Badge\nARM PC\nMidnight Bandana\nEvoker\nHonu Charm\nTiki Keychain\nBeast Headphones\nBabel Headphones\nLambs' Pillow\nGauntlet\nKuzunoha Tubes\nFeatherman Badge\nFire Augite\nIce Augite\nLightning Augite\nWind Augite\nPsy Augite\nNuclear Augite\nCross Augite\nSkeleton Augite\nHealing Augite\nRESERVE\nUltimate Augite\nRESERVE\nWing Ring\nEngraved Dog Tag\nRed Ribbon\nEmber Ring\nFlame Ring\nInferno Ring\nSpiral Ember Ring\nSpiral Flame Ring\nSpiral Inferno Ring\nFrost Ring\nSnow Ring\nBlizzard Ring\nSpiral Frost Ring\nSpiral Snow Ring\nSpiral Blizzard Ring\nBreeze Ring\nWind Ring\nGale Ring\nSpiral Breeze Ring\nSpiral Wind Ring\nSpiral Gale Ring\nStatic Ring\nSpark Ring\nThunder Ring\nSpiral Static Ring\nSpiral Spark Ring\nSpiral Thunder Ring\nHoly Ring\nHallowed Ring\nSpiral Holy Ring\nSpiral Hallowed Ring\nPrayer Ring\nBlessing Ring\nDivine Ring\nSpiral Prayer Ring\nSpiral Blessing Ring\nSpiral Divine Ring\nDeath Ring\nHell Ring\nSpiral Death Ring\nSpiral Hell Ring\nGrudge Ring\nCurse Ring\nHex Ring\nSpiral Grudge Ring\nSpiral Curse Ring\nSpiral Hex Ring\nMighty Ring\nAlmighty Ring\nSupreme Ring\nAtom Ring\nNuclear Ring\nReactor Ring\nSpiral Atom Ring\nSpiral Nuclear Ring\nSpiral Reactor Ring\nDizzy Bangle\nSpiral Dizzy Bangle\nAddle Bangle\nSpiral Addle Bangle\nFear Bangle\nRetail Smile Mask\nForget Bangle\nSpiral Forget Bangle\nSleep Bangle\nSpiral Sleep Bangle\nRage Bangle\nSpiral Rage Bangle\nGloom Bangle\nSpiral Gloom Bangle\nBrainwash Bangle\nAgitation Crown\nLife Sapping Mask\nSpirit Sapping Mask\nSpirit Sense Mirror\nDark Spirit Mirror\nSpirit Camera\nDark Flame Band\nArdhanari Band\nDiamond Dust Lily\nFrozen Crown\nStorm Sculpture\nVacuum Crown\nGoddess Horn\nThunder Charm\nJudgment Cross\nSpinning Crown\nCursed Ribbon\nCrown of Death\nFire Dragon Horn\nAtomic Crown\nBlack Viper Crown\nAstral Crown\nPsy Ring\nKarma Ring\nMystic Ring\nSpiral Psy Ring\nSpiral Karma Ring\nSpiral Mystic Ring\n-\nDragon's Heart\nPsycho Blast Crown\nLunge Belt\nAssault Belt\nMegaton Belt\nGod's Hand Belt\nLucky Belt\nMiracle Belt\nRush Belt\nGatling Belt\nCleave Belt\nGiant Slice Belt\nBrave Belt\nSword Dance Belt\nHassou Tobi Belt\nAyamur Belt\nCornered Belt\nRising Slash Belt\nDeadly Fury Belt\nSnap Belt\nTriple Shot Belt\nSpecial Shot Belt\nMagic Bullet Belt\nDouble Shot Belt\nVajra Blast Belt\nVorpal Blade Belt\nVicious Strike Belt\nHeat Wave Belt\nGigantomachia Belt\nBrawler Belt\nSwift Strike Belt\nDeathbound Belt\nAgneyastra Belt\nDouble Fangs Belt\nPower Slash Belt\nTempest Slash Belt\nMyriad Slash Belt\nSledgehammer Belt\nSkull Cracker Belt\nTerror Claw Belt\nHeadbutt Belt\nRESERVE\nDream Needle Belt\nHysterical Slap Belt\nNegative Pile Belt\nBrain Shaker Belt\nFlash Bomb Belt\nMind Slice Belt\nBloodbath Belt\nMemory Blow Belt\nRESERVE\nDormin Rush Belt\nOni-Kagura Belt\nBad Beat Belt\nBrain Buster Belt\nAid Charm\nCure Charm\nHeal Charm\nSpiral Aid Charm\nSpiral Cure Charm\nSpiral Heal Charm\nRevival Charm\nRejuvenate Charm\nRosary of Purity\nAmrita Charm\nSpiral Amrita Charm\nSalvation Crown\nAlluring Belt\nHidden Ring\nAlarm Charm\nSpiral Energy Charm\nEnergy Charm\nBaisudi Charm\nSpiral Alarm Charm\nSpiral Baisudi Charm\nRasetsu Anklet\nVajra Anklet\nCat Brooch\nHeat Riser Anklet\nSpiral Rasetsu Anklet\nSpiral Vajra Anklet\nSpiral Idaten Anklet\nSavior Brooch\nWeak Anklet\nFeeble Anklet\nStalling Anklet\nDebilitate Anklet\nSpiral Weak Anklet\nSpiral Feeble Anklet\nSpiral Stalling Anklet\nDekunda Anklet\nCalming Anklet\nEmpowering Anklet\nConcentration Anklet\nRebellion Anklet\nRevolution Anklet\nMagic Mirror Charm\nPhys Mirror Charm\nImmortal Charm\nWall Break Charm\nBarrier Break Charm\nAnti-Fire Choker\nAnti-Ice Choker\nAnti-Elec Choker\nAnti-Wind Choker\nFire Breaker Bell\nIce Breaker Bell\nWind Breaker Bell\nElec Breaker Bell\nAnti-Nuke Choker\nAnti-Psy Choker\nNuke Breaker Bell\nPsy Breaker Bell\n0x1E2\nRegent R\nQueen's Necklace R\nStone of Scone R\nKoh-i-Noor R\nOrlov R\nEmperor's Charm R\nHope Diamond R\nCrystal Skull R\nOrichalcum\nOrichalcum R\nGambler's Ring\nDazzling Netsuke\nNuke Brooch\nStarlight Glove\nMoonlight Phones\nWarden's Baton\nFeather Cape\nDemonica Device\nCamera Strap\nUnused Item\n0x1F7\n0x1F8\n0x1F9\n0x1FA\n0x1FB\n0x1FC\n0x1FD\n0x1FE\n0x1FF\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_ArmorNames.txt",
    "content": "BLANK (Unusable)\nRESERVE\nDark Undershirt\nPrint T-Shirt\nNeckerchief\nBaseball Jacket\nDress Shirt\nTurtleneck\nPink Top\nLoose Cutsew\nFormal Shirt\nLight Undershirt\nChaos Undershirt\nRESERVE\nSooty Ghastly Gear\nRESERVE\nShoulder Pads\nConfident Camisole\nLynx Camo Vest\nMemorial Collar\nOld Cat Collar\nCat Knight's Collar\nOld Duke's Coat\nDuke's Coat\nRESERVE\nRESERVE\nRESERVE\nCat Sweater\nOld Angels' Cape\nAngel's Cape\nOld Pajamas\nSuccubus Pajamas\nSaint's Tunic\nRobust Apron\nAmulet Shirt\nBreeze Scarf\nSilk Dress\nFine Silk Dress\nFrost Hood\nFrost Ace Hood\nSurvival Vest\nLady's Dress\nZen Outfit\nCone Collar\nOld Ghastly Dress\nShikigami Dress\nOld Cheongsam\nFairy Cheongsam\nOld Mythical Scarf\nMythical Scarf\nRESERVE\nRESERVE\nCosmic Undies\nLightning Blouse\nNight Shift Haori\nRubber Scarf\nHeavensent Dress\nGodsent Dress\nRESERVE\nRESERVE\nAthletic Shirt\nPower Camisole\nRESERVE\nHard Scarf\nOld Haori\nDishonored Haori\nOld Coat\nNekomata Coat\nOld Fiery Apron\nFiery Apron\nBlood Red Capote\nBloodied Capote\nMandala Vest\nElysian Robe\nPapal Robes\nId Collar\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nArmy Vest\nHard Corset\nRESERVE\nSparkly Collar\nOld Shroud\nRoyal Holy Shroud\nOld Robe\nArcane Robe\nOld Snakeskin Scarf\nSnakeskin Scarf\nFairy Knight Armor\nFairy Hero Armor\nCool Vest\nTitanium Corset\nHope Shirt\nMorose Collar\nTapsuan\nFine Tapsuan\nRESERVE\nRESERVE\nGigas Vest\nMaillot\nRESERVE\nArmada Collar\nOld Undershirt\nLil Devil Undershirt\nOld Shocking Scarf\nShocking Scarf\nOld Ghillie Vest\nGhillie Vest\nRESERVE\nRESERVE\nAustere Haori\nYama Dress\nRune Vest\nBrave Scarf\nLucky Robe\nSuper Lucky Robe\nRESERVE\nRESERVE\nFluted Guard\nPanzer Dress\nRESERVE\nMeasure Collar\nOld Vest\nLeopard Print Vest\nOld Pure Collar\nPure Collar\nOld Tights\nDivine Black Tights\nRESERVE\nRESERVE\nFireman Happi\nGlaring Cape\nEgoist Shirt\nWater Crown\nKing Frost Cape\nKing Frost Cape EX\nRESERVE\nRESERVE\nKaiser Vest\nTomoe's Doumaru\nRESERVE\nKampff Collar\nOld Wild Lion Scarf\nWild Lion Scarf\nOld Khamrai Tao\nKhamrai Tao\nOld Primate Vest\nPrimate Vest\nRESERVE\nRESERVE\nDemon's Jacket\nCozy Dress\nAkashic Shirt\nLyrical Scarf\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nKarna's Robe\nHaten Robe\nRESERVE\nSublime Collar\nOld Sinful Bikini\nSinful Bikini\nOld Underwear\nLucky Underwear\nOld Infinity Scarf\nBottomless Scarf\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nScarf of Mercy\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nImmortal Vest\nRESERVE\nOld Black Tights\nDeath's Black Tights\nOld Witch's Robe\nLovely Witch's Robe\nOld Scale Scarf\nDragon Scale Scarf\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nTantric Oath\nBlack Jacket\nOfficial's Robe\nTantric Oath R\nRESERVE\nArchangel Bra\nRESERVE\nHigh Archangel Bra\nRESERVE\nBlack Wing Robe\nBlack Wing Robe R\nDark Jacket\nRESERVE\nOfficial's Robe R\nBlack Robe\nRESERVE\nMoonlight Robe R\nWeird Wrap\nMoonlight Robe\nSirius Armor\nSirius Armor EX\nSooty Ladies' Armor\nSooty Boots\nSooty Heavy Armor\nSooty Yorishiro\nSooty Elder's Armor\nSooty Cheongsam\nSooty Men's Armor\nSooty Cat Armor\nSooty Ogress' Gear\nSooty Wolf's Coat\nSooty Divine Armor\nSooty Snakeskin\nSooty Lady's Armor\nSooty Feather Coat\nSooty Black Armor\nSooty Spotted Fur\nSooty Horn\nSooty Lady's Armor\nSooty Lion's Mane\nSooty Monkey Fur\nSooty Regalia\nSooty Lady's Armor\nSooty Bolt Armor\nSooty Regalia\nSooty Dancer's Garb\nSooty Dark Armor\nSooty Scale Armor\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nShining Vest\nTao Robe\nPhilosophical Scarf\nBodhi Haori\nDivine Guard\nUnio Dress\nPleroma Collar\nRESERVE\nGambler's Shirt\nImmovable Shirt\nVest of Life\nRESERVE\nRESERVE\nNightwatch Armor\nGolden Vest\nRobe of Hatred\nSpace Suit\nGolden Dress\nStarry Wisdom Vest\n0x120\n0x121\n0x122\n0x123\n0x124\n0x125\n0x126\n0x127\n0x128\n0x129\n0x12A\n0x12B\n0x12C\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_ConsumableItemNames.txt",
    "content": "BLANK\nDevil Fruit\nRecov-R: 50 mg\nRecov-R: 100 mg\nTakemedic\nLife Stone\nBead\nTakemedic-All\nTakemedic-All V\nTakemedic-All Z\nBead Chain\nSoul Drop\nSnuff Soul\nChewing Soul\nSoul Food\nRevival Bead\nBalm of Life\nRESERVE\nNohar-M\nRelax Gel\nAlert Capsule\nRESERVE\nRESERVE\nVanish Ball\nSoma\nAmrita Soda\nHiranya\nMuscle Drink\nOdd Morsel\nRancid Gravy\nRESERVE\nMagic Ointment\nPhysical Ointment\nRasetsu Ofuda\nIdaten Ofuda\nKongou Ofuda\nKajaclear-R\nKundaclear-R\nMolotov Cocktail\nBlowtorch\nFreeze Spray\nDry Ice\nAir Cannon\nVacuum Cutter\nStun Gun\nMagneto Coil\nMegido Bomb\nSacramental Bread\nStraw Doll\nHell Magatama\nCyclone Magatama\nFrost Magatama\nArc Magatama\nPsycho Bomb\nPsy-Wheel\nAtom Match\nNuke Cracker\nHappy Bomb\nSegaki Rice\nCurse Bomb\nFive-inch Nail\nRevivadrin\nMedicine\nLife Ointment\nHomunculus\nRESERVE\nReviv-All\nRenew-All\nRecover Oil\nRESERVE\nDVD Player\nGarden Energy\nBio Nutrients\nMega Fertilizer\nGodly Magatama\nBlast Magatama\nHoly Magatama\nGrudge Magatama\nRESERVE\nRESERVE\nPC Tool Set\nRESERVE\nGlass Vase\nStar Mirror\nSnack Pack\nMusty Pages\nHomemaker Hero\nHeart Ring\nHeart Necklace\nDesigner Perfume\nLuxury Aroma Set\nMini Cactus\nFlower Basket\nBath of Roses\nBlack Mug\nSakura Fan\nFountain Pen\nRobot Vacuum\nMotorbike Figure\nLocal Mascot Set\nSpotlight\nGoho-M\nRESERVE\nSmokescreen\nRESERVE\nHypno Mist\nCalming Aroma\nCovertizer\nRESERVE\nSilk Yarn\nThick Parchment\nTin Clasp\nPlant Balm\nCork Bark\nIron Sand\nCondenser Lens\nAluminum Sheet\nTanned Leather\nRed Phosphorus\nLiquid Mercury\nRESERVE\nWise Men's Words\nGhost Encounters\nTidying the Heart\nBuchiko's Story\nRESERVE\nRESERVE\nPunch Ouch\nStarvicks\nUdagawa Water\nCRT Television\nRESERVE\nRESERVE\nMaster Swordsman\nFlowerpedia\nRESERVE\nRESERVE\nRESERVE\nHeroic Revelations\nCall Me Chief\nThe Art of Automata\nReckless Casanova\nRESERVE\nRubbish\nMoney Distributor\nItem Distributor\nRESERVE\nJagariko\nBroken Rock Salt\nMovie Ticket\nMovie 02 Ticket\nMovie 03 Ticket\nMovie 04 Ticket\nRESERVE\nRESERVE\nSummer Lotto S\nAutumn Bread\nElement Set\nForces Set\nShitamachi Reborn\nStar Forneus\nWeekend Parks\nTrain of Life\nPower Intuition\nBonehead\nCrime Lab Squad\nNot-so-hot Betsy\nBubbly Hills, 90210\nICU\nRESERVE\nDrizzled Natto\nSquid Tri-Pack\nIdol Pins\nRESERVE\nRESERVE\nRESERVE\nTokyo Shrines\nFishpond Spotter\nYoncha Walker 04\nNight Skies\nJack Frost Doll\nBurger-kun Doll\nWanna-kun Doll\nLexy Doll\nUji Matcha Flan\nTruffles\nRESERVE\nLimelight\nAmateur Coffee\nHarsh Coffee\nBaptismal Water\nExorcism Water\nWine of Grace\nRepentance Ashes\nDipped Katsu Sando\nBook Cover\nCastella\nCrimson Lipstick\nRESERVE\nRESERVE\nTetra Hammer\nMakara Hammer\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nCasual Rod\nPowerful Rod\nMiracle Rod\nArginade\nDr. Salt NEO\nJoylent\nMRE Ration\nOatmeal Ration\nTorimeshi Ration\nFruit Ration\nSeafood Aojiru\nBeauty Aojiru\nVitality Aojiru\nNasty Aojiru\nOnsen Aojiru\nRESERVE\nFulfiller\nSummer Lotto R\nHappy Pop\nThaw Stone\nDouse Orb\nDischarge Crystal\nSecond Maid\nRESERVE\nSandwich\nFruit Danish\nRESERVE\nYakisoba Pan\nCreature\nEarl Green\nRaw Punch\nMuscle Tea\nManta\nNastea\n1UP\nGambla Goemon\nGolfer Sarutahiko\nCalling Postcard\nRefresh Aroma\nProtein\nMoist Protein\nFried Bread\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nExpert\nInsane\nBeginner\nIntermediate\nAdvanced\nSurprise Sando\nNostalgic Steak\nFrui-Tea\nTotem Pole\nRelaxing Coffee\nOo-hot Tea\nLove솂Pancake\nSincere Omelette\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nSmall Boilie\nMedium Boilie\nLarge Boilie\nTop-class Boilie\nGuardian Boilie\nBig Bang Burger\nSaturn Fries\nEarth Burger\nRESERVE\nMoon Burger\nSupernova Burger\nKaraage King\nSpring Fruit Pack\nForeign Nikuman\nPhantom Wafers\nSoothing Soba\nAgodashi Oden\nParty in a Can\nDigital Camera\nFace Beautifier\nLaptop\nRESERVE\nMini Dominion\nDie-soujou\nDecked Decarabia\nGear Girimehkala\nKinky Kin-Ki\nMossy Mothman\nMovie 16 Ticket\nLockpick\nPerma-Pick\nReserve Ammo\nRESERVE\nTreasure Trap\nRESERVE\nRed Fish\nRough Carp\nTokyo Bitterling\nSeven-Color Trout\nWhite Carp\nTreasure Trout\nDelish Bitterling\nPeerless Carp\nIchigaya Guardian\nAdhesive Bandage\nRESERVE\nRejuvenating IV\nLeblanc Coffee\nRESERVE\nRESERVE\nMaster Coffee\nDecent Curry\nLeblanc Curry\nMaster Curry\nRESERVE\nShooting Card\nHealing IV\nRailroad Card\nFighting Card\nRESERVE\nBoxing Card\nGambling Card\nGolf Card\nSocial Thought\nRESERVE\nRESERVE\nRESERVE\nBatting Science\nEssence of Fishing\nSpeed Reader\nThe Craft of Cinema\nRESERVE\nChinese Sweets\nTheme Park Escort\nThe Great Thief\nPirate Legend\nZorro, the Outlaw\nThe Alluring Dancer\nThe Gallant Rogue\nThe Illusory Popess\nCry of Cthulhu\nWoman in the Dark\nThe Hero with a Bow\nMedjed Menace\nThe Art of Charm\nGame Secrets\nLotto R\nLotto S\nScratch Lottery\nRakugo Collection\nClassical Hits\nBest of KGB49\nWraith\nJail Break\nGuy McVer\nThe Running Dead\nThe X Folders\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nVague\nNightlife Hotspots\nNofeever Sheet\nHand Warmalizer\nVenus Salad\nSikkenine\nSikkenine A\nSikkenine EX\nWide Eye Drops\nDonut-Worry\nMental Floss\nHot and Sour Tea\nBalloons\nKommissbrot\nBeef Patty Ration\nD Ration\nVeg. Stew Ration\nRESERVE\nRESERVE\nDurian Au Lait\nOh! Shiruko\nChunky Potage\nUltimate Amazake\nUdagawa Soda\nWater of Rebirth\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nStrawberry Curry\nMayo Locust\nMiso Starfish\nMystery Stew\nBitter Coffee\nAcidic Coffee\nFire Curry\nBlaze Curry\nInferno Curry\nRamen Bowl\nNight Pennant\nNude Statue\nSwan Boat\nSkytree Lamp\nGiant Spatula\nIdol Poster\nStar Stickers\nKing Piece\nHero Figure\nHamaya\nI <3 Tokyo Shirt\nNon-Static Gum\nRESERVE\nRESERVE\nRESERVE\nKawakami's Chocolate\nTakemi's Chocolate\nChihaya's Chocolate\nOhya's Chocolate\nHifumi's Chocolate\nMakoto's Chocolate\nHaru's Chocolate\nAnn's Chocolate\nFutaba's Chocolate\nRyuji's Chocolate\nSojiro's Chocolate\nKumade\nShumai Cushion\nGi-Nyant Doll\nSushi Mug\nChoco Fountain\nRESERVE\nRESERVE\nRESERVE\nFamidrive\nRESERVE\nSheep Man Doll\nJam Bread\nMelon Pan\nAngel Tart\nMoon Dango\nMixed Nuts\nBeni-Azuma\nLegendary Yaki-Imo\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nMoonlight Carrot\nSun Tomato\nEarth Beans\nStar Onion\nRESERVE\nAnn Cream Puffs\nMakoto Donuts\nSakura Amezaiku\nSadayo Taiyaki\nRyuji Dog\nAmateur Curry\nRESERVE\nBroken Laptop\nImported Protein\nRESERVE\nRESERVE\nRESERVE\nAquarium-a-Day\nNakano Walker\nIncense ST\nIncense MA\nIncense EN\nIncense AG\nIncense LU\nAmbergris ST\nAmbergris MA\nAmbergris EN\nAmbergris AG\nAmbergris LU\nNirvana ST\nNirvana MA\nNirvana EN\nNirvana AG\nNirvana LU\nChunky Katsu\nStronger Lift S\nHarder Core S\nAccu-Speed S\nRESERVE\nSakura Mochi\nOil Painting Set\nWatercolor Postcard\nLeather Pen Case\nCup Noodle Set\nOmni-Vitamin\nSilver Bangle\nWrist Weights\nSports Sunglasses\nKitchen Tools Set\n48-Sided 3D Puzzle\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE \nRESERVE\nRESERVE\nDizzy Vial S\nDizzy Vial L\nConfuse Vial S\nConfuse Vial L\nFear Vial S\nFear Vial L\nForget Vial S\nForget Vial L\nSleep Vial S\nSleep Vial L\nRage Vial S\nRage Vial L\nDespair Vial S\nDespair Vial L\nBrainwash Vial S\nBrainwash Vial L\nMusk ST-MA\nMusk ST-EN\nMusk ST-AG\nMusk ST-LU\nMusk MA-EN\nMusk MA-AG\nMusk MA-LU\nMusk EN-AG\nMusk EN-LU\nRasta Sandalwood\nFeatherman Seeker\nFeather Card\nBatting Coupon\nSalvation S\nIchigaya Kingpin\nBlack Frost Doll\nBuchimaru Doll\nJagao Doll\nSuspicious Boilie\nHi-Tech Rod\nSea Slug Doll\nFeatherman Doll\nSumire's Chocolate\nAnn's Giri-Choco\nMakoto's Giri-Choco\nHaru's Giri-Choco\nFutaba's Giri-Choco\nTakemi's Giri-Choco\nChihaya's Giri-Choco\nKawakami's Giri-Choco\nOhya's Giri-Choco\nHifumi's Giri-Choco\nSumire's Giri-Choco\nSae's Giri-Choco\nMakoto's Candy\nHaru's Candy\nAnn's Candy\nFutaba's Candy\nChihaya's Candy\nTakemi's Candy\nKawakami's Candy\nOhya's Candy\nHifumi's Candy\nSumire's Candy\nScarlet Rose\nYellow Gerbera\nBlue Hyacinth\nStamina Kit S\nStamina Kit L\nDart Set\nJump Cue\nRoyal Jelly R\nStrawberry Daifuku\nLearn Pro Darts\nExpert Billiards\nD. Housewives\nMouse M.D.\n31\nTee\nStamp Card\nPhoto of Clara\nBland Cheese\nSharp Cheese\nRich Cheese\nPumpkin Soup\nRESERVE\nPuzzle Rings\nMochi Cushion\nElectric Toothbrush\nBlaring Alarm Clock\nAroma Machine\nKatana Keychain\nFactorization Guide\nHustle S\nViennese Jelly\nWeakener Spray\nCleaning Spray\nQuick Spray\nUltimate Spray\nAwake Incense\nAwakening Incense\nUnused\nUnused\nRESERVE\nDressed in Ashes\nRESERVE\nHogyoku Apple\nBand-Ace\nHoly Shroud\nOuija Board\nEmpowering Ofuda\nDebilitator Ofuda\nFire Magatama\nGale Magatama\nShock Magatama\nIce Magatama\nNuke Magatama\nPsy Magatama\nBless Magatama\nCurse Magatama\nInvincible Ofuda\nStrength Up Ofuda\nMagic Up Ofuda\nSeeker's Tools\nABCs of Crafting\nJuicy Nikuman\nNapolitan Nikuman\nPeppery Nikuman\nCorned Beef Special\nCereal Multi-Pack\nPopcorn Bomb\nClothing Grab Bag\nOsechi Ration\nMont Blanc Ration\nKebab Ration\nSpecial Chimaki\nOsechi Chocolate\nKnowing the Heart\nThe Fader\nOld Man's Elixir\nBilliards Magician\nMusk AG-LU\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_Demon.txt",
    "content": "000\nMetatron\nBeelzebub\nCu Chulainn\nJack-o'-Lantern\nJack Frost\nPixie\nCerberus\nLilim\nEligor\nOdin\nHua Po\nDecarabia\nMara\nOse\nThor\nUnicorn\nUriel\nSarasvati\nValkyrie\nYaksini\nGanesha\nAnubis\nMot\nRaphael\nScathach\nHigh Pixie\nBarong\nGirimehkala\nKing Frost\nNarcissus\nIsis\nLamia\nLegion\nRakshasa\nMokoi\nForneus\nSetanta\nTitania\nIncubus\nOni\nLilith\nRangda\nMakami\nParvati\nGabriel\nZaou-Gongen\nAlice\nKali\nKurama Tengu\nOberon\nShiki-Ouji\nYamata-no-Orochi\nOrobas\nHanuman\nArchangel\nObariyon\nQueen Mab\nSandalphon\nAbaddon\nShiisaa\nSandman\nBelial\nLeanan Sidhe\nCybele\nChernobog\nFlauros\nIppon-Datara\nOrthrus\nSuccubus\nMothman\nRESERVE\nDominion\nNekomata\nBlack Frost\nArahabaki\nAngel\nSkadi\nKikuri-Hime\nChi You\nPower\nInugami\nNebiros\nRESERVE\nSlime\nAnzu\nYatagarasu\nYoshitsune\nTake-Minakata\nAme-no-Uzume\nKushinada\nKumbhanda\nOngyo-Ki\nKin-Ki\nSui-Ki\nFuu-Ki\nJatayu\nKaiwan\nKelpie\nThoth\nDionysus\nApsaras\nAndras\nRESERVE\nKoropokguru\nKoppa Tengu\nRegent\nQueen's Necklace\nStone of Scone\nKoh-i-Noor\nOrlov\nEmperor's Amulet\nHope Diamond\nCrystal Skull\nOrichalcum\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nMandrake\nBaal\nDakini\nSilky\nBugs\nBlack Ooze\nBicorn\nMithras\nSudama\nKodama\nAgathion\nOnmoraki\nNue\nPisaca\nMelchizedek\nBaphomet\nRaja Naga\nNaga\nGaruda\nMoloch\nNorn\nBelphegor\nBerith\nChoronzon\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nNigi Mitama\nKushi Mitama\nAra Mitama\nSaki Mitama\nRESERVE\nShiva\nMichael\nAsura\nMada\nMother Harlot\nClotho\nLachesis\nAtropos\nArdha\nRESERVE\nVishnu\nHariti\nYurlungur\nHecatoncheires\nSatanael\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nOrpheus\nThanatos\nIzanagi\nMagatsu-Izanagi\nKaguya\nAriadne\nAsterius\nTsukiyomi\nMessiah\nMessiah Picaro\nOrpheus Picaro\nThanatos Picaro\nIzanagi Picaro\nM. Izanagi Picaro\nKaguya Picaro\nAriadne Picaro\nAsterius Picaro\nTsukiyomi Picaro\nSatanael\n???\nArsene\nCaptain Kidd\nZorro\nCarmen\nGoemon\nJohanna\nMilady\nNecronomicon\nRobin Hood\nLoki\nSatanael\nSeiten Taisei\nMercurius\nHecate\nKamu Susano-o\nAnat\nAstarte\nPrometheus\nLoki\nArsene\nCaptain Kidd\nZorro\nCarmen\nGoemon\nJohanna\nMilady\nNecronomicon\nRobin Hood\n???\nLucifer\nSeiten Taisei\nMercurius\nHecate\nKamu Susano-o\nAnat\nAstarte\nPrometheus\nLoki\nLoki\nCendrillon\nVanadis\nWilliam\nDiego\nCélestine\nGorokichi\nAgnes\nLucy\nAl Azif\nHereward\nElla\nRESERVE\nSatan\nLucifer\nKohryu\nOkuninushi\nNorn\nRESERVE\nRESERVE\nFutsunushi\nRESERVE\nSeth\nIshtar\nRESERVE\nSurt\n-----\nLakshmi\nRESERVE\nRESERVE\nEx-Belphegor\nRESERVE\nGaruda\nFortuna\nSuzaku\nSeiryu\nGenbu\nByakko\nBishamonten\nKoumokuten\nJikokuten\nZouchouten\nHell Biker\nDaisoujou\nTrumpeter\nWhite Rider\nMatador\nPale Rider\nHorus\nRESERVE\nAttis\nRESERVE\nRESERVE\nSraosha\nBerith\nRESERVE\nMitra\nPhoenix\nPrincipality\nNeko Shogun\nVasuki\nAnanta\nThrone\nRESERVE\nQuetzalcoatl\nRed Rider\nBlack Rider\nRESERVE\nEx-Moloch\nPazuzu\n-----\nSlime\nJack-o'-Lantern\nAgathion\nMandrake\nShiisaa\nJack Frost\nSudama\nOnmoraki\nBugs\nPixie\nPixie\nArdha\nRESERVE\nAsmodeus\nAzazel\nBaal\nTithoes\nMammon\nLeviathan\nSamael\nMaria\nVohu Manah\nCait Sith\nMishaguji\n-----\n-----\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nP5 Unused\nP5 Unused\nP5 Unused\nP6 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nIzanagi-no-Okami\nPsyche\nAthena\nRaoul\nOrpheus Telos\nOrpheus\nIzanagi-no-Okami Pic.\nPsyche Picaro\nAthena Picaro\nNeo Arsene Picaro\nOrpheus Telos Picaro\nOrpheus Picaro\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nMacabre\nAlilat\nThunderbird\nFafnir\nByakhee\nHastur\nTam Lin\nThrone\nSurt\nLoa\nChimera\nAtavaka\nCait Sith\nSiegfried\nP5 Unused\nP5 Unused"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_KeyItemNames.txt",
    "content": "BLANK\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nUnused\nUnused\nKey to Leblanc\nPaper Bag\nUnused\nUnused\nUnused\nOld Key\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nUnused\nEvil Snow Crystal\nSticky Hairball\nDouble Bookmark\nUnused\nPen Case\nMuffler\nCologne\nCamera\nGloves\nWristwatch\nHat\nEarmuffs\nHeadphones\nRESERVE\nBuchi Calculator\nDyed Handkerchief\nFashion Magazine\nPromise List\nUnlimited Service\nDog Tag\nFortune Tarot Card\nInterview Notes\nKosha Piece\nSports Watch\nMorgana's Scarf\nRecipe Notes\nDocumentary Plans\nGecko Pin\nCell Key\nDesire and Hope\nFountain Pen\nGun Controller\nBusiness Card\nLeather Gloves\nGymnastics Baton\nResearch Notebook\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nCastle Map\nTower Map\nRESERVE\nKamoshida's Medal\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nThe King Book\nThe Queen Book\nThe Slave Book\nGreen Key\nRed Key\nRandy Right Eye\nLustful Left Eye\nRight Key\nLeft Key\nKaneshiro's Journal\nTorn Page 1\nTorn Page 2\nTorn Page 3\nTorn Page 4\nTorn Page 5\nTorn Page 6\nAbyss Gem\nRejection Gem\nGuilt Gem\nSanctuary Gem\nMember's Card\nStolen Papyrus\nPyramid Sketch\nMembers Floor Map\nHigh Limit Floor Map\nBasement Blueprint\nHigh Limit Card\nSpaceport Map\nChief Clerk ID\nSection Chief ID\nChief Director ID\nMuseum Brochure 1\nMuseum Brochure 2\nBank Blueprint\nBank Keycard\nCasino Map\nSecurity Keycard\nCruise Ship Map\nMembership Card\nVIP Invitation\nVermilion Disk\nVermilion Disk\nRESERVE\nGrappling Hook\nBuilding Blueprint\nLab Blueprint\nPersonnel ID\nOld Videotape\nUnused\nThe Beefcake Book\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nUnused\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nStamp Book\nStar Lilina's New CD\nSmall Key\nJose's Star\nIntricate Bookmark\nStar Water Tray\nLetter from Royalty\nFree Darts Ticket\nRed Lust Seed\nGreen Lust Seed\nBlue Lust Seed\nRESERVE\nRed Vanity Seed\nGreen Vanity Seed\nBlue Vanity Seed\nRESERVE\nRed Gluttony Seed\nGreen Gluttony Seed\nBlue Gluttony Seed\nRESERVE\nRed Wrath Seed\nGreen Wrath Seed\nBlue Wrath Seed\nRESERVE\nRed Greed Seed\nGreen Greed Seed\nBlue Greed Seed\nRESERVE\nRed Jealousy Seed\nGreen Jealousy Seed\nBlue Jealousy Seed\nRESERVE\nRed Pride Seed\nGreen Pride Seed\nBlue Pride Seed\nRESERVE\nRed Sorrow Seed\nGreen Sorrow Seed\nBlue Sorrow Seed\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_MaterialNames.txt",
    "content": "BLANK\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nGlory Staff\nBlessed Trumpet\nVictor Laurel\nPorcelain Teacup\nSilver Cutlery\nStrange Lantern\nNude Candle Stand\nShackles\nLocked Collar\nDull Sword\nHoley Helmet\nCrushed Shield\nRusted Handcuffs\nChipped Glass\nUkiyo-e\nInk Wash Art\nHanging Scroll\nPicture Scroll\nHannya Mask\nAnimal Brush\nFine Washi\nLoose Sash\nCracked Vase\nSooty Kettle\nUnsigned Mug\nPlastic Frame\nCrappy Portrait\nBad Sculpture\nGold Coin\nStock Certificate\nAmber Stamp\nPrecious Bill\nRare Coin\nOld Coin\nLeather Case\nSafe Dial\nMoney Counter\nOffice Calculator\nInkless Pen\nUnopenable Lock\nWorn Stamp\nTattered Wallet\nJewel Mummy\nGold Uraeus\nCanopic Jar\nBastet Statue\nScarab Charm\nMummy Mask\nScratched Sword\nRusted Ankh\nTorn Papyrus\nRa Mural\nSekhmet Mural\nSarcophagus Bit\nBent Staff\nPillar Piece\nMoon Stone\nRare Metal\nSage Astrolabe\nUFO Drone\nBlade Flashlight\nRainbow Diode\nSpaceship Stick\nRobot Arm\nRadar Antenna\nBroken Telescope\nSpace Food\nPunctured PCB\nDead Solar Panel\nWarped Wheel\nLuxury Watch\nGold Earrings\nDamascene Cane\nSilver Monocle\nIvory Dice\nDealer Ring\nMagician Bowtie\nPro Dart\nCard Shuffler\nDice Shaker\nGray Cufflinks\nFaded Silk Hat\nSmoked Cigar\nIncomplete Deck\nCoral Pendant\nPearl Necklace\nEbony Box\nMarble Chessboard\nTortoise Hairpin\nCameo Brooch\nRaden Plate\nPeacock Fan\nBronze Compass\nBrass Pocket Watch\nMusic Box\nOld Kaleidoscope\nMirror Ball\nMasquerade Mask\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nHuge Gold Lump\nLarge Gold Lump\nSmall Gold Lump\nGrooved Silver\nHole Silver\nThin Silver\nGrooved Copper\nHole Copper\nThin Copper\nOnyx\nPearl\nAmethyst\nTurquoise\nOpal\nTopaz\nGarnet\nAquamarine\nRuby\nEmerald\nSapphire\nDiamond\nJade\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nPlatinum\nDead Surgical Light\nLoose Magnetic Tape\nTangled USB Cord\nMisprinted Poster\nVoice Recorder\nLaser Pointer\nVoltage Converter\nBroken Meter Panel\nDistorted Lens\nOld Projector\nMini Sound Sensor\nBroken Thermostat\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nSilent Horn\nRipped Uniform Cap\nBroken Baton\nBroken Handcuffs\nLustrous Iron Ball\nTidy Prison Uniform\nPrison Officer Badge\nHi-Fi Megaphone\nSharp Barbed Wire\nGold Emblem\nGolden Cap Badge\nSilver Arm Band\nRESERVE\nRESERVE\nRESERVE\nCopper Lump\nCopper Chain\nCopper Hand\nCopper Heart\nCopper Star\nCopper Moon\nCopper Mist\nSilver Lump\nSilver Chain\nSilver Hand\nSilver Heart\nSilver Star\nSilver Moon\nSilver Mist\nGold Lump\nGold Chain\nGold Hand\nGold Heart\nGold Star\nGold Moon\nGold Mist\nPlatinum Lump\nDiamond Lump\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_MeleeWeaponNames.txt",
    "content": "BLANK\nUnused\nRebel Knife\nKukri\nArsene's Cane\nBlizz Dagger\nAthame\nRESERVE\nSkinning Knife\nRESERVE\nStun Dagger\nKilling Scalpel\nRESERVE\nHelper Knife\nPro Skinning Knife\nRESERVE\nMega Knife\nRoyal Dagger\nRESERVE\nMachete\nBaselard\nRESERVE\nFrenzy Dagger\nPro Parrying Dagger\nRESERVE\nMisericorde\nParrying Dagger\nRESERVE\nRESERVE\nKopis\nIgniter\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nParadise Lost\nRESERVE\nNormal Rod\nHell Slugger\nJudge Mace\nHeavy Steel Pipe\nRESERVE\nBattle Hammer\nIron Pipe\nRESERVE\nHeavy Mace\nSpike Rod\nRESERVE\nBush Hammer\nDemon Pipe\nRESERVE\nBoss Bush Hammer\nGaea Presser\nRESERVE\nBig Sleep Stick\nStun Baton\nRESERVE\nDragon God Pole\nGrand Presser\nArmageddon Rod\nSuper Megido Rod\nRESERVE\nRESERVE\nRESERVE\nFervent Bat\nRuyi Jingu Bang\nRESERVE\nSleep Stick\nRESERVE\nRESERVE\nGang Star\nRESERVE\nMjolnir\nBandit Sword\nHeadhunter Ladle\nLunar Cutlass\nSonic Blade\nScimitar\nTalwar\nRESERVE\nSleeper Blade\nShamshir\nBlood Scimitar\nResting Sword\nChief's Cutlass\nRESERVE\nCosmic Sword\nDamascus Sword\nHot-Blooded Sword\nHeavy Saber\nRESERVE\nPanic Sword\nRESERVE\nBright Sword\nRESERVE\nAnswerer\nRESERVE\nRESERVE\nClaiomh Solais\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nGod Saber\nRESERVE\nRESERVE\nLeather Whip\nRESERVE\nSkin Ripper\nHeat Whip\nWarrior Whip\nDecorative Whip\nBurn Whip\nHero Whip\nRESERVE\nWhip Sword\nElectromag Whip\nRESERVE\nMirage Whip\nStrike Tail\nRESERVE\nGreat Whip Sword\nChain Whip\nRESERVE\nFear of Pain\nSpike Whip\nRESERVE\nHard Branch\nRESERVE\nRESERVE\nRESERVE\nGuilty Whip\nGoat Leather Whip\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nSnow Queen's Whip\nRESERVE\nNaraka Whip\nKatana\nGunto\nZandouto\nYuibitachi\nMurasame\nAntique Gunto\nSeishiki Sword\nKoedo Sword\nJagato\nGekkou\nRESERVE\nRESERVE\nIai Katana\nRESERVE\nOrochito\nWakizashi\nRESERVE\nMasamune\nMaster's Iai Katana\nRESERVE\nRed Demon Blade\nRESERVE\nKaito Ranma\nRESERVE\nUsumidori\nRESERVE\nRESERVE\nShikomi Kiseru\nRESERVE\nSenryou Yakusha\nRESERVE\nBrass Knuckles\nHell Knuckles\nRESERVE\nRESERVE\nMetal Duster\nOld Man's Fist\nIron Fist\nMach Punch\nRESERVE\nDemon Fist\nFlash Punch\nRESERVE\nOmega Knuckle\nBout Gloves\nSanction\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nBear Gloves\nClenched Fist\nSabazios\nRESERVE\nRESERVE\nVajra\nDisciplinary Whip\nWicked Iron Pipe\nRESERVE\nAxe\nMega Axe\nRESERVE\nCrescent Axe\nRESERVE\nIce Axe\nRESERVE\nCeltis\nKintaro Axe\nAmazon Axe\nRESERVE\nRESERVE\nRESERVE\nBig Bang Axe\nRESERVE\nRESERVE\nGilgamesh Axe\nRESERVE\nFleurs du Mal\nKnuckle Duster\nDelta Knuckle\nHeavy Grip\nLumina Saber\nHinokagutsuchi\nQuasar Saber\nHinokagutsuchi II\nFalchion\nMasquerade Ribbon\nFundo-Kusari\nDeath Axe\nRESERVE\nRESERVE\nBardiche\nDeath Contract\nBlack Kogatana\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nEnvy Chain\nProphet's Hand\nRESERVE\nVenture Saber\nRESERVE\nSilver Dagger\nSaw Saber\nRESERVE\nRESERVE\nKasumi Awaken Rapier\nKasumi Aid Rapier\nRapier\nRESERVE\nRESERVE\nSword of Sinai\nSword of Sinai II\nThe Great Thief Stick\nParadise Lost R\nImprisoned Mjolnir\nFine Ruyi Jingu Bang\nHeadhunter Ladle EX\nClaiomh Solais R\nMasquerade Ribbon R\nSnow Queen's Whip II\nDainaraka Whip\nSenryou Yakusha R\nUsumidori R\nBig Bear Gloves\nGordios\nUnparalleled Vajra\nDeath Promise\nFleurs du Mal R\nPlasma Knife\nArc Mace\nMegistos Sword\nBarog Whip\nKaketsushinto\nMeteor Knuckle\nTaiji Axe\nDread Saber\nWhite Snow Rapier\nPunish Dagger\nLast Hammer\nVertical Edge\nGrapnel\nTen Ichimonji\nChampion\nCrusader\nGuillotine Saber\nZirah Bouk\nDark Cutlass\nMut Cutlass\nBaccarat Knuckle\nVictory Beam\nDecisive Rapier\nInfini-saber\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_OutfitNames.txt",
    "content": "Starter Clothes\nShujin Uniform\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nDark Suit\nBLANK\nBLANK\nPhantom Suit\nPirate Armor\nMorgana Classic\nRed Latex Suit\nOutlaw's Attire\nMetal Rider\nMusketeer Suit\nCyber Gear\nPrince Suit\nBlack Leotard\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nGekkoukan High\nGekkoukan High\nAigis Costume\nGekkoukan High\nGekkoukan High\nGekkoukan High\nGekkoukan High\nGekkoukan High\nGekkoukan High\nGekkoukan High\nYasogami High\nYasogami High\nTeddie Costume\nYasogami High\nYasogami High\nYasogami High\nYasogami High\nYasogami High\nYasogami High\nYasogami High\nSt. Hermelin High\nSt. Hermelin High\nTrish Costume v1\nSt. Hermelin High\nSt. Hermelin High\nSt. Hermelin High\nSt. Hermelin High\nSt. Hermelin High\nSt. Hermelin High\nSt. Hermelin High\nSeven Sisters High\nSeven Sisters High\nTrish Costume v2\nSeven Sisters High\nSeven Sisters High\nSeven Sisters High\nSeven Sisters High\nSeven Sisters High\nKasugayama High\nSeven Sisters High\nVincent's Outfit\nOrlando's Fashion\nStray Sheep Suit\nCatherine's Cami\nJohnny's Coat\nKatherine's Outfit\nErica's Uniform\nToby's Overalls\nBoss's Suit\nRin's One Piece\nKarukozaka High\nKarukozaka High\nKarukozaka High\nKarukozaka High\nKarukozaka High\nKarukozaka High\nKarukozaka High\nKarukozaka High\nHazama's Uniform\nKarukozaka High\nButler Suit\nButler Suit\nMaid Uniform\nMaid Uniform\nButler Suit\nMaid Uniform\nMaid Uniform\nMaid Uniform\nButler Suit\nMaid Uniform\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nSamurai Garb\nSamurai Garb\nBurroughs Costume\nSamurai Garb\nSamurai Garb\nSamurai Garb\nSamurai Garb\nSamurai Garb\nSamurai Garb\nSamurai Garb\nYumizuki High\nYumizuki High\nGouto Costume\nOuran High\nYumizuki High\nOuran High\nOuran High\nOuran High\nImperial Uniform\nOuran High\nStarlight Outfit\nStarlight Outfit\nStarlight Outfit\nStarlight Outfit\nStarlight Outfit\nStarlight Outfit\nStarlight Outfit\nStarlight Outfit\nStarlight Outfit\nStarlight Outfit\nMoonlight Outfit\nMoonlight Outfit\nMoonlight Outfit\nMoonlight Outfit\nMoonlight Outfit\nMoonlight Outfit\nMoonlight Outfit\nMoonlight Outfit\nMoonlight Outfit\nMoonlight Outfit\nUltramarine Outfit\nUltramarine Outfit\nLong Nose Outfit\nUltramarine Outfit\nUltramarine Outfit\nUltramarine Outfit\nUltramarine Outfit\nUltramarine Outfit\nUltramarine Outfit\nUltramarine Outfit\nFeatherman Suit\nFeatherman Suit\nFeatherman Suit\nFeatherman Suit\nFeatherman Suit\nFeatherman Suit\nFeatherman Suit\nFeatherman Suit\nFeatherman Suit\nFeatherman Suit\nDemonica Head\nDemonica Head\nDemonica Head\nDemonica Head\nDemonica Head\nDemonica Head\nDemonica Head\nDemonica Head\nDemonica Head\nDemonica Head\nDemonica Suit\nDemonica Suit\nDemonica Suit\nDemonica Suit\nDemonica Suit\nDemonica Suit\nDemonica Suit\nDemonica Suit\nDemonica Suit\nDemonica Suit\nNew Cinema Outfit\nNew Cinema Outfit\nNew Cinema Outfit\nNew Cinema Outfit\nNew Cinema Outfit\nNew Cinema Outfit\nNew Cinema Outfit\nNew Cinema Outfit\nNew Cinema Outfit\nNew Cinema Outfit\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_RangedWeaponNames.txt",
    "content": "Blank - INCOMPLETE LIST\nHandgun\nShotgun\nSlingshot 1\nSubmachine Gun\nRifle 1\nAmerican Gun 1\nMasaharu Gun 1\nAura Gun 1\nGun 009\nHandgun\nGun 00B\nGun 00C\nRifle 2\nGun 014\nGun 015\nTkachev\nGovernance\nUnmarked Pistol\nTkachev II\nTkachev HP\nMakaronov\nMakaronov II\nGovernance HP\nCompact\nEliminator\nMakaronov SP\nCompact HP\nAssassin\nAssassin SP\nSand Hawk II\nModel Gun\nLevinson M31\nLevinson M31 II\nGranelli M3\nLevinson M31 HP\nGranelli M3 SP\nHeavy Shotgun\nMad Maximum\nFireworks\nMad Maximum II\nHeavy Shotgun II\nFireworks SP\nStorm Shot\nPumpkin Bomb\nBig Sleep\nMasterkey\nOrso Nero\nBig Sleep SP\nStorm Shot II\nFury SP\nBianchi SBAS II\nCalamity Gun\nOrso Nero SP\nVolley Cannon II\nSmithereens\nCalamity Gun SP\nKiraihou II\nSmithereens II\nUnmarked Shotgun\nBianchi SBAS\nNock Volley\nHellfire\nNock Volley SP\nSlingshot\nUnmarked Sling\nSlingshot SP\nSlingshot HP\nShrike\nUpsilon\nSlingbow II\nComet 3\nShrike SP\nComet 3 II\nSpirit Sling\nUpsilon II\nStronger\nNorthern Light SP\nIntercept\nStronger SP\nSpirit Sling HP\nPirate Killer\nMt. Liang SP\nDreamstone\nIntercept II\nSling Cannon\nSling Cannon II\nPirate Killer SP\nUtopia HP\nDreamstone II\nCatnap\nMount Liang\nShrike II\nNorthern Light\nShooting Star\nStar Slayer\nReplica SMG\nTommy Gun\nUnmarked SMG\nTrooper\nMP2 Prototype\nFlare SMG\nBlitz MG\nSterlidge II\nTrooper SP\nMP2 Prototype II\nCivilian MP\nHyakka Ryouran\nNo Mercy\nCivilian MP II\nWestern SMG\nNo Mercy II\nTarantula SP\nMP Victoria\nAntares\nHien Renhappou\nWestern SMG II\nMP Victoria EP\nHonoikazuchi\nH. Renhappou HP\nPhantom Killer II\nHonoikazuchi SP\nSterlidge\nBrain Shot\nTommy Gun II\nFlare SMG II\nTarantula\nBlitz MGSP\nReplica AR\nBlack Assault\nAR-M4\nHeavy Assault\nG1 Type\nAR-M4 II\nAR-M4 SP\nBlack Assault SP\nHero AR\nHeavy Assault II\nBlaze Assault\nAnnihilator\nTempest\nAR-X\nHero AR II\nCruel Carbine\nBlaze Assault SP\nAnnihilator II\nTempest II\nCruel Carbine II\nSharpshooter\nRyuraihou II\nSharpshooter II\nHizutsu HP\nKuzuryu Gouhou\nG1 Type SP\nRebel Rifle\nRebel Rifle SP\nTempest HP\nHizutsu\nRyuraihou\nHeaven's Gate\nReplica Revolver\nPeacemaker\nP Revolver\nPM Sheriff\nPM Sheriff II\nLing Xing\nP Revolver II\nPeacemaker SP\nJustness\nJustness II\nEvil Roulette\nWildborn SP\nArtillery\nEvil Roulette II\nLing Xing II\nCalvary\nArtillery II\nBaptism SP\nOrochi SP\nCavalry II\nTwilight SP\nPeacemaker HP\nMirrirmina\nWildborn\nBaptism\nOrochi\nTwilight\nJudge of the Dead\nFury\nVolley Cannon\nKiraihou\nMegido Fire\nGL Replica\nPawzooka\nUnmarked GL\nGL Mega\nGL Rep\nScorcher\nGL Replica II\nMultiple GL\nScorcher SP\nEraser\nTown Burner HP\nFlame Ocean\nEraser SP\nMultiple GL II\nMagma Bucket\nMagma Bucket SP\nFlame Ocean II\nPandemonium SP\nHaru Reserve\nHaru Reserve 2\nTown Burner\nTown Burner SP\nPandemonium\nYagrush\nH. Ryouran HP\nAntares II\nPhantom Killer\nWild Hunt\nClemont Shot\nGolden Beam\nGun 222\nGun 223\nMoebius\nMoebius II\nSirius\nSirius SP\nSlingbow\nStar Slayer HP\nUtopia\nSudarshana\nSleeper\nKarura II\nFrom Heaven\nCrimson Gun HP\nRiot Police SP\nGravity Gun\nMedusan\nSleeper SP\nR.I.Pistol\nMedusan II\nR.I.Pistol II\nGravity Gun HP\nNataraja\nRiot Police\nSand Hawk\nKarura\nCrimson Gun\nFrom Heaven II\nCocytus\nCocytus SP\nTyrant Pistol\nGun 253\nGun 254\nGun 255\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_SkillCardNames.txt",
    "content": "BLANK (Unusable) \nAgi\nAgilao\nAgidyne\nMaragi\nMaragion\nMaragidyne\nBufu\nBufula\nBufudyne\nMabufu\nMabufula\nMabufudyne\nGaru\nGarula\nGarudyne\nMagaru\nMagarula\nMagarudyne\nZio\nZionga\nZiodyne\nMazio\nMazionga\nMaziodyne\nHama\nHamaon\nMahama\nMahamaon\nKouha\nKouga\nKougaon\nMakouha\nMakouga\nMakougaon\nMudo\nMudoon\nMamudo\nMamudoon\nEiha\nEiga\nEigaon\nMaeiha\nMaeiga\nMaeigaon\nMegido\nMegidola\nMegidolaon\nFrei\nFreila\nFreidyne\nMafrei\nMafreila\nMafreidyne\nDazzler\nNocturnal Flash\nPulinpa\nTentarafoo\nEvil Touch\nEvil Smile\nMakajama\nMakajamaon\nFamine's Breath\nFamine's Scream\nDormina\nLullaby\nTaunt\nWage War\nOminous Words\nAbysmal Surge\nMarin Karin\nBrain Jack\nTrapped Rat\nSelf-destruct\nSelf-destruct\nSelf-destruct\nLife Drain\nSpirit Drain\nLife Leech\nSpirit Leech\nFoul Breath\nStagnant Air\nGhastly Wail\nInferno\nBlazing Hell\nDiamond Dust\nIce Age\nPanta Rhei\nVacuum Wave\nThunder Reign\nWild Thunder\nDivine Judgment\nSamsara\nDemonic Decree\nDie For Me!\nAtomic Flare\nCosmic Flare\nBlack Viper\nMorning Star\nPsi\nPsio\nPsiodyne\nMapsi\nMapsio\nMapsiodyne\nPsycho Force\nPsycho Blast\nLunge\nAssault Dive\nMegaton Raid\nGod's Hand\nLucky Punch\nMiracle Punch\nCleave\nGiant Slice\nBrave Blade\nSword Dance\nHassou Tobi\nAyamur\nCornered Fang\nRising Slash\nDeadly Fury\nSnap\nTriple Down\nOne-shot Kill\nRiot Gun\nVajra Blast\nVorpal Blade\nVicious Strike\nHeat Wave\nGigantomachia\nRampage\nSwift Strike\nDeathbound\nAgneyastra\nDouble Fangs\nTempest Slash\nMyriad Slashes\nSledgehammer\nSkull Cracker\nTerror Claw\nHeadbutt\nStomach Blow\nDream Needle\nHysterical Slap\nNegative Pile\nBrain Shake\nFlash Bomb\nMind Slice\nBloodbath\nMemory Blow\nInsatiable Strike\nDormin Rush\nOni-Kagura\nBad Beat\nBrain Buster\nDia\nDiarama\nDiarahan\nMedia\nMediarama\nMediarahan\nRecarm\nSamarecarm\nRecarmdra\nAmrita Drop\nAmrita Shower\nMabaisudi\nSalvation\nPatra\nEnergy Shower\nEnergy Drop\nBaisudi\nMe Patra\nTarukaja\nRakukaja\nSukukaja\nHeat Riser\nMatarukaja\nMarakukaja\nMasukukaja\nThermopylae\nTarunda\nRakunda\nSukunda\nDebilitate\nMatarunda\nMarakunda\nMasukunda\nDekunda\nDekaja\nCharge\nConcentrate\nRebellion\nRevolution\nTetrakarn\nMakarakarn\nTetraja\nTetra Break\nMakara Break\nFire Wall\nIce Wall\nElec Wall\nWind Wall\nFire Break\nIce Break\nWind Break\nElec Break\nBLANK\nBLANK\nNuke Wall\nPsy Wall\nNuke Break\nPsy Break\nCounter\nCounterstrike\nHigh Counter\nEndure\nEnduring Soul\nDodge Bless\nDodge Curse\nSurvival Trick\nDodge Fire\nEvade Fire\nDodge Ice\nEvade Ice\nDodge Wind\nEvade Wind\nDodge Elec\nEvade Elec\nDodge Phys\nEvade Phys\nFire Boost\nFire Amp\nIce Boost\nIce Amp\nWind Boost\nWind Amp\nElec Boost\nElec Amp\nAngelic Grace\nDivine Grace\nRegenerate 1\nRegenerate 2\nRegenerate 3\nInvigorate 1\nInvigorate 2\nInvigorate 3\nAttack Master\nAuto-Mataru\nDefense Master\nAuto-Maraku\nSpeed Master\nAuto-Masuku\nFast Heal\nInsta-Heal\nArms Master\nSpell Master\nSharp Student\nApt Pupil\nAli Dance\nFirm Stance\nLife Aid\nVictory Cry\nGrowth 1\nGrowth 2\nGrowth 3\nUnshaken Will\nEvade Bless\nEvade Curse\nBLANK\nResist Fire\nNull Fire\nRepel Fire\nDrain Fire\nResist Ice\nNull Ice\nRepel Ice\nDrain Ice\nResist Wind\nNull Wind\nRepel Wind\nDrain Wind\nResist Elec\nNull Elec\nRepel Elec\nDrain Elec\nResist Bless\nNull Bless\nRepel Bless\nDrain Bless\nResist Curse\nNull Curse\nRepel Curse\nDrain Curse\nResist Phys\nNull Phys\nRepel Phys\nDrain Phys\nAilment Boost\nHama Boost\nMudo Boost\nDizzy Boost\nConfuse Boost\nFear Boost\nForget Boost\nSleep Boost\nRage Boost\nDespair Boost\nBLANK\nBrainwash Boost\nResist Dizzy\nResist Confuse\nResist Fear\nResist Forget\nResist Sleep\nResist Rage\nResist Despair\nBLANK\nResist Brainwash\nNull Dizzy\nNull Confuse\nNull Fear\nNull Forget\nNull Sleep\nNull Rage\nNull Despair\nNull Brainwash\nBurn Boost\nFreeze Boost\nShock Boost\nFortified Moxy\nAdverse Resolve\nLast Stand\nHeat Up\nBLANK\nTouch n' Go\nClimate Decorum\nAmbient Aid\nGun Boost\nGun Amp\nTrigger Happy\nResist Nuke\nNull Nuke\nRepel Nuke\nDrain Nuke\nResist Psy\nNull Psy\nRepel Psy\nDrain Psy\nNuke Boost\nNuke Amp\nPsy Boost\nPsy Amp\nDodge Nuke\nEvade Nuke\nDodge Psy\nEvade Psy\nBless Boost\nBless Amp\nCurse Boost\nCurse Amp\nMagic Ability\nFortify Spirit\nAlmighty Boost\nAlmighty Amp\nZenith Defense\nSoul Chain\nBLANK\nKill Rush\nGatling Blow\nDouble Shot\nPower Slash\nDeath Scythe\nBLANK\nBLANK\nTaunting Aura\nConcealment\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBlank Card\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nCrit Atk Up 1\nCrit Atk Up 2\nCrit Atk Up 3\nCrit Atk Up 4\nCrit Atk Up 솂\nBLANK\nBLANK\nBLANK\nSP Recovery 1\nSP Recovery 2\nSP Recovery 3\nSP Recovery 4\nSP Recovery 솂\nBLANK\nBLANK\nBLANK\nAilment Up 1\nAilment Up 2\nAilment Up 3\nAilment Up 4\nAilment Up 솂\nBLANK\nBLANK\nBLANK\nMagic Atk Cost 1\nMagic Atk Cost 2\nMagic Atk Cost 3\nMagic Atk Cost 4\nMagic Atk Cost 솂\nBLANK\nBLANK\nBLANK\nPhys HP Cost 1\nPhys HP Cost 2\nPhys HP Cost 3\nPhys HP Cost 4\nPhys HP Cost 솂\nBLANK\nBLANK\nBLANK\nSingle-Target Up 1\nSingle-Target Up 2\nSingle-Target Up 3\nSingle-Target Up 4\nSingle-Target Up 솂\nBLANK\nBLANK\nBLANK\nArmy Might 1\nMult-Target Up 2\nMult-Target Up 3\nMult-Target Up 4\nMult-Target Up 솂\nBLANK\nBLANK\nBLANK\nPhys Up 1\nPhys Up 2\nPhys Up 3\nPhys Up 4\nPhys Up 솂\nBLANK\nBLANK\nBLANK\nMagic Up 1\nMagic Up 2\nMagic Up 3\nMagic Up 4\nMagic Up 솂\nBLANK\nBLANK\nBLANK\nBaton Pass Up 1\nBaton Pass Up 2\nBaton Pass Up 3\nBaton Pass Up 4\nBaton Pass Up 솂\nBLANK\nBLANK\nBLANK\nAmbush Up 1\nAmbush Up 2\nAmbush Up 3\nAmbush Up 4\nAmbush Up 솂\nBLANK\nBLANK\nBLANK\n1 More Up 1\n1 More Up 2\n1 More Up 3\n1 More Up 4\n1 More Up 솂\nBLANK\nBLANK\nBLANK\nAilment Multiplier 1\nAilment Multiplier 2\nAilment Multiplier 3\nAilment Multiplier 4\nAilment Multiplier 솂\nBLANK\nBLANK\nBLANK\nPhys Up (Low)\nPhys Up (Mid)\nPhys Up (High)\nHeal Cost (Low)\nHeal Cost (Mid)\nHeal Cost (High)\nMagic Up (Low)\nMagic Up (Mid)\nMagic Up (High)\nPhys Cost (Low)\nPhys Cost (Mid)\nPhys Cost (High)\nMagic Cost (Low)\nMagic Cost (Mid)\nMagic Cost (High)\nTechnical Up (Low)\nTechnical Up (Mid)\nTechnical Up (High)\nAttack Cost (Low)\nAttack Cost (Mid)\nAttack Cost (High)\nCritical Up (Low)\nCritical Up (Mid)\nCritical Up (High)\nBackup\nSure Escape\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_SkillNames.txt",
    "content": "Attack\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nAgi\nAgilao\nAgidyne\nMaragi\nMaragion\nMaragidyne\nAgi\nMaragi\nFire Ball\nRaging Flames\nBufu\nBufula\nBufudyne\nMabufu\nMabufula\nMabufudyne\nBufu\nMabufu\nSnow Ball\nMegidolaon\nGaru\nGarula\nGarudyne\nMagaru\nMagarula\nMagarudyne\nGaru\nGale Ball\nBless Ball\nCurse Ball\nZio\nZionga\nZiodyne\nMazio\nMazionga\nMaziodyne\nZio\nMazio\nVolt Ball\nMake it Rain\nHama\nHamaon\nMahama\nMahamaon\nKouha\nKouga\nKougaon\nMakouha\nMakouga\nMakougaon\nMudo\nMudoon\nMamudo\nMamudoon\nEiha\nEiga\nEigaon\nMaeiha\nMaeiga\nMaeigaon\nMegido\nMegidola\nMegidolaon\nFrei\nFreila\nFreidyne\nMafrei\nMafreila\nMafreidyne\nNuke Ball\nDazzler\nNocturnal Flash\nPulinpa\nTentarafoo\nEvil Touch\nEvil Smile\nMakajama\nMakajamaon\nFamine's Breath\nFamine's Scream\nDormina\nLullaby\nTaunt\nWage War\nOminous Words\nAbysmal Surge\nMarin Karin\nBrain Jack\nTrapped Rat\nPsy Ball\nSelf-destruct\nSelf-destruct\nSelf-destruct\nLife Drain\nSpirit Drain\nLife Leech\nSpirit Leech\nSpirit Drain\nNOT USED\nBLANK\nFoul Breath\nStagnant Air\nReverse Rub\nGhastly Wail\nNOT USED\nDrain\nMegidola\nLaunch\nSpecial Fireworks\nDrift\nInferno\nBlazing Hell\nLow Burn\nMed Burn\nHigh Burn\nLow Freeze\nMed Freeze\nHigh Freeze\nLow Shock\nMed Shock\nDiamond Dust\nIce Age\nHigh Shock\nLow Dizzy\nMed Dizzy\nHigh Dizzy\nLow Confuse\nMed Confuse\nHigh Confuse\nLow Fear\nPanta Rhei\nVacuum Wave\nMed Fear\nHigh Fear\nLow Forget\nMed Forget\nHigh Forget\nLow Brainwash\nMed Brainwash\nHigh Brainwash\nThunder Reign\nWild Thunder\nLow Sleep\nMed Sleep\nHigh Sleep\nLow Rage\nMed Rage\nHigh Rage\nLow Despair\nMed Despair\nDivine Judgment\nSamsara\nHigh Despair\nLow All Ail\nMed All Ail\nHigh All Ail\nAdam Skill 1\nRevitalize Soul\nGrand Palm\nFull Force\nDemonic Decree\nDie For Me!\nSupport Plus 3\nSupport Plus 2\nSupport Plus 1\nSupport Rate Up\nAtomic Flare\nCosmic Flare\nMindfulness\nWakefulness\nBlack Viper\nMorning Star\nAbyssal Eye\nChampion's Cup\nBleeding Dry Brush\nVault Guardian\nWings of Wisdom\nPresident's Insight\nGambler's Foresight\nTyrant's Will\nPsi\nPsio\nPsiodyne\nMapsi\nMapsio\nMapsiodyne\nAttack Position\nPsycho Force\nPsycho Blast\nUniversal Power\nLunge\nAssault Dive\nMegaton Raid\nGod's Hand\nLunge\nLucky Punch\nMiracle Punch\nKill Rush\nGatling Blow\nPiercing Strike\nCleave\nGiant Slice\nBrave Blade\nSword Dance\nHoly Benevolence\nHassou Tobi\nAyamur\nDeath Scythe\nUNUSED\nNOT USED\nCornered Fang\nRising Slash\nDeadly Fury\nNuclear Crush\nSnap\nTriple Down\nOne-shot Kill\nRiot Gun\nDouble Shot\nOrigin Light\nVajra Blast\nVorpal Blade\nNOT USED\nNOT USED\nNOT USED\nVicious Strike\nHeat Wave\nGigantomachia\nSwirling Psychokinesis\nTyrant's Purge\nMass Ball\nRampage\nSwift Strike\nDeathbound\nAgneyastra\nNOT USED\nRegeneration\nRising Slash\nDeadly Fury\nTyrant's Judgement\nDouble Fangs\nPower Slash\nShapeless Guard\nTempest Slash\nMyriad Slashes\nAmplify Force\nAmplify Magic\nRaining Seeds\nEnergy Stream\nFlow\nSledgehammer\nSkull Cracker\nTerror Claw\nHeadbutt\nStomach Blow\nDream Needle\nHysterical Slap\nNegative Pile\nBrain Shake\nAttack\nFlash Bomb\nMind Slice\nBloodbath\nMemory Blow\nInsatiable Strike\nDormin Rush\nOni-Kagura\nBad Beat\nBrain Buster\nLaevateinn\nHandgun\nShotgun\nSlingshot\nMachine Gun\nAssault Rifle\nRevolver\nGrenade Launcher\nLaser Gun\nAntique Rifle\nTyrant Stance\nFighting Spirit\nMiracle Rush\nCheckmate\nHyakka Ryouran\nHigh Energy\nUltimate Support\nLife Wall\nRebellion Blade\nMasquerade\nGuiding Tendril\nDia\nDiarama\nDiarahan\nBrave Step\nMaruki Punch\nMedia\nMediarama\nMediarahan\nBrutal Impact\nCursed Strike\nRecarm\nSamarecarm\nRecarmdra\nSleuthing Instinct\nSleuthing Mastery\nAmrita Drop\nAmrita Shower\nHoly Strike\nSalvation\nNuclear Strike\nPsychokinesis Strike\nTaunting Aura\nStorm Punishment\nConcealment\nLightning Punishment\nPatra\nPunishing Hail\nEnergy Shower\nEnergy Drop\nBaisudi\nMe Patra\nMabaisudi\nCharge Ball\nConcentrated Ball\nInferno Punishment\nTarukaja\nRakukaja\nSukukaja\nHeat Riser\nGunfire Punishment\nMatarukaja\nMarakukaja\nMasukukaja\nThermopylae\nGuillotine Punishment\nTarunda\nRakunda\nSukunda\nDebilitate\nQuadruple Summon\nMatarunda\nMarakunda\nMasukunda\nAnalysis\nAnalysis\nDekunda\nDekaja\nExplosion!\nExplosion!\nSphinx Swipe\nCharge\nConcentrate\nNose Dive\nKill Reward Up\nGuard Reward Up\nRebellion\nRevolution\nMake it Rain\nSpecial Guards\nFake Artist's Grace\nTetrakarn\nMakarakarn\nTetraja\nTaste of Wrath\nTrue Fake\nTetra Break\nMakara Break\nKillshot of Love\nNOT USED\nNOT USED\nFire Wall\nIce Wall\nElec Wall\nWind Wall\nBLANK\nFire Break\nIce Break\nWind Break\nElec Break\nBLANK\nTrafuri\nTraesto\nActive Barrier\nNuke Wall\nPsy Wall\nNuke Break\nPsy Break\nBLANK\nBLANK\nFlow\nAll-out Lv 1\nAll-out Lv 2\nAll-out Lv 3\nEmergency Escape\nAttack\nDown Shot\nSummon\nCall for Backup\nOutlaw Attack\nBarrage\nFollow Crush\nFollow Claw\nFollow Whip\nFollow Blade\nFollow Knuckle\nFollow Axe\nFollow Saber\nDispose Item\nHeal Enemy\nDeath (Despair)\nMember 1 Pursue Up\nMember 2 Pursue Up\nMember 3 Pursue Up\nMember 4 Pursue Up\nMember 5 Pursue Up\nMember 6 Pursue Up\nMember 7 Pursue Up\nPower Up Enemy\nPower Up Enemy\nPower Up Enemy\nSteal Info\nSup Matarukaja\nSup Marakukaja\nSup Masukukaja\nSup All Kaja\nSup Charge\nSup HP +30%\nSup SP +10%\nSup Escape Route\nSup Third Eye\nSubrecover HP\nSubrecover SP\nAnalysis\nDeep Analysis\nFull Analysis\nAll-Out Attack\nDust Flurry\nTongue Whip\nWhip Strike\nLustful Slurp\nLibido Boost\nGolden Knife\nLick\nGold Medal Spike\nVolleyball Assault\nMaelstrom\nFlame Dance\nSilent Snowscape\nThunderclap\nMaeiga\nHunger All\nOcular Vulcan\nMissile Party\nFear Gas\nSuper VIP Form\nMarch of the Piggy\nSphinx Swipe\nWing Blast\nRapid Ascent\nSphinx Dive\nDreadful Scream\nBite\nRestore\nThe Artist's Grace\nWork Order\nSacrifice Order\nSelfless Devotion\nPenalty\nCoin Attack\nSevering Slash\nGatling Gun\nBerserker Dance\nRoulette: HP\nRoulette: SP\nRoulette: Money\nRoulette: Support 1\nRoulette: Support 2\nRoulette: Support 3\nBeast King's Wrath\nHunting Stance\nArm of Destruction\nGryphon's Breath\nRoyal Wing Beam\nCannon Fire\nCannon Barrage\nUnholy Convergence\nPyramid Blast\nTyrant's Fist\nTyrant's Glare\nTyrant's Wave\nFig Seed\nMedicine\nOintment\nAntibiotic Gel\nLife Stone\nBead\nValue Medicine\nMedical Kit\nMaka Leaf\nBead Chain\nSoul Drop\nSnuff Soul\nChewing Soul\nSoul Food\nRevival Bead\nBalm of Life\nRoyal Jelly\nOrganic Herb\nDisclose\nTranquilizer\nKopi Luwak\nGoho-M\nVanish Ball\nSoma\nAmrita Soda\nHiranya\nMuscle Drink\nOdd Morsel\nRancid Gravy\nPlume of Dusk\nMagic Mirror\nPhysical Mirror\nUniverse Ring\nSleipnir\nObsidian Mirror\nPurifying Water\nPurifying Salt\nFirecracker\nSan-zun Tama\nIce Cube\nDry Ice\nPinwheel\nYashichi\nBall Lightning\nTesla Coil\nSmart Bomb\nSegami Rice\nCurse Paper\nFlame Magatama\nWind Magatama\nFreeze Magatama\nBolt Magatama\nHomunculus\nRemoval Potion\nKouga Ball\nMakouha Ball\nEiga Ball\nMaeiga Ball\nPsio Ball\nMapsi Ball\nFreila Ball\nMafrei Ball\nNuke Magatama\nPsy Magatama\nBless Magatama\nCurse Magatama\nCooking\nSnack\nJuice 1\nJuice 2\nJuice 3\nJuicer Bar 1\nJuicer Bar 2\nJuicer Bar 3\nJuicer Bar 4\nHealth Drink 1\nHealth Drink 2\nHealth Drink 3\nCanned Juice 1\nCanned Juice 2\n\nCanned Juice 3\nCanned Juice 4\nMilitary  Food 1\nMilitary Food 2\nMilitary Food 3\nDrug Store 1\nDrug Store 2\nDrug Store 3\nDrug Store 4\nDrug Store 5\nDrug Store 6\nDrug Store 7\nDrug Store 8\nDrug Store 9\nDrug Store 10\nDrug Store 11\nDrug Store 12\nSpecial Coffee 1\nSpecial Coffee 2\nDouble Fangs\nTwins Down Attack\nCaro Rod\nCaro Attack\nMegidolaon\nRays of Control\nRays of Control\nRays of Control\nRays of Control\nArrow of Light\nDiffraction Arrow\nLight Edge\nGathering Light\nEternal Light\nHoly Change\nDistortion Wave\nTough Law\nFrail Law\nNew Creation\nDistortion Surge\nArrow of Light\nManifest Sword\nManifest Gun\nManifest Bell\nSword of Judgment\nCapital Punishment\nManifest Book\nDistorted Lust\nGospel\nDistorted Wrath\nDistorted Vanity\nSong of Salvation\nWrath of God\nDistorted Gluttony\nDistorted Envy\nSong of Placation\nDivine Apex\nRays of Control\nDistorted Avarice\nWill of the People\nRays of Control\nMoral Support\nActive Support\nMental Hack\nEmergency Shift\nFinal Guard\nPosition Hack\nFitness Talk\nTreasure Skimmer\nSubrecover HP EX\nSubrecover SP EX\nBig Bang Treat\nExplosion!\nExplosion!\nExplosion!\nBig Bang Order\nRoulette Time\nTrip-Upper\nShot of Lust\nDown Shot 2\nDown Shot 3\nDown Shot 4\nElectro Attack\nSinful Shell\nFollow Blade\nSummon\nMadara-Megido\nCurry Raku\nEnemy Benefit\nDiarahan\nCurry Suku\nDecoy Ball\nSuper Decoy Ball\nMetabolic Wave\nLaevateinn\nDesperation\nCall of Chaos\nBig Bang Challenge\nGrail Light 2\nMegidola\nRage Transmission\nHundred Slaps\nDistorted Pride\nDivine Punishment\nWill of the People\nWind Cutter\nShoot Up\nExecutive Punch\nMegidolaon\nVorpal Blade\nMegidolaon\nBig Bang Burger\nEarth Burger\nMars Burger\nMoon Burger\nSaturn Burger\nJustine Attack\nCaroline Attack\nCurry Makara\nCurry Tetra\nCurry Endure\nCurry Charge\nCurry Concentrate\nCurry Heat Riser\nMagic Wall\nCadenza\nCross Slash\nDoor of Hades\nMagatsu Mandala\nShining Arrows\nBeast Weaver\nTitanomachia\nAbyssal Wings\nOratario\nMyriad Truths\nNeo Cadenza\nAkashic Arts\nPhantom Show\nConfuse Ball\nBaptism Ball\nExorcism Ball\nMegido\nMegidola\nMegidolaon\nSlam\nMegaton Raid\nOne-shot Kill\nInferno\nDiamond Dust\nEternal Radiance\nTyrant Chaos\nNew Curry 1\nNew Curry 2\nReviv-All\nReviv-All Z\nDark Akechi誂Ꚁor pursuing\nDark Akechi誂Ꚁor Gun pursuing\nWild Talk\nBaton Pass\nPunk Talk\nPickpocket\nHarisen Recovery\nProtect\nGirl Talk\nCrocodile Tears\nSexy Technique\nSmooth Talk\nArt Talk\nDiplomacy\nFundraising\nManipulation\nMind Control\nCharismatic Speech\nBlack Belt Talk\nKoma Sabaki\nKakoi Kuzushi\nTouryou\nTogo System\nBullet Hail\nWarning Shot\nCeleb Talk\nKitty Talk\nMarin Karin\nWomanizing\nIndignant Revenge\nHealing Power\nHealing Power\nTaunt\nIridescent Change\nBrave Blade\nAssault Dive\nTerror Claw\nBufudyne\nPsiodyne\nMazionga\nMaziodyne\nMaeiga\nMaeigaon\nAdam Skill 5\nAdam Skill 6\nVorpal Blade\nMona/Ryuji Unison Attack\nMona/Ann Unison Attack\nMona/Haru Unison Attack\nYusuke/Ann Unison Attack\nRyuji/Yusuke Unison Attack\nRyuji/Makoto Unison Attack\nProtag/Akechi Unison Attack\nMakoto/Haru Unison Attack\nUNUSED: Akechi Unison Attack\nProtag/Kasumi Unison Attack\nMona/Ryuji Unison Attack\nMona/Ann Unison Attack\n\nMona/Haru Unison Attack\nYusuke/Ann Unison Attack\nRyuji/Yusuke Unison Attack\nRyuji/Makoto Unison Attack\n\nProtag/Akechi Unison Attack\nMakoto/Haru Unison Attack\nUnused: Akechi Unison Attack\nProtag/Kasumi Unison Attack\nCounter\nCounterstrike\nHigh Counter\nResist Burn\nNull Burn\nEndure\nEnduring Soul\nResist Freeze\nNull Freeze\nSurvival Trick\nDodge Fire\nEvade Fire\nDodge Ice\nEvade Ice\nDodge Wind\nEvade Wind\nDodge Elec\nEvade Elec\nDodge Phys\nEvade Phys\nFire Boost\nFire Amp\nIce Boost\nIce Amp\nWind Boost\nWind Amp\nElec Boost\nElec Amp\nAngelic Grace\nDivine Grace\nRegenerate 1\nRegenerate 2\nRegenerate 3\nDodge Bless\nDodge Curse\nInvigorate 1\nInvigorate 2\nInvigorate 3\nEvade Bless\nEvade Curse\nAttack Master\nAuto-Mataru\nResist Shock\nDefense Master\nAuto-Maraku\nNull Shock\nSpeed Master\nAuto-Masuku\nResist Hunger\nNull Hunger\nFast Heal\nInsta-Heal\nArms Master\nSpell Master\nRage Atk Up\nSharp Student\nApt Pupil\nAli Dance\nFirm Stance\n+50% EXP\nLife Aid\nVictory Cry\nGrowth 1\nGrowth 2\nGrowth 3\nUnshaken Will\nNull Bless Insta-kill\nBaton Pass\nSoul Touch Unused\nKakoi Kuzushi\nResist Fire\nNull Fire\nRepel Fire\nDrain Fire\nNull Curse Insta-kill\nResist Ice\nNull Ice\nRepel Ice\nDrain Ice\n+15% EXP\nResist Wind\nNull Wind\nRepel Wind\nDrain Wind\nAll-Out Attack Boost\nResist Elec\nNull Elec\nRepel Elec\nDrain Elec\nMoney Boost\nResist Bless\nNull Bless\nRepel Bless\nDrain Bless\nHide\nResist Curse\nNull Curse\nRepel Curse\nDrain Curse\nLife Boost\nResist Phys\nNull Phys\nRepel Phys\nDrain Phys\nNull Bless/Curse\nAilment Boost\nHama Boost\nMudo Boost\nGun Accuracy +5%\nSamurai Spirit\nDizzy Boost\nConfuse Boost\nFear Boost\nForget Boost\nSleep Boost\nRage Boost\nDespair Boost\nKuzunoha Emblem\nBrainwash Boost\nCritical Rate Up (High)\nResist Dizzy\nResist Confuse\nResist Fear\nResist Forget\nResist Sleep\nResist Rage\nResist Despair\nFusion Accident Up\nResist Brainwash\nTyrant's Mind\nNull Dizzy\nNull Confuse\nNull Fear\nNull Forget\nNull Sleep\nNull Rage\nNull Despair\nHoly Whisper\nNull Brainwash\nHoly Embrace\nBurn Boost\nFreeze Boost\nShock Boost\nBLANK\nFortified Moxy\nAdverse Resolve\nLast Stand\nHeat Up\nBLANK\nTouch n' Go\nClimate Decorum\nAmbient Aid\nRESERVE\nGun Boost\nGun Amp\nTrigger Happy\nResist Nuke\nNull Nuke\nRepel Nuke\nDrain Nuke\nRESERVE\nResist Psy\nNull Psy\nRepel Psy\nDrain Psy\nRESERVE\nNuke Boost\nNuke Amp\nRESERVE\nPsy Boost\nPsy Amp\nSexy Technique\nDodge Nuke\nEvade Nuke\nDetox\nDodge Psy\nEvade Psy\nDetox\nBless Boost\nBless Amp\nRESERVE\nCurse Boost\nCurse Amp\nNot Found by Enemy\nMagic Ability\nFortify Spirit\nAlmighty Boost\nAlmighty Amp\nZenith Defense\nSoul Chain\nVanity Copy\nGluttonous Snuff\nSloth Defense\nBrush of Vanity\nLife Rise\nMana Rise\nSoul Touch\nVictory Cry\nTrait DLC for Bitedown\nBLANK\nAilment Effect Up\nAilment Effect Up+\nInstakill SP Heal Low\nInstakill SP Heal Mid\nInstakill SP Heal High\nTechnical Effect Up\nTechnical Effect Up+\nLow HP Attack Up\nLow HP Attack Up+\nWEAK Hit Effect Up\nWEAK Hit Effect Up+\nNull Insta-kill\nHP Cost Down 10%\nHP Cost Down 25%\nSP Cost Down 10%\nSP Cost Down 25%\nHeal Magic Up 10%\nHeal Magic Up 25%\nChance of 0 HP Cost\nChance of 0 SP Cost\nTarget ATK Up\nTarget ATK Up+\nAll Crits, No Evasion\nHeal Cost Down 25%\nHeal Cost Down 10%\nATK Up, Aim Down\nAilment Success Up\nBLANK\n4-Affinity Boost\n3-Affinity Light Boost\nSupport Turn Extend\nInsta-kill Up\nInsta-kill Up+\nLife Bonus\nLife Gain\nLife Surge\nMana Bonus\nMana Gain\nMana Surge\nCritical Effect Up\nCritical Effect Up+\nHit Damage Doubled\nAll Target ATK Up\nAll Target ATK Up+\nAuto Barrier\nBackup Support\nAbsolute Escape\nShield of Loyalty\nAll Amp\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Royal_Traits.txt",
    "content": "RESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRelentless\nRESERVE\nRESERVE\nSavior Bloodline\nGrace of Mother\nRESERVE\nRESERVE\nRESERVE\nRelief Bloodline\nAve Maria\nRESERVE\nFoul Stench\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nStatic Electricity\nGhost Nest\nCold-Blooded\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nAllure of Wisdom\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nFrenzied Bull\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nIntense Focus\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nMighty Gaze\nRESERVE\nRESERVE\nStriking Weight\nUndying Fury\nRESERVE\nRESERVE\nRESERVE\nRetaliating Body\nInviolable Beauty\nRESERVE\nPagan Allure\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRare Antibody\nImmunity\nRESERVE\nSkillful Combo\nLinked Bloodline\nRESERVE\nRESERVE\nRESERVE\nFoul Odor\nThermal Conduct\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nPinch Anchor\nVitality of the Tree\nGloomy Child\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nSkillful Technique\nUniversal Law\nRESERVE\nAilment Hunter\nHollow Jester\nRESERVE\nRESERVE\nRESERVE\nDeathly Illness\nOmen\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nExplosive Scheme\nRESERVE\nInfinite Scheme\nRaging Temper\nEccentric Temper\nRESERVE\nProud Presence\nMajestic Presence\nRESERVE\nMastery of Magic\nPinnacle of Magic\nRESERVE\nScoundrel Eyes\nUnparalleled Eyes\nRESERVE\nGaia Pact\nGaia Blessing\nRESERVE\nIcy Glare\nCool Customer\nRESERVE\nTactical Spirit\nIngenious Spirit\nFlawless Spirit\nVeil of Midnight\nVeil of Sunrise\nRESERVE\nHeated Bloodline\nDrunken Passion\nFrigid Bloodline\nCocytus\nElectric Bloodline\nBargain Bolts\nWind Bloodline\nVahana's Wings\nPsychic Bloodline\nChi You's Blessing\nAtomic Bloodline\nAtomic Hellscape\nBlessed Bloodline\nMartyr's Gift\nCursed Bloodline\nMother's Lament\nRESERVE\nGluttonmouth\nDemon's Bite\nMouth of Savoring\nNaranari\nHallowed Spirit\nPotent Hypnosis\nWealth of Lotus\nInternal Hypnosis\nPositive Thoughts\nDraining Mouth\nRESERVE\nTag Team\nIron Heart\nCrisis Control\nBloodstained Eyes\nWill of the Sword\nRESERVE\nCircle of Sadness\nBolstering Force\nGod Maker\nHazy Presence\nCountry Maker\nGrace of the Olive\nJust Die\nBlessed Spirit\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nUltimate Vessel\nUltimate Vessel\nUltimate Vessel\nUltimate Vessel\nUltimate Vessel\nUltimate Vessel\nUltimate Vessel\nUltimate Vessel\nUltimate Vessel\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_AccessoryNames.txt",
    "content": "Blank\nHip Glasses \nSuspenders\nFanny Pack\nHairpin\nSilver Key Ring\nBlack Tights\nDotted Tights\nHeadphones\nBlack Necktie\nWorn Rosary\nBreath Sash\nStamina Sash\nVitality Sash\nSpirit Sash\nVigor Sash\nGrit Sash\nChakra Choker\nMind Choker\nSoul Choker\nAura Choker\nSpirit Choker\nDivine Choker\nRed Band\nBlue Band\nGreen Band\nYellow Band\nFire Bangle\nIce Bangle\nWind Bangle\nElec Bangle\nStar Bracelet\nCircular Band\nWhite Band\nBlack Band\nNuclear Band\nKinetic Bangle\nHoly Bangle\nGrudge Bangle\nAnger Bandana\nSecret Hood\nStone Cap\nAir Mino\nExtra Mag 1\nExtra Mag 2\nExtra Mag 3\nWood Clappers\nHot Water Pouch\nRubber Gloves\nShield Goggles\nCalming Mask\nWild Clogs\nNotebook\nHunger Gem\nSleep Gem\nRage Gem\nDespair Gem\nTowser's Belt\nBrain Guard\nBurn Charm\nFreeze Charm\nShock Charm\nDizzy Charm\nConfuse Charm\nFear Charm\nForget Charm\nHunger Charm\nSleep Charm\nRage Charm\nDespair Charm\nBrainwash Charm\nZero-Day Pass\nRevenge Mirror\nReprisal Mirror\nRetribution Mirror\nPower Anklet\nMuscle Anklet\nSoldier Anklet\nBerserk Anklet\nHercules Anklet\nAtlas Anklet\nMagic Amulet\nWitch Amulet\nDruid Amulet\nRune Amulet\nWizard Amulet\nShaman Amulet\nStrength Belt\nProtect Belt\nFortress Belt\nArmada Belt\nGigas Belt\nGaia Belt\nArmy Socks\nWing Socks\nPurebred Socks\nCheetah Socks\nSonic Socks\nSkanda Socks\nLucky Charm\nZodiac Charm\nFeng Shui Charm\nBagua Charm\nGuard Charm\nTyche Charm\nKnight Crest\nHero Crest\nGirard Medal\nOlivier Medal\nRoland Medal\nCaesar Medal\nRakshasa Belt\nVajra Belt\nSkanda Belt\nSpirit Belt\nWillful Belt\nHachiman Belt\nCrimson Ring\nIgnis Ring\nAtar Ring\nIce Ring\nAurora Ring\nPoli'ahu Ring\nElec Ring\nBlitz Ring\nIndra Ring\nWind Ring\nGale Ring\nKukulkan Ring\nAtom Ring\nShelter Ring\nAegis Ring\nPsychic Ring\nParapsy Ring\nAkashic Ring\nShoten Ring\nHeaven Ring\nNirvana Ring\nMidnight Ring\nFallen Ring\nDruj Ring\nResist Ring\nDispel Ring\nBanish Ring\nBold Eyepatch\nHero Eyepatch\nEpic Eyepatch\nFire Mask\nFlame Cape\nBlaze Cape\nIce Mask\nHail Cape\nBlizzard Cape\nElec Mask\nThunder Cape\nBlizzard Cape\nWind Mask\nGale Cape\nTempest Cape\nHeat Mask\nHeatwave Cape\nNuclear Cape\nPsychic Mask\nTK Cape\nAbhijna Cape\nHamaya Mask\nRoyal Cape\nHoly Cape\nProtect Mask\nMystic Mask\nGrudge Mask\nMagic Rosary\nWizard Rosary\nMakyou Rosary\nExpedite Ring\nPetra Genetrix\nKhamrai Tao\nHua Khon\nDaffodils\nLegion's Jail\nThunder Band\nShackles\nVayu's Wrath\nRegent\nQueen's Necklace\nStone of Scone\nKoh-i-Noor\nOrlov\nEmperor's Amulet\nHope Diamond\nCrystal Skull\n0x0BF\nMiyuki's Earring\nHarumi's Earring\nMarronnier's Earring\nThief Mask\nBlack Rock\n0x0C5\nVulcan Band\nNeptune Band\nAquilo Band\nJupiter Band\nJanus Band\nMinerva Band\nVenus Band\nPluto Band\nHades Harp\nMenehune Dolls\nHawaiian Ring\nForneus Badge\nTrain Badge\nPI Badge\nPunch Badge\nBetting Badge\nGolf Badge\nTough Belt\nDandy Mirror\nLeblanc Charm\nBoss Undies\n2nd Mate Badge\n1st Mate Badge\nCaptain Badge\nRegen Patch 1\nRegen Patch 2\nRegen Patch 3\nSP Adhesive 1\nSP Adhesive 2\nSP Adhesive 3\nHot Compress\nGrudge Gauze\nThought Gauze\nSavage Band\nOmnipotent Orb\nDivine Pillar\nDarkness Ring\nWhite Headband\nAttachment Pearl\nBlack Headband\nRed Yarn Ball\nThunder Horns\nBlack Moon\nHoly Stone\nTeam Glasses\nSEES Armband\nSevens Emblem\nHermelin Badge\nArm PC\nMidnight Bandana\nEvoker\nHonu Charm\nTiki Keychain\nBeast Headphones\nBabel Headphones\nLambs' Pillow\nGauntlet\nKuzunoha Tubes\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_ArmorNames.txt",
    "content": "Blank\nThief Clothes\nDark Undershirt\nPrint T-Shirt\nNeckerchief\nBaseball Jacket\nDress Shirt\nTurtleneck\nPink Top\nLoose Cutsew\nFormal Shirt\n0x00B\n0x00C\nGold Breastplate\nGrimy Gear\nSoiled Armor\nShoulder Pads\nBattle Camisole\nPadded Shirt\nSilk Scarf\nPauldrons\nOld Camisole\nAncient Shirt\nWell-worn Scarf\nBurntech\nMagic Camisole\nLynx Camo Vest\nCat Sweater\nOld Blouse\nRetro Camisole\nWorn Chainmail\nGuard Bandana\nSurvival Vest\nRobust Apron\nChain Vest\nBreeze Scarf\nOkamoto Vest\nCourbet Apron\nElegant Shirt\nFlowing Scarf\nCosmic Undies\nLady's Dress\nAustere Haori\nE-Collar\nGaudy Undies\nScream Dress\nPollock Vest\nRenoir Scarf\nAcrylic-coated Gear\nPaint-flecked Armor\n0x032\n0x033\nAthletic Shirt\nPower Camisole\nArmy Vest\nCamo Collar\nNouveau Riche Shirt\nSponge Camisole\nGilded Vest\nFancy Collar\nSaint's Tunic\nGlaring Cape\nReckless Vest\nWater Crown\nPatron Undies\nAccountant Cape\nBookkeeper Wrap\nFlexible Collar\nTarnished Gear\nGold-tainted Armor\n0x046\n0x047\nPlate Vest\nElysian Robe\nPapal Robes\nId Collar\nVest of the Dead\nRosetta Corset\nPyramid Jacket\nBandage Collar\nRetention Vest\nDogwatch Kimono\nHope Shirt\nSparkly Collar\nSand Gown\nPyramid Shawl\nRoyal Haori\nMagical Scarf\nDust-crusted Gear\nTimeworn Armor\n0x05A\n0x05B\nGigas Vest\nSpiked Bra\nBrigandine\nMemorial Collar\nUFO Vest\nAstro Bra\nSpace Suit\nQuiet Collar\nMythril Vest\nMaillot\nDieting Wrap\nRubber Scarf\nMoon Man Vest\nZero-G Undies\nAkashic Shirt\nSolar Wind Scarf\nSpyware-laden Gear\nFragmented Armor\n0x06E\n0x06F\nFluted Guard\nRune Dress\nGhillie Vest\nMeasure Collar\nGambler Guard\nTsubofuri Wrap\nUnyielding Vest\nScam Collar\nBrave Waistcoat\nYama Dress\nEgoist Shirt\nMorose Collar\nLucky Waistcoat\nGambler Dress\nGambler Shirt\nGambler Collar\nSeedy Gear\nSmokestained Armor\n0x082\n0x083\nKaiser Vest\nKotodama Cape\nLife Jacket\nKiller Collar\nLuxurious Vest\nAristocrat Cape\nMagellan Robe\nRevelry Collar\nFireman Happi\nMizuha Doumaru\nBest Vest\nInsomnia Collar\nCaptain's Vest\nMillionaire Doumaru\nSteel Chef Vest\nGorgeous Collar\nCorrupt Gear\nClassified Armor\n0x096\n0x097\nKarna's Robe\nTitanium Set\nSilver Vest\nSublime Collar\nKarna's Robe+\nTitanium Set+\nSilver Vest+\nSublime Collar+\nDemon's Jacket\nHaten Robe\nSoul Vest\nNekomata Coat\nDemon's Jacket+\nHaten Robe+\nSoul Vest+\nNekomata Coat+\nDesecrated Gear\nUnholy Armor\n0x0AA\n0x0AB\nOver Guard\nDiva Guard\nEmpathy Cape\nEngetsu Collar\nOver Guard+\nDiva Guard+\nEmpathy Cape+\nEngetsu Collar+\nImmortal Vest\nSublime Bikini\nHero Jin-Baori\n9 Lives Collar\nImmortal Vest+\nSublime Bikini+\nHero Jinbaori+\n9-Lives Collar+\nFilth-caked Gear\nUnsanitary Armor\nRESERVE\nRESERVE\nTantric Oath\nBlack Jacket\nOfficial's Robe\nFusion Guard M 4\nSilk Dress\nArchangel Bra\nTapsuan\nFusion Guard F 4\nKing Frost Cape\nBlack Wing Robe\nFusion Guard 3\nFusion Guard 4\nFrost Hood\nJack Hood\nBlack Robe\nRESERVE\nEmpress Guard\nWeird Wrap\nMoonlight Robe\nLucifer Guard\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\n0x100\n0x101\n0x102\n0x103\n0x104\n0x105\n0x106\n0x107\n0x108\n0x109\n0x10A\n0x10B\n0x10C\n0x10D\n0x10E\n0x10F\n0x110\n0x111\n0x112\n0x113\n0x114\n0x115\n0x116\n0x117\n0x118\n0x119\n0x11A\n0x11B\n0x11C\n0x11D\n0x11E\n0x11F\n0x120\n0x121\n0x122\n0x123\n0x124\n0x125\n0x126\n0x127\n0x128\n0x129\n0x12A\n0x12B\n0x12C\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_ConsumableItemNames.txt",
    "content": "Blank\nDevil Fruit\nRecov-R: 50 mg\nRecov-R: 100 mg\nTakemedic\nLife Stone\nBead\nTakemedic-All\nTakemedic-All V\nTakemedic-All Z\nBead Chain\nSoul Drop\nSnuff Soul\nChewing Soul\nSoul Food\nRevival Bead\nBalm of Life\nRESERVE\nNohar-M\nRelax Gel\nAlert Capsule\nRESERVE\nRESERVE\nVanish Ball\nSoma\nAmrita Soda\nHiranya\nMuscle Drink\nOdd Morsel\nRancid Gravy\nRESERVE\nMagic Ointment\nPhysical Ointment\nRasetsu Ofuda\nIdaten Ofuda\nKongou Ofuda\nKajaclear-R\nKundaclear-R\nMolotov Cocktail\nBlowtorch\nFreeze Spray\nDry Ice\nAir Cannon\nVacuum Cutter\nStun Gun\nTesla Coil\nMegido Bomb\nSacramental Bread\nStraw Doll\nHell Magatama\nCyclone Magatama\nFrost Magatama\nArc Magatama\nPsycho Bomb\nZener Cards\nAtom Match\nKagutsuchi Orb\nHappy Bomb\nSegaki Rice\nCurse Bomb\nFive-inch Nail\nRevivadrin\nMedicine\nLife Ointment\nHomunculus\nRESERVE\nReviv-All\nRenew-All\nRecover Oil\nRESERVE\nDVD Player\nGarden Energy\nBio Nutrients\nMega Fertilizer\nPsy Magatama\nNuclear Magatama\nBless Magatama\nCurse Magatama\nRESERVE\nRESERVE\nPC Tool Set\nRESERVE\nGlass Vase\nStar Mirror\nSnack Pack\nMusty Pages\nHomemaker Hero\nHeart Ring\nHeart Necklace\nDesigner Perfume\nIncense Set\nMini Cactus\nFlower Basket\nRose Bouquet\nBlack Mug\nSakura Fan\nFountain Pen\nRobot Vacuum\nMotorbike Figure\nLocal Mascot Set\nSpotlight\nGoho-M\nRESERVE\nSmokescreen\nRESERVE\nHypno Mist\nStealthanol\nCovertizer\nRESERVE\nSilk Yarn\nThick Parchment\nTin Clasp\nPlant Balm\nCork Bark\nIron Sand\nCondenser Lens\nAluminum Sheet\nTanned Leather\nRed Phosphorus\nLiquid Mercury\nRESERVE\nWise Men's Words\nGhost Encounters\nTidying the Heart\nBuchiko's Story\nScarlet Lipstick\nRESERVE\nPunch Ouch\nStarvicks\nUdagawa Water\nCRT Television\nRESERVE\nTeen's Life\nMaster Swordsman\nFlowerpedia\nNew Choju-Giga\nPT Bible\nPhan-Sightings\nAnnals of Greatness\nCall Me Chief\nHow to Karakuri\nReckless Casanova\nRESERVE\nJunk\nMoney Distributor\nItem Distributor\nRESERVE\nJagariko\nBroken Rock Salt\nMovie Ticket\nMovie 02 Ticket\nMovie 03 Ticket\nMovie 04 Ticket\nRESERVE\nRESERVE\nSummer Lotto S\nAutumn Bread\nElement Set\nForces Set\nShitamachi Reborn\nStar Forneus\nWeekend Parks\nTrain of Life\nPower Intuition\nBonehead\nCrime Lab Squad\nNot-so-hot Betsy\nBubbly Hills, 90210\nICU\nRESERVE\nDrizzled Natto\nSquid Splurge\nIdol Pins\nCheongsam\nGee Shock\nRESERVE\nTokyo Shrines\nFishpond Spotter\nYoncha Wanderer\nMuseum of Stars\nJack Frost Doll\nBurger-kun Doll\nWanna-kun Doll\nLexy Doll\nUji Matcha Flan\nChocolate Truffles\nPotted Succulents\nLimelight\nAmateur Coffee\nHarsh Coffee\nBaptismal Water\nExorcism Water\nSacramental Wine\nRepentance Ashes\nMoist Katsu Bun\nBook Cover\nCastella\nCrimson Lipstick\nRESERVE\nRESERVE\nTetra Hammer\nMakara Hammer\nMacadamia Choco\nMacadamia Nuts\nHawaiian Cookie\nTaiyaki Caramel\nYakisoba Candy\nJewel Shard\nRESERVE\nRESERVE\nCasual Rod\nPowerful Rod\nMiracle Rod\nArginade\nDr. Salt NEO\nJoylent\nMRE Ration\nOatmeal Ration\nTorimeshi Ration\nFruit Ration\nSeafood Aojiru\nBeauty Aojiru\nVitality Aojiru\nNasty Aojiru\nOnsen Aojiru\nRESERVE\nFulfiller\nSummer Lotto R\nHappy Pop\nThaw Stone\nExtinguish Orb\nDischarge Crystal\nSecond Maid\nRESERVE\nSandwich\nFruit Danish\nChewy Anpan\nYakisoba Pan\nCreature\nEarl Green\nMad Bull\nMuscle Tea\nManta\nNastea\n1UP\nGambla Goemon\nGolfer Sarutahiko\nCalling Postcard\nRefresh Aroma\nProtein\nMoist Protein\nFried Bread\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nBeginner\nIntermediate\nAdvanced\nHot Coffee\nNostalgic Steak\nFrui-Tea\nTotem Pole\nRelaxing Coffee\nOo-hot Tea\nLove솂Pancake\nSincere Omelette\nMakoto's Present\nHaru's Present\nAnn's Present\nFutaba's Present\nSadayo's Present\nTakemi's Present\nChihaya's Present\nOhya's Present\nHifumi's Present\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nSmall Boilie\nMedium Boilie\nLarge Boilie\nTop-class Boilie\nGuardian Boilie\nBig Bang Burger\nSaturn Fries\nEarth Burger\nRESERVE\nMoon Burger\nSupernova Burger\nKaraage King\nSpring Fruit Pack\nForeign Nikuman\nPhantom Wafers\nSoothing Soba\nAgodashi Oden\nParty in a Can\nDigital Camera\nFace Beautifier\nLaptop\nRESERVE\nMini Dominion\nDie-soujou\nDecked Decarabia\nGear Girimehkala\nKinky Kin-Ki\nMossy Mothman\nMovie 16 Ticket\nLockpick\nEternal Lockpick\nReserve Ammo\nRESERVE\nTreasure Trap\nRESERVE\nRed Fish\nRough Carp\nTokyo Bitterling\nSeven-color Trout\nWhite Carp\nTreasure Trout\nDelish Bitterling\nPeerless Carp\nIchigaya Guardian\nAdhesive Bandage\nRESERVE\nRejuvenating IV\nLeblanc Coffee\nSoul Coffee\nAwakening Coffee\nMaster Coffee\nDecent Curry\nLeblanc Curry\nMaster Curry\nRESERVE\nShooting Card\nHealing IV\nRailroad Card\nFighting Card\nRESERVE\nBoxing Card\nGambling Card\nGolf Card\nThe Okumura Way\nMed. Tech for Teens\nGuns of the World\nShogi World\nBatting Science\nEssence of Fishing\nSpeed Reading\nCinema Treasures\nPure Politics\nChinese Sweets\nTheme Park Escort\nThe Great Thief\nPirate Legend\nZorro, the Outlaw\nThe Alluring Dancer\nThe Gallant Rogue\nThe Illusory Popess\nCry of Cthulhu\nWoman in the Dark\nThe Hero with a Bow\nMedjed Menace\nPlaying the Game\nGame Secrets\nLotto Random\nLotto Series\nLotto Scratchcard\nRakugo Collection\nClassical Hits\nBest of KGB49\nWraith\nJail Break\nGuy McVer\nThe Running Dead\nThe X Folders\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nVague\nNightlife Hotspots\nCoolifier Pad\nHand Warmalizer\nVenus Salad\nSikkenine\nSikkenine A\nSikkenine EX\nWide Eye Drops\nDonut-Worry\nMental Floss\nHot and Sour Tea\nBalloons\nKommissbrot\nBeef Patty Ration\nD Ration\nVeg. Stew Ration\nRESERVE\nRESERVE\nDurian-au-Lait\nOh! Shiruko\nChunky Potage\nUltimate Amazake\nUdagawa Soda\nWater of Rebirth\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nStrawberry Curry\nMayo Locust\nMiso Starfish\nMystery Stew\nBitter Coffee\nAcidic Coffee\nFire Curry\nBlaze Curry\nInferno Curry\nRamen Bowl\nNight Pennant\nNude Statue\nSwan Boat\nSky Tower Lamp\nGiant Spatula\nIdol Poster\nStar Stickers\nKing Piece\nHero Figure\nHamaya\nI <3 Tokyo Shirt\nNon-Static Gum\nRESERVE\nRESERVE\nRESERVE\nSadayo's Chocolate\nTakemi's Chocolate\nChihaya's Chocolate\nOhya's Chocolate\nHifumi's Chocolate\nMakoto's Chocolate\nHaru's Chocolate\nAnn's Chocolate\nFutaba's Chocolate\nRyuji's Chocolate\nSojiro's Chocolate\nKumade\nShumai Cushion\nGi-Nyant Doll\nSushi Mug\nChoco Fountain\nRESERVE\nRESERVE\nRESERVE\nFamidrive\nRESERVE\nSheep Man Doll\nJam Bread\nMelon Pan\nAngel Tart\nMoon Dango\nMixed Nuts\nBeni-Azuma\nLegendary Yaki-Imo\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nMoonlight Carrot\nSun Tomato\nRESERVE\nRESERVE\nRESERVE\nAnn Cream Puffs\nMakoto Donuts\nSakura Amezaiku\nSadayo Taiyaki\nRyuji Dog\nAmateur Curry\nRESERVE\nBroken Laptop\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_Demon.txt",
    "content": "000\nMetatron\nBeelzebub\nCu Chulainn\nJack-o'-Lantern\nJack Frost\nPixie\nCerberus\nLilim\nEligor\nOdin\nHua Po\nDecarabia\nMara\nOse\nThor\nUnicorn\nUriel\nSarasvati\nValkyrie\nYaksini\nGanesha\nAnubis\nMot\nRaphael\nScathach\nHigh Pixie\nBarong\nGirimehkala\nKing Frost\nNarcissus\nIsis\nLamia\nLegion\nRakshasa\nMokoi\nForneus\nSetanta\nTitania\nIncubus\nOni\nLilith\nRangda\nMakami\nParvati\nGabriel\nZaou-Gongen\nAlice\nKali\nKurama Tengu\nOberon\nShiki-Ouji\nYamata-no-Orochi\nOrobas\nHanuman\nArchangel\nObariyon\nQueen Mab\nSandalphon\nAbaddon\nShiisaa\nSandman\nBelial\nLeanan Sidhe\nCybele\nChernobog\nFlauros\nIppon-Datara\nOrthrus\nSuccubus\nMothman\nRESERVE\nDominion\nNekomata\nBlack Frost\nArahabaki\nAngel\nSkadi\nKikuri-Hime\nChi You\nPower\nInugami\nNebiros\nRESERVE\nSlime\nAnzu\nYatagarasu\nYoshitsune\nTake-Minakata\nAme-no-Uzume\nKushinada\nKumbhanda\nOngyo-Ki\nKin-Ki\nSui-Ki\nFuu-Ki\nJatayu\nKaiwan\nKelpie\nThoth\nDionysus\nApsaras\nAndras\nRESERVE\nKoropokguru\nKoppa Tengu\nRegent\nQueen's Necklace\nStone of Scone\nKoh-i-Noor\nOrlov\nEmperor's Amulet\nHope Diamond\nCrystal Skull\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nMandrake\nBaal\nDakini\nSilky\nBugs\nBlack Ooze\nBicorn\nMithras\nSudama\nKodama\nAgathion\nOnmoraki\nNue\nPisaca\nMelchizedek\nBaphomet\nRaja Naga\nNaga\nGaruda\nMoloch\nNorn\nBelphegor\nBerith\nChoronzon\nRegent\nOrichalcum\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nNigi Mitama\nKushi Mitama\nAra Mitama\nSaki Mitama\nRESERVE\nShiva\nMichael\nAsura\nMada\nMother Harlot\nClotho\nLachesis\nAtropos\nArdha\nRESERVE\nVishnu\nHariti\nYurlungur\nHecatoncheires\nSatanael\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nOrpheus\nThanatos\nIzanagi\nMagatsu-Izanagi\nKaguya\nAriadne\nAsterius\nTsukiyomi\nMessiah\nMessiah Picaro\nOrpheus Picaro\nThanatos Picaro\nIzanagi Picaro\nM. Izanagi Picaro\nKaguya Picaro\nAriadne Picaro\nAsterius Picaro\nTsukiyomi Picaro\nSatanael\nArsene (Intro)\nArsene\nCaptain Kidd\nZorro\nCarmen\nGoemon\nJohanna\nMilady\nNecronomicon\nRobin Hood\nLoki\nSatanael\nSeiten Taisei\nMercurius\nHecate\nKamu Susano-o\nAnat\nAstarte\nPrometheus\nLoki\nArsene\nCaptain Kidd\nZorro\nCarmen\nGoemon\nJohanna\nMilady\nNecronomicon\nRobin Hood\n???\nLucifer\nSeiten Taisei\nMercurius\nHecate\nKamu Susano-o\nAnat\nAstarte\nPrometheus\nLoki\nLoki\nCindrillon\nVanadis\nWilliam\nDiego\nCélestine\nGorokichi\nAgnes\nLucy\nAl Azif\nHereward\nElla\nRESERVE\nSatan\nLucifer\nKohryu\nOkuninushi\nNorn\nRESERVE\nRESERVE\nFutsunushi\nRESERVE\nSeth\nIshtar\nRESERVE\nSurt\nSiegfried\nLakshmi\nRESERVE\nRESERVE\nEx-Belphegor\nRESERVE\nGaruda\nFortuna\nSuzaku\nSeiryu\nGenbu\nByakko\nBishamonten\nKoumokuten\nJikokuten\nZouchouten\nHell Biker\nDaisoujou\nTrumpeter\nWhite Rider\nMatador\nPale Rider\nHorus\nRESERVE\nAttis\nRESERVE\nRESERVE\nSraosha\nBerith\nRESERVE\nMitra\nPhoenix\nPrincipality\nNeko Shogun\nVasuki\nAnanta\nThrone\nRESERVE\nQuetzalcoatl\nRed Rider\nBlack Rider\nRESERVE\nEx-Moloch\nPazuzu\nRESERVE\nSlime\nJack-o'-Lantern\nAgathion\nMandrake\nShiisaa\nJack Frost\nSudama\nOnmoraki\nBugs\nPixie\nPixie\nArdha\nRESERVE\nAsmodeus\nAzazel\nBaal\nTithoes\nMammon\nLeviathan\nSamael\nMaria\nVohu Manah\nCait Sith\nMishaguji\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nP5 Unused\nP5 Unused\nP5 Unused\nP6 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nIzanagi-no-Okami\nPsyche\nAthena\nRaoul\nOrpheus Telos\nOrpheus\nIzanagi-no-Okami Picaro\nPsyche Picaro\nAthena Picaro\nNeo Arsene Picaro\nOrpheus Telos Picaro\nOrpheus Picaro\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nMacabre\nP5 Unused\nP5 Unused\nFafnir\nByakhee\nHastur\nTam Lin\nP5 Unused\nSurt\nLoa\nChimera\nP5 Unused\nP5 Unused\nSiegfried\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nP5 Unused\nRESERVE\nRESERVE\nRESERVE\nRESERVE\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_KeyItemNames.txt",
    "content": "BLANK\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nCommuter Pass\nCigarettes\nKey to Leblanc\nPaper Bag\n2nd Mate ID\n1st Mate ID\nCaptain ID\nOld Key\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nEvil Snow Crystal\nSticky Hairball\nDouble Bookmark\nRESERVE\nPen Case\nMuffler\nCologne\nCamera\nGloves\nWristwatch\nHat\nEarmuffs\nHeadphones\nRESERVE\nBuchi Calculator\nDyed Handkerchief\nFashion Magazine\nPromise List\nUnlimited Service\nDog Tag\nFortune Tarot Card\nInterview Notes\nKosha Piece\nSports Watch\nMorgana's Scarf\nRecipe Notes\nDocumentary Plans\nGecko Pin\nCell Key\nDesire and Hope\nFountain Pen\nGun Controller\nBusiness Card\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nCastle Map\nTower Map\nRESERVE\nKamoshida's Medal\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nThe King Book\nThe Queen Book\nThe Slave Book\nGreen Key\nRed Key\nRandy Right Eye\nLustful Left Eye\nRight Key\nLeft Key\nKaneshiro's Journal\nTorn Page 1\nTorn Page 2\nTorn Page 3\nTorn Page 4\nTorn Page 5\nTorn Page 6\nAbyss Gem\nRejection Gem\nGuilt Gem\nSanctuary Gem\nMember's Card\nStolen Papyrus\nPyramid Sketch\nMembers Floor Map\nHigh Limit Floor Map\nBasement Blueprint\nHigh Limit Card\nSpaceport Map\nChief Clerk ID\nSection Chief ID\nChief Director ID\nMuseum Brochure 1\nMuseum Brochure 2\nBank Blueprint\nBank Keycard\nCasino Map\nSecurity Keycard\nCruise Ship Map\nMembership Card\nVIP Invitation\nVermilion Disk\nVermilion Disk\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nEscape Recipe\nMist Recipe\nHome Recipe\nSmoke Recipe\nEnergy Recipe\nSleep Recipe\nBronze Recipe\nScent Recipe\nSilver Recipe\nSmell Recipe\nGold Recipe\nAroma Recipe\nPurify Recipe\nClone Recipe\nElement Recipe\nLife Recipe\nForces Recipe\nAlmighty Recipe\nVitality Recipe\nHyper Recipe\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_MaterialNames.txt",
    "content": "BLANK\nCoward's Orb\nSelfish Ornament\n4th Girl's Talc\nNotched Heart\nLight Iron\nThick Hide\nGlossy Clasp\nElectric Rock\nMagic Cross\nBrave Lumber\nDivine Bark\nThought Cross\nSupple Metal\nSmooth Fabric\nSmart Clasp\nLiving Metal\nBig Incisor\nGlory Staff\nBlessed Trumpet\nVictor Laurel\nPorcelain Teacup\nSilver Cutlery\nStrange Lantern\nNude Candle Stand\nShackles\nLocked Collar\nDull Sword\nHoley Helmet\nCrushed Shield\nRusted Handcuffs\nChipped Glass\nUkiyo-e\nInk Wash Art\nHanging Scroll\nPicture Scroll\nHannya Mask\nAnimal Brush\nFine Washi\nLoose Sash\nCracked Vase\nSooty Kettle\nUnsigned Mug\nPlastic Frame\nCrappy Portrait\nBad Sculpture\nGold Coin\nStock Certificate\nAmber Stamp\nPrecious Bill\nRare Coin\nOld Coin\nLeather Case\nSafe Dial\nMoney Counter\nOffice Calculator\nInkless Pen\nUnopenable Lock\nWorn Stamp\nTattered Wallet\nJewel Mummy\nGold Uraeus\nCanopic Jar\nBastet Statue\nScarab Charm\nMummy Mask\nScratched Sword\nRusted Ankh\nTorn Papyrus\nRa Mural\nSekhmet Mural\nSarcophagus Bit\nBent Staff\nPillar Piece\nMoon Stone\nRare Metal\nSage Astrolabe\nUFO Drone\nBlade Flashlight\nRainbow Diode\nSpaceship Stick\nRobot Arm\nRadar Antenna\nBroken Telescope\nSpace Food\nPunctured PCB\nDead Solar Panel\nWarped Wheel\nLuxury Watch\nGold Earrings\nDamascene Cane\nSilver Monocle\nIvory Dice\nDealer Ring\nMagician Bowtie\nPro Dart\nCard Shuffler\nDice Shaker\nGray Cufflinks\nFaded Silk Hat\nSmoked Cigar\nIncomplete Deck\nCoral Pendant\nPearl Necklace\nEbony Box\nMarble Chessboard\nTortoise Hairpin\nCameo Brooch\nRaden Plate\nPeacock Fan\nBronze Compass\nBrass Pocket Watch\nMusic Box\nOld Kaleidoscope\nMirror Ball\nMasquerade Mask\nPure Diamond\nDignity Ruby\nSublime Sapphire\nStable Emerald\nProper Turquoise\nBrave Aquamarine\nHarmony Amethyst\nIntelligent Onyx\nWealth Pearl\nDelight Opal\nCharity Agate\nEnduring Jade\nFriendship Topaz\nTruth Garnet\nGrooved Gold\nHole Gold\nThin Gold\nGrooved Silver\nHole Silver\nThin Silver\nGrooved Copper\nHole Copper\nThin Copper\nOnyx\nPearl\nAmethyst\nTurquoise\nOpal\nTopaz\nGarnet\nAquamarine\nRuby\nEmerald\nSapphire\nDiamond\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nOld Milk Bottle\nBee Earrings\nScorpion Statue\nTurtle Statue\nRotary Phone\nSilk Bundle\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\nRESERVE\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_MeleeWeaponNames.txt",
    "content": "Blank\nGeneric Gear\nRebel Knife\nKukri\nArsene's Cane\nBlizz Dagger\nAthame\nSteel Kukri\nSkinning Knife\nCorvo\nKopis\nKilling Scalpel\nMummy's Kopis\nQuality Kopis\nPro Skinning Knife\nBlood Corvo\nDirk\nParrying Dagger\nOld Dirk\nMachete\nBaselard\nDual Edge Machete\nFrenzy Dagger\nPro Parrying Dagger\nComa Dagger\nMisericorde\nReserve\nPro Yamanaji\nAmnesia\nReserve\nIgniter\nRitual Athame\nShock Knife\nDancing Knife\nMelancholia\nParadise Lost\nYamanaji\nNormal Rod\nMace\nHell Slugger\nHeavy Steel Pipe\nSteel Pipe\nBattle Hammer\nIron Pipe\nQuality Steel Pipe\nHeavy Mace\nSpike Rod\nDemon War Hammer\nBush Hammer\nDemon Pipe\nMegaton Rod\nBoss Bush Hammer\nGaea Presser\nLotus Wand\nBig Sleep Stick\nStun Baton\nDeath Crowbar\nDragon God Pole\nGrand Presser\nStun Baton\nSuper Megido Rod\nThe Anchor\nErasure Hammer\nGenocide Crowbar\nTriple Crown Bat\nRuyi Jingu Bang\nWolf Fang Pole\nSleep Stick\nSuper Steel Whip\nFlint Rod\nReserve\nThe Pulverizer\nMjolnir\nBandit Sword\nHeadhunter Ladle\nRyozanpaku Sword\nSonic Blade\nScimitar\nTalwar\nBright Saber\nSleeper Blade\nShamshir\nBlood Scimitar\nResting Sword\nChief's Cutlass\nQuiet Sword\nCosmic Sword\nDamascus Sword\nSolar Blade\nHeavy Saber\nMaster Shamshir\nPanic Sword\nFury Blade\nBright Sword\nReserve\nAnswerer\nMega Flash Sword\nCorona Blade\nClaiomh Solais\nReserve\nMachete\nPlasma Sword\nKikouseiken\nVile Sword\nEl Caliente\nGod Saber\nHeaven Saber\nDeus Ex Machina\nLeather Whip\nTraining Whip\nSkin Ripper\nHeat Whip\nWarrior Whip\nBlaze Whip\nBurn Whip\nHero Whip\nTear Whip\nWhip Sword\nElectromag Whip\nDisgrace Whip\nMirage Whip\nStrike Tail\nWhite Paper Whip\nGreat Whip Sword\nChain Whip\nBarbed Wire\nPain and Pain\nSpike Whip\nLove Whip\nHard Branch\nCoil Whip\nLast Agony\nLaw Rope\nFundo-Kusari\nGoat Leather Whip\nIngot Chain\nKnout Whip\nDeath Knout\nCat-o-Nine Tails\nSnow Queen's Whip\nDeath Match Wire\nNaraka Whip\nKatana\nGunto\nReserve\nImitation Katana\nUnmarked Katana\nAntique Gunto\nSeishiki Sword\nMuramasa\nJagato\nImperial Sword\nKirisame\nFury Blade\nIai Katana\nKunitsuna\nOrochito\nWakizashi\nChidori\nMasamune\nMaster's Iai Katana\nMonohoshizao\nRed Demon Blade\nQuality Wakizashi\nReserve\nMusou Masamune\nUsumidori\nShimobashira\nShizukuto\nShikomi Kiseru\nKyokusui\nSenryou Yakusha\nAme-no-Murakumo\nBrass Knuckles\nHell Knuckles\nHeavy Pound\nSuper Heavy Grip\nMetal Duster\nHell Cestus\nIron Fist\nMach Punch\nBagh Naka\nDemon Fist\nFlash Punch\nFast Puncher\nOmega Knuckle\nBout Gloves\nSanction\nDazzle Fist\nOne Inch\nChrome Duster\nGrief Fist\nBear Gloves\nClenched Fist\nSabazios\nWrathful Iron Fist\nSealed Fist\nVajra\nReserve\nReserve\nReserve\nAxe\nMega Axe\nSteel Bardiche\nCrescent Axe\nLethe Axe\nIce Axe\nMelatonin Axe\nCeltis\nLunatic Axe\nAmazon Axe\nRend Celtis\nDragon Scale Axe\nPerish Great Axe\nReserve\nReserve\nHeracles Axe\nGilgamesh Axe\nNarcolepsy\nFleurs du Mal\nReserve\nDelta Knuckle\nHeavy Grip\nLumina Saber\nReserve\nQuasar Saber\nReserve\nFalchion\nMasquerade Ribbon\nReserve\nReserve\nHaru Reserve 3\nHaru Reserve 1\nBardiche\nDeath Contract\nBlack Kogatana\nReserve\nFault Knife\nQuest Item\nLizard Tail Cutter\nEnvy Chain\nProphet's Hand\nDependence XX\nVenture Saber\nSlacker Pole\nSilver Dagger\n0x0F6\n0x0F7\n0x0F8\n0x0F9\n0x0FA\n0x0FB\n0x0FC\n0x0FD\n0x0FE\n0x0FF\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_OutfitNames.txt",
    "content": "Starter Clothes\nShujin Uniform\nPhantom Suit\nPirate Armor\nMorgana Classic\nRed Latex Suit\nOutlaw's Attire\nMetal Rider\nMusketeer Suit\nCyber Gear\nPrince Suit\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nSummer Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nWinter Uniform\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nSummer Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nWinter Clothes\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nTracksuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nSwimsuit\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nLoungewear\nGekkoukan High\nGekkoukan High\nAigis Costume\nGekkoukan High\nGekkoukan High\nGekkoukan High\nGekkoukan High\nGekkoukan High\nGekkoukan High\nYasogami High\nYasogami High\nTeddie Costume\nYasogami High\nYasogami High\nYasogami High\nYasogami High\nYasogami High\nYasogami High\nSt. Hermelin High\nSt. Hermelin High\nTrish Costume v1\nSt. Hermelin High\nSt. Hermelin High\nSt. Hermelin High\nSt. Hermelin High\nSt. Hermelin High\nSt. Hermelin High\nSeven Sisters High\nSeven Sisters High\nTrish Costume v2\nSeven Sisters High\nSeven Sisters High\nSeven Sisters High\nSeven Sisters High\nSeven Sisters High\nKasugayama High\nVincent's Outfit\nOrlando's Fashion\nStray Sheep Suit\nCatherine's Cami\nJohnny's Coat\nKatherine's Outfit\nErica's Uniform\nToby's Overalls\nBoss's Suit\nKarukozaka High\nKarukozaka High\nKarukozaka High\nKarukozaka High\nKarukozaka High\nKarukozaka High\nKarukozaka High\nKarukozaka High\nHazama's Uniform\nButler Suit\nButler Suit\nMaid Uniform\nMaid Uniform\nButler Suit\nMaid Uniform\nMaid Uniform\nMaid Uniform\nButler Suit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nChristmas Outfit\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nDancewear\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nShadow Ops Uniform\nSamurai Garb\nSamurai Garb\nBurroughs Costume\nSamurai Garb\nSamurai Garb\nSamurai Garb\nSamurai Garb\nSamurai Garb\nSamurai Garb\nStudent Uniform\nStudent Uniform\nGouto Costume\nOuran High\nStudent Uniform\nOuran High\nOuran High\nOuran High\nImperial Uniform\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_RangedWeaponNames.txt",
    "content": "Blank\nHandgun\nShotgun\nSlingshot 1\nSubmachine Gun\nRifle 1\nAmerican Gun 1\nMasaharu Gun 1\nAura Gun 1\nGun 009\nHandgun\nGun 00B\nGun 00C\nRifle 2\nGun 014\nGun 015\nTkachev\nGovernance\nUnmarked Pistol\nTkachev II\nTkachev HP\nMakaronov\nMakaronov II\nGovernance HP\nCompact\nEliminator\nMakaronov SP\nCompact HP\nAssassin\nAssassin SP\nSand Hawk II\nModel Gun\nLevinson M31\nLevinson M31 II\nGranelli M3\nLevinson M31 HP\nGranelli M3 SP\nHeavy Shotgun\nMad Maximum\nFireworks\nMad Maximum II\nHeavy Shotgun II\nFireworks SP\nStorm Shot\nPumpkin Bomb\nBig Sleep\nMasterkey\nOrso Nero\nBig Sleep SP\nStorm Shot II\nFury SP\nBianchi SBAS II\nCalamity Gun\nOrso Nero SP\nVolley Cannon II\nSmithereens\nCalamity Gun SP\nKiraihou II\nSmithereens II\nUnmarked Shotgun\nBianchi SBAS\nNock Volley\nHellfire\nNock Volley SP\nSlingshot\nUnmarked Sling\nSlingshot SP\nSlingshot HP\nShrike\nUpsilon\nSlingbow II\nComet 3\nShrike SP\nComet 3 II\nSpirit Sling\nUpsilon II\nStronger\nNorthern Light SP\nIntercept\nStronger SP\nSpirit Sling HP\nPirate Killer\nMt. Liang SP\nDreamstone\nIntercept II\nSling Cannon\nSling Cannon II\nPirate Killer SP\nUtopia HP\nDreamstone II\nCatnap\nMount Liang\nShrike II\nNorthern Light\nShooting Star\nStar Slayer\nReplica SMG\nTommy Gun\nUnmarked SMG\nTrooper\nMP2 Prototype\nFlare SMG\nBlitz MG\nSterlidge II\nTrooper SP\nMP2 Prototype II\nCivilian MP\nHyakka Ryouran\nNo Mercy\nCivilian MP II\nWestern SMG\nNo Mercy II\nTarantula SP\nMP Victoria\nAntares\nHien Renhappou\nWestern SMG II\nMP Victoria EP\nHonoikazuchi\nH. Renhappou HP\nPhantom Killer II\nHonoikazuchi SP\nSterlidge\nBrain Shot\nTommy Gun II\nFlare SMG II\nTarantula\nBlitz MGSP\nReplica AR\nBlack Assault\nAR-M4\nHeavy Assault\nG1 Type\nAR-M4 II\nAR-M4 SP\nBlack Assault SP\nHero AR\nHeavy Assault II\nBlaze Assault\nAnnihilator\nTempest\nAR-X\nHero AR II\nCruel Carbine\nBlaze Assault SP\nAnnihilator II\nTempest II\nCruel Carbine II\nSharpshooter\nRyuraihou II\nSharpshooter II\nHizutsu HP\nKuzuryu Gouhou\nG1 Type SP\nRebel Rifle\nRebel Rifle SP\nTempest HP\nHizutsu\nRyuraihou\nHeaven's Gate\nReplica Revolver\nPeacemaker\nP Revolver\nPM Sheriff\nPM Sheriff II\nLing Xing\nP Revolver II\nPeacemaker SP\nJustness\nJustness II\nEvil Roulette\nWildborn SP\nArtillery\nEvil Roulette II\nLing Xing II\nCalvary\nArtillery II\nBaptism SP\nOrochi SP\nCavalry II\nTwilight SP\nPeacemaker HP\nMirrirmina\nWildborn\nBaptism\nOrochi\nTwilight\nJudge of the Dead\nFury\nVolley Cannon\nKiraihou\nMegido Fire\nGL Replica\nPawzooka\nUnmarked GL\nGL Mega\nGL Rep\nScorcher\nGL Replica II\nMultiple GL\nScorcher SP\nEraser\nTown Burner HP\nFlame Ocean\nEraser SP\nMultiple GL II\nMagma Bucket\nMagma Bucket SP\nFlame Ocean II\nPandemonium SP\nHaru Reserve\nHaru Reserve 2\nTown Burner\nTown Burner SP\nPandemonium\nYagrush\nH. Ryouran HP\nAntares II\nPhantom Killer\nWild Hunt\nClemont Shot\nGolden Beam\nGun 222\nGun 223\nMoebius\nMoebius II\nSirius\nSirius SP\nSlingbow\nStar Slayer HP\nUtopia\nSudarshana\nSleeper\nKarura II\nFrom Heaven\nCrimson Gun HP\nRiot Police SP\nGravity Gun\nMedusan\nSleeper SP\nR.I.Pistol\nMedusan II\nR.I.Pistol II\nGravity Gun HP\nNataraja\nRiot Police\nSand Hawk\nKarura\nCrimson Gun\nFrom Heaven II\nCocytus\nCocytus SP\nTyrant Pistol\nGun 253\nGun 254\nGun 255\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_SkillCardNames.txt",
    "content": "BLANK (Unusable)\nAgi\nAgilao\nAgidyne\nMaragi\nMaragion\nMaragidyne\nBufu\nBufula\nBufudyne\nMabufu\nMabufula\nMabufudyne\nGaru\nGarula\nGarudyne\nMagaru\nMagarula\nMagarudyne\nZio\nZionga\nZiodyne\nMazio\nMazionga\nMaziodyne\nHama\nHamaon\nMahama\nMahamaon\nKouha\nKouga\nKougaon\nMakouha\nMakouga\nMakougaon\nMudo\nMudoon\nMamudo\nMamudoon\nEiha\nEiga\nEigaon\nMaeiha\nMaeiga\nMaeigaon\nMegido\nMegidola\nMegidolaon\nFrei\nFreila\nFreidyne\nMafrei\nMafreila\nMafreidyne\nDazzler\nNocturnal Flash\nPulinpa\nTentarafoo\nEvil Touch\nEvil Smile\nMakajama\nMakajamaon\nFamine's Breath\nFamine's Scream\nDormina\nLullaby\nTaunt\nWage War\nOminous Words\nAbysmal Surge\nMarin Karin\nBrain Jack\nTrapped Rat\nSelf-destruct\nSelf-destruct\nSelf-destruct\nLife Drain\nSpirit Drain\nLife Leech\nSpirit Leech\nFoul Breath\nStagnant Air\nGhastly Wail\nInferno\nBlazing Hell\nDiamond Dust\nIce Age\nPanta Rhei\nVacuum Wave\nThunder Reign\nWild Thunder\nDivine Judgment\nSamsara\nDemonic Decree\nDie For Me!\nAtomic Flare\nCosmic Flare\nBlack Viper\nMorning Star\nPsi\nPsio\nPsiodyne\nMapsi\nMapsio\nMapsiodyne\nPsycho Force\nPsycho Blast\nLunge\nAssault Dive\nMegaton Raid\nGod's Hand\nLucky Punch\nMiracle Punch\nCleave\nGiant Slice\nBrave Blade\nSword Dance\nHassou Tobi\nAyamur\nCornered Fang\nRising Slash\nDeadly Fury\nSnap\nTriple Down\nOne-shot Kill\nRiot Gun\nVajra Blast\nVorpal Blade\nVicious Strike\nHeat Wave\nGigantomachia\nRampage\nSwift Strike\nDeathbound\nAgneyastra\nDouble Fangs\nTempest Slash\nMyriad Slashes\nSledgehammer\nSkull Cracker\nTerror Claw\nHeadbutt\nStomach Blow\nDream Needle\nHysterical Slap\nNegative Pile\nBrain Shake\nFlash Bomb\nMind Slice\nBloodbath\nMemory Blow\nInsatiable Strike\nDormin Rush\nOni-Kagura\nBad Beat\nBrain Buster\nDia\nDiarama\nDiarahan\nMedia\nMediarama\nMediarahan\nRecarm\nSamarecarm\nRecarmdra\nAmrita Drop\nAmrita Shower\nMabaisudi\nSalvation\nPatra\nEnergy Shower\nEnergy Drop\nBaisudi\nMe Patra\nTarukaja\nRakukaja\nSukukaja\nHeat Riser\nMatarukaja\nMarakukaja\nMasukukaja\nThermopylae\nTarunda\nRakunda\nSukunda\nDebilitate\nMatarunda\nMarakunda\nMasukunda\nDekunda\nDekaja\nCharge\nConcentrate\nRebellion\nRevolution\nTetrakarn\nMakarakarn\nTetraja\nTetra Break\nMakara Break\nFire Wall\nIce Wall\nElec Wall\nWind Wall\nFire Break\nIce Break\nWind Break\nElec Break\nBLANK\nBLANK\nNuke Wall\nPsy Wall\nNuke Break\nPsy Break\nCounter\nCounterstrike\nHigh Counter\nEndure\nEnduring Soul\nDodge Bless\nDodge Curse\nSurvival Trick\nDodge Fire\nEvade Fire\nDodge Ice\nEvade Ice\nDodge Wind\nEvade Wind\nDodge Elec\nEvade Elec\nDodge Phys\nEvade Phys\nFire Boost\nFire Amp\nIce Boost\nIce Amp\nWind Boost\nWind Amp\nElec Boost\nElec Amp\nAngelic Grace\nDivine Grace\nRegenerate 1\nRegenerate 2\nRegenerate 3\nInvigorate 1\nInvigorate 2\nInvigorate 3\nAttack Master\nAuto-Mataru\nDefense Master\nAuto-Maraku\nSpeed Master\nAuto-Masuku\nFast Heal\nInsta-Heal\nArms Master\nSpell Master\nSharp Student\nApt Pupil\nAli Dance\nFirm Stance\nLife Aid\nVictory Cry\nGrowth 1\nGrowth 2\nGrowth 3\nUnshaken Will\nEvade Bless\nEvade Curse\nBLANK\nResist Fire\nNull Fire\nRepel Fire\nDrain Fire\nResist Ice\nNull Ice\nRepel Ice\nDrain Ice\nResist Wind\nNull Wind\nRepel Wind\nDrain Wind\nResist Elec\nNull Elec\nRepel Elec\nDrain Elec\nResist Bless\nNull Bless\nRepel Bless\nDrain Bless\nResist Curse\nNull Curse\nRepel Curse\nDrain Curse\nResist Phys\nNull Phys\nRepel Phys\nDrain Phys\nAilment Boost\nHama Boost\nMudo Boost\nDizzy Boost\nConfuse Boost\nFear Boost\nForget Boost\nSleep Boost\nRage Boost\nDespair Boost\nBLANK\nBrainwash Boost\nResist Dizzy\nResist Confuse\nResist Fear\nResist Forget\nResist Sleep\nResist Rage\nResist Despair\nBLANK\nResist Brainwash\nNull Dizzy\nNull Confuse\nNull Fear\nNull Forget\nNull Sleep\nNull Rage\nNull Despair\nNull Brainwash\nBurn Boost\nFreeze Boost\nShock Boost\nFortified Moxy\nAdverse Resolve\nLast Stand\nHeat Up\nBLANK\nTouch n' Go\nClimate Decorum\nAmbient Aid\nSnipe\nCripple\nTrigger Happy\nResist Nuke\nNull Nuke\nRepel Nuke\nDrain Nuke\nResist Psy\nNull Psy\nRepel Psy\nDrain Psy\nNuke Boost\nNuke Amp\nPsy Boost\nPsy Amp\nDodge Nuke\nEvade Nuke\nDodge Psy\nEvade Psy\nBless Boost\nBless Amp\nCurse Boost\nCurse Amp\nMagic Ability\nFortify Spirit\nAlmighty Boost\nAlmighty Amp\nZenith Defense\nSoul Chain\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBlank Card\n"
  },
  {
    "path": "KHSave.LibPersona5/Resources/Persona5/Vanilla_SkillNames.txt",
    "content": "Attack\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nAgi\nAgilao\nAgidyne\nMaragi\nMaragion\nMaragidyne\nAgi\nMaragi\nBLANK\nBLANK\nBufu\nBufula\nBufudyne\nMabufu\nMabufula\nMabufudyne\nBufu\nMabufu\nBLANK\nBLANK\nGaru\nGarula\nGarudyne\nMagaru\nMagarula\nMagarudyne\nGaru\nBLANK\nBLANK\nBLANK\nZio\nZionga\nZiodyne\nMazio\nMazionga\nMaziodyne\nZio\nMazio\nBLANK\nBLANK\nHama\nHamaon\nMahama\nMahamaon\nKouha\nKouga\nKougaon\nMakouha\nMakouga\nMakougaon\nMudo\nMudoon\nMamudo\nMamudoon\nEiha\nEiga\nEigaon\nMaeiha\nMaeiga\nMaeigaon\nMegido\nMegidola\nMegidolaon\nFrei\nFreila\nFreidyne\nMafrei\nMafreila\nMafreidyne\nBLANK\nDazzler\nNocturnal Flash\nPulinpa\nTentarafoo\nEvil Touch\nEvil Smile\nMakajama\nMakajamaon\nFamine's Breath\nFamine's Scream\nDormina\nLullaby\nTaunt\nWage War\nOminous Words\nAbysmal Surge\nMarin Karin\nBrain Jack\nTrapped Rat\nBLANK\nSelf-destruct\nSelf-destruct\nSelf-destruct\nLife Drain\nSpirit Drain\nLife Leech\nSpirit Leech\nSpirit Drain\nBLANK\nBLANK\nFoul Breath\nStagnant Air\nReverse Rub\nGhastly Wail\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nInferno\nBlazing Hell\nLow Burn\nMid Burn\nHigh Burn\nLow Freeze\nMid Freeze\nHigh Freeze\nLow Shock\nMid Shock\nDiamond Dust\nIce Age\nHigh Shock\nLow Dizzy\nMid Dizzy\nHigh Dizzy\nLow Confuse\nMid Confuse\nHigh Confuse\nLow Fear\nPanta Rhei\nVacuum Wave\nMid Fear\nHigh Fear\nLow Forget\nMid Forget\nHigh Forget\nLow Brainwash\nMid Brainwash\nHigh Brainwash\nThunder Reign\nWild Thunder\nLow Sleep\nMid Sleep\nHigh Sleep\nLow Rage\nMid Rage\nHigh Rage\nLow Despair\nMid Despair\nDivine Judgment\nSamsara\nHigh Despair\nLow All Ail\nMid All Ail\nHigh All Ail\nBLANK\nBLANK\nBLANK\nBLANK\nDemonic Decree\nDie For Me!\nBLANK\nBLANK\nBLANK\nBLANK\nAtomic Flare\nCosmic Flare\nBLANK\nBLANK\nBlack Viper\nMorning Star\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nPsi\nPsio\nPsiodyne\nMapsi\nMapsio\nMapsiodyne\nBLANK\nPsycho Force\nPsycho Blast\nBLANK\nLunge\nAssault Dive\nMegaton Raid\nGod's Hand\nLunge\nLucky Punch\nMiracle Punch\nBLANK\nBLANK\nBLANK\nCleave\nGiant Slice\nBrave Blade\nSword Dance\nBLANK\nHassou Tobi\nAyamur\nBLANK\nBLANK\nBLANK\nCornered Fang\nRising Slash\nDeadly Fury\nBLANK\nSnap\nTriple Down\nOne-shot Kill\nRiot Gun\nBLANK\nBLANK\nVajra Blast\nVorpal Blade\nBLANK\nBLANK\nBLANK\nVicious Strike\nHeat Wave\nGigantomachia\nBLANK\nBLANK\nBLANK\nRampage\nSwift Strike\nDeathbound\nAgneyastra\nBLANK\nBLANK\nRising Slash\nDeadly Fury\nBLANK\nDouble Fangs\nBLANK\nBLANK\nTempest Slash\nMyriad Slashes\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nSledgehammer\nSkull Cracker\nTerror Claw\nHeadbutt\nStomach Blow\nDream Needle\nHysterical Slap\nNegative Pile\nBrain Shake\nBLANK\nFlash Bomb\nMind Slice\nBloodbath\nMemory Blow\nInsatiable Strike\nDormin Rush\nOni-Kagura\nBad Beat\nBrain Buster\nBLANK\nHandgun\nShotgun\nSlingshot\nMachine Gun\nAssault Rifle\nRevolver\nGrenade Launcher\nLaser Gun\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nAttack\nDia\nDiarama\nDiarahan\nBLANK\nBLANK\nMedia\nMediarama\nMediarahan\nBLANK\nBLANK\nRecarm\nSamarecarm\nRecarmdra\nBLANK\nBLANK\nAmrita Drop\nAmrita Shower\nBLANK\nSalvation\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nPatra\nBLANK\nEnergy Shower\nEnergy Drop\nBaisudi\nMe Patra\nMabaisudi\nBLANK\nBLANK\nBLANK\nTarukaja\nRakukaja\nSukukaja\nHeat Riser\nBLANK\nMatarukaja\nMarakukaja\nMasukukaja\nThermopylae\nBLANK\nTarunda\nRakunda\nSukunda\nDebilitate\nBLANK\nMatarunda\nMarakunda\nMasukunda\nBLANK\nBLANK\nDekunda\nDekaja\nBLANK\nBLANK\nBLANK\nCharge\nConcentrate\nBLANK\nBLANK\nBLANK\nRebellion\nRevolution\nBLANK\nBLANK\nBLANK\nTetrakarn\nMakarakarn\nTetraja\nBLANK\nBLANK\nTetra Break\nMakara Break\nBLANK\nBLANK\nBLANK\nFire Wall\nIce Wall\nElec Wall\nWind Wall\nBLANK\nFire Break\nIce Break\nWind Break\nElec Break\nBLANK\nTrafuri\nTraesto\nBLANK\nNuke Wall\nPsy Wall\nNuke Break\nPsy Break\nBLANK\nBLANK\nBLANK\nAll-out Lv 1\nAll-out Lv 2\nAll-out Lv 3\nEmergency Escape\nAttack\nDown Shot\nSummon\nCall for Backup\nOutlaw Attack\nBarrage\nFollow Crush\nFollow Claw\nFollow Whip\nFollow Blade\nFollow Knuckle\nFollow Axe\nFollow Saber\nDispose Item\nHeal Enemy\nDeath (Despair)\nAlly1 Follow-Up\nAlly2 Follow-Up\nAlly3 Follow-Up\nAlly4 Follow-Up\nAlly5 Follow-Up\nAlly6 Follow-Up\nAlly7 Follow-Up\nPower Up Enemy\nPower Up Enemy\nPower Up Enemy\nSteal Info\nSup Matarukaja\nSup Marakukaja\nSup Masukukaja\nSup All Kaja\nSup Charge\nSup HP +30%\nSup SP +10%\nSup Escape Route\nSup Third Eye\nSubrecover HP\nSubrecover SP\nAnalysis\nDeep Analysis\nFull Analysis\nAll-Out Attack\nDust Flurry\nTongue Whip\nWhip Strike\nLustful Slurp\nLibido Boost\nGolden Knife\nLick\nGold Medal Spike\nVolleyball Assault\nMaelstrom\nFlame Dance\nSilent Snowscape\nThunderclap\nMaeiga\nHunger All\nOcular Vulcan\nMissile Party\nFear Gas\nSuper VIP Form\nMarch of the Piggy\nSphinx Swipe\nWing Blast\nRapid Ascent\nSphinx Dive\nDreadful Scream\nBite\nRestore\nThe Artist's Grace\nWork Order\nSacrifice Order\nSelfless Devotion\nPenalty\nCoin Attack\nSevering Slash\nGatling Gun\nBerserker Dance\nRoulette: HP\nRoulette: SP\nRoulette: Money\nRoulette: Aid 1\nRoulette: Aid 2\nRoulette: Aid 3\nBeast King's Wrath\nHunting Stance\nArm of Destruction\nGryphon's Breath\nRoyal Wing Beam\nCannon Fire\nCannon Barrage\nUnholy Convergence\nPyramid Blast\nTyrant's Fist\nTyrant's Glare\nTyrant's Wave\nFig Seed\nMedicine\nOintment\nAntibiotic Gel\nLife Stone\nBead\nValue Medicine\nMedical Kit\nMaka Leaf\nBead Chain\nSoul Drop\nSnuff Soul\nChewing Soul\nSoul Food\nRevival Bead\nBalm of Life\nRoyel Jelly\nOrganic Herb\nDisclose\nTranquilizer\nKopi Luwak\nGoho-M\nVanish Ball\nSoma\nAmrita Soda\nHiranya\nMuscle Drink\nOdd Morsel\nRancid Gravy\nPlume of Dusk\nMagic Mirror\nPhysical Mirror\nUniverse Ring\nSleipnir\nObsidian Mirror\nPurifying Water\nPurifying Salt\nFirecracker\nSan-zun Tama\nIce Cube\nDry Ice\nPinwheel\nYashichi\nBall Lightning\nTesla Coil\nSmart Bomb\nSegami Rice\nCurse Paper\nFlame Magatama\nWind Magatama\nFreeze Magatama\nBolt Magatama\nHomunculus\nRemoval Potion\nKouga Ball\nMakouha Ball\nEiga Ball\nMaeiga Ball\nPsio Ball\nMapsi Ball\nFreila Ball\nMafrei Ball\nNuke Magatama\nPsy Magatama\nBless Magatama\nCurse Magatama\nCooking\nSnack\nShoes 1\nShoes 2\nShoes 3\nJuice Bar 1\nJuice Bar 2\nJuice Bar 3\nJuice Bar 4\nEnergy Drink 1\nEnergy Drink 2\nEnergy Drink 3\nSoda 1\nSoda 2\nSoda 3\nSoda 4\nRation 1 \nRation 2\nRation 3\nDrug Store 1\nDrug Store 2\nDrug Store 3\nDrug Store 4\nDrug Store 5\nDrug Store 6\nDrug Store 7\nDrug Store 8\nDrug Store 9\nDrug Store 10\nDrug Store 11\nDrug Store 12\nCoffee 1\nCoffee 2\nBLANK\nTwins Down Attack\nCaro Rod\nCaro Attack\nMegidolaon\nRays of Control\nRays of Control\nRays of Control\nRays of Control\nArrow of Light\nDiffraction Arrow\nLight Edge\nGathering Light\nEternal Light\nHoly Change\nDistortion Wave\nTough Law\nFrail Law\nNew Creation\nDistortion Surge\nArrow of Light\nManifest Sword\nManifest Gun\nManifest Bell\nSword of Judgment\nCapital Punishment\nManifest Book\nDistorted Lust\nGospel\nDistorted Wrath\nDistorted Vanity\nSong of Salvation\nWrath of God\nDistorted Gluttony\nDistorted Envy\nSong of Placation\nDivine Apex\nRays of Control\nDistorted Avarice\nWill of the People\nRays of Control\nMoral Support\nActive Support\nMental Hack\nEmergency Shift\nFinal Guard\nPosition Hack\nHigh Analyze\nTreasure Skimmer\nSubrecover HP EX\nSubrecover SP EX\nBLANK\nBLANK\nBLANK\nBLANK\nBig Bang Order\nRoulette Time\nTrip-Upper\nLust Sphere\nDown Shot 2\nDown Shot 3\nDown Shot 4\nElectro Attack\nSinful Shell\nFollow Black\nBLANK\nMadara-Megido\nCurry Raku\nEnemy Benefit\nDiarahan\nCurry Suku\nDecoy Ball\nSuper Decoy Ball\nMetabolic Wave\nLaevateinn\nDesperation\nCall of Chaos\nBig Bang Challenge\nGrail Light 2\nMegidola\nRage Transmission\nHundred Slaps\nDistorted Pride\nDivine Punishment\nWill of the People\nWind Cutter\nShoot Up\nExecutive Punch\nMegidolaon\nVorpal Blade\nMegidolaon\nBig Bang Burger\nEarth Burger\nMars Burger\nMoon Burger\nSaturn Burger\nJustine Attack\nCaroline Attack\nCurry Makara\nCurry Tetra\nCurry Endure\nCurry Charge\nCurry Concentrate\nCurry Heat Riser\nBLANK\nCadenza\nCross Slash\nDoor of Hades\nMagatsu Mandala\nShining Arrows\nBeast Weaver\nTitanomachia\nAbyssal Wings\nOratario\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nMegido\nMegidola\nMegidolaon\nSlam\nMegaton Raid\nOne-shot Kill\nInferno\nDiamond Dust\nBLANK\nBLANK\nCurry 1\nCurry 2\nReviv-All\nReviv-All Z\nBLANK\nBLANK\nWild Talk\nBaton Pass\nPunk Talk\nPickpocket\nHarisen Recovery\nProtect\nGirl Talk\nCrocodile Tears\nSexy Technique\nDetective Talk\nArtist Talk\nNegotiating\nFundraising\nManipulation\nMind Control\nCharisma Speech\nBrainiac Talk\nSabaki\nKakoi Kuzushi \nTouryou\nTogo System\nBullet Hail\nWarning Shot\nCeleb Talk\nKitty Talk\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBrave Blade\nAssault Dive\nTerror Claw\nBufudyne\nPsiodyne\nMazionga\nMaziodyne\nMaeiga\nMaeigaon\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nCounter\nCounterstrike\nHigh Counter\nBLANK\nBLANK\nEndure\nEnduring Soul\nBLANK\nBLANK\nSurvival Trick\nDodge Fire\nEvade Fire\nDodge Ice\nEvade Ice\nDodge Wind\nEvade Wind\nDodge Elec\nEvade Elec\nDodge Phys\nEvade Phys\nFire Boost\nFire Amp\nIce Boost\nIce Amp\nWind Boost\nWind Amp\nElec Boost\nElec Amp\nAngelic Grace\nDivine Grace\nRegenerate 1\nRegenerate 2\nRegenerate 3\nDodge Bless\nDodge Curse\nInvigorate 1\nInvigorate 2\nInvigorate 3\nEvade Bless\nEvade Curse\nAttack Master\nAuto-Mataru\nBLANK\nDefense Master\nAuto-Maraku\nBLANK\nSpeed Master\nAuto-Masuku\nBLANK\nBLANK\nFast Heal\nInsta-Heal\nArms Master\nSpell Master\nBLANK\nSharp Student\nApt Pupil\nAli Dance\nFirm Stance\nBLANK\nLife Aid\nVictory Cry\nGrowth 1\nGrowth 2\nGrowth 3\nUnshaken Will\nBLANK\nBaton Pass\nSoul Touch\nKakoi Kuzushi\nResist Fire\nNull Fire\nRepel Fire\nDrain Fire\nBLANK\nResist Ice\nNull Ice\nRepel Ice\nDrain Ice\nBLANK\nResist Wind\nNull Wind\nRepel Wind\nDrain Wind\nBLANK\nResist Elec\nNull Elec\nRepel Elec\nDrain Elec\nBLANK\nResist Bless\nNull Bless\nRepel Bless\nDrain Bless\nBLANK\nResist Curse\nNull Curse\nRepel Curse\nDrain Curse\nBLANK\nResist Phys\nNull Phys\nRepel Phys\nDrain Phys\nBLANK\nAilment Boost\nHama Boost\nMudo Boost\nBLANK\nBLANK\nDizzy Boost\nConfuse Boost\nFear Boost\nForget Boost\nSleep Boost\nRage Boost\nDespair Boost\nBLANK\nBrainwash Boost\nBLANK\nResist Dizzy\nResist Confuse\nResist Fear\nResist Forget\nResist Sleep\nResist Rage\nResist Despair\nBLANK\nResist Brainwash\nBLANK\nNull Dizzy\nNull Confuse\nNull Fear\nNull Forget\nNull Sleep\nNull Rage\nNull Despair\nBLANK\nNull Brainwash\nBLANK\nBurn Boost\nFreeze Boost\nShock Boost\nBLANK\nFortified Moxy\nAdverse Resolve\nLast Stand\nHeat Up\nBLANK\nTouch n' Go\nClimate Decorum\nAmbient Aid\nRESERVE\nSnipe\nCripple\nTrigger Happy\nResist Nuke\nNull Nuke\nRepel Nuke\nDrain Nuke\nRESERVE\nResist Psy\nNull Psy\nRepel Psy\nDrain Psy\nRESERVE\nNuke Boost\nNuke Amp\nRESERVE\nPsy Boost\nPsy Amp\nRESERVE\nDodge Nuke\nEvade Nuke\nRESERVE\nDodge Psy\nEvade Psy\nRESERVE\nBless Boost\nBless Amp\nRESERVE\nCurse Boost\nCurse Amp\nRESERVE\nMagic Ability\nFortify Spirit\nAlmighty Boost\nAlmighty Amp\nZenith Defense\nSoul Chain\nVanity Copy\nGluttonous Snuff\nSloth Defense\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\nBLANK\n"
  },
  {
    "path": "KHSave.LibPersona5/SavePersona5.cs",
    "content": "using KHSave.LibPersona5.Models;\nusing System;\nusing System.IO;\nusing System.Text;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibPersona5\n{\n    public interface ISavePersona5\n    {\n        bool IsRoyal { get; }\n        //string ProtagonistLastName { get; set; }\n        //string ProtagonistFirstName { get; set; }\n        int Money { get; set; }\n        bool PartyModifierRyuji { get; set; }\n        bool PartyModifierMorgana { get; set; }\n        bool PartyModifierAnn { get; set; }\n        bool PartyModifierYusuke { get; set; }\n        bool PartyModifierMakoto { get; set; }\n        bool PartyModifierHaru { get; set; }\n        bool PartyModifierFutaba { get; set; }\n        bool PartyModifierAkechi { get; set; }\n        bool PartyModifierKasumi { get; set; }\n        short CalendarDay1 { get; set; } // Visual change on the load screen\n        short CalendarDay2 { get; set; } // Just a visual change\n        short CalendarDay3 { get; set; }\n        float PositionX { get; set; }\n        float PositionY { get; set; }\n        float PositionZ { get; set; }\n        short RoomCategory { get; set; }\n        short RoomMap { get; set; }\n        Character[] Characters { get; set; }\n        byte[] InventoryCount { get; }\n        Persona[] Compendium { get; set; }\n    }\n\n    public class SavePersona5\n    {\n        private const int Persona5Identifier = 0x0e000000;\n        private const int Persona5RoyalIdentifier = 0x2d000000;\n        internal static IBinaryMapping Mapper;\n\n        static SavePersona5()\n        {\n            Mapper = MappingConfiguration\n                .DefaultConfiguration(Encoding.UTF8, true)\n                .ForType<string>(ReadString, WriteString)\n                .ForType<float>(ReadFloat, WriteFloat)\n                .Build();\n        }\n\n        public static bool IsValid(Stream stream)\n        {\n            switch (GetGameIdentifier(stream.SetPosition(0)))\n            {\n                case Persona5Identifier:\n                    return stream.Length == 192 * 1024;\n                case Persona5RoyalIdentifier:\n                    return stream.Length == 256 * 1024;\n            }\n            return false;\n        }\n\n        public static ISavePersona5 Read(Stream stream)\n        {\n            switch (GetGameIdentifier(stream.SetPosition(0)))\n            {\n                case Persona5Identifier:\n                    return Mapper.ReadObject<Persona5Vanilla>(stream.SetPosition(0));\n                case Persona5RoyalIdentifier:\n                    return Mapper.ReadObject<Persona5Royal>(stream.SetPosition(0));\n                default:\n                    throw new NotImplementedException(\"The version has been recognized but it is not supported.\");\n            }\n        }\n\n        public static void Write<TSavePersona5>(Stream stream, TSavePersona5 save)\n            where TSavePersona5 : class, ISavePersona5\n        {\n            Mapper.WriteObject(stream.FromBegin(), save);\n        }\n\n        private static TSavePersona5 Read<TSavePersona5>(Stream stream)\n            where TSavePersona5 : class, ISavePersona5 =>\n            Mapper.ReadObject<TSavePersona5>(stream.FromBegin());\n\n        private static int GetGameIdentifier(Stream stream) =>\n            new BinaryReader(stream).ReadInt32();\n\n        private static object ReadString(MappingReadArgs arg)\n        {\n            var dstPosition = arg.Reader.BaseStream.Position + arg.Count * 2;\n            var count = arg.Count;\n            var sb = new StringBuilder(count);\n            for (var i = 0; i < count; i++)\n            {\n                var ch = arg.Reader.ReadByte();\n                if (ch == 0)\n                    break;\n                if (ch >= '0' && ch <= '9')\n                    sb.Append((char)ch);\n                else if (ch >= 'A' && ch <= 'Z')\n                    sb.Append((char)ch);\n                else if (ch >= 'a' && ch <= 'z')\n                    sb.Append((char)ch);\n                else if (ch == 0x80)\n                {\n                    ch = arg.Reader.ReadByte();\n                    if (ch >= 0xc1 && ch <= 0xc1 + ('z' - 'a'))\n                        sb.Append((char)(ch - 0xc1 + 'a'));\n                    else if (ch >= 0xa1 && ch <= 0xa1 + ('Z' - 'A'))\n                        sb.Append((char)(ch - 0xa1 + 'A'));\n                    else\n                        throw new NotImplementedException($\"Read P5 string: second char {ch:X02}\");\n                }\n                else\n                    throw new NotImplementedException($\"Read P5 string: first char {ch:X02}\");\n            }\n\n            arg.Reader.BaseStream.Position = dstPosition;\n            return sb.ToString();\n        }\n\n        private static void WriteString(MappingWriteArgs arg)\n        {\n            var index = 0;\n            var str = arg.Item as string;\n            var remaining = arg.Count;\n            while (index < str.Length && remaining-- > 0)\n            {\n                var data = 0;\n                var ch = str[index++];\n                if (ch >= 'A' && ch <= 'Z')\n                    data = ch - 'A' + 0xa1;\n                else if (ch >= 'a' && ch <= 'z')\n                    data = ch - 'a' + 0xc1;\n                else\n                    throw new NotImplementedException($\"Write P5 string: can't write '{ch}'\");\n\n                arg.Writer.Write((byte)0x80);\n                arg.Writer.Write((byte)data);\n            }\n            while (remaining-- > 0)\n            {\n                arg.Writer.Write((short)0);\n            }\n        }\n\n        private unsafe static object ReadFloat(MappingReadArgs arg)\n        {\n            var data = (arg.Reader.ReadByte() << 24) |\n                (arg.Reader.ReadByte() << 16) |\n                (arg.Reader.ReadByte() << 8) |\n                arg.Reader.ReadByte();\n            return *(float*)&data;\n        }\n\n        private unsafe static void WriteFloat(MappingWriteArgs arg)\n        {\n            var value = (float)arg.Item;\n            var data = *(int*)&value;\n            arg.Writer.Write((byte)((data >> 24) & 0xff));\n            arg.Writer.Write((byte)((data >> 16) & 0xff));\n            arg.Writer.Write((byte)((data >> 8) & 0xff));\n            arg.Writer.Write((byte)(data & 0xff));\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Types/ArcanaType.cs",
    "content": "namespace KHSave.LibPersona5.Types\n{\n    public enum ArcanaType : byte\n    {\n        Null,\n        Fool,\n        Magician,\n        Priestess,\n        Empress,\n        Emperor,\n        Hierophant,\n        Lovers,\n        Chariot,\n        Justice,\n        Hermit,\n        Fortune,\n        Strength,\n        Hanged,\n        Death,\n        Temperance,\n        Devil,\n        Tower,\n        Star,\n        Moon,\n        Sun,\n        Judgement,\n        Aeon,\n        Unknown,\n        World,\n\n        Faith = 29,\n        Councillor\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Types/Characters.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibPersona5.Types\n{\n    public enum Characters\n    {\n        [Info] Joker,\n        [Info] Skull,\n        [Info] Mona,\n        [Info] Panther,\n        [Info] Fox,\n        [Info] Queen,\n        [Info] Noir,\n        [Info] Oracle,\n        [Info] Crow,\n        [Info] Violet,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Types/Demon.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Extensions;\n\nnamespace KHSave.LibPersona5.Types\n{\n    public class DemonAttribute : InfoAttribute\n    {\n        public bool Royal { get; }\n        public string Arcana { get; }\n\n        public DemonAttribute(string name = null, bool royal = false, string tarot = null) : base(name)\n        {\n            Royal = royal;\n            Arcana = tarot ?? string.Empty;\n        }\n\n        public static string GetArcana(object obj) =>\n            obj.GetAttribute<DemonAttribute>()?.Arcana;\n    }\n    public class MagicianAttribute : DemonAttribute\n    {\n        public MagicianAttribute(string name = null, bool royal = false) : base(name, royal, \"Magician\") { }\n    }\n    public class JusticeAttribute : DemonAttribute\n    {\n        public JusticeAttribute(string name = null, bool royal = false) : base(name, royal, \"Justice\") { }\n    }\n    public class DevilAttribute : DemonAttribute\n    {\n        public DevilAttribute(string name = null, bool royal = false) : base(name, royal, \"Devil\") { }\n    }\n    public class StarAttribute : DemonAttribute\n    {\n        public StarAttribute(string name = null, bool royal = false) : base(name, royal, \"Star\") { }\n    }\n    public class LoversAttribute : DemonAttribute\n    {\n        public LoversAttribute(string name = null, bool royal = false) : base(name, royal, \"Lovers\") { }\n    }\n    public class ChariotAttribute : DemonAttribute\n    {\n        public ChariotAttribute(string name = null, bool royal = false) : base(name, royal, \"Chariot\") { }\n    }\n    public class EmperorAttribute : DemonAttribute\n    {\n        public EmperorAttribute(string name = null, bool royal = false) : base(name, royal, \"Emperor\") { }\n    }\n    public class HangedAttribute : DemonAttribute\n    {\n        public HangedAttribute(string name = null, bool royal = false) : base(name, royal, \"Hanged\") { }\n    }\n    public class FoolAttribute : DemonAttribute\n    {\n        public FoolAttribute(string name = null, bool royal = false) : base(name, royal, \"Fool\") { }\n    }\n    public class TowerAttribute : DemonAttribute\n    {\n        public TowerAttribute(string name = null, bool royal = false) : base(name, royal, \"Tower\") { }\n    }\n    public class HierophantAttribute : DemonAttribute\n    {\n        public HierophantAttribute(string name = null, bool royal = false) : base(name, royal, \"Hierophant\") { }\n    }\n    public class PriestessAttribute : DemonAttribute\n    {\n        public PriestessAttribute(string name = null, bool royal = false) : base(name, royal, \"Priestess\") { }\n    }\n    public class StrengthAttribute : DemonAttribute\n    {\n        public StrengthAttribute(string name = null, bool royal = false) : base(name, royal, \"Strength\") { }\n    }\n    public class EmpressAttribute : DemonAttribute\n    {\n        public EmpressAttribute(string name = null, bool royal = false) : base(name, royal, \"Empress\") { }\n    }\n    public class SunAttribute : DemonAttribute\n    {\n        public SunAttribute(string name = null, bool royal = false) : base(name, royal, \"Sun\") { }\n    }\n    public class MoonAttribute : DemonAttribute\n    {\n        public MoonAttribute(string name = null, bool royal = false) : base(name, royal, \"Moon\") { }\n    }\n    public class JudgementAttribute : DemonAttribute\n    {\n        public JudgementAttribute(string name = null, bool royal = false) : base(name, royal, \"Judgement\") { }\n    }\n    public class DeathAttribute : DemonAttribute\n    {\n        public DeathAttribute(string name = null, bool royal = false) : base(name, royal, \"Death\") { }\n    }\n    public class TemperAttribute : DemonAttribute\n    {\n        public TemperAttribute(string name = null, bool royal = false) : base(name, royal, \"Temper\") { }\n    }\n    public class HermitAttribute : DemonAttribute\n    {\n        public HermitAttribute(string name = null, bool royal = false) : base(name, royal, \"Hermit\") { }\n    }\n    public class FortuneAttribute : DemonAttribute\n    {\n        public FortuneAttribute(string name = null, bool royal = false) : base(name, royal, \"Fortune\") { }\n    }\n    public class WorldAttribute : DemonAttribute\n    {\n        public WorldAttribute(string name = null, bool royal = false) : base(name, royal, \"World\") { }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Types/Equipment.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibPersona5.Types\n{\n    public class EquipmentAttribute : InfoAttribute\n    {\n        public EquipmentAttribute(string name = null) : base(name) { }\n    }\n\n    public class DaggerAttribute : EquipmentAttribute\n    {\n        public DaggerAttribute(string name = null) : base(name) { }\n    }\n\n    public class PoleAttribute : EquipmentAttribute\n    {\n        public PoleAttribute(string name = null) : base(name) { }\n    }\n\n    public class SaberAttribute : EquipmentAttribute\n    {\n        public SaberAttribute(string name = null) : base(name) { }\n    }\n\n    public class RangeAttribute : EquipmentAttribute\n    {\n        public RangeAttribute(string name = null) : base(name) { }\n    }\n\n    public class RangeJokerAttribute : RangeAttribute\n    {\n        public RangeJokerAttribute(string name = null) : base(name) { }\n    }\n\n    public class RangeCrowAttribute : RangeAttribute\n    {\n        public RangeCrowAttribute(string name = null) : base(name) { }\n    }\n\n    public class ProtectorAttribute : EquipmentAttribute\n    {\n        public ProtectorAttribute(string name = null) : base(name) { }\n    }\n\n    public class ProtectorMaleAttribute : ProtectorAttribute\n    {\n        public ProtectorMaleAttribute(string name = null) : base(name) { }\n    }\n\n    public class ProtectorFemaleAttribute : ProtectorAttribute\n    {\n        public ProtectorFemaleAttribute(string name = null) : base(name) { }\n    }\n\n    public class ProtectorUnisexAttribute : ProtectorAttribute\n    {\n        public ProtectorUnisexAttribute(string name = null) : base(name) { }\n    }\n\n    public class ProtectorCatAttribute : ProtectorAttribute\n    {\n        public ProtectorCatAttribute(string name = null) : base(name) { }\n    }\n\n    public class OutfitAttribute : EquipmentAttribute\n    {\n        public OutfitAttribute(string name = null) : base(name) { }\n    }\n\n    public enum Equipment : ushort\n    {\n        [Dagger(\"Generic Gear\")] GenericGear = 0x0001,\n        [Dagger(\"Rebel Knife\")] RebelKnife = 0x0002,\n        [Dagger(\"Frenzy Dagger\")] FrenzyDagger = 0x0016,\n        [Pole(\"Dragon God Pole\")] DragonGodPole = 0x0039,\n        [Dagger(\"Black Kogatana\")] BlackKogatana = 0x00eb,\n        [Saber(\"Lumina Saber\")] LuminaSaber = 0xdf,\n        [Protector(\"Thief Clothes\")] ThiefClothes = 0x1001,\n        [ProtectorMale(\"Dark Undershirt\")] DarkUndershirt = 0x1002,\n        [ProtectorMale(\"Print T-Shirt\")] PrintTShirt = 0x1003,\n        [ProtectorCat(\"Neckerchief\")] Neckerchief = 0x1004,\n        [ProtectorFemale(\"Baseball Jacket\")] BaseballJacket = 0x1005,\n        [ProtectorMale(\"Dress Shirt\")] DressShirt = 0x1006,\n        [ProtectorFemale(\"Turtleneck\")] Turtleneck = 0x1007,\n        [ProtectorFemale(\"Pink Top\")] PinkTop = 0x1008,\n        [ProtectorFemale(\"Loose Cutsew\")] LooseCutsew = 0x1009,\n        [ProtectorMale(\"Formal Shirt\")] FormalShirt = 0x100A,\n        [ProtectorMale(\"UFO Vest\")] UfoVest = 0x1060,\n        [ProtectorMale(\"Moon Man Vest\")] MoonManVest = 0x1068,\n        [ProtectorFemale(\"Gambler Dress\")] GamblerDress = 0x107D,\n        [ProtectorMale(\"Fireman Happi\")] FiremanHappi = 0x108c,\n        [ProtectorFemale(\"Mizuha Doumaru\")] MizuhaDoumaru = 0x108D,\n        [ProtectorCat(\"Gorgeous Collar\")] GorgeousCollar = 0x1093,\n        [ProtectorFemale(\"Titanium Set\")] TitaniumSet = 0x1099,\n        [ProtectorFemale(\"Haten Robe\")] HatenRobe = 0x10A1,\n        [Accessory(\"Hip Glasses\")] HipGlasses = 0x2001,\n        [Accessory(\"Fanny Pack\")] FannyPack = 0x2003,\n        [Accessory(\"Hairpin\")] Hairpin = 0x2004,\n        [Accessory(\"Silver Key Ring\")] SilverKeyRing = 0x2005,\n        [Accessory(\"Black Tights\")] BlackTights = 0x2006,\n        [Accessory(\"Dotted Tights\")] DottedTights = 0x2007,\n        [Accessory(\"Headphones\")] Headphones = 0x2008,\n        [Accessory(\"Gale Cape\")] GaleCape = 0x209D,\n        [Accessory(\"Blitz Ring\")] BlitzRing = 0x207C,\n        [Accessory(\"Druid Amulet\")] DruidAmulet = 0x2053,\n        [Accessory(\"Sonic Socks\")] SonicSocks = 0x2061,\n        [Accessory(\"Black Necktie\")] BlackNecktie = 0x2009,\n        [Accessory(\"Stamina Sash\")] StaminaSash = 0x200c,\n        [Accessory(\"Ignis Ring\")] IgnisRing = 0x2076,\n        [Accessory(\"Hero Eyepatch\")] HeroEyepatch = 0x2091,\n        [Accessory(\"Stone of Scone\")] StoneOfScone = 0x20B9,\n        [Accessory(\"Koh-i-Noor\")] KohiNoor = 0x20ba,\n        [Accessory(\"SP Adhesive 3\")] SpAdhesive3 = 0x20E3,\n        [Outfit(\"Phantom Suit\")] PhantomSuit = 0x7002,\n        [Outfit(\"Pirate Armor\")] PirateArmor = 0x7003,\n        [Outfit(\"Morgana Classic\")] MorganaClassic = 0x7004,\n        [Outfit(\"Red Latex Suit\")] RedLatexSuit = 0x7005,\n        [Outfit(\"Outlaw's Attire\")] OutlawAttire = 0x7006,\n        [Outfit(\"Metal Rider\")] MetalRider = 0x7007,\n        [Outfit(\"Musketeer Suit\")] MusketeerSuit = 0x7008,\n        [Outfit(\"Cyber Gear\")] CyberGear = 0x7009,\n        [Outfit(\"Prince Suit\")] PrinceSuit = 0x700A,\n        [Outfit(\"Swimsuit\")] Swimsuit = 0x7038,\n        [RangeJoker(\"Tkachev II\")] Tkachev2 = 0x8013,\n        [RangeJoker(\"Aura Gun 1\")] AuraGun1 = 0x8008,\n        [RangeCrow(\"Moebius\")] Moebius = 0x80E0,\n        [RangeJoker(\"Cocytus\")] Cocytus = 0x80fa,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Types/Inventory.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibPersona5.Types\n{\n    public class ConsumableHpAttribute : ConsumableAttribute\n    {\n        public ConsumableHpAttribute(string name = null) : base(name) { }\n    }\n\n    public enum Inventory\n    {\n        [Consumable(\"Blank\")] Blank,\n        [ConsumableHp(\"Devil Fruit\")] DevilFruit,\n        [Consumable(\"Recov-R: 50mg\")] Item2,\n        [Consumable(\"Recov-R: 100mg\")] Item3,\n        [Consumable(\"Takemedic\")] Item4,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Types/Skill.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibPersona5.Types\n{\n    public class SkillAttribute : InfoAttribute\n    {\n        public SkillAttribute(string name = null) : base(name) { }\n    }\n    public class HitSkillAttribute : SkillAttribute\n    {\n        public HitSkillAttribute(string name = null) : base(name) { }\n    }\n    public class GunSkillAttribute : SkillAttribute\n    {\n        public GunSkillAttribute(string name = null) : base(name) { }\n    }\n    public class FireSkillAttribute : SkillAttribute\n    {\n        public FireSkillAttribute(string name = null) : base(name) { }\n    }\n    public class IceSkillAttribute : SkillAttribute\n    {\n        public IceSkillAttribute(string name = null) : base(name) { }\n    }\n    public class WindSkillAttribute : SkillAttribute\n    {\n        public WindSkillAttribute(string name = null) : base(name) { }\n    }\n    public class ThunderSkillAttribute : SkillAttribute\n    {\n        public ThunderSkillAttribute(string name = null) : base(name) { }\n    }\n    public class BlessSkillAttribute : SkillAttribute\n    {\n        public BlessSkillAttribute(string name = null) : base(name) { }\n    }\n    public class DeathSkillAttribute : SkillAttribute\n    {\n        public DeathSkillAttribute(string name = null) : base(name) { }\n    }\n    public class AlmightySkillAttribute : SkillAttribute\n    {\n        public AlmightySkillAttribute(string name = null) : base(name) { }\n    }\n    public class NuclearSkillAttribute : SkillAttribute\n    {\n        public NuclearSkillAttribute(string name = null) : base(name) { }\n    }\n    public class PsychoSkillAttribute : SkillAttribute\n    {\n        public PsychoSkillAttribute(string name = null) : base(name) { }\n    }\n    public class SupportSkillAttribute : SkillAttribute\n    {\n        public SupportSkillAttribute(string name = null) : base(name) { }\n    }\n    public class AutoSkillAttribute : SkillAttribute\n    {\n        public AutoSkillAttribute(string name = null) : base(name) { }\n    }\n    public class PoisonSkillAttribute : SkillAttribute\n    {\n        public PoisonSkillAttribute(string name = null) : base(name) { }\n    }\n    public class HealSkillAttribute : SkillAttribute\n    {\n        public HealSkillAttribute(string name = null) : base(name) { }\n    }\n    public class SpecialSkillAttribute : SkillAttribute\n    {\n        public SpecialSkillAttribute(string name = null) : base(name) { }\n    }\n\n    public enum Skill : short\n    {\n        [Skill(\"-\")] Empty,\n        [Unused] Skill1,\n        [Unused] Skill2,\n        [Unused] Skill3,\n        [Unused] Skill4,\n        [Unused] Skill5,\n        [Unused] Skill6,\n        [Unused] Skill7,\n        [Unused] Skill8,\n        [Unused] Skill9,\n        [FireSkill(\"Agi\")] Skill10,\n        [FireSkill(\"Agilao\")] Skill11,\n        [FireSkill(\"Agidyne\")] Skill12,\n        [FireSkill(\"Maragi\")] Skill13,\n        [FireSkill(\"Maragion\")] Skill14,\n        [FireSkill(\"Maragidyne\")] Skill15,\n        [FireSkill(\"Agi\")] Skill16,\n        [FireSkill(\"Maragi\")] Skill17,\n        [Unused] Skill18,\n        [Unused] Skill19,\n        [IceSkill(\"Bufu\")] Skill20,\n        [IceSkill(\"Bufula\")] Skill21,\n        [IceSkill(\"Bufudyne\")] Skill22,\n        [IceSkill(\"Mabufu\")] Skill23,\n        [IceSkill(\"Mabufula\")] Skill24,\n        [IceSkill(\"Mabufudyne\")] Skill25,\n        [IceSkill(\"Bufu\")] Skill26,\n        [IceSkill(\"Mabufu\")] Skill27,\n        [Unused] Skill28,\n        [Unused] Skill29,\n        [WindSkill(\"Garu\")] Skill30,\n        [WindSkill(\"Garula\")] Skill31,\n        [WindSkill(\"Garudyne\")] Skill32,\n        [WindSkill(\"Magaru\")] Skill33,\n        [WindSkill(\"Magarula\")] Skill34,\n        [WindSkill(\"Magarudyne\")] Skill35,\n        [WindSkill(\"Garu\")] Skill36,\n        [Unused] Skill37,\n        [Unused] Skill38,\n        [Unused] Skill39,\n        [ThunderSkill(\"Zio\")] Skill40,\n        [ThunderSkill(\"Zionga\")] Skill41,\n        [ThunderSkill(\"Ziodyne\")] Skill42,\n        [ThunderSkill(\"Mazio\")] Skill43,\n        [ThunderSkill(\"Mazionga\")] Skill44,\n        [ThunderSkill(\"Maziodyne\")] Skill45,\n        [ThunderSkill(\"Zio\")] Skill46,\n        [ThunderSkill(\"Mazio\")] Skill47,\n        [Unused] Skill48,\n        [Unused] Skill49,\n        [BlessSkill(\"Hama\")] Skill50,\n        [BlessSkill(\"Hamaon\")] Skill51,\n        [BlessSkill(\"Mahama\")] Skill52,\n        [BlessSkill(\"Mahamaon\")] Skill53,\n        [BlessSkill(\"Kouha\")] Skill54,\n        [BlessSkill(\"Kouga\")] Skill55,\n        [BlessSkill(\"Kougaon\")] Skill56,\n        [BlessSkill(\"Makouha\")] Skill57,\n        [BlessSkill(\"Makouga\")] Skill58,\n        [BlessSkill(\"Makougaon\")] Skill59,\n        [DeathSkill(\"Mudo\")] Skill60,\n        [DeathSkill(\"Mudoon\")] Skill61,\n        [DeathSkill(\"Mamudo\")] Skill62,\n        [DeathSkill(\"Mamudoon\")] Skill63,\n        [DeathSkill(\"Eiha\")] Skill64,\n        [DeathSkill(\"Eiga\")] Skill65,\n        [DeathSkill(\"Eigaon\")] Skill66,\n        [DeathSkill(\"Maeiha\")] Skill67,\n        [DeathSkill(\"Maeiga\")] Skill68,\n        [DeathSkill(\"Maeigaon\")] Skill69,\n        [AlmightySkill(\"Megido\")] Skill70,\n        [AlmightySkill(\"Megidola\")] Skill71,\n        [AlmightySkill(\"Megidolaon\")] Skill72,\n        [NuclearSkill(\"Frei\")] Skill73,\n        [NuclearSkill(\"Freila\")] Skill74,\n        [NuclearSkill(\"Freidyne\")] Skill75,\n        [NuclearSkill(\"Mafrei\")] Skill76,\n        [NuclearSkill(\"Mafreila\")] Skill77,\n        [NuclearSkill(\"Mafreidyne\")] Skill78,\n        [Unused] Skill79,\n        [PoisonSkill(\"Dazzler\")] Skill80,\n        [PoisonSkill(\"Nocturnal Flash\")] Skill81,\n        [PoisonSkill(\"Pulinpa\")] Skill82,\n        [PoisonSkill(\"Tentarafoo\")] Skill83,\n        [PoisonSkill(\"Evil Touch\")] Skill84,\n        [PoisonSkill(\"Evil Smile\")] Skill85,\n        [PoisonSkill(\"Makajama\")] Skill86,\n        [PoisonSkill(\"Makajamaon\")] Skill87,\n        [PoisonSkill(\"Famine's Breath\")] Skill88,\n        [PoisonSkill(\"Famine's Scream\")] Skill89,\n        [PoisonSkill(\"Dormina\")] Skill90,\n        [PoisonSkill(\"Lullaby\")] Skill91,\n        [PoisonSkill(\"Taunt\")] Skill92,\n        [PoisonSkill(\"Wage War\")] Skill93,\n        [PoisonSkill(\"Ominous Words\")] Skill94,\n        [PoisonSkill(\"Abysmal Surge\")] Skill95,\n        [PoisonSkill(\"Marin Karin\")] Skill96,\n        [PoisonSkill(\"Brain Jack\")] Skill97,\n        [AlmightySkill(\"Trapped Rat\")] Skill98,\n        [Unused] Skill99,\n        [AlmightySkill(\"Self-destruct\")] Skill100,\n        [AlmightySkill(\"Self-destruct\")] Skill101,\n        [AlmightySkill(\"Self-destruct\")] Skill102,\n        [AlmightySkill(\"Life Drain\")] Skill103,\n        [AlmightySkill(\"Spirit Drain\")] Skill104,\n        [AlmightySkill(\"Life Leech\")] Skill105,\n        [AlmightySkill(\"Spirit Leech\")] Skill106,\n        [AlmightySkill(\"Spirit Drain\")] Skill107,\n        [Unused] Skill108,\n        [Unused] Skill109,\n        [AlmightySkill(\"Foul Breath\")] Skill110,\n        [AlmightySkill(\"Stagnant Air\")] Skill111,\n        [AlmightySkill(\"Reverse Rub\")] Skill112,\n        [AlmightySkill(\"Ghastly Wail\")] Skill113,\n        [Unused] Skill114,\n        [Unused] Skill115,\n        [Unused] Skill116,\n        [Unused] Skill117,\n        [Unused] Skill118,\n        [Unused] Skill119,\n        [FireSkill(\"Inferno\")] Skill120,\n        [FireSkill(\"Blazing Hell\")] Skill121,\n        [AutoSkill(\"Low Burn\")] Skill122,\n        [AutoSkill(\"Mid Burn\")] Skill123,\n        [AutoSkill(\"High Burn\")] Skill124,\n        [AutoSkill(\"Low Freeze\")] Skill125,\n        [AutoSkill(\"Mid Freeze\")] Skill126,\n        [AutoSkill(\"High Freeze\")] Skill127,\n        [AutoSkill(\"Low Shock\")] Skill128,\n        [AutoSkill(\"Mid Shock\")] Skill129,\n        [IceSkill(\"Diamond Dust\")] Skill130,\n        [IceSkill(\"Ice Age\")] Skill131,\n        [AutoSkill(\"High Shock\")] Skill132,\n        [AutoSkill(\"Low Dizzy\")] Skill133,\n        [AutoSkill(\"Mid Dizzy\")] Skill134,\n        [AutoSkill(\"High Dizzy\")] Skill135,\n        [AutoSkill(\"Low Confuse\")] Skill136,\n        [AutoSkill(\"Mid Confuse\")] Skill137,\n        [AutoSkill(\"High Confuse\")] Skill138,\n        [AutoSkill(\"Low Fear\")] Skill139,\n        [WindSkill(\"Panta Rhei\")] Skill140,\n        [WindSkill(\"Vacuum Wave\")] Skill141,\n        [AutoSkill(\"Mid Fear\")] Skill142,\n        [AutoSkill(\"High Fear\")] Skill143,\n        [AutoSkill(\"Low Forget\")] Skill144,\n        [AutoSkill(\"Mid Forget\")] Skill145,\n        [AutoSkill(\"High Forget\")] Skill146,\n        [AutoSkill(\"Low Brainwash\")] Skill147,\n        [AutoSkill(\"Mid Brainwash\")] Skill148,\n        [AutoSkill(\"High Brainwash\")] Skill149,\n        [ThunderSkill(\"Thunder Reign\")] Skill150,\n        [ThunderSkill(\"Wild Thunder\")] Skill151,\n        [AutoSkill(\"Low Sleep\")] Skill152,\n        [AutoSkill(\"Mid Sleep\")] Skill153,\n        [AutoSkill(\"High Sleep\")] Skill154,\n        [AutoSkill(\"Low Rage\")] Skill155,\n        [AutoSkill(\"Mid Rage\")] Skill156,\n        [AutoSkill(\"High Rage\")] Skill157,\n        [AutoSkill(\"Low Despair\")] Skill158,\n        [AutoSkill(\"Mid Despair\")] Skill159,\n        [BlessSkill(\"Divine Judgment\")] Skill160,\n        [BlessSkill(\"Samsara\")] Skill161,\n        [AutoSkill(\"High Despair\")] Skill162,\n        [AutoSkill(\"Low All Ail\")] Skill163,\n        [AutoSkill(\"Mid All Ail\")] Skill164,\n        [AutoSkill(\"High All Ail\")] Skill165,\n        [Unused] Skill166,\n        [Unused] Skill167,\n        [Unused] Skill168,\n        [Unused] Skill169,\n        [DeathSkill(\"Demonic Decree\")] Skill170,\n        [DeathSkill(\"Die For Me!\")] Skill171,\n        [Unused] Skill172,\n        [Unused] Skill173,\n        [Unused] Skill174,\n        [Unused] Skill175,\n        [NuclearSkill(\"Atomic Flare\")] Skill176,\n        [NuclearSkill(\"Cosmic Flare\")] Skill177,\n        [Unused] Skill178,\n        [Unused] Skill179,\n        [AlmightySkill(\"Black Viper\")] Skill180,\n        [AlmightySkill(\"Morning Star\")] Skill181,\n        [Unused] Skill182,\n        [Unused] Skill183,\n        [Unused] Skill184,\n        [Unused] Skill185,\n        [Unused] Skill186,\n        [Unused] Skill187,\n        [Unused] Skill188,\n        [Unused] Skill189,\n        [PsychoSkill(\"Psi\")] Skill190,\n        [PsychoSkill(\"Psio\")] Skill191,\n        [PsychoSkill(\"Psiodyne\")] Skill192,\n        [PsychoSkill(\"Mapsi\")] Skill193,\n        [PsychoSkill(\"Mapsio\")] Skill194,\n        [PsychoSkill(\"Mapsiodyne\")] Skill195,\n        [Unused] Skill196,\n        [PsychoSkill(\"Psycho Force\")] Skill197,\n        [PsychoSkill(\"Psycho Blast\")] Skill198,\n        [Unused] Skill199,\n        [HitSkill(\"Lunge\")] Skill200,\n        [HitSkill(\"Assault Dive\")] Skill201,\n        [HitSkill(\"Megaton Raid\")] Skill202,\n        [HitSkill(\"God's Hand\")] Skill203,\n        [HitSkill(\"Lunge\")] Skill204,\n        [HitSkill(\"Lucky Punch\")] Skill205,\n        [HitSkill(\"Miracle Punch\")] Skill206,\n        [Unused] Skill207,\n        [Unused] Skill208,\n        [Unused] Skill209,\n        [HitSkill(\"Cleave\")] Skill210,\n        [HitSkill(\"Giant Slice\")] Skill211,\n        [HitSkill(\"Brave Blade\")] Skill212,\n        [HitSkill(\"Sword Dance\")] Skill213,\n        [Unused] Skill214,\n        [HitSkill(\"Hassou Tobi\")] Skill215,\n        [HitSkill(\"Ayamur\")] Skill216,\n        [Unused] Skill217,\n        [Unused] Skill218,\n        [Unused] Skill219,\n        [HitSkill(\"Cornered Fang\")] Skill220,\n        [HitSkill(\"Rising Slash\")] Skill221,\n        [HitSkill(\"Deadly Fury\")] Skill222,\n        [Unused] Skill223,\n        [GunSkill(\"Snap\")] Skill224,\n        [GunSkill(\"Triple Down\")] Skill225,\n        [GunSkill(\"One-shot Kill\")] Skill226,\n        [GunSkill(\"Riot Gun\")] Skill227,\n        [Unused] Skill228,\n        [Unused] Skill229,\n        [HitSkill(\"Vajra Blast\")] Skill230,\n        [HitSkill(\"Vorpal Blade\")] Skill231,\n        [Unused] Skill232,\n        [Unused] Skill233,\n        [Unused] Skill234,\n        [HitSkill(\"Vicious Strike\")] Skill235,\n        [HitSkill(\"Heat Wave\")] Skill236,\n        [HitSkill(\"Gigantomachia\")] Skill237,\n        [Unused] Skill238,\n        [Unused] Skill239,\n        [Unused] Skill240,\n        [HitSkill(\"Rampage\")] Skill241,\n        [HitSkill(\"Swift Strike\")] Skill242,\n        [HitSkill(\"Deathbound\")] Skill243,\n        [HitSkill(\"Agneyastra\")] Skill244,\n        [Unused] Skill245,\n        [Unused] Skill246,\n        [HitSkill(\"Rising Slash\")] Skill247,\n        [HitSkill(\"Deadly Fury\")] Skill248,\n        [Unused] Skill249,\n        [HitSkill(\"Double Fangs\")] Skill250,\n        [Unused] Skill251,\n        [Unused] Skill252,\n        [HitSkill(\"Tempest Slash\")] Skill253,\n        [HitSkill(\"Myriad Slashes\")] Skill254,\n        [Unused] Skill255,\n        [Unused] Skill256,\n        [Unused] Skill257,\n        [Unused] Skill258,\n        [Unused] Skill259,\n        [HitSkill(\"Sledgehammer\")] Skill260,\n        [HitSkill(\"Skull Cracker\")] Skill261,\n        [HitSkill(\"Terror Claw\")] Skill262,\n        [HitSkill(\"Headbutt\")] Skill263,\n        [HitSkill(\"Stomach Blow\")] Skill264,\n        [HitSkill(\"Dream Needle\")] Skill265,\n        [HitSkill(\"Hysterical Slap\")] Skill266,\n        [HitSkill(\"Negative Pile\")] Skill267,\n        [HitSkill(\"Brain Shake\")] Skill268,\n        [Unused] Skill269,\n        [HitSkill(\"Flash Bomb\")] Skill270,\n        [HitSkill(\"Mind Slice\")] Skill271,\n        [HitSkill(\"Bloodbath\")] Skill272,\n        [HitSkill(\"Memory Blow\")] Skill273,\n        [HitSkill(\"Insatiable Strike\")] Skill274,\n        [HitSkill(\"Dormin Rush\")] Skill275,\n        [HitSkill(\"Oni-Kagura\")] Skill276,\n        [HitSkill(\"Bad Beat\")] Skill277,\n        [HitSkill(\"Brain Buster\")] Skill278,\n        [Unused] Skill279,\n        [GunSkill(\"Handgun\")] Skill280,\n        [GunSkill(\"Shotgun\")] Skill281,\n        [GunSkill(\"Slingshot\")] Skill282,\n        [GunSkill(\"Machine Gun\")] Skill283,\n        [GunSkill(\"Assault Rifle\")] Skill284,\n        [GunSkill(\"Revolver\")] Skill285,\n        [GunSkill(\"Grenade Launcher\")] Skill286,\n        [GunSkill(\"Laser Gun\")] Skill287,\n        [Unused] Skill288,\n        [Unused] Skill289,\n        [Unused] Skill290,\n        [Unused] Skill291,\n        [Unused] Skill292,\n        [Unused] Skill293,\n        [Unused] Skill294,\n        [Unused] Skill295,\n        [Unused] Skill296,\n        [Unused] Skill297,\n        [Unused] Skill298,\n        [Unused] Skill299,\n        [HealSkill(\"Dia\")] Skill300,\n        [HealSkill(\"Diarama\")] Skill301,\n        [HealSkill(\"Diarahan\")] Skill302,\n        [Unused] Skill303,\n        [Unused] Skill304,\n        [HealSkill(\"Media\")] Skill305,\n        [HealSkill(\"Mediarama\")] Skill306,\n        [HealSkill(\"Mediarahan\")] Skill307,\n        [Unused] Skill308,\n        [Unused] Skill309,\n        [HealSkill(\"Recarm\")] Skill310,\n        [HealSkill(\"Samarecarm\")] Skill311,\n        [HealSkill(\"Recarmdra\")] Skill312,\n        [Unused] Skill313,\n        [Unused] Skill314,\n        [HealSkill(\"Amrita Drop\")] Skill315,\n        [HealSkill(\"Amrita Shower\")] Skill316,\n        [HealSkill(\"BLANK\")] Skill317,\n        [HealSkill(\"Salvation\")] Skill318,\n        [Unused] Skill319,\n        [Unused] Skill320,\n        [Unused] Skill321,\n        [Unused] Skill322,\n        [Unused] Skill323,\n        [Unused] Skill324,\n        [HealSkill(\"Patra\")] Skill325,\n        [HealSkill(\"BLANK\")] Skill326,\n        [HealSkill(\"Energy Shower\")] Skill327,\n        [HealSkill(\"Energy Drop\")] Skill328,\n        [HealSkill(\"Baisudi\")] Skill329,\n        [HealSkill(\"Me Patra\")] Skill330,\n        [HealSkill(\"Mabaisudi\")] Skill331,\n        [Unused] Skill332,\n        [Unused] Skill333,\n        [Unused] Skill334,\n        [SupportSkill(\"Tarukaja\")] Skill335,\n        [SupportSkill(\"Rakukaja\")] Skill336,\n        [SupportSkill(\"Sukukaja\")] Skill337,\n        [SupportSkill(\"Heat Riser\")] Skill338,\n        [Unused] Skill339,\n        [SupportSkill(\"Matarukaja\")] Skill340,\n        [SupportSkill(\"Marakukaja\")] Skill341,\n        [SupportSkill(\"Masukukaja\")] Skill342,\n        [SupportSkill(\"Thermopylae\")] Skill343,\n        [Unused] Skill344,\n        [SupportSkill(\"Tarunda\")] Skill345,\n        [SupportSkill(\"Rakunda\")] Skill346,\n        [SupportSkill(\"Sukunda\")] Skill347,\n        [SupportSkill(\"Debilitate\")] Skill348,\n        [Unused] Skill349,\n        [SupportSkill(\"Matarunda\")] Skill350,\n        [SupportSkill(\"Marakunda\")] Skill351,\n        [SupportSkill(\"Masukunda\")] Skill352,\n        [Unused] Skill353,\n        [Unused] Skill354,\n        [SupportSkill(\"Dekunda\")] Skill355,\n        [SupportSkill(\"Dekaja\")] Skill356,\n        [Unused] Skill357,\n        [Unused] Skill358,\n        [Unused] Skill359,\n        [SupportSkill(\"Charge\")] Skill360,\n        [SupportSkill(\"Concentrate\")] Skill361,\n        [Unused] Skill362,\n        [Unused] Skill363,\n        [Unused] Skill364,\n        [SupportSkill(\"Rebellion\")] Skill365,\n        [SupportSkill(\"Revolution\")] Skill366,\n        [Unused] Skill367,\n        [Unused] Skill368,\n        [Unused] Skill369,\n        [SupportSkill(\"Tetrakarn\")] Skill370,\n        [SupportSkill(\"Makarakarn\")] Skill371,\n        [SupportSkill(\"Tetraja\")] Skill372,\n        [Unused] Skill373,\n        [Unused] Skill374,\n        [SupportSkill(\"Tetra Break\")] Skill375,\n        [SupportSkill(\"Makara Break\")] Skill376,\n        [Unused] Skill377,\n        [Unused] Skill378,\n        [Unused] Skill379,\n        [SupportSkill(\"Fire Wall\")] Skill380,\n        [SupportSkill(\"Ice Wall\")] Skill381,\n        [SupportSkill(\"Elec Wall\")] Skill382,\n        [SupportSkill(\"Wind Wall\")] Skill383,\n        [Unused] Skill384,\n        [SupportSkill(\"Fire Break\")] Skill385,\n        [SupportSkill(\"Ice Break\")] Skill386,\n        [SupportSkill(\"Wind Break\")] Skill387,\n        [SupportSkill(\"Elec Break\")] Skill388,\n        [Unused] Skill389,\n        [SupportSkill(\"Trafuri\")] Skill390,\n        [SupportSkill(\"Traesto\")] Skill391,\n        [Unused] Skill392,\n        [SupportSkill(\"Nuke Wall\")] Skill393,\n        [SupportSkill(\"Psy Wall\")] Skill394,\n        [SupportSkill(\"Nuke Break\")] Skill395,\n        [SupportSkill(\"Psy Break\")] Skill396,\n        [Unused] Skill397,\n        [Unused] Skill398,\n        [Unused] Skill399,\n        [AlmightySkill(\"All-out Lv 1\")] Skill400,\n        [AlmightySkill(\"All-out Lv 2\")] Skill401,\n        [AlmightySkill(\"All-out Lv 3\")] Skill402,\n        [SupportSkill(\"Emergency Escape\")] Skill403,\n        [Unused] Skill404,\n        [AlmightySkill(\"Down Shot\")] Skill405,\n        [SpecialSkill(\"Summon\")] Skill406,\n        [SpecialSkill(\"Call for Backup\")] Skill407,\n        [Unused] Skill408,\n        [SpecialSkill(\"Barrage\")] Skill409,\n        [AlmightySkill(\"Follow Crush\")] Skill410,\n        [AlmightySkill(\"Follow Claw\")] Skill411,\n        [AlmightySkill(\"Follow Whip\")] Skill412,\n        [AlmightySkill(\"Follow Blade\")] Skill413,\n        [AlmightySkill(\"Follow Knuckle\")] Skill414,\n        [AlmightySkill(\"Follow Axe\")] Skill415,\n        [AlmightySkill(\"Follow Saber\")] Skill416,\n        [SpecialSkill(\"Dispose Item\")] Skill417,\n        [SpecialSkill(\"Heal Enemy\")] Skill418,\n        [AlmightySkill(\"Death (Despair)\")] Skill419,\n        [AlmightySkill(\"Ally1 Follow-Up\")] Skill420,\n        [AlmightySkill(\"Ally2 Follow-Up\")] Skill421,\n        [AlmightySkill(\"Ally3 Follow-Up\")] Skill422,\n        [AlmightySkill(\"Ally4 Follow-Up\")] Skill423,\n        [AlmightySkill(\"Ally5 Follow-Up\")] Skill424,\n        [AlmightySkill(\"Ally6 Follow-Up\")] Skill425,\n        [AlmightySkill(\"Ally7 Follow-Up\")] Skill426,\n        [SpecialSkill(\"Power Up Enemy\")] Skill427,\n        [SpecialSkill(\"Power Up Enemy\")] Skill428,\n        [SpecialSkill(\"Power Up Enemy\")] Skill429,\n        [SupportSkill(\"Steal Info\")] Skill430,\n        [SpecialSkill(\"Sup Matarukaja\")] Skill431,\n        [SpecialSkill(\"Sup Marakukaja\")] Skill432,\n        [SpecialSkill(\"Sup Masukukaja\")] Skill433,\n        [SpecialSkill(\"Sup All Kaja\")] Skill434,\n        [SpecialSkill(\"Sup Charge\")] Skill435,\n        [SpecialSkill(\"Sup HP +30%\")] Skill436,\n        [SpecialSkill(\"Sup SP +10%\")] Skill437,\n        [SpecialSkill(\"Sup Escape Route\")] Skill438,\n        [SpecialSkill(\"Sup Third Eye\")] Skill439,\n        [SpecialSkill(\"Subrecover HP\")] Skill440,\n        [SpecialSkill(\"Subrecover SP\")] Skill441,\n        [SpecialSkill(\"Analysis\")] Skill442,\n        [SpecialSkill(\"Deep Analysis\")] Skill443,\n        [SpecialSkill(\"Full Analysis\")] Skill444,\n        [AlmightySkill(\"All-Out Attack\")] Skill445,\n        [WindSkill(\"Dust Flurry\")] Skill446,\n        [HitSkill(\"Tongue Whip\")] Skill447,\n        [HitSkill(\"Whip Strike\")] Skill448,\n        [SupportSkill(\"Lustful Slurp\")] Skill449,\n        [HealSkill(\"Libido Boost\")] Skill450,\n        [HitSkill(\"Golden Knife\")] Skill451,\n        [HitSkill(\"Lick\")] Skill452,\n        [AlmightySkill(\"Gold Medal Spike\")] Skill453,\n        [HitSkill(\"Volleyball Assault\")] Skill454,\n        [WindSkill(\"Maelstrom\")] Skill455,\n        [FireSkill(\"Flame Dance\")] Skill456,\n        [IceSkill(\"Silent Snowscape\")] Skill457,\n        [ThunderSkill(\"Thunderclap\")] Skill458,\n        [DeathSkill(\"Maeiga\")] Skill459,\n        [PoisonSkill(\"Hunger All\")] Skill460,\n        [GunSkill(\"Ocular Vulcan\")] Skill461,\n        [FireSkill(\"Missile Party\")] Skill462,\n        [PoisonSkill(\"Fear Gas\")] Skill463,\n        [SpecialSkill(\"Super VIP Form\")] Skill464,\n        [AlmightySkill(\"March of the Piggy\")] Skill465,\n        [HitSkill(\"Sphinx Swipe\")] Skill466,\n        [WindSkill(\"Wing Blast\")] Skill467,\n        [SpecialSkill(\"Rapid Ascent\")] Skill468,\n        [HitSkill(\"Sphinx Dive\")] Skill469,\n        [AlmightySkill(\"Dreadful Scream\")] Skill470,\n        [HitSkill(\"Bite\")] Skill471,\n        [SupportSkill(\"Restore\")] Skill472,\n        [AlmightySkill(\"The Artist's Grace\")] Skill473,\n        [SpecialSkill(\"Work Order\")] Skill474,\n        [SpecialSkill(\"Sacrifice Order\")] Skill475,\n        [AlmightySkill(\"Selfless Devotion\")] Skill476,\n        [AlmightySkill(\"Penalty\")] Skill477,\n        [HitSkill(\"Coin Attack\")] Skill478,\n        [HitSkill(\"Severing Slash\")] Skill479,\n        [GunSkill(\"Gatling Gun\")] Skill480,\n        [AlmightySkill(\"Berserker Dance\")] Skill481,\n        [AlmightySkill(\"Roulette: HP\")] Skill482,\n        [AlmightySkill(\"Roulette: SP\")] Skill483,\n        [SpecialSkill(\"Roulette: Money\")] Skill484,\n        [SupportSkill(\"Roulette: Aid 1\")] Skill485,\n        [SupportSkill(\"Roulette: Aid 2\")] Skill486,\n        [SupportSkill(\"Roulette: Aid 3\")] Skill487,\n        [HitSkill(\"Beast King's Wrath\")] Skill488,\n        [SupportSkill(\"Hunting Stance\")] Skill489,\n        [AlmightySkill(\"Arm of Destruction\")] Skill490,\n        [SupportSkill(\"Gryphon's Breath\")] Skill491,\n        [AlmightySkill(\"Royal Wing Beam\")] Skill492,\n        [AlmightySkill(\"Cannon Fire\")] Skill493,\n        [AlmightySkill(\"Cannon Barrage\")] Skill494,\n        [SupportSkill(\"Unholy Convergence\")] Skill495,\n        [AlmightySkill(\"Pyramid Blast\")] Skill496,\n        [HitSkill(\"Tyrant's Fist\")] Skill497,\n        [SupportSkill(\"Tyrant's Glare\")] Skill498,\n        [AlmightySkill(\"Tyrant's Wave\")] Skill499,\n        [HealSkill(\"Fig Seed\")] Skill500,\n        [HealSkill(\"Medicine\")] Skill501,\n        [HealSkill(\"Ointment\")] Skill502,\n        [HealSkill(\"Antibiotic Gel\")] Skill503,\n        [HealSkill(\"Life Stone\")] Skill504,\n        [HealSkill(\"Bead\")] Skill505,\n        [HealSkill(\"Value Medicine\")] Skill506,\n        [HealSkill(\"Medical Kit\")] Skill507,\n        [HealSkill(\"Maka Leaf\")] Skill508,\n        [HealSkill(\"Bead Chain\")] Skill509,\n        [HealSkill(\"Soul Drop\")] Skill510,\n        [HealSkill(\"Snuff Soul\")] Skill511,\n        [HealSkill(\"Chewing Soul\")] Skill512,\n        [HealSkill(\"Soul Food\")] Skill513,\n        [HealSkill(\"Revival Bead\")] Skill514,\n        [HealSkill(\"Balm of Life\")] Skill515,\n        [HealSkill(\"Royel Jelly\")] Skill516,\n        [HealSkill(\"Organic Herb\")] Skill517,\n        [HealSkill(\"Disclose\")] Skill518,\n        [HealSkill(\"Tranquilizer\")] Skill519,\n        [HealSkill(\"Kopi Luwak\")] Skill520,\n        [SupportSkill(\"Goho-M\")] Skill521,\n        [SupportSkill(\"Vanish Ball\")] Skill522,\n        [HealSkill(\"Soma\")] Skill523,\n        [HealSkill(\"Amrita Soda\")] Skill524,\n        [HealSkill(\"Hiranya\")] Skill525,\n        [HealSkill(\"Muscle Drink\")] Skill526,\n        [HealSkill(\"Odd Morsel\")] Skill527,\n        [HealSkill(\"Rancid Gravy\")] Skill528,\n        [HealSkill(\"Plume of Dusk\")] Skill529,\n        [SupportSkill(\"Magic Mirror\")] Skill530,\n        [SupportSkill(\"Physical Mirror\")] Skill531,\n        [SupportSkill(\"Universe Ring\")] Skill532,\n        [SupportSkill(\"Sleipnir\")] Skill533,\n        [SupportSkill(\"Obsidian Mirror\")] Skill534,\n        [SupportSkill(\"Purifying Water\")] Skill535,\n        [SupportSkill(\"Purifying Salt\")] Skill536,\n        [FireSkill(\"Firecracker\")] Skill537,\n        [FireSkill(\"San-zun Tama\")] Skill538,\n        [IceSkill(\"Ice Cube\")] Skill539,\n        [IceSkill(\"Dry Ice\")] Skill540,\n        [WindSkill(\"Pinwheel\")] Skill541,\n        [WindSkill(\"Yashichi\")] Skill542,\n        [ThunderSkill(\"Ball Lightning\")] Skill543,\n        [ThunderSkill(\"Tesla Coil\")] Skill544,\n        [AlmightySkill(\"Smart Bomb\")] Skill545,\n        [BlessSkill(\"Segami Rice\")] Skill546,\n        [DeathSkill(\"Curse Paper\")] Skill547,\n        [FireSkill(\"Flame Magatama\")] Skill548,\n        [WindSkill(\"Wind Magatama\")] Skill549,\n        [IceSkill(\"Freeze Magatama\")] Skill550,\n        [ThunderSkill(\"Bolt Magatama\")] Skill551,\n        [HealSkill(\"Homunculus\")] Skill552,\n        [HealSkill(\"Removal Potion\")] Skill553,\n        [BlessSkill(\"Kouga Ball\")] Skill554,\n        [BlessSkill(\"Makouha Ball\")] Skill555,\n        [DeathSkill(\"Eiga Ball\")] Skill556,\n        [DeathSkill(\"Maeiga Ball\")] Skill557,\n        [PsychoSkill(\"Psio Ball\")] Skill558,\n        [PsychoSkill(\"Mapsi Ball\")] Skill559,\n        [NuclearSkill(\"Freila Ball\")] Skill560,\n        [NuclearSkill(\"Mafrei Ball\")] Skill561,\n        [NuclearSkill(\"Nuke Magatama\")] Skill562,\n        [PsychoSkill(\"Psy Magatama\")] Skill563,\n        [BlessSkill(\"Bless Magatama\")] Skill564,\n        [DeathSkill(\"Curse Magatama\")] Skill565,\n        [HealSkill(\"Cooking\")] Skill566,\n        [HealSkill(\"Snack\")] Skill567,\n        [HealSkill(\"Shoes 1\")] Skill568,\n        [HealSkill(\"Shoes 2\")] Skill569,\n        [HealSkill(\"Shoes 3\")] Skill570,\n        [HealSkill(\"Juice Bar 1\")] Skill571,\n        [HealSkill(\"Juice Bar 2\")] Skill572,\n        [HealSkill(\"Juice Bar 3\")] Skill573,\n        [HealSkill(\"Juice Bar 4\")] Skill574,\n        [HealSkill(\"Energy Drink 1\")] Skill575,\n        [HealSkill(\"Energy Drink 2\")] Skill576,\n        [HealSkill(\"Energy Drink 3\")] Skill577,\n        [HealSkill(\"Soda 1\")] Skill578,\n        [HealSkill(\"Soda 2\")] Skill579,\n        [HealSkill(\"Soda 3\")] Skill580,\n        [HealSkill(\"Soda 4\")] Skill581,\n        [HealSkill(\"Ration 1 \")] Skill582,\n        [HealSkill(\"Ration 2\")] Skill583,\n        [HealSkill(\"Ration 3\")] Skill584,\n        [HealSkill(\"Drug Store 1\")] Skill585,\n        [HealSkill(\"Drug Store 2\")] Skill586,\n        [HealSkill(\"Drug Store 3\")] Skill587,\n        [HealSkill(\"Drug Store 4\")] Skill588,\n        [HealSkill(\"Drug Store 5\")] Skill589,\n        [HealSkill(\"Drug Store 6\")] Skill590,\n        [HealSkill(\"Drug Store 7\")] Skill591,\n        [HealSkill(\"Drug Store 8\")] Skill592,\n        [HealSkill(\"Drug Store 9\")] Skill593,\n        [HealSkill(\"Drug Store 10\")] Skill594,\n        [HealSkill(\"Drug Store 11\")] Skill595,\n        [HealSkill(\"Drug Store 12\")] Skill596,\n        [HealSkill(\"Coffee 1\")] Skill597,\n        [SupportSkill(\"Coffee 2\")] Skill598,\n        [Unused] Skill599,\n        [AlmightySkill(\"Twins Down Attack\")] Skill600,\n        [HitSkill(\"Caro Rod\")] Skill601,\n        [HitSkill(\"Caro Attack\")] Skill602,\n        [AlmightySkill(\"Megidolaon\")] Skill603,\n        [AlmightySkill(\"Rays of Control\")] Skill604,\n        [AlmightySkill(\"Rays of Control\")] Skill605,\n        [AlmightySkill(\"Rays of Control\")] Skill606,\n        [AlmightySkill(\"Rays of Control\")] Skill607,\n        [AlmightySkill(\"Arrow of Light\")] Skill608,\n        [AlmightySkill(\"Diffraction Arrow\")] Skill609,\n        [AlmightySkill(\"Light Edge\")] Skill610,\n        [SupportSkill(\"Gathering Light\")] Skill611,\n        [AlmightySkill(\"Eternal Light\")] Skill612,\n        [SupportSkill(\"Holy Change\")] Skill613,\n        [AlmightySkill(\"Distortion Wave\")] Skill614,\n        [SupportSkill(\"Tough Law\")] Skill615,\n        [SupportSkill(\"Frail Law\")] Skill616,\n        [SupportSkill(\"New Creation\")] Skill617,\n        [AlmightySkill(\"Distortion Surge\")] Skill618,\n        [AlmightySkill(\"Arrow of Light\")] Skill619,\n        [SupportSkill(\"Manifest Sword\")] Skill620,\n        [SupportSkill(\"Manifest Gun\")] Skill621,\n        [SupportSkill(\"Manifest Bell\")] Skill622,\n        [HitSkill(\"Sword of Judgment\")] Skill623,\n        [GunSkill(\"Capital Punishment\")] Skill624,\n        [SupportSkill(\"Manifest Book\")] Skill625,\n        [AlmightySkill(\"Distorted Lust\")] Skill626,\n        [AlmightySkill(\"Gospel\")] Skill627,\n        [AlmightySkill(\"Distorted Wrath\")] Skill628,\n        [AlmightySkill(\"Distorted Vanity\")] Skill629,\n        [SupportSkill(\"Song of Salvation\")] Skill630,\n        [AlmightySkill(\"Wrath of God\")] Skill631,\n        [AlmightySkill(\"Distorted Gluttony\")] Skill632,\n        [AlmightySkill(\"Distorted Envy\")] Skill633,\n        [SupportSkill(\"Song of Placation\")] Skill634,\n        [SupportSkill(\"Divine Apex\")] Skill635,\n        [AlmightySkill(\"Rays of Control\")] Skill636,\n        [AlmightySkill(\"Distorted Avarice\")] Skill637,\n        [HealSkill(\"Will of the People\")] Skill638,\n        [AlmightySkill(\"Rays of Control\")] Skill639,\n        [SpecialSkill(\"Moral Support\")] Skill640,\n        [SpecialSkill(\"Active Support\")] Skill641,\n        [SpecialSkill(\"Mental Hack\")] Skill642,\n        [SpecialSkill(\"Emergency Shift\")] Skill643,\n        [SpecialSkill(\"Final Guard\")] Skill644,\n        [SpecialSkill(\"Position Hack\")] Skill645,\n        [SpecialSkill(\"High Analyze\")] Skill646,\n        [SpecialSkill(\"Treasure Skimmer\")] Skill647,\n        [SpecialSkill(\"Subrecover HP EX\")] Skill648,\n        [SpecialSkill(\"Subrecover SP EX\")] Skill649,\n        [Unused] Skill650,\n        [Unused] Skill651,\n        [Unused] Skill652,\n        [Unused] Skill653,\n        [SupportSkill(\"Big Bang Order\")] Skill654,\n        [AlmightySkill(\"Roulette Time\")] Skill655,\n        [AlmightySkill(\"Trip-Upper\")] Skill656,\n        [AlmightySkill(\"Lust Sphere\")] Skill657,\n        [AlmightySkill(\"Down Shot 2\")] Skill658,\n        [AlmightySkill(\"Down Shot 3\")] Skill659,\n        [AlmightySkill(\"Down Shot 4\")] Skill660,\n        [GunSkill(\"Electro Attack\")] Skill661,\n        [AlmightySkill(\"Sinful Shell\")] Skill662,\n        [AlmightySkill(\"Follow Black\")] Skill663,\n        [Unused] Skill664,\n        [AlmightySkill(\"Madara-Megido\")] Skill665,\n        [HealSkill(\"Curry Raku\")] Skill666,\n        [HealSkill(\"Enemy Benefit\")] Skill667,\n        [HealSkill(\"Diarahan\")] Skill668,\n        [HealSkill(\"Curry Suku\")] Skill669,\n        [SupportSkill(\"Decoy Ball\")] Skill670,\n        [SupportSkill(\"Super Decoy Ball\")] Skill671,\n        [HitSkill(\"Metabolic Wave\")] Skill672,\n        [AlmightySkill(\"Laevateinn\")] Skill673,\n        [SupportSkill(\"Desperation\")] Skill674,\n        [SupportSkill(\"Call of Chaos\")] Skill675,\n        [AlmightySkill(\"Big Bang Challenge\")] Skill676,\n        [AlmightySkill(\"Grail Light 2\")] Skill677,\n        [AlmightySkill(\"Megidola\")] Skill678,\n        [PoisonSkill(\"Rage Transmission\")] Skill679,\n        [HitSkill(\"Hundred Slaps\")] Skill680,\n        [AlmightySkill(\"Distorted Pride\")] Skill681,\n        [AlmightySkill(\"Divine Punishment\")] Skill682,\n        [HealSkill(\"Will of the People\")] Skill683,\n        [HitSkill(\"Wind Cutter\")] Skill684,\n        [GunSkill(\"Shoot Up\")] Skill685,\n        [HitSkill(\"Executive Punch\")] Skill686,\n        [AlmightySkill(\"Megidolaon\")] Skill687,\n        [HitSkill(\"Vorpal Blade\")] Skill688,\n        [AlmightySkill(\"Megidolaon\")] Skill689,\n        [HealSkill(\"Big Bang Burger\")] Skill690,\n        [HealSkill(\"Earth Burger\")] Skill691,\n        [HealSkill(\"Mars Burger\")] Skill692,\n        [HealSkill(\"Moon Burger\")] Skill693,\n        [HealSkill(\"Saturn Burger\")] Skill694,\n        [AlmightySkill(\"Justine Attack\")] Skill695,\n        [AlmightySkill(\"Caroline Attack\")] Skill696,\n        [HealSkill(\"Curry Makara\")] Skill697,\n        [HealSkill(\"Curry Tetra\")] Skill698,\n        [HealSkill(\"Curry Endure\")] Skill699,\n        [HealSkill(\"Curry Charge\")] Skill700,\n        [HealSkill(\"Curry Concentrate\")] Skill701,\n        [HealSkill(\"Curry Heat Riser\")] Skill702,\n        [Unused] Skill703,\n        [HealSkill(\"Cadenza\")] Skill704,\n        [HitSkill(\"Cross Slash\")] Skill705,\n        [AlmightySkill(\"Door of Hades\")] Skill706,\n        [DeathSkill(\"Magatsu Mandala\")] Skill707,\n        [BlessSkill(\"Shining Arrows\")] Skill708,\n        [HitSkill(\"Beast Weaver\")] Skill709,\n        [FireSkill(\"Titanomachia\")] Skill710,\n        [DeathSkill(\"Abyssal Wings\")] Skill711,\n        [HealSkill(\"Oratario\")] Skill712,\n        [Unused] Skill713,\n        [Unused] Skill714,\n        [Unused] Skill715,\n        [Unused] Skill716,\n        [Unused] Skill717,\n        [Unused] Skill718,\n        [Unused] Skill719,\n        [AlmightySkill(\"Megido\")] Skill720,\n        [AlmightySkill(\"Megidola\")] Skill721,\n        [AlmightySkill(\"Megidolaon\")] Skill722,\n        [HitSkill(\"Slam\")] Skill723,\n        [AlmightySkill(\"Megaton Raid\")] Skill724,\n        [AlmightySkill(\"One-shot Kill\")] Skill725,\n        [AlmightySkill(\"Inferno\")] Skill726,\n        [AlmightySkill(\"Diamond Dust\")] Skill727,\n        [Unused] Skill728,\n        [Unused] Skill729,\n        [HealSkill(\"Curry 1\")] Skill730,\n        [HealSkill(\"Curry 2\")] Skill731,\n        [HealSkill(\"Reviv-All\")] Skill732,\n        [HealSkill(\"Reviv-All Z\")] Skill733,\n        [Unused] Skill734,\n        [Unused] Skill735,\n        [SpecialSkill(\"Wild Talk\")] Skill736,\n        [SpecialSkill(\"Baton Pass\")] Skill737,\n        [SpecialSkill(\"Punk Talk\")] Skill738,\n        [SpecialSkill(\"Pickpocket\")] Skill739,\n        [SpecialSkill(\"Harisen Recovery\")] Skill740,\n        [SpecialSkill(\"Protect\")] Skill741,\n        [SpecialSkill(\"Girl Talk\")] Skill742,\n        [SpecialSkill(\"Crocodile Tears\")] Skill743,\n        [SpecialSkill(\"Sexy Technique\")] Skill744,\n        [SpecialSkill(\"Detective Talk\")] Skill745,\n        [SpecialSkill(\"Artist Talk\")] Skill746,\n        [SpecialSkill(\"Negotiating\")] Skill747,\n        [SpecialSkill(\"Fundraising\")] Skill748,\n        [SpecialSkill(\"Manipulation\")] Skill749,\n        [SpecialSkill(\"Mind Control\")] Skill750,\n        [SpecialSkill(\"Charisma Speech\")] Skill751,\n        [SpecialSkill(\"Brainiac Talk\")] Skill752,\n        [SpecialSkill(\"Sabaki\")] Skill753,\n        [SpecialSkill(\"Kakoi Kuzushi \")] Skill754,\n        [SpecialSkill(\"Touryou\")] Skill755,\n        [SpecialSkill(\"Togo System\")] Skill756,\n        [SpecialSkill(\"Bullet Hail\")] Skill757,\n        [SpecialSkill(\"Warning Shot\")] Skill758,\n        [SpecialSkill(\"Celeb Talk\")] Skill759,\n        [SpecialSkill(\"Kitty Talk\")] Skill760,\n        [Unused] Skill761,\n        [Unused] Skill762,\n        [Unused] Skill763,\n        [Unused] Skill764,\n        [Unused] Skill765,\n        [Unused] Skill766,\n        [Unused] Skill767,\n        [HitSkill(\"Brave Blade\")] Skill768,\n        [HitSkill(\"Assault Dive\")] Skill769,\n        [HitSkill(\"Terror Claw\")] Skill770,\n        [IceSkill(\"Bufudyne\")] Skill771,\n        [PsychoSkill(\"Psiodyne\")] Skill772,\n        [ThunderSkill(\"Mazionga\")] Skill773,\n        [ThunderSkill(\"Maziodyne\")] Skill774,\n        [DeathSkill(\"Maeiga\")] Skill775,\n        [DeathSkill(\"Maeigaon\")] Skill776,\n        [Unused] Skill777,\n        [Unused] Skill778,\n        [Unused] Skill779,\n        [Unused] Skill780,\n        [Unused] Skill781,\n        [Unused] Skill782,\n        [Unused] Skill783,\n        [Unused] Skill784,\n        [Unused] Skill785,\n        [Unused] Skill786,\n        [Unused] Skill787,\n        [Unused] Skill788,\n        [Unused] Skill789,\n        [Unused] Skill790,\n        [Unused] Skill791,\n        [Unused] Skill792,\n        [Unused] Skill793,\n        [Unused] Skill794,\n        [Unused] Skill795,\n        [Unused] Skill796,\n        [Unused] Skill797,\n        [Unused] Skill798,\n        [Unused] Skill799,\n        [AutoSkill(\"Counter\")] Skill800,\n        [AutoSkill(\"Counterstrike\")] Skill801,\n        [AutoSkill(\"High Counter\")] Skill802,\n        [Unused] Skill803,\n        [Unused] Skill804,\n        [AutoSkill(\"Endure\")] Skill805,\n        [AutoSkill(\"Enduring Soul\")] Skill806,\n        [AutoSkill(\"BLANK\")] Skill807,\n        [AutoSkill(\"BLANK\")] Skill808,\n        [AutoSkill(\"Survival Trick\")] Skill809,\n        [AutoSkill(\"Dodge Fire\")] Skill810,\n        [AutoSkill(\"Evade Fire\")] Skill811,\n        [AutoSkill(\"Dodge Ice\")] Skill812,\n        [AutoSkill(\"Evade Ice\")] Skill813,\n        [AutoSkill(\"Dodge Wind\")] Skill814,\n        [AutoSkill(\"Evade Wind\")] Skill815,\n        [AutoSkill(\"Dodge Elec\")] Skill816,\n        [AutoSkill(\"Evade Elec\")] Skill817,\n        [AutoSkill(\"Dodge Phys\")] Skill818,\n        [AutoSkill(\"Evade Phys\")] Skill819,\n        [AutoSkill(\"Fire Boost\")] Skill820,\n        [AutoSkill(\"Fire Amp\")] Skill821,\n        [AutoSkill(\"Ice Boost\")] Skill822,\n        [AutoSkill(\"Ice Amp\")] Skill823,\n        [AutoSkill(\"Wind Boost\")] Skill824,\n        [AutoSkill(\"Wind Amp\")] Skill825,\n        [AutoSkill(\"Elec Boost\")] Skill826,\n        [AutoSkill(\"Elec Amp\")] Skill827,\n        [AutoSkill(\"Angelic Grace\")] Skill828,\n        [AutoSkill(\"Divine Grace\")] Skill829,\n        [AutoSkill(\"Regenerate 1\")] Skill830,\n        [AutoSkill(\"Regenerate 2\")] Skill831,\n        [AutoSkill(\"Regenerate 3\")] Skill832,\n        [AutoSkill(\"Dodge Bless\")] Skill833,\n        [AutoSkill(\"Dodge Curse\")] Skill834,\n        [AutoSkill(\"Invigorate 1\")] Skill835,\n        [AutoSkill(\"Invigorate 2\")] Skill836,\n        [AutoSkill(\"Invigorate 3\")] Skill837,\n        [AutoSkill(\"Evade Bless\")] Skill838,\n        [AutoSkill(\"Evade Curse\")] Skill839,\n        [AutoSkill(\"Attack Master\")] Skill840,\n        [AutoSkill(\"Auto-Mataru\")] Skill841,\n        [Unused] Skill842,\n        [AutoSkill(\"Defense Master\")] Skill843,\n        [AutoSkill(\"Auto-Maraku\")] Skill844,\n        [Unused] Skill845,\n        [AutoSkill(\"Speed Master\")] Skill846,\n        [AutoSkill(\"Auto-Masuku\")] Skill847,\n        [Unused] Skill848,\n        [Unused] Skill849,\n        [AutoSkill(\"Fast Heal\")] Skill850,\n        [AutoSkill(\"Insta-Heal\")] Skill851,\n        [AutoSkill(\"Arms Master\")] Skill852,\n        [AutoSkill(\"Spell Master\")] Skill853,\n        [Unused] Skill854,\n        [AutoSkill(\"Sharp Student\")] Skill855,\n        [AutoSkill(\"Apt Pupil\")] Skill856,\n        [AutoSkill(\"Ali Dance\")] Skill857,\n        [AutoSkill(\"Firm Stance\")] Skill858,\n        [Unused] Skill859,\n        [AutoSkill(\"Life Aid\")] Skill860,\n        [AutoSkill(\"Victory Cry\")] Skill861,\n        [AutoSkill(\"Growth 1\")] Skill862,\n        [AutoSkill(\"Growth 2\")] Skill863,\n        [AutoSkill(\"Growth 3\")] Skill864,\n        [AutoSkill(\"Unshaken Will\")] Skill865,\n        [AutoSkill(\"BLANK\")] Skill866,\n        [AutoSkill(\"Baton Pass\")] Skill867,\n        [AutoSkill(\"Soul Touch\")] Skill868,\n        [AutoSkill(\"Kakoi Kuzushi\")] Skill869,\n        [AutoSkill(\"Resist Fire\")] Skill870,\n        [AutoSkill(\"Null Fire\")] Skill871,\n        [AutoSkill(\"Repel Fire\")] Skill872,\n        [AutoSkill(\"Drain Fire\")] Skill873,\n        [Unused] Skill874,\n        [AutoSkill(\"Resist Ice\")] Skill875,\n        [AutoSkill(\"Null Ice\")] Skill876,\n        [AutoSkill(\"Repel Ice\")] Skill877,\n        [AutoSkill(\"Drain Ice\")] Skill878,\n        [Unused] Skill879,\n        [AutoSkill(\"Resist Wind\")] Skill880,\n        [AutoSkill(\"Null Wind\")] Skill881,\n        [AutoSkill(\"Repel Wind\")] Skill882,\n        [AutoSkill(\"Drain Wind\")] Skill883,\n        [Unused] Skill884,\n        [AutoSkill(\"Resist Elec\")] Skill885,\n        [AutoSkill(\"Null Elec\")] Skill886,\n        [AutoSkill(\"Repel Elec\")] Skill887,\n        [AutoSkill(\"Drain Elec\")] Skill888,\n        [Unused] Skill889,\n        [AutoSkill(\"Resist Bless\")] Skill890,\n        [AutoSkill(\"Null Bless\")] Skill891,\n        [AutoSkill(\"Repel Bless\")] Skill892,\n        [AutoSkill(\"Drain Bless\")] Skill893,\n        [Unused] Skill894,\n        [AutoSkill(\"Resist Curse\")] Skill895,\n        [AutoSkill(\"Null Curse\")] Skill896,\n        [AutoSkill(\"Repel Curse\")] Skill897,\n        [AutoSkill(\"Drain Curse\")] Skill898,\n        [Unused] Skill899,\n        [AutoSkill(\"Resist Phys\")] Skill900,\n        [AutoSkill(\"Null Phys\")] Skill901,\n        [AutoSkill(\"Repel Phys\")] Skill902,\n        [AutoSkill(\"Drain Phys\")] Skill903,\n        [Unused] Skill904,\n        [AutoSkill(\"Ailment Boost\")] Skill905,\n        [AutoSkill(\"Hama Boost\")] Skill906,\n        [AutoSkill(\"Mudo Boost\")] Skill907,\n        [Unused] Skill908,\n        [Unused] Skill909,\n        [AutoSkill(\"Dizzy Boost\")] Skill910,\n        [AutoSkill(\"Confuse Boost\")] Skill911,\n        [AutoSkill(\"Fear Boost\")] Skill912,\n        [AutoSkill(\"Forget Boost\")] Skill913,\n        [AutoSkill(\"Sleep Boost\")] Skill914,\n        [AutoSkill(\"Rage Boost\")] Skill915,\n        [AutoSkill(\"Despair Boost\")] Skill916,\n        [AutoSkill(\"BLANK\")] Skill917,\n        [AutoSkill(\"Brainwash Boost\")] Skill918,\n        [Unused] Skill919,\n        [AutoSkill(\"Resist Dizzy\")] Skill920,\n        [AutoSkill(\"Resist Confuse\")] Skill921,\n        [AutoSkill(\"Resist Fear\")] Skill922,\n        [AutoSkill(\"Resist Forget\")] Skill923,\n        [AutoSkill(\"Resist Sleep\")] Skill924,\n        [AutoSkill(\"Resist Rage\")] Skill925,\n        [AutoSkill(\"Resist Despair\")] Skill926,\n        [AutoSkill(\"BLANK\")] Skill927,\n        [AutoSkill(\"Resist Brainwash\")] Skill928,\n        [Unused] Skill929,\n        [AutoSkill(\"Null Dizzy\")] Skill930,\n        [AutoSkill(\"Null Confuse\")] Skill931,\n        [AutoSkill(\"Null Fear\")] Skill932,\n        [AutoSkill(\"Null Forget\")] Skill933,\n        [AutoSkill(\"Null Sleep\")] Skill934,\n        [AutoSkill(\"Null Rage\")] Skill935,\n        [AutoSkill(\"Null Despair\")] Skill936,\n        [AutoSkill(\"BLANK\")] Skill937,\n        [AutoSkill(\"Null Brainwash\")] Skill938,\n        [Unused] Skill939,\n        [AutoSkill(\"Burn Boost\")] Skill940,\n        [AutoSkill(\"Freeze Boost\")] Skill941,\n        [AutoSkill(\"Shock Boost\")] Skill942,\n        [AutoSkill(\"BLANK\")] Skill943,\n        [AutoSkill(\"Fortified Moxy\")] Skill944,\n        [AutoSkill(\"Adverse Resolve\")] Skill945,\n        [AutoSkill(\"Last Stand\")] Skill946,\n        [AutoSkill(\"Heat Up\")] Skill947,\n        [Unused] Skill948,\n        [AutoSkill(\"Touch n' Go\")] Skill949,\n        [AutoSkill(\"Climate Decorum\")] Skill950,\n        [AutoSkill(\"Ambient Aid\")] Skill951,\n        [AutoSkill(\"RESERVE\")] Skill952,\n        [AutoSkill(\"Snipe\")] Skill953,\n        [AutoSkill(\"Cripple\")] Skill954,\n        [AutoSkill(\"Trigger Happy\")] Skill955,\n        [AutoSkill(\"Resist Nuke\")] Skill956,\n        [AutoSkill(\"Null Nuke\")] Skill957,\n        [AutoSkill(\"Repel Nuke\")] Skill958,\n        [AutoSkill(\"Drain Nuke\")] Skill959,\n        [AutoSkill(\"RESERVE\")] Skill960,\n        [AutoSkill(\"Resist Psy\")] Skill961,\n        [AutoSkill(\"Null Psy\")] Skill962,\n        [AutoSkill(\"Repel Psy\")] Skill963,\n        [AutoSkill(\"Drain Psy\")] Skill964,\n        [AutoSkill(\"RESERVE\")] Skill965,\n        [AutoSkill(\"Nuke Boost\")] Skill966,\n        [AutoSkill(\"Nuke Amp\")] Skill967,\n        [AutoSkill(\"RESERVE\")] Skill968,\n        [AutoSkill(\"Psy Boost\")] Skill969,\n        [AutoSkill(\"Psy Amp\")] Skill970,\n        [AutoSkill(\"RESERVE\")] Skill971,\n        [AutoSkill(\"Dodge Nuke\")] Skill972,\n        [AutoSkill(\"Evade Nuke\")] Skill973,\n        [AutoSkill(\"RESERVE\")] Skill974,\n        [AutoSkill(\"Dodge Psy\")] Skill975,\n        [AutoSkill(\"Evade Psy\")] Skill976,\n        [AutoSkill(\"RESERVE\")] Skill977,\n        [AutoSkill(\"Bless Boost\")] Skill978,\n        [AutoSkill(\"Bless Amp\")] Skill979,\n        [AutoSkill(\"RESERVE\")] Skill980,\n        [AutoSkill(\"Curse Boost\")] Skill981,\n        [AutoSkill(\"Curse Amp\")] Skill982,\n        [AutoSkill(\"RESERVE\")] Skill983,\n        [AutoSkill(\"Magic Ability\")] Skill984,\n        [AutoSkill(\"Fortify Spirit\")] Skill985,\n        [AutoSkill(\"Almighty Boost\")] Skill986,\n        [AutoSkill(\"Almighty Amp\")] Skill987,\n        [AutoSkill(\"Zenith Defense\")] Skill988,\n        [AutoSkill(\"Soul Chain\")] Skill989,\n        [AutoSkill(\"Vanity Copy\")] Skill990,\n        [AutoSkill(\"Gluttonous Snuff\")] Skill991,\n        [AutoSkill(\"Sloth Defense\")] Skill992,\n        [Unused] Skill993,\n        [Unused] Skill994,\n        [Unused] Skill995,\n        [Unused] Skill996,\n        [Unused] Skill997,\n        [Unused] Skill998,\n        [Unused] Skill999,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Types/SkillRoyal.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibPersona5.Types\n{\n    public enum SkillRoyal : short\n    {\n        [Skill(\"-\")] Empty,\n        [Unused] Skill1,\n        [Unused] Skill2,\n        [Unused] Skill3,\n        [Unused] Skill4,\n        [Unused] Skill5,\n        [Unused] Skill6,\n        [Unused] Skill7,\n        [Unused] Skill8,\n        [Unused] Skill9,\n        [FireSkill(\"Agi\")] Skill10,\n        [FireSkill(\"Agilao\")] Skill11,\n        [FireSkill(\"Agidyne\")] Skill12,\n        [FireSkill(\"Maragi\")] Skill13,\n        [FireSkill(\"Maragion\")] Skill14,\n        [FireSkill(\"Maragidyne\")] Skill15,\n        [FireSkill(\"Agi\")] Skill16,\n        [FireSkill(\"Maragi\")] Skill17,\n        [FireSkill(\"Fire Ball\")] Skill18,\n        [SupportSkill(\"Raging Flames\")] Skill19,\n        [IceSkill(\"Bufu\")] Skill20,\n        [IceSkill(\"Bufula\")] Skill21,\n        [IceSkill(\"Bufudyne\")] Skill22,\n        [IceSkill(\"Mabufu\")] Skill23,\n        [IceSkill(\"Mabufula\")] Skill24,\n        [IceSkill(\"Mabufudyne\")] Skill25,\n        [IceSkill(\"Bufu\")] Skill26,\n        [IceSkill(\"Mabufu\")] Skill27,\n        [IceSkill(\"Snow Ball\")] Skill28,\n        [AlmightySkill(\"Megidolaon\")] Skill29,\n        [WindSkill(\"Garu\")] Skill30,\n        [WindSkill(\"Garula\")] Skill31,\n        [WindSkill(\"Garudyne\")] Skill32,\n        [WindSkill(\"Magaru\")] Skill33,\n        [WindSkill(\"Magarula\")] Skill34,\n        [WindSkill(\"Magarudyne\")] Skill35,\n        [WindSkill(\"Garu\")] Skill36,\n        [WindSkill(\"Gale Ball\")] Skill37,\n        [BlessSkill(\"Bless Ball\")] Skill38,\n        [DeathSkill(\"Curve Ball\")] Skill39,\n        [ThunderSkill(\"Zio\")] Skill40,\n        [ThunderSkill(\"Zionga\")] Skill41,\n        [ThunderSkill(\"Ziodyne\")] Skill42,\n        [ThunderSkill(\"Mazio\")] Skill43,\n        [ThunderSkill(\"Mazionga\")] Skill44,\n        [ThunderSkill(\"Maziodyne\")] Skill45,\n        [ThunderSkill(\"Zio\")] Skill46,\n        [ThunderSkill(\"Mazio\")] Skill47,\n        [ThunderSkill(\"Volt Ball\")] Skill48,\n        [HitSkill(\"Make It Rain\")] Skill49,\n        [BlessSkill(\"Hama\")] Skill50,\n        [BlessSkill(\"Hamaon\")] Skill51,\n        [BlessSkill(\"Mahama\")] Skill52,\n        [BlessSkill(\"Mahamaon\")] Skill53,\n        [BlessSkill(\"Kouha\")] Skill54,\n        [BlessSkill(\"Kouga\")] Skill55,\n        [BlessSkill(\"Kougaon\")] Skill56,\n        [BlessSkill(\"Makouha\")] Skill57,\n        [BlessSkill(\"Makouga\")] Skill58,\n        [BlessSkill(\"Makougaon\")] Skill59,\n        [DeathSkill(\"Mudo\")] Skill60,\n        [DeathSkill(\"Mudoon\")] Skill61,\n        [DeathSkill(\"Mamudo\")] Skill62,\n        [DeathSkill(\"Mamudoon\")] Skill63,\n        [DeathSkill(\"Eiha\")] Skill64,\n        [DeathSkill(\"Eiga\")] Skill65,\n        [DeathSkill(\"Eigaon\")] Skill66,\n        [DeathSkill(\"Maeiha\")] Skill67,\n        [DeathSkill(\"Maeiga\")] Skill68,\n        [DeathSkill(\"Maeigaon\")] Skill69,\n        [AlmightySkill(\"Megido\")] Skill70,\n        [AlmightySkill(\"Megidola\")] Skill71,\n        [AlmightySkill(\"Megidolaon\")] Skill72,\n        [NuclearSkill(\"Frei\")] Skill73,\n        [NuclearSkill(\"Freila\")] Skill74,\n        [NuclearSkill(\"Freidyne\")] Skill75,\n        [NuclearSkill(\"Mafrei\")] Skill76,\n        [NuclearSkill(\"Mafreila\")] Skill77,\n        [NuclearSkill(\"Mafreidyne\")] Skill78,\n        [NuclearSkill(\"BL79ANK\")] Skill79,\n        [PoisonSkill(\"Dazzler\")] Skill80,\n        [PoisonSkill(\"Nocturnal Flash\")] Skill81,\n        [PoisonSkill(\"Pulinpa\")] Skill82,\n        [PoisonSkill(\"Tentarafoo\")] Skill83,\n        [PoisonSkill(\"Evil Touch\")] Skill84,\n        [PoisonSkill(\"Evil Smile\")] Skill85,\n        [PoisonSkill(\"Makajama\")] Skill86,\n        [PoisonSkill(\"Makajamaon\")] Skill87,\n        [PoisonSkill(\"Famine's Breath\")] Skill88,\n        [PoisonSkill(\"Famine's Scream\")] Skill89,\n        [PoisonSkill(\"Dormina\")] Skill90,\n        [PoisonSkill(\"Lullaby\")] Skill91,\n        [PoisonSkill(\"Taunt\")] Skill92,\n        [PoisonSkill(\"Wage War\")] Skill93,\n        [PoisonSkill(\"Ominous Words\")] Skill94,\n        [PoisonSkill(\"Abysmal Surge\")] Skill95,\n        [PoisonSkill(\"Marin Karin\")] Skill96,\n        [PoisonSkill(\"Brain Jack\")] Skill97,\n        [AlmightySkill(\"Trapped Rat\")] Skill98,\n        [PsychoSkill(\"Psy Ball\")] Skill99,\n        [AlmightySkill(\"Self-destruct\")] Skill100,\n        [AlmightySkill(\"Self-destruct\")] Skill101,\n        [AlmightySkill(\"Self-destruct\")] Skill102,\n        [AlmightySkill(\"Life Drain\")] Skill103,\n        [AlmightySkill(\"Spirit Drain\")] Skill104,\n        [AlmightySkill(\"Life Leech\")] Skill105,\n        [AlmightySkill(\"Spirit Leech\")] Skill106,\n        [AlmightySkill(\"Spirit Drain\")] Skill107,\n        [SpecialSkill(\"##108\")] Skill108,\n        [AutoSkill(\"##109\")] Skill109,\n        [AlmightySkill(\"Foul Breath\")] Skill110,\n        [AlmightySkill(\"Stagnant Air\")] Skill111,\n        [AlmightySkill(\"Reverse Rub\")] Skill112,\n        [AlmightySkill(\"Ghastly Wail\")] Skill113,\n        [AlmightySkill(\"NOT USED\")] Skill114,\n        [AlmightySkill(\"Drain\")] Skill115,\n        [AlmightySkill(\"Megidola\")] Skill116,\n        [AlmightySkill(\"Launch\")] Skill117,\n        [AlmightySkill(\"##118\")] Skill118,\n        [HitSkill(\"Drift\")] Skill119,\n        [FireSkill(\"Inferno\")] Skill120,\n        [FireSkill(\"Blazing Hell\")] Skill121,\n        [AutoSkill(\"Low Burn\")] Skill122,\n        [AutoSkill(\"Mid Burn\")] Skill123,\n        [AutoSkill(\"High Burn\")] Skill124,\n        [AutoSkill(\"Low Freeze\")] Skill125,\n        [AutoSkill(\"Mid Freeze\")] Skill126,\n        [AutoSkill(\"High Freeze\")] Skill127,\n        [AutoSkill(\"Low Shock\")] Skill128,\n        [AutoSkill(\"Mid Shock\")] Skill129,\n        [IceSkill(\"Diamond Dust\")] Skill130,\n        [IceSkill(\"Ice Age\")] Skill131,\n        [AutoSkill(\"High Shock\")] Skill132,\n        [AutoSkill(\"Low Dizzy\")] Skill133,\n        [AutoSkill(\"Mid Dizzy\")] Skill134,\n        [AutoSkill(\"High Dizzy\")] Skill135,\n        [AutoSkill(\"Low Confuse\")] Skill136,\n        [AutoSkill(\"Mid Confuse\")] Skill137,\n        [AutoSkill(\"High Confuse\")] Skill138,\n        [AutoSkill(\"Low Fear\")] Skill139,\n        [WindSkill(\"Panta Rhei\")] Skill140,\n        [WindSkill(\"Vacuum Wave\")] Skill141,\n        [AutoSkill(\"Mid Fear\")] Skill142,\n        [AutoSkill(\"High Fear\")] Skill143,\n        [AutoSkill(\"Low Forget\")] Skill144,\n        [AutoSkill(\"Mid Forget\")] Skill145,\n        [AutoSkill(\"High Forget\")] Skill146,\n        [AutoSkill(\"Low Brainwash\")] Skill147,\n        [AutoSkill(\"Mid Brainwash\")] Skill148,\n        [AutoSkill(\"High Brainwash\")] Skill149,\n        [ThunderSkill(\"Thunder Reign\")] Skill150,\n        [ThunderSkill(\"Wild Thunder\")] Skill151,\n        [AutoSkill(\"Low Sleep\")] Skill152,\n        [AutoSkill(\"Mid Sleep\")] Skill153,\n        [AutoSkill(\"High Sleep\")] Skill154,\n        [AutoSkill(\"Low Rage\")] Skill155,\n        [AutoSkill(\"Mid Rage\")] Skill156,\n        [AutoSkill(\"High Rage\")] Skill157,\n        [AutoSkill(\"Low Despair\")] Skill158,\n        [AutoSkill(\"Mid Despair\")] Skill159,\n        [BlessSkill(\"Divine Judgment\")] Skill160,\n        [BlessSkill(\"Samsara\")] Skill161,\n        [AutoSkill(\"High Despair\")] Skill162,\n        [AutoSkill(\"Low All Ail\")] Skill163,\n        [AutoSkill(\"Mid All Ail\")] Skill164,\n        [AutoSkill(\"High All Ail\")] Skill165,\n        [AlmightySkill(\"Adam Skill 1\")] Skill166,\n        [AlmightySkill(\"Revitalize Soul\")] Skill167,\n        [AlmightySkill(\"Grand Palm\")] Skill168,\n        [AlmightySkill(\"Full Force\")] Skill169,\n        [DeathSkill(\"Demonic Decree\")] Skill170,\n        [DeathSkill(\"Die For Me!\")] Skill171,\n        [SpecialSkill(\"Support Plus 3\")] Skill172,\n        [SpecialSkill(\"Support Plus 2\")] Skill173,\n        [SpecialSkill(\"Support Plus 1\")] Skill174,\n        [SpecialSkill(\"Support Rate Up\")] Skill175,\n        [NuclearSkill(\"Atomic Flare\")] Skill176,\n        [NuclearSkill(\"Cosmic Flare\")] Skill177,\n        [HealSkill(\"Mindfulness\")] Skill178,\n        [HealSkill(\"Wakefulness\")] Skill179,\n        [AlmightySkill(\"Black Viper\")] Skill180,\n        [AlmightySkill(\"Morning Star\")] Skill181,\n        [AlmightySkill(\"Abyssal Eye\")] Skill182,\n        [HealSkill(\"Champion's Cup\")] Skill183,\n        [SupportSkill(\"Bleeding Dry Brush\")] Skill184,\n        [SupportSkill(\"Vault Guardian\")] Skill185,\n        [SupportSkill(\"Wings of Wisdom\")] Skill186,\n        [SupportSkill(\"President's Insight\")] Skill187,\n        [SupportSkill(\"Gambler's Foresight\")] Skill188,\n        [SupportSkill(\"Tyrant's Will\")] Skill189,\n        [PsychoSkill(\"Psi\")] Skill190,\n        [PsychoSkill(\"Psio\")] Skill191,\n        [PsychoSkill(\"Psiodyne\")] Skill192,\n        [PsychoSkill(\"Mapsi\")] Skill193,\n        [PsychoSkill(\"Mapsio\")] Skill194,\n        [PsychoSkill(\"Mapsiodyne\")] Skill195,\n        [SupportSkill(\"Attack Position\")] Skill196,\n        [PsychoSkill(\"Psycho Force\")] Skill197,\n        [PsychoSkill(\"Psycho Blast\")] Skill198,\n        [AlmightySkill(\"Universal Power\")] Skill199,\n        [HitSkill(\"Lunge\")] Skill200,\n        [HitSkill(\"Assault Dive\")] Skill201,\n        [HitSkill(\"Megaton Raid\")] Skill202,\n        [HitSkill(\"God's Hand\")] Skill203,\n        [HitSkill(\"Lunge\")] Skill204,\n        [HitSkill(\"Lucky Punch\")] Skill205,\n        [HitSkill(\"Miracle Punch\")] Skill206,\n        [HitSkill(\"Kill Rush\")] Skill207,\n        [HitSkill(\"Gatling Blow\")] Skill208,\n        [AlmightySkill(\"Piercing Strike\")] Skill209,\n        [HitSkill(\"Cleave\")] Skill210,\n        [HitSkill(\"Giant Slice\")] Skill211,\n        [HitSkill(\"Brave Blade\")] Skill212,\n        [HitSkill(\"Sword Dance\")] Skill213,\n        [HealSkill(\"Holy Benevolence\")] Skill214,\n        [HitSkill(\"Hassou Tobi\")] Skill215,\n        [HitSkill(\"Ayamur\")] Skill216,\n        [HitSkill(\"Death Scythe\")] Skill217,\n        [SupportSkill(\"UNUSED\")] Skill218,\n        [SpecialSkill(\"NOT USED\")] Skill219,\n        [HitSkill(\"Cornered Fang\")] Skill220,\n        [HitSkill(\"Rising Slash\")] Skill221,\n        [HitSkill(\"Deadly Fury\")] Skill222,\n        [NuclearSkill(\"Nuclear Crush\")] Skill223,\n        [GunSkill(\"Snap\")] Skill224,\n        [GunSkill(\"Triple Down\")] Skill225,\n        [GunSkill(\"One-shot Kill\")] Skill226,\n        [GunSkill(\"Riot Gun\")] Skill227,\n        [GunSkill(\"Double Shot\")] Skill228,\n        [AlmightySkill(\"Primordial Light\")] Skill229,\n        [HitSkill(\"Vajra Blast\")] Skill230,\n        [HitSkill(\"Vorpal Blade\")] Skill231,\n        [SupportSkill(\"NOT USED\")] Skill232,\n        [SupportSkill(\"NOT USED\")] Skill233,\n        [SupportSkill(\"NOT USED\")] Skill234,\n        [HitSkill(\"Vicious Strike\")] Skill235,\n        [HitSkill(\"Heat Wave\")] Skill236,\n        [HitSkill(\"Gigantomachia\")] Skill237,\n        [PsychoSkill(\"Swirling Psychokinesis\")] Skill238,\n        [BlessSkill(\"Tyrant's Purge\")] Skill239,\n        [SupportSkill(\"Mass Ball\")] Skill240,\n        [HitSkill(\"Rampage\")] Skill241,\n        [HitSkill(\"Swift Strike\")] Skill242,\n        [HitSkill(\"Deathbound\")] Skill243,\n        [HitSkill(\"Agneyastra\")] Skill244,\n        [SupportSkill(\"NOT USED\")] Skill245,\n        [HealSkill(\"Regeneration\")] Skill246,\n        [HitSkill(\"Rising Slash\")] Skill247,\n        [HitSkill(\"Deadly Fury\")] Skill248,\n        [BlessSkill(\"Tyrant's Judgement\")] Skill249,\n        [HitSkill(\"Double Fangs\")] Skill250,\n        [HitSkill(\"Power Slash\")] Skill251,\n        [SupportSkill(\"Shapeless Guard\")] Skill252,\n        [HitSkill(\"Tempest Slash\")] Skill253,\n        [HitSkill(\"Myriad Slashes\")] Skill254,\n        [SupportSkill(\"Amplify Force\")] Skill255,\n        [SupportSkill(\"Amplify Magic\")] Skill256,\n        [HitSkill(\"Raining Seeds\")] Skill257,\n        [HealSkill(\"Energy Stream\")] Skill258,\n        [SupportSkill(\"Flow\")] Skill259,\n        [HitSkill(\"Sledgehammer\")] Skill260,\n        [HitSkill(\"Skull Cracker\")] Skill261,\n        [HitSkill(\"Terror Claw\")] Skill262,\n        [HitSkill(\"Headbutt\")] Skill263,\n        [HitSkill(\"Stomach Blow\")] Skill264,\n        [GunSkill(\"Dream Needle\")] Skill265,\n        [HitSkill(\"Hysterical Slap\")] Skill266,\n        [HitSkill(\"Negative Pile\")] Skill267,\n        [HitSkill(\"Brain Shake\")] Skill268,\n        [AlmightySkill(\"Attack\")] Skill269,\n        [HitSkill(\"Flash Bomb\")] Skill270,\n        [HitSkill(\"Mind Slice\")] Skill271,\n        [HitSkill(\"Bloodbath\")] Skill272,\n        [HitSkill(\"Memory Blow\")] Skill273,\n        [HitSkill(\"Insatiable Strike\")] Skill274,\n        [HitSkill(\"Dormin Rush\")] Skill275,\n        [HitSkill(\"Oni-Kagura\")] Skill276,\n        [HitSkill(\"Bad Beat\")] Skill277,\n        [HitSkill(\"Brain Buster\")] Skill278,\n        [HitSkill(\"Laevateinn\")] Skill279,\n        [GunSkill(\"Handgun\")] Skill280,\n        [GunSkill(\"Shotgun\")] Skill281,\n        [GunSkill(\"Slingshot\")] Skill282,\n        [GunSkill(\"Machine Gun\")] Skill283,\n        [GunSkill(\"Assault Rifle\")] Skill284,\n        [GunSkill(\"Revolver\")] Skill285,\n        [GunSkill(\"Grenade Launcher\")] Skill286,\n        [GunSkill(\"Laser Gun\")] Skill287,\n        [GunSkill(\"Antique Rifle\")] Skill288,\n        [SupportSkill(\"Tyrant Stance\")] Skill289,\n        [SupportSkill(\"Fighting Spirit\")] Skill290,\n        [HitSkill(\"Miracle Rush\")] Skill291,\n        [SupportSkill(\"Checkmate\")] Skill292,\n        [SupportSkill(\"Hyakka Ryouran\")] Skill293,\n        [SupportSkill(\"High Energy\")] Skill294,\n        [SpecialSkill(\"Ultimate Support\")] Skill295,\n        [SupportSkill(\"Life Wall\")] Skill296,\n        [AlmightySkill(\"Rebellion Blade\")] Skill297,\n        [HitSkill(\"Masquerade\")] Skill298,\n        [AlmightySkill(\"Guiding Tendril\")] Skill299,\n        [HealSkill(\"Dia\")] Skill300,\n        [HealSkill(\"Diarama\")] Skill301,\n        [HealSkill(\"Diarahan\")] Skill302,\n        [SupportSkill(\"Brave Step\")] Skill303,\n        [AlmightySkill(\"Maruki Punch\")] Skill304,\n        [HealSkill(\"Media\")] Skill305,\n        [HealSkill(\"Mediarama\")] Skill306,\n        [HealSkill(\"Mediarahan\")] Skill307,\n        [GunSkill(\"Brutal Impact\")] Skill308,\n        [DeathSkill(\"Cursed Strike\")] Skill309,\n        [HealSkill(\"Recarm\")] Skill310,\n        [HealSkill(\"Samarecarm\")] Skill311,\n        [HealSkill(\"Recarmdra\")] Skill312,\n        [SpecialSkill(\"Sleuthing Instinct\")] Skill313,\n        [SpecialSkill(\"Sleuthing Mastery\")] Skill314,\n        [HealSkill(\"Amrita Drop\")] Skill315,\n        [HealSkill(\"Amrita Shower\")] Skill316,\n        [BlessSkill(\"Holy Strike\")] Skill317,\n        [HealSkill(\"Salvation\")] Skill318,\n        [NuclearSkill(\"Nuclear Strike\")] Skill319,\n        [PsychoSkill(\"Psychokinesis Strike\")] Skill320,\n        [SupportSkill(\"Taunting Aura\")] Skill321,\n        [WindSkill(\"Storm Punishment\")] Skill322,\n        [SupportSkill(\"Concealment\")] Skill323,\n        [ThunderSkill(\"Lightning Punishment\")] Skill324,\n        [HealSkill(\"Patra\")] Skill325,\n        [IceSkill(\"Puishing Hail\")] Skill326,\n        [HealSkill(\"Energy Shower\")] Skill327,\n        [HealSkill(\"Energy Drop\")] Skill328,\n        [HealSkill(\"Baisudi\")] Skill329,\n        [HealSkill(\"Me Patra\")] Skill330,\n        [HealSkill(\"Mabaisudi\")] Skill331,\n        [SupportSkill(\"Charge Ball\")] Skill332,\n        [SupportSkill(\"Concentrated Ball\")] Skill333,\n        [FireSkill(\"Inferno Punishment\")] Skill334,\n        [SupportSkill(\"Tarukaja\")] Skill335,\n        [SupportSkill(\"Rakukaja\")] Skill336,\n        [SupportSkill(\"Sukukaja\")] Skill337,\n        [SupportSkill(\"Heat Riser\")] Skill338,\n        [GunSkill(\"Gunfire Punishment\")] Skill339,\n        [SupportSkill(\"Matarukaja\")] Skill340,\n        [SupportSkill(\"Marakukaja\")] Skill341,\n        [SupportSkill(\"Masukukaja\")] Skill342,\n        [SupportSkill(\"Thermopylae\")] Skill343,\n        [HitSkill(\"Guillotine Punishment\")] Skill344,\n        [SupportSkill(\"Tarunda\")] Skill345,\n        [SupportSkill(\"Rakunda\")] Skill346,\n        [SupportSkill(\"Sukunda\")] Skill347,\n        [SupportSkill(\"Debilitate\")] Skill348,\n        [SpecialSkill(\"Quadruple Summon\")] Skill349,\n        [SupportSkill(\"Matarunda\")] Skill350,\n        [SupportSkill(\"Marakunda\")] Skill351,\n        [SupportSkill(\"Masukunda\")] Skill352,\n        [SupportSkill(\"Analysis\")] Skill353,\n        [SupportSkill(\"Analysis\")] Skill354,\n        [SupportSkill(\"Dekunda\")] Skill355,\n        [SupportSkill(\"Dekaja\")] Skill356,\n        [AlmightySkill(\"Explosion!\")] Skill357,\n        [AlmightySkill(\"Explosion!\")] Skill358,\n        [HitSkill(\"Spginx Swipe\")] Skill359,\n        [SupportSkill(\"Charge\")] Skill360,\n        [SupportSkill(\"Concentrate\")] Skill361,\n        [HitSkill(\"Nose Dive\")] Skill362,\n        [SupportSkill(\"Kill Reward Up\")] Skill363,\n        [SupportSkill(\"Guard Reward Up\")] Skill364,\n        [SupportSkill(\"Rebellion\")] Skill365,\n        [SupportSkill(\"Revolution\")] Skill366,\n        [AlmightySkill(\"Make It Rain\")] Skill367,\n        [SpecialSkill(\"Special Guards\")] Skill368,\n        [SupportSkill(\"Fake Artist's Grace\")] Skill369,\n        [SupportSkill(\"Tetrakarn\")] Skill370,\n        [SupportSkill(\"Makarakarn\")] Skill371,\n        [SupportSkill(\"Tetraja\")] Skill372,\n        [SupportSkill(\"Taste of Wrath\")] Skill373,\n        [SpecialSkill(\"True Fake\")] Skill374,\n        [SupportSkill(\"Tetra Break\")] Skill375,\n        [SupportSkill(\"Makara Break\")] Skill376,\n        [AlmightySkill(\"Killshot of love\")] Skill377,\n        [AlmightySkill(\"NOT USED\")] Skill378,\n        [AlmightySkill(\"NOT USED\")] Skill379,\n        [SupportSkill(\"Fire Wall\")] Skill380,\n        [SupportSkill(\"Ice Wall\")] Skill381,\n        [SupportSkill(\"Elec Wall\")] Skill382,\n        [SupportSkill(\"Wind Wall\")] Skill383,\n        [Unused] Skill384,\n        [SupportSkill(\"Fire Break\")] Skill385,\n        [SupportSkill(\"Ice Break\")] Skill386,\n        [SupportSkill(\"Wind Break\")] Skill387,\n        [SupportSkill(\"Elec Break\")] Skill388,\n        [Unused] Skill389,\n        [SupportSkill(\"Trafuri\")] Skill390,\n        [SupportSkill(\"Traesto\")] Skill391,\n        [SupportSkill(\"Active Barrier\")] Skill392,\n        [SupportSkill(\"Nuke Wall\")] Skill393,\n        [SupportSkill(\"Psy Wall\")] Skill394,\n        [SupportSkill(\"Nuke Break\")] Skill395,\n        [SupportSkill(\"Psy Break\")] Skill396,\n        [Unused] Skill397,\n        [Unused] Skill398,\n        [SupportSkill(\"Flow\")] Skill399,\n        [AlmightySkill(\"All-out Lv 1\")] Skill400,\n        [AlmightySkill(\"All-out Lv 2\")] Skill401,\n        [AlmightySkill(\"All-out Lv 3\")] Skill402,\n        [SupportSkill(\"Emergency Escape\")] Skill403,\n        [Skill(\"Attack\")] Skill404,\n        [AlmightySkill(\"Down Shot\")] Skill405,\n        [SpecialSkill(\"Summon\")] Skill406,\n        [SpecialSkill(\"Call for Backup\")] Skill407,\n        [Unused] Skill408,\n        [SpecialSkill(\"Barrage\")] Skill409,\n        [AlmightySkill(\"Follow Crush\")] Skill410,\n        [AlmightySkill(\"Follow Claw\")] Skill411,\n        [AlmightySkill(\"Follow Whip\")] Skill412,\n        [AlmightySkill(\"Follow Blade\")] Skill413,\n        [AlmightySkill(\"Follow Knuckle\")] Skill414,\n        [AlmightySkill(\"Follow Axe\")] Skill415,\n        [AlmightySkill(\"Follow Saber\")] Skill416,\n        [SpecialSkill(\"Dispose Item\")] Skill417,\n        [SpecialSkill(\"Heal Enemy\")] Skill418,\n        [AlmightySkill(\"Death (Despair)\")] Skill419,\n        [AlmightySkill(\"Ally1 Follow-Up\")] Skill420,\n        [AlmightySkill(\"Ally2 Follow-Up\")] Skill421,\n        [AlmightySkill(\"Ally3 Follow-Up\")] Skill422,\n        [AlmightySkill(\"Ally4 Follow-Up\")] Skill423,\n        [AlmightySkill(\"Ally5 Follow-Up\")] Skill424,\n        [AlmightySkill(\"Ally6 Follow-Up\")] Skill425,\n        [AlmightySkill(\"Ally7 Follow-Up\")] Skill426,\n        [SpecialSkill(\"Power Up Enemy\")] Skill427,\n        [SpecialSkill(\"Power Up Enemy\")] Skill428,\n        [SpecialSkill(\"Power Up Enemy\")] Skill429,\n        [SupportSkill(\"Steal Info\")] Skill430,\n        [SpecialSkill(\"Sup Matarukaja\")] Skill431,\n        [SpecialSkill(\"Sup Marakukaja\")] Skill432,\n        [SpecialSkill(\"Sup Masukukaja\")] Skill433,\n        [SpecialSkill(\"Sup All Kaja\")] Skill434,\n        [SpecialSkill(\"Sup Charge\")] Skill435,\n        [SpecialSkill(\"Sup HP +30%\")] Skill436,\n        [SpecialSkill(\"Sup SP +10%\")] Skill437,\n        [SpecialSkill(\"Sup Escape Route\")] Skill438,\n        [SpecialSkill(\"Sup Third Eye\")] Skill439,\n        [SpecialSkill(\"Subrecover HP\")] Skill440,\n        [SpecialSkill(\"Subrecover SP\")] Skill441,\n        [SpecialSkill(\"Analysis\")] Skill442,\n        [SpecialSkill(\"Deep Analysis\")] Skill443,\n        [SpecialSkill(\"Full Analysis\")] Skill444,\n        [AlmightySkill(\"All-Out Attack\")] Skill445,\n        [WindSkill(\"Dust Flurry\")] Skill446,\n        [HitSkill(\"Tongue Whip\")] Skill447,\n        [HitSkill(\"Whip Strike\")] Skill448,\n        [SupportSkill(\"Lustful Slurp\")] Skill449,\n        [HealSkill(\"Libido Boost\")] Skill450,\n        [HitSkill(\"Golden Knife\")] Skill451,\n        [HitSkill(\"Lick\")] Skill452,\n        [AlmightySkill(\"Gold Medal Spike\")] Skill453,\n        [HitSkill(\"Volleyball Assault\")] Skill454,\n        [WindSkill(\"Maelstrom\")] Skill455,\n        [FireSkill(\"Flame Dance\")] Skill456,\n        [IceSkill(\"Silent Snowscape\")] Skill457,\n        [ThunderSkill(\"Thunderclap\")] Skill458,\n        [DeathSkill(\"Maeiga\")] Skill459,\n        [PoisonSkill(\"Hunger All\")] Skill460,\n        [GunSkill(\"Ocular Vulcan\")] Skill461,\n        [FireSkill(\"Missile Party\")] Skill462,\n        [PoisonSkill(\"Fear Gas\")] Skill463,\n        [SpecialSkill(\"Super VIP Form\")] Skill464,\n        [AlmightySkill(\"March of the Piggy\")] Skill465,\n        [HitSkill(\"Sphinx Swipe\")] Skill466,\n        [WindSkill(\"Wing Blast\")] Skill467,\n        [SpecialSkill(\"Rapid Ascent\")] Skill468,\n        [HitSkill(\"Sphinx Dive\")] Skill469,\n        [AlmightySkill(\"Dreadful Scream\")] Skill470,\n        [HitSkill(\"Bite\")] Skill471,\n        [SupportSkill(\"Restore\")] Skill472,\n        [AlmightySkill(\"The Artist's Grace\")] Skill473,\n        [SpecialSkill(\"Work Order\")] Skill474,\n        [SpecialSkill(\"Sacrifice Order\")] Skill475,\n        [AlmightySkill(\"Selfless Devotion\")] Skill476,\n        [AlmightySkill(\"Penalty\")] Skill477,\n        [HitSkill(\"Coin Attack\")] Skill478,\n        [HitSkill(\"Severing Slash\")] Skill479,\n        [GunSkill(\"Gatling Gun\")] Skill480,\n        [AlmightySkill(\"Berserker Dance\")] Skill481,\n        [AlmightySkill(\"Roulette: HP\")] Skill482,\n        [AlmightySkill(\"Roulette: SP\")] Skill483,\n        [SpecialSkill(\"Roulette: Money\")] Skill484,\n        [SupportSkill(\"Roulette: Aid 1\")] Skill485,\n        [SupportSkill(\"Roulette: Aid 2\")] Skill486,\n        [SupportSkill(\"Roulette: Aid 3\")] Skill487,\n        [HitSkill(\"Beast King's Wrath\")] Skill488,\n        [SupportSkill(\"Hunting Stance\")] Skill489,\n        [AlmightySkill(\"Arm of Destruction\")] Skill490,\n        [SupportSkill(\"Gryphon's Breath\")] Skill491,\n        [AlmightySkill(\"Royal Wing Beam\")] Skill492,\n        [AlmightySkill(\"Cannon Fire\")] Skill493,\n        [AlmightySkill(\"Cannon Barrage\")] Skill494,\n        [SupportSkill(\"Unholy Convergence\")] Skill495,\n        [AlmightySkill(\"Pyramid Blast\")] Skill496,\n        [HitSkill(\"Tyrant's Fist\")] Skill497,\n        [SupportSkill(\"Tyrant's Glare\")] Skill498,\n        [AlmightySkill(\"Tyrant's Wave\")] Skill499,\n        [HealSkill(\"Fig Seed\")] Skill500,\n        [HealSkill(\"Medicine\")] Skill501,\n        [HealSkill(\"Ointment\")] Skill502,\n        [HealSkill(\"Antibiotic Gel\")] Skill503,\n        [HealSkill(\"Life Stone\")] Skill504,\n        [HealSkill(\"Bead\")] Skill505,\n        [HealSkill(\"Value Medicine\")] Skill506,\n        [HealSkill(\"Medical Kit\")] Skill507,\n        [HealSkill(\"Maka Leaf\")] Skill508,\n        [HealSkill(\"Bead Chain\")] Skill509,\n        [HealSkill(\"Soul Drop\")] Skill510,\n        [HealSkill(\"Snuff Soul\")] Skill511,\n        [HealSkill(\"Chewing Soul\")] Skill512,\n        [HealSkill(\"Soul Food\")] Skill513,\n        [HealSkill(\"Revival Bead\")] Skill514,\n        [HealSkill(\"Balm of Life\")] Skill515,\n        [HealSkill(\"Royel Jelly\")] Skill516,\n        [HealSkill(\"Organic Herb\")] Skill517,\n        [HealSkill(\"Disclose\")] Skill518,\n        [HealSkill(\"Tranquilizer\")] Skill519,\n        [HealSkill(\"Kopi Luwak\")] Skill520,\n        [SupportSkill(\"Goho-M\")] Skill521,\n        [SupportSkill(\"Vanish Ball\")] Skill522,\n        [HealSkill(\"Soma\")] Skill523,\n        [HealSkill(\"Amrita Soda\")] Skill524,\n        [HealSkill(\"Hiranya\")] Skill525,\n        [HealSkill(\"Muscle Drink\")] Skill526,\n        [HealSkill(\"Odd Morsel\")] Skill527,\n        [HealSkill(\"Rancid Gravy\")] Skill528,\n        [HealSkill(\"Plume of Dusk\")] Skill529,\n        [SupportSkill(\"Magic Mirror\")] Skill530,\n        [SupportSkill(\"Physical Mirror\")] Skill531,\n        [SupportSkill(\"Universe Ring\")] Skill532,\n        [SupportSkill(\"Sleipnir\")] Skill533,\n        [SupportSkill(\"Obsidian Mirror\")] Skill534,\n        [SupportSkill(\"Purifying Water\")] Skill535,\n        [SupportSkill(\"Purifying Salt\")] Skill536,\n        [FireSkill(\"Firecracker\")] Skill537,\n        [FireSkill(\"San-zun Tama\")] Skill538,\n        [IceSkill(\"Ice Cube\")] Skill539,\n        [IceSkill(\"Dry Ice\")] Skill540,\n        [WindSkill(\"Pinwheel\")] Skill541,\n        [WindSkill(\"Yashichi\")] Skill542,\n        [ThunderSkill(\"Ball Lightning\")] Skill543,\n        [ThunderSkill(\"Tesla Coil\")] Skill544,\n        [AlmightySkill(\"Smart Bomb\")] Skill545,\n        [BlessSkill(\"Segami Rice\")] Skill546,\n        [DeathSkill(\"Curse Paper\")] Skill547,\n        [FireSkill(\"Flame Magatama\")] Skill548,\n        [WindSkill(\"Wind Magatama\")] Skill549,\n        [IceSkill(\"Freeze Magatama\")] Skill550,\n        [ThunderSkill(\"Bolt Magatama\")] Skill551,\n        [HealSkill(\"Homunculus\")] Skill552,\n        [HealSkill(\"Removal Potion\")] Skill553,\n        [BlessSkill(\"Kouga Ball\")] Skill554,\n        [BlessSkill(\"Makouha Ball\")] Skill555,\n        [DeathSkill(\"Eiga Ball\")] Skill556,\n        [DeathSkill(\"Maeiga Ball\")] Skill557,\n        [PsychoSkill(\"Psio Ball\")] Skill558,\n        [PsychoSkill(\"Mapsi Ball\")] Skill559,\n        [NuclearSkill(\"Freila Ball\")] Skill560,\n        [NuclearSkill(\"Mafrei Ball\")] Skill561,\n        [NuclearSkill(\"Nuke Magatama\")] Skill562,\n        [PsychoSkill(\"Psy Magatama\")] Skill563,\n        [BlessSkill(\"Bless Magatama\")] Skill564,\n        [DeathSkill(\"Curse Magatama\")] Skill565,\n        [HealSkill(\"Cooking\")] Skill566,\n        [HealSkill(\"Snack\")] Skill567,\n        [HealSkill(\"Shoes 1\")] Skill568,\n        [HealSkill(\"Shoes 2\")] Skill569,\n        [HealSkill(\"Shoes 3\")] Skill570,\n        [HealSkill(\"Juice Bar 1\")] Skill571,\n        [HealSkill(\"Juice Bar 2\")] Skill572,\n        [HealSkill(\"Juice Bar 3\")] Skill573,\n        [HealSkill(\"Juice Bar 4\")] Skill574,\n        [HealSkill(\"Energy Drink 1\")] Skill575,\n        [HealSkill(\"Energy Drink 2\")] Skill576,\n        [HealSkill(\"Energy Drink 3\")] Skill577,\n        [HealSkill(\"Soda 1\")] Skill578,\n        [HealSkill(\"Soda 2\")] Skill579,\n        [HealSkill(\"Soda 3\")] Skill580,\n        [HealSkill(\"Soda 4\")] Skill581,\n        [HealSkill(\"Ration 1 \")] Skill582,\n        [HealSkill(\"Ration 2\")] Skill583,\n        [HealSkill(\"Ration 3\")] Skill584,\n        [HealSkill(\"Drug Store 1\")] Skill585,\n        [HealSkill(\"Drug Store 2\")] Skill586,\n        [HealSkill(\"Drug Store 3\")] Skill587,\n        [HealSkill(\"Drug Store 4\")] Skill588,\n        [HealSkill(\"Drug Store 5\")] Skill589,\n        [HealSkill(\"Drug Store 6\")] Skill590,\n        [HealSkill(\"Drug Store 7\")] Skill591,\n        [HealSkill(\"Drug Store 8\")] Skill592,\n        [HealSkill(\"Drug Store 9\")] Skill593,\n        [HealSkill(\"Drug Store 10\")] Skill594,\n        [HealSkill(\"Drug Store 11\")] Skill595,\n        [HealSkill(\"Drug Store 12\")] Skill596,\n        [HealSkill(\"Coffee 1\")] Skill597,\n        [SupportSkill(\"Coffee 2\")] Skill598,\n        [AlmightySkill(\"Double Fangs\")] Skill599,\n        [AlmightySkill(\"Twins Down Attack\")] Skill600,\n        [HitSkill(\"Caro Rod\")] Skill601,\n        [HitSkill(\"Caro Attack\")] Skill602,\n        [AlmightySkill(\"Megidolaon\")] Skill603,\n        [AlmightySkill(\"Rays of Control\")] Skill604,\n        [AlmightySkill(\"Rays of Control\")] Skill605,\n        [AlmightySkill(\"Rays of Control\")] Skill606,\n        [AlmightySkill(\"Rays of Control\")] Skill607,\n        [AlmightySkill(\"Arrow of Light\")] Skill608,\n        [AlmightySkill(\"Diffraction Arrow\")] Skill609,\n        [AlmightySkill(\"Light Edge\")] Skill610,\n        [SupportSkill(\"Gathering Light\")] Skill611,\n        [AlmightySkill(\"Eternal Light\")] Skill612,\n        [SupportSkill(\"Holy Change\")] Skill613,\n        [AlmightySkill(\"Distortion Wave\")] Skill614,\n        [SupportSkill(\"Tough Law\")] Skill615,\n        [SupportSkill(\"Frail Law\")] Skill616,\n        [SupportSkill(\"New Creation\")] Skill617,\n        [AlmightySkill(\"Distortion Surge\")] Skill618,\n        [AlmightySkill(\"Arrow of Light\")] Skill619,\n        [SupportSkill(\"Manifest Sword\")] Skill620,\n        [SupportSkill(\"Manifest Gun\")] Skill621,\n        [SupportSkill(\"Manifest Bell\")] Skill622,\n        [HitSkill(\"Sword of Judgment\")] Skill623,\n        [GunSkill(\"Capital Punishment\")] Skill624,\n        [SupportSkill(\"Manifest Book\")] Skill625,\n        [AlmightySkill(\"Distorted Lust\")] Skill626,\n        [AlmightySkill(\"Gospel\")] Skill627,\n        [AlmightySkill(\"Distorted Wrath\")] Skill628,\n        [AlmightySkill(\"Distorted Vanity\")] Skill629,\n        [SupportSkill(\"Song of Salvation\")] Skill630,\n        [AlmightySkill(\"Wrath of God\")] Skill631,\n        [AlmightySkill(\"Distorted Gluttony\")] Skill632,\n        [AlmightySkill(\"Distorted Envy\")] Skill633,\n        [SupportSkill(\"Song of Placation\")] Skill634,\n        [SupportSkill(\"Divine Apex\")] Skill635,\n        [AlmightySkill(\"Rays of Control\")] Skill636,\n        [AlmightySkill(\"Distorted Avarice\")] Skill637,\n        [HealSkill(\"Will of the People\")] Skill638,\n        [AlmightySkill(\"Rays of Control\")] Skill639,\n        [SpecialSkill(\"Moral Support\")] Skill640,\n        [SpecialSkill(\"Active Support\")] Skill641,\n        [SpecialSkill(\"Mental Hack\")] Skill642,\n        [SpecialSkill(\"Emergency Shift\")] Skill643,\n        [SpecialSkill(\"Final Guard\")] Skill644,\n        [SpecialSkill(\"Position Hack\")] Skill645,\n        [SpecialSkill(\"High Analyze\")] Skill646,\n        [SpecialSkill(\"Treasure Skimmer\")] Skill647,\n        [SpecialSkill(\"Subrecover HP EX\")] Skill648,\n        [SpecialSkill(\"Subrecover SP EX\")] Skill649,\n        [GunSkill(\"Big Bang Treat\")] Skill650,\n        [AlmightySkill(\"Explosion!\")] Skill651,\n        [AlmightySkill(\"Explosion!\")] Skill652,\n        [AlmightySkill(\"Explosion!\")] Skill653,\n        [SupportSkill(\"Big Bang Order\")] Skill654,\n        [AlmightySkill(\"Roulette Time\")] Skill655,\n        [AlmightySkill(\"Trip-Upper\")] Skill656,\n        [AlmightySkill(\"Lust Sphere\")] Skill657,\n        [AlmightySkill(\"Down Shot 2\")] Skill658,\n        [AlmightySkill(\"Down Shot 3\")] Skill659,\n        [AlmightySkill(\"Down Shot 4\")] Skill660,\n        [GunSkill(\"Electro Attack\")] Skill661,\n        [AlmightySkill(\"Sinful Shell\")] Skill662,\n        [AlmightySkill(\"Follow Black\")] Skill663,\n        [SpecialSkill(\"Summon\")] Skill664,\n        [AlmightySkill(\"Madara-Megido\")] Skill665,\n        [HealSkill(\"Curry Raku\")] Skill666,\n        [HealSkill(\"Enemy Benefit\")] Skill667,\n        [HealSkill(\"Diarahan\")] Skill668,\n        [HealSkill(\"Curry Suku\")] Skill669,\n        [SupportSkill(\"Decoy Ball\")] Skill670,\n        [SupportSkill(\"Super Decoy Ball\")] Skill671,\n        [HitSkill(\"Metabolic Wave\")] Skill672,\n        [AlmightySkill(\"Laevateinn\")] Skill673,\n        [SupportSkill(\"Desperation\")] Skill674,\n        [SupportSkill(\"Call of Chaos\")] Skill675,\n        [AlmightySkill(\"Big Bang Challenge\")] Skill676,\n        [AlmightySkill(\"Grail Light 2\")] Skill677,\n        [AlmightySkill(\"Megidola\")] Skill678,\n        [PoisonSkill(\"Rage Transmission\")] Skill679,\n        [HitSkill(\"Hundred Slaps\")] Skill680,\n        [AlmightySkill(\"Distorted Pride\")] Skill681,\n        [AlmightySkill(\"Divine Punishment\")] Skill682,\n        [HealSkill(\"Will of the People\")] Skill683,\n        [HitSkill(\"Wind Cutter\")] Skill684,\n        [GunSkill(\"Shoot Up\")] Skill685,\n        [HitSkill(\"Executive Punch\")] Skill686,\n        [AlmightySkill(\"Megidolaon\")] Skill687,\n        [HitSkill(\"Vorpal Blade\")] Skill688,\n        [AlmightySkill(\"Megidolaon\")] Skill689,\n        [HealSkill(\"Big Bang Burger\")] Skill690,\n        [HealSkill(\"Earth Burger\")] Skill691,\n        [HealSkill(\"Mars Burger\")] Skill692,\n        [HealSkill(\"Moon Burger\")] Skill693,\n        [HealSkill(\"Saturn Burger\")] Skill694,\n        [AlmightySkill(\"Justine Attack\")] Skill695,\n        [AlmightySkill(\"Caroline Attack\")] Skill696,\n        [HealSkill(\"Curry Makara\")] Skill697,\n        [HealSkill(\"Curry Tetra\")] Skill698,\n        [HealSkill(\"Curry Endure\")] Skill699,\n        [HealSkill(\"Curry Charge\")] Skill700,\n        [HealSkill(\"Curry Concentrate\")] Skill701,\n        [HealSkill(\"Curry Heat Riser\")] Skill702,\n        [SupportSkill(\"##703\")] Skill703,\n        [HealSkill(\"Cadenza\")] Skill704,\n        [HitSkill(\"Cross Slash\")] Skill705,\n        [AlmightySkill(\"Door of Hades\")] Skill706,\n        [DeathSkill(\"Magatsu Mandala\")] Skill707,\n        [BlessSkill(\"Shining Arrows\")] Skill708,\n        [HitSkill(\"Beast Weaver\")] Skill709,\n        [FireSkill(\"Titanomachia\")] Skill710,\n        [DeathSkill(\"Abyssal Wings\")] Skill711,\n        [HealSkill(\"Oratario\")] Skill712,\n        [AlmightySkill(\"Myriad Truths\")] Skill713,\n        [HealSkill(\"Neo Cadenza\")] Skill714,\n        [HitSkill(\"Akashic\")] Skill715,\n        [PoisonSkill(\"Phantom Show\")] Skill716,\n        [PoisonSkill(\"Confuse Ball\")] Skill717,\n        [SupportSkill(\"Baptism Ball\")] Skill718,\n        [SupportSkill(\"Exorcism Ball\")] Skill719,\n        [AlmightySkill(\"Megido\")] Skill720,\n        [AlmightySkill(\"Megidola\")] Skill721,\n        [AlmightySkill(\"Megidolaon\")] Skill722,\n        [HitSkill(\"Slam\")] Skill723,\n        [AlmightySkill(\"Megaton Raid\")] Skill724,\n        [AlmightySkill(\"One-shot Kill\")] Skill725,\n        [AlmightySkill(\"Inferno\")] Skill726,\n        [AlmightySkill(\"Diamond Dust\")] Skill727,\n        [BlessSkill(\"Eternal Radiance\")] Skill728,\n        [AlmightySkill(\"Tyrant Chaos\")] Skill729,\n        [HealSkill(\"Curry 1\")] Skill730,\n        [HealSkill(\"Curry 2\")] Skill731,\n        [HealSkill(\"Reviv-All\")] Skill732,\n        [HealSkill(\"Reviv-All Z\")] Skill733,\n        [AlmightySkill(\"Dark Akechi for pursuing\")] Skill734,\n        [AlmightySkill(\"Dark Akechi for Gun pursuing\")] Skill735,\n        [SpecialSkill(\"Wild Talk\")] Skill736,\n        [SpecialSkill(\"Baton Pass\")] Skill737,\n        [SpecialSkill(\"Punk Talk\")] Skill738,\n        [SpecialSkill(\"Pickpocket\")] Skill739,\n        [SpecialSkill(\"Harisen Recovery\")] Skill740,\n        [SpecialSkill(\"Protect\")] Skill741,\n        [SpecialSkill(\"Girl Talk\")] Skill742,\n        [SpecialSkill(\"Crocodile Tears\")] Skill743,\n        [SpecialSkill(\"Sexy Technique\")] Skill744,\n        [SpecialSkill(\"Detective Talk\")] Skill745,\n        [SpecialSkill(\"Artist Talk\")] Skill746,\n        [SpecialSkill(\"Negotiating\")] Skill747,\n        [SpecialSkill(\"Fundraising\")] Skill748,\n        [SpecialSkill(\"Manipulation\")] Skill749,\n        [SpecialSkill(\"Mind Control\")] Skill750,\n        [SpecialSkill(\"Charisma Speech\")] Skill751,\n        [SpecialSkill(\"Brainiac Talk\")] Skill752,\n        [SpecialSkill(\"Sabaki\")] Skill753,\n        [SpecialSkill(\"Kakoi Kuzushi \")] Skill754,\n        [SpecialSkill(\"Touryou\")] Skill755,\n        [SpecialSkill(\"Togo System\")] Skill756,\n        [SpecialSkill(\"Bullet Hail\")] Skill757,\n        [SpecialSkill(\"Warning Shot\")] Skill758,\n        [SpecialSkill(\"Celeb Talk\")] Skill759,\n        [SpecialSkill(\"Kitty Talk\")] Skill760,\n        [PoisonSkill(\"Marin Karin\")] Skill761,\n        [PoisonSkill(\"Womanizing\")] Skill762,\n        [SupportSkill(\"Indignant Revenge\")] Skill763,\n        [HealSkill(\"Healing Power\")] Skill764,\n        [HealSkill(\"Healing Power\")] Skill765,\n        [HitSkill(\"Taunt\")] Skill766,\n        [SupportSkill(\"Iridescent Change\")] Skill767,\n        [HitSkill(\"Brave Blade\")] Skill768,\n        [HitSkill(\"Assault Dive\")] Skill769,\n        [HitSkill(\"Terror Claw\")] Skill770,\n        [IceSkill(\"Bufudyne\")] Skill771,\n        [PsychoSkill(\"Psiodyne\")] Skill772,\n        [ThunderSkill(\"Mazionga\")] Skill773,\n        [ThunderSkill(\"Maziodyne\")] Skill774,\n        [DeathSkill(\"Maeiga\")] Skill775,\n        [DeathSkill(\"Maeigaon\")] Skill776,\n        [AlmightySkill(\"Adam Skill 5\")] Skill777,\n        [AlmightySkill(\"Adam Skill 6\")] Skill778,\n        [HitSkill(\"Vorpal Blade\")] Skill779,\n        [AlmightySkill(\"Mona/Ryuji Unison Attack\")] Skill780,\n        [AlmightySkill(\"Mona/Ann Unison Attack\")] Skill781,\n        [AlmightySkill(\"Mona/Haru Unison Attack\")] Skill782,\n        [AlmightySkill(\"Yusuke/Ann Unison Attack\")] Skill783,\n        [AlmightySkill(\"Ryuji/Yusuke Unison Attack\")] Skill784,\n        [AlmightySkill(\"Ryuji/Makoto Unison Attack\")] Skill785,\n        [AlmightySkill(\"Protag/AkechiUnison Attack\")] Skill786,\n        [AlmightySkill(\"Makoto/Haru Unison Attack\")] Skill787,\n        [Unused] Skill788,\n        [AlmightySkill(\"Protag/Kasumi Unison Attack\")] Skill789,\n        [AlmightySkill(\"Mona/Ryuji Unison Attack\")] Skill790,\n        [AlmightySkill(\"Mona/Ann Unison Attack\")] Skill791,\n        [AlmightySkill(\"Mona/haru Unison Attack\")] Skill792,\n        [AlmightySkill(\"Yusuke/ann Unison Attack\")] Skill793,\n        [AlmightySkill(\"Ryuji/Yusuke Unison Attack\")] Skill794,\n        [AlmightySkill(\"Ryuji/Makoto Unison Attack\")] Skill795,\n        [AlmightySkill(\"Protag/akechi Unison Attack\")] Skill796,\n        [AlmightySkill(\"Makoto/Haru Unison Attack\")] Skill797,\n        [Unused] Skill798,\n        [AlmightySkill(\"Protag/kasumi Unison\")] Skill799,\n        [AutoSkill(\"Counter\")] Skill800,\n        [AutoSkill(\"Counterstrike\")] Skill801,\n        [AutoSkill(\"High Counter\")] Skill802,\n        [AutoSkill(\"Resist Burn\")] Skill803,\n        [AutoSkill(\"Null Burn\")] Skill804,\n        [AutoSkill(\"Endure\")] Skill805,\n        [AutoSkill(\"Enduring Soul\")] Skill806,\n        [AutoSkill(\"Resist Freeze\")] Skill807,\n        [AutoSkill(\"Null Freeze\")] Skill808,\n        [AutoSkill(\"Survival Trick\")] Skill809,\n        [AutoSkill(\"Dodge Fire\")] Skill810,\n        [AutoSkill(\"Evade Fire\")] Skill811,\n        [AutoSkill(\"Dodge Ice\")] Skill812,\n        [AutoSkill(\"Evade Ice\")] Skill813,\n        [AutoSkill(\"Dodge Wind\")] Skill814,\n        [AutoSkill(\"Evade Wind\")] Skill815,\n        [AutoSkill(\"Dodge Elec\")] Skill816,\n        [AutoSkill(\"Evade Elec\")] Skill817,\n        [AutoSkill(\"Dodge Phys\")] Skill818,\n        [AutoSkill(\"Evade Phys\")] Skill819,\n        [AutoSkill(\"Fire Boost\")] Skill820,\n        [AutoSkill(\"Fire Amp\")] Skill821,\n        [AutoSkill(\"Ice Boost\")] Skill822,\n        [AutoSkill(\"Ice Amp\")] Skill823,\n        [AutoSkill(\"Wind Boost\")] Skill824,\n        [AutoSkill(\"Wind Amp\")] Skill825,\n        [AutoSkill(\"Elec Boost\")] Skill826,\n        [AutoSkill(\"Elec Amp\")] Skill827,\n        [AutoSkill(\"Angelic Grace\")] Skill828,\n        [AutoSkill(\"Divine Grace\")] Skill829,\n        [AutoSkill(\"Regenerate 1\")] Skill830,\n        [AutoSkill(\"Regenerate 2\")] Skill831,\n        [AutoSkill(\"Regenerate 3\")] Skill832,\n        [AutoSkill(\"Dodge Bless\")] Skill833,\n        [AutoSkill(\"Dodge Curse\")] Skill834,\n        [AutoSkill(\"Invigorate 1\")] Skill835,\n        [AutoSkill(\"Invigorate 2\")] Skill836,\n        [AutoSkill(\"Invigorate 3\")] Skill837,\n        [AutoSkill(\"Evade Bless\")] Skill838,\n        [AutoSkill(\"Evade Curse\")] Skill839,\n        [AutoSkill(\"Attack Master\")] Skill840,\n        [AutoSkill(\"Auto-Mataru\")] Skill841,\n        [AutoSkill(\"Resist Shock\")] Skill842,\n        [AutoSkill(\"Defense Master\")] Skill843,\n        [AutoSkill(\"Auto-Maraku\")] Skill844,\n        [AutoSkill(\"Null Shock\")] Skill845,\n        [AutoSkill(\"Speed Master\")] Skill846,\n        [AutoSkill(\"Auto-Masuku\")] Skill847,\n        [AutoSkill(\"Resist Hunger\")] Skill848,\n        [AutoSkill(\"Null Hunger\")] Skill849,\n        [AutoSkill(\"Fast Heal\")] Skill850,\n        [AutoSkill(\"Insta-Heal\")] Skill851,\n        [AutoSkill(\"Arms Master\")] Skill852,\n        [AutoSkill(\"Spell Master\")] Skill853,\n        [AutoSkill(\"Rage atk up\")] Skill854,\n        [AutoSkill(\"Sharp Student\")] Skill855,\n        [AutoSkill(\"Apt Pupil\")] Skill856,\n        [AutoSkill(\"Ali Dance\")] Skill857,\n        [AutoSkill(\"Firm Stance\")] Skill858,\n        [AutoSkill(\"+50% exp\")] Skill859,\n        [AutoSkill(\"Life Aid\")] Skill860,\n        [AutoSkill(\"Victory Cry\")] Skill861,\n        [AutoSkill(\"Growth 1\")] Skill862,\n        [AutoSkill(\"Growth 2\")] Skill863,\n        [AutoSkill(\"Growth 3\")] Skill864,\n        [AutoSkill(\"Unshaken Will\")] Skill865,\n        [AutoSkill(\"Null bless insta-kill\")] Skill866,\n        [AutoSkill(\"Baton Pass\")] Skill867,\n        [AutoSkill(\"Soul Touch\")] Skill868,\n        [AutoSkill(\"Kakoi Kuzushi\")] Skill869,\n        [AutoSkill(\"Resist Fire\")] Skill870,\n        [AutoSkill(\"Null Fire\")] Skill871,\n        [AutoSkill(\"Repel Fire\")] Skill872,\n        [AutoSkill(\"Drain Fire\")] Skill873,\n        [Unused] Skill874,\n        [AutoSkill(\"Resist Ice\")] Skill875,\n        [AutoSkill(\"Null Ice\")] Skill876,\n        [AutoSkill(\"Repel Ice\")] Skill877,\n        [AutoSkill(\"Drain Ice\")] Skill878,\n        [AutoSkill(\"+15% exp\")] Skill879,\n        [AutoSkill(\"Resist Wind\")] Skill880,\n        [AutoSkill(\"Null Wind\")] Skill881,\n        [AutoSkill(\"Repel Wind\")] Skill882,\n        [AutoSkill(\"Drain Wind\")] Skill883,\n        [AutoSkill(\"All out Attack Boost\")] Skill884,\n        [AutoSkill(\"Resist Elec\")] Skill885,\n        [AutoSkill(\"Null Elec\")] Skill886,\n        [AutoSkill(\"Repel Elec\")] Skill887,\n        [AutoSkill(\"Drain Elec\")] Skill888,\n        [AutoSkill(\"Money Boost\")] Skill889,\n        [AutoSkill(\"Resist Bless\")] Skill890,\n        [AutoSkill(\"Null Bless\")] Skill891,\n        [AutoSkill(\"Repel Bless\")] Skill892,\n        [AutoSkill(\"Drain Bless\")] Skill893,\n        [AutoSkill(\"Hide\")] Skill894,\n        [AutoSkill(\"Resist Curse\")] Skill895,\n        [AutoSkill(\"Null Curse\")] Skill896,\n        [AutoSkill(\"Repel Curse\")] Skill897,\n        [AutoSkill(\"Drain Curse\")] Skill898,\n        [AutoSkill(\"Life Boost\")] Skill899,\n        [AutoSkill(\"Resist Phys\")] Skill900,\n        [AutoSkill(\"Null Phys\")] Skill901,\n        [AutoSkill(\"Repel Phys\")] Skill902,\n        [AutoSkill(\"Drain Phys\")] Skill903,\n        [AutoSkill(\"Null bless/Cruse\")] Skill904,\n        [AutoSkill(\"Ailment Boost\")] Skill905,\n        [AutoSkill(\"Hama Boost\")] Skill906,\n        [AutoSkill(\"Mudo Boost\")] Skill907,\n        [AutoSkill(\"Gun Accuracy +5%\")] Skill908,\n        [AutoSkill(\"Samurail Spirit\")] Skill909,\n        [AutoSkill(\"Dizzy Boost\")] Skill910,\n        [AutoSkill(\"Confuse Boost\")] Skill911,\n        [AutoSkill(\"Fear Boost\")] Skill912,\n        [AutoSkill(\"Forget Boost\")] Skill913,\n        [AutoSkill(\"Sleep Boost\")] Skill914,\n        [AutoSkill(\"Rage Boost\")] Skill915,\n        [AutoSkill(\"Despair Boost\")] Skill916,\n        [AutoSkill(\"Kuzunoha Emblem\")] Skill917,\n        [AutoSkill(\"Brainwash Boost\")] Skill918,\n        [Unused] Skill919,\n        [AutoSkill(\"Resist Dizzy\")] Skill920,\n        [AutoSkill(\"Resist Confuse\")] Skill921,\n        [AutoSkill(\"Resist Fear\")] Skill922,\n        [AutoSkill(\"Resist Forget\")] Skill923,\n        [AutoSkill(\"Resist Sleep\")] Skill924,\n        [AutoSkill(\"Resist Rage\")] Skill925,\n        [AutoSkill(\"Resist Despair\")] Skill926,\n        [AutoSkill(\"Fusion Accident up\")] Skill927,\n        [AutoSkill(\"Resist Brainwash\")] Skill928,\n        [AutoSkill(\"Tyrant's Mind\")] Skill929,\n        [AutoSkill(\"Null Dizzy\")] Skill930,\n        [AutoSkill(\"Null Confuse\")] Skill931,\n        [AutoSkill(\"Null Fear\")] Skill932,\n        [AutoSkill(\"Null Forget\")] Skill933,\n        [AutoSkill(\"Null Sleep\")] Skill934,\n        [AutoSkill(\"Null Rage\")] Skill935,\n        [AutoSkill(\"Null Despair\")] Skill936,\n        [AutoSkill(\"Holy Whisper\")] Skill937,\n        [AutoSkill(\"Null Brainwash\")] Skill938,\n        [AutoSkill(\"Holy Embrace\")] Skill939,\n        [AutoSkill(\"Burn Boost\")] Skill940,\n        [AutoSkill(\"Freeze Boost\")] Skill941,\n        [AutoSkill(\"Shock Boost\")] Skill942,\n        [AutoSkill(\"Blanck\")] Skill943,\n        [AutoSkill(\"Fortified Moxy\")] Skill944,\n        [AutoSkill(\"Adverse Resolve\")] Skill945,\n        [AutoSkill(\"Last Stand\")] Skill946,\n        [AutoSkill(\"Heat Up\")] Skill947,\n        [Unused] Skill948,\n        [AutoSkill(\"Touch n' Go\")] Skill949,\n        [AutoSkill(\"Climate Decorum\")] Skill950,\n        [AutoSkill(\"Ambient Aid\")] Skill951,\n        [AutoSkill(\"RESERVE\")] Skill952,\n        [AutoSkill(\"Snipe\")] Skill953,\n        [AutoSkill(\"Cripple\")] Skill954,\n        [AutoSkill(\"Trigger Happy\")] Skill955,\n        [AutoSkill(\"Resist Nuke\")] Skill956,\n        [AutoSkill(\"Null Nuke\")] Skill957,\n        [AutoSkill(\"Repel Nuke\")] Skill958,\n        [AutoSkill(\"Drain Nuke\")] Skill959,\n        [AutoSkill(\"RESERVE\")] Skill960,\n        [AutoSkill(\"Resist Psy\")] Skill961,\n        [AutoSkill(\"Null Psy\")] Skill962,\n        [AutoSkill(\"Repel Psy\")] Skill963,\n        [AutoSkill(\"Drain Psy\")] Skill964,\n        [AutoSkill(\"RESERVE\")] Skill965,\n        [AutoSkill(\"Nuke Boost\")] Skill966,\n        [AutoSkill(\"Nuke Amp\")] Skill967,\n        [AutoSkill(\"RESERVE\")] Skill968,\n        [AutoSkill(\"Psy Boost\")] Skill969,\n        [AutoSkill(\"Psy Amp\")] Skill970,\n        [AutoSkill(\"Sexy Technique\")] Skill971,\n        [AutoSkill(\"Dodge Nuke\")] Skill972,\n        [AutoSkill(\"Evade Nuke\")] Skill973,\n        [AutoSkill(\"Detox\")] Skill974,\n        [AutoSkill(\"Dodge Psy\")] Skill975,\n        [AutoSkill(\"Evade Psy\")] Skill976,\n        [AutoSkill(\"Detox\")] Skill977,\n        [AutoSkill(\"Bless Boost\")] Skill978,\n        [AutoSkill(\"Bless Amp\")] Skill979,\n        [AutoSkill(\"RESERVE\")] Skill980,\n        [AutoSkill(\"Curse Boost\")] Skill981,\n        [AutoSkill(\"Curse Amp\")] Skill982,\n        [AutoSkill(\"Not Found by Enemy\")] Skill983,\n        [AutoSkill(\"Magic Ability\")] Skill984,\n        [AutoSkill(\"Fortify Spirit\")] Skill985,\n        [AutoSkill(\"Almighty Boost\")] Skill986,\n        [AutoSkill(\"Almighty Amp\")] Skill987,\n        [AutoSkill(\"Zenith Defense\")] Skill988,\n        [AutoSkill(\"Soul Chain\")] Skill989,\n        [AutoSkill(\"Vanity Copy\")] Skill990,\n        [AutoSkill(\"Gluttonous Snuff\")] Skill991,\n        [AutoSkill(\"Sloth Defense\")] Skill992,\n        [AutoSkill(\"Brush of vanity\")] Skill993,\n        [AutoSkill(\"Life rise\")] Skill994,\n        [AutoSkill(\"Mana Rise\")] Skill995,\n        [AutoSkill(\"Soul Touch\")] Skill996,\n        [AutoSkill(\"Victory Cry\")] Skill997,\n        [Unused] Skill998,\n        [Unused] Skill999,\n        [AutoSkill(\"Ailment effect up\")] Skill1000,\n        [AutoSkill(\"Ailment effect up+\")] Skill1001,\n        [AutoSkill(\"Instakill Sp Heal low\")] Skill1002,\n        [AutoSkill(\"Instakill SP heal mid\")] Skill1003,\n        [AutoSkill(\"Instakill SP heal hight\")] Skill1004,\n        [AutoSkill(\"Technical effect up\")] Skill1005,\n        [AutoSkill(\"Technical effect up+\")] Skill1006,\n        [AutoSkill(\"Low Hp Attack up\")] Skill1007,\n        [AutoSkill(\"Low Hp Attack up+\")] Skill1008,\n        [AutoSkill(\"Weak hit effect up\")] Skill1009,\n        [AutoSkill(\"Weak hit effect up+\")] Skill1010,\n        [AutoSkill(\"Null insta-kill\")] Skill1011,\n        [AutoSkill(\"Hp Cost Down 10%\")] Skill1012,\n        [AutoSkill(\"Hp Cost Down 25%\")] Skill1013,\n        [AutoSkill(\"Sp Cost Down 10%\")] Skill1014,\n        [AutoSkill(\"Sp Cost Down 25%\")] Skill1015,\n        [AutoSkill(\"Heal Magic up 10%\")] Skill1016,\n        [AutoSkill(\"Heal Magic up 25%\")] Skill1017,\n        [AutoSkill(\"Chance of 0 HP Cost\")] Skill1018,\n        [AutoSkill(\"Chance of 0 Sp Cost\")] Skill1019,\n        [AutoSkill(\"Target atk up\")] Skill1020,\n        [AutoSkill(\"Target atk up+\")] Skill1021,\n        [AutoSkill(\"All crit, no evasion\")] Skill1022,\n        [AutoSkill(\"Heal cost down 25%\")] Skill1023,\n        [AutoSkill(\"Heal cost down 10%\")] Skill1024,\n        [AutoSkill(\"Atk up, Aim Down\")] Skill1025,\n        [AutoSkill(\"Ailment Success up\")] Skill1026,\n        [Unused] Skill1027,\n        [AutoSkill(\"4 affinity boost\")] Skill1028,\n        [AutoSkill(\"3 affinity light boost\")] Skill1029,\n        [AutoSkill(\"Support turn extend\")] Skill1030,\n        [AutoSkill(\"insta kill up\")] Skill1031,\n        [AutoSkill(\"insta kill up+\")] Skill1032,\n        [AutoSkill(\"life bonus\")] Skill1033,\n        [AutoSkill(\"life gain\")] Skill1034,\n        [AutoSkill(\"life surge\")] Skill1035,\n        [AutoSkill(\"mana bonus\")] Skill1036,\n        [AutoSkill(\"mana gain\")] Skill1037,\n        [AutoSkill(\"mana surge\")] Skill1038,\n        [AutoSkill(\"Critical effect up\")] Skill1039,\n        [AutoSkill(\"Critical effect up+\")] Skill1040,\n        [AutoSkill(\"hit damage doubled\")] Skill1041,\n        [AutoSkill(\"all target atk up\")] Skill1042,\n        [AutoSkill(\"all target atk up+\")] Skill1043,\n        [AutoSkill(\"auto barrier\")] Skill1044,\n        [AutoSkill(\"backup support\")] Skill1045,\n        [AutoSkill(\"absolute escape\")] Skill1046,\n        [AutoSkill(\"shield of loyalty\")] Skill1047,\n        [AutoSkill(\"all amp\")] Skill1048,\n        [AutoSkill(\"blank\")] Skill1049,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibPersona5/Types/Trait.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibPersona5.Types\n{\n    public enum Trait : short\n    {\n        [Info(\"Relentless\")] Relentless = 6,\n        [Info(\"Savior Bloodline\")] SaviorBloodline = 9,\n        [Info(\"Grace of Mother\")] GraceofMother = 10,\n        [Info(\"Relief Bloodline\")] ReliefBloodline = 14,\n        [Info(\"Ave Maria\")] AveMaria = 15,\n        [Info(\"Foul Stench\")] FoulStench = 17,\n        [Info(\"Static Electricity\")] StaticElectricity = 22,\n        [Info(\"Ghost Nest\")] GhostNest = 23,\n        [Info(\"Cold-Blooded\")] ColdBlooded = 24,\n        [Info(\"Allure of Wisdom\")] AllureofWisdom = 30,\n        [Info(\"Frenzied Bull\")] FrenziedBull = 38,\n        [Info(\"Intense Focus\")] IntenseFocus = 46,\n        [Info(\"Mighty Gaze\")] MightyGaze = 54,\n        [Info(\"Striking Weight\")] StrikingWeight = 57,\n        [Info(\"Undying Fury\")] UndyingFury = 58,\n        [Info(\"Retaliating Body\")] RetaliatingBody = 62,\n        [Info(\"Inviolable Beauty\")] InviolableBeauty = 63,\n        [Info(\"Pagan Allure\")] PaganAllure = 65,\n        [Info(\"Rare Antibody\")] RareAntibody = 70,\n        [Info(\"Immunity\")] Immunity = 71,\n        [Info(\"Skillful Combo\")] SkillfulCombo = 73,\n        [Info(\"Linked Bloodline\")] LinkedBloodline = 74,\n        [Info(\"Foul Odor\")] FoulOdor = 78,\n        [Info(\"Thermal Conduct\")] ThermalConduct = 79,\n        [Info(\"Pinch Anchor\")] PinchAnchor = 86,\n        [Info(\"Vitality of the Tree\")] VitalityoftheTree = 87,\n        [Info(\"Gloomy Child\")] GloomyChild = 88,\n        [Info(\"Skillful Technique\")] SkillfulTechnique = 94,\n        [Info(\"Universal Law\")] UniversalLaw = 95,\n        [Info(\"Ailment Hunter\")] AilmentHunter = 97,\n        [Info(\"Hollow Jester\")] HollowJester = 98,\n        [Info(\"Deathly Illness\")] DeathlyIllness = 102,\n        [Info(\"Omen\")] Omen = 103,\n        [Info(\"Explosive Scheme\")] ExplosiveScheme = 129,\n        [Info(\"Infinite Scheme\")] InfiniteScheme = 131,\n        [Info(\"Raging Temper\")] RagingTemper = 132,\n        [Info(\"Eccentric Temper\")] EccentricTemper = 133,\n        [Info(\"Proud Presence\")] ProudPresence = 135,\n        [Info(\"Majestic Presence\")] MajesticPresence = 136,\n        [Info(\"Mastery of Magic\")] MasteryofMagic = 138,\n        [Info(\"Pinnacle of Magic\")] PinnacleofMagic = 139,\n        [Info(\"Scoundrel Eyes\")] ScoundrelEyes = 141,\n        [Info(\"Unparalleled Eyes\")] UnparalleledEyes = 142,\n        [Info(\"Gaia Pact\")] GaiaPact = 144,\n        [Info(\"Gaia Blessing\")] GaiaBlessing = 145,\n        [Info(\"Icy Glare\")] IcyGlare = 147,\n        [Info(\"Cool Customer\")] CoolCustomer = 148,\n        [Info(\"Tactical Spirit\")] TacticalSpirit = 150,\n        [Info(\"Ingenious Spirit\")] IngeniousSpirit = 151,\n        [Info(\"Flawless Spirit\")] FlawlessSpirit = 152,\n        [Info(\"Veil of Midnight\")] VeilofMidnight = 153,\n        [Info(\"Veil of Sunrise\")] VeilofSunrise = 154,\n        [Info(\"Heated Bloodline\")] HeatedBloodline = 156,\n        [Info(\"Drunken Passion\")] DrunkenPassion = 157,\n        [Info(\"Frigid Bloodline\")] FrigidBloodline = 158,\n        [Info(\"Cocytus\")] Cocytus = 159,\n        [Info(\"Electric Bloodline\")] ElectricBloodline = 160,\n        [Info(\"Bargain Bolts\")] BargainBolts = 161,\n        [Info(\"Wind Bloodline\")] WindBloodline = 162,\n        [Info(\"Vahana's Wings\")] VahanasWings = 163,\n        [Info(\"Psychic Bloodline\")] PsychicBloodline = 164,\n        [Info(\"Chi You's Blessing\")] ChiYousBlessing = 165,\n        [Info(\"Atomic Bloodline\")] AtomicBloodline = 166,\n        [Info(\"Atomic Hellscape\")] AtomicHellscape = 167,\n        [Info(\"Blessed Bloodline\")] BlessedBloodline = 168,\n        [Info(\"Martyr's Gift\")] MartyrsGift = 169,\n        [Info(\"Cursed Bloodline\")] CursedBloodline = 170,\n        [Info(\"Mother's Lament\")] MothersLament = 171,\n        [Info(\"Gluttonmouth\")] Gluttonmouth = 173,\n        [Info(\"Demon's Bite\")] DemonsBite = 174,\n        [Info(\"Mouth of Savoring\")] MouthofSavoring = 175,\n        [Info(\"Naranari\")] Naranari = 176,\n        [Info(\"Hallowed Spirit\")] HallowedSpirit = 177,\n        [Info(\"Potent Hypnosis\")] PotentHypnosis = 178,\n        [Info(\"Wealth of Lotus\")] WealthofLotus = 179,\n        [Info(\"Internal Hypnosis\")] InternalHypnosis = 180,\n        [Info(\"Positive Thoughts\")] PositiveThoughts = 181,\n        [Info(\"Draining Mouth\")] DrainingMouth = 182,\n        [Info(\"Tag Team\")] TagTeam = 184,\n        [Info(\"Iron Heart\")] IronHeart = 185,\n        [Info(\"Crisis Control\")] CrisisControl = 186,\n        [Info(\"Bloodstained Eyes\")] BloodstainedEyes = 187,\n        [Info(\"Will of the Sword\")] WilloftheSword = 188,\n        [Info(\"Circle of Sadness\")] CircleofSadness = 190,\n        [Info(\"Bolstering Force\")] BolsteringForce = 191,\n        [Info(\"God Maker\")] GodMaker = 192,\n        [Info(\"Hazy Presence\")] HazyPresence = 193,\n        [Info(\"Country Maker\")] CountryMaker = 194,\n        [Info(\"Grace of the Olive\")] GraceoftheOlive = 195,\n        [Info(\"Just Die\")] JustDie = 196,\n        [Info(\"Blessed Spirit\")] BlessedSpirit = 197,\n        [Info(\"Ultimate Vessel\")] UltimateVessel = 281,\n        [Info(\"Ultimate Vessel (#2)\")] UltimateVessel2 = 282,\n        [Info(\"Ultimate Vessel (#3)\")] UltimateVessel3 = 283,\n        [Info(\"Ultimate Vessel (#4)\")] UltimateVessel4 = 284,\n        [Info(\"Ultimate Vessel (#5)\")] UltimateVessel5 = 285,\n        [Info(\"Ultimate Vessel (#6)\")] UltimateVessel6 = 286,\n        [Info(\"Ultimate Vessel (#7)\")] UltimateVessel7 = 287,\n        [Info(\"Ultimate Vessel (#8)\")] UltimateVessel8 = 288,\n        [Info(\"Ultimate Vessel (#9)\")] UltimateVessel9 = 289,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Attributes/CardEnemyAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibRecom.Attributes\n{\n    public class CardEnemyAttribute : InfoAttribute\n    {\n        public CardEnemyAttribute(string info = null) : base(info)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Attributes/CardFriendAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibRecom.Attributes\n{\n    public class CardFriendAttribute : InfoAttribute\n    {\n        public CardFriendAttribute(string info = null) : base(info)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Attributes/CardItemAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibRecom.Attributes\n{\n    public class CardItemAttribute : ConsumableAttribute\n    {\n        public CardItemAttribute(string name = null) : base(name)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Attributes/CardMagicAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibRecom.Attributes\n{\n    public class CardMagicAttribute : MagicAttribute\n    {\n        public CardMagicAttribute(string name = null) : base(name)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Attributes/CardMapAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibRecom.Attributes\n{\n    public class CardMapAttribute : InfoAttribute\n    {\n        public CardMapAttribute(string info = null) : base(info)\n        {\n        }\n    }\n\n    public class CardMapRedAttribute : CardMapAttribute\n    {\n        public CardMapRedAttribute(string info = null) : base(info)\n        {\n        }\n    }\n\n    public class CardMapGreenAttribute : CardMapAttribute\n    {\n        public CardMapGreenAttribute(string info = null) : base(info)\n        {\n        }\n    }\n\n    public class CardMapBlueAttribute : CardMapAttribute\n    {\n        public CardMapBlueAttribute(string info = null) : base(info)\n        {\n        }\n    }\n\n    public class CardMapSpecialAttribute : CardMapAttribute\n    {\n        public CardMapSpecialAttribute(string info = null) : base(info)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Attributes/CardSpecialAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibRecom.Attributes\n{\n    public class CardSpecialAttribute : InfoAttribute\n    {\n        public CardSpecialAttribute(string info = null) : base(info)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Attributes/CardSummonAttribute.cs",
    "content": "namespace KHSave.LibRecom.Attributes\n{\n    public class CardSummonAttribute : CardMagicAttribute\n    {\n        public CardSummonAttribute(string name = null) : base(name)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Attributes/CardWeaponAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibRecom.Attributes\n{\n    public class CardWeaponAttribute : KeybladeAttribute\n    {\n        public CardWeaponAttribute(string name = null) : base(name)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Attributes/CardWorldAttribute.cs",
    "content": "using KHSave.Attributes;\n\nnamespace KHSave.LibRecom.Attributes\n{\n    public class CardWorldAttribute : InfoAttribute\n    {\n        public CardWorldAttribute(string info = null) : base(info)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/DataRecom.cs",
    "content": "using KHSave.LibRecom.Models;\nusing KHSave.LibRecom.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom\n{\n    public class DataRecom\n    {\n        [Data(Count = 0x10)] public byte[] RealData { get; set; }\n        [Data] public DataRecomTable0 Table0 { get; set; } // 0x10\n        [Data] public DataRecomTable1 Table1 { get; set; } // 0x410\n        [Data] public DataRecomTable2 Table2 { get; set; } // 0x490\n        [Data(0x510)] public DataRecomMcWork McWork { get; set; } // 0x510\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/DataRecomMcWork.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom.Types\n{\n    public class DataRecomMcWork\n    {\n        [Data(0, 0x3110)] public byte[] Data { get; set; }\n\n        [Data(0x1aa4, Count = 0x49C)] public byte[] CardInventoryCount { get; set; }\n\n        [Data(0x2830)] public int Experience { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/DataRecomTable0.cs",
    "content": "using KHSave.LibRecom.Models;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom\n{\n    public class DataRecomTable0\n    {\n        [Data(0)] public int Unknown00 { get; set; }\n        [Data] public int Unknown01 { get; set; }\n        [Data] public int Unknown02 { get; set; }\n        [Data] public int Unknown03 { get; set; }\n        [Data] public int Unknown04 { get; set; }\n        [Data] public int Unknown05 { get; set; }\n        [Data] public int Unknown06 { get; set; }\n        [Data] public int Unknown07 { get; set; }\n        [Data] public int Unknown08 { get; set; }\n        [Data] public int Unknown09 { get; set; }\n        [Data] public int Unknown0a { get; set; }\n        [Data] public int Unknown0b { get; set; }\n        [Data] public int Unknown0c { get; set; }\n        [Data] public int Unknown0d { get; set; }\n        [Data] public int Unknown0e { get; set; }\n        [Data] public int Unknown0f { get; set; }\n        [Data] public int Unknown10 { get; set; }\n        [Data] public int Unknown11 { get; set; }\n        [Data] public int Unknown12 { get; set; }\n        [Data] public int Unknown13 { get; set; }\n        [Data] public int Unknown14 { get; set; }\n        [Data] public int Unknown15 { get; set; }\n        [Data] public int Unknown16 { get; set; }\n        [Data] public int Unknown17 { get; set; }\n        [Data] public int Unknown18 { get; set; }\n        [Data] public int Unknown19 { get; set; }\n        [Data] public int Unknown1a { get; set; }\n        [Data] public int Unknown1b { get; set; }\n        [Data] public int Unknown1c { get; set; }\n        [Data] public int Unknown1d { get; set; }\n        [Data] public int Unknown1e { get; set; }\n        [Data] public int Unknown1f { get; set; }\n        [Data] public int Unknown20 { get; set; }\n        [Data] public int Unknown21 { get; set; }\n        [Data] public int Unknown22 { get; set; }\n        [Data] public int Unknown23 { get; set; }\n        [Data] public int Unknown24 { get; set; }\n        [Data] public int Unknown25 { get; set; }\n        [Data] public int Unknown26 { get; set; }\n        [Data] public int Unknown27 { get; set; }\n        [Data] public int Unknown28 { get; set; }\n        [Data] public int Unknown29 { get; set; }\n        [Data] public int Unknown2a { get; set; }\n        [Data] public int Unknown2b { get; set; }\n        [Data] public int Unknown2c { get; set; }\n        [Data] public int Unknown2d { get; set; }\n        [Data] public int Unknown2e { get; set; }\n        [Data] public int Unknown2f { get; set; }\n        [Data] public int Unknown30 { get; set; }\n        [Data] public int Unknown31 { get; set; }\n        [Data] public int Unknown32 { get; set; }\n        [Data] public int Unknown33 { get; set; }\n        [Data] public int Unknown34 { get; set; }\n        [Data] public int Unknown35 { get; set; }\n        [Data] public int Unknown36 { get; set; }\n        [Data] public int Unknown37 { get; set; }\n        [Data] public int Unknown38 { get; set; }\n        [Data] public int Unknown39 { get; set; }\n        [Data] public int Unknown3a { get; set; }\n        [Data] public int Unknown3b { get; set; }\n        [Data] public int Unknown3c { get; set; }\n        [Data] public int Unknown3d { get; set; }\n        [Data] public int Unknown3e { get; set; }\n        [Data] public int Unknown3f { get; set; }\n        [Data] public int Unknown40 { get; set; }\n        [Data] public int Unknown41 { get; set; }\n        [Data] public int Unknown42 { get; set; }\n        [Data] public int Unknown43 { get; set; }\n        [Data] public int Unknown44 { get; set; }\n        [Data] public int Unknown45 { get; set; }\n        [Data] public int Unknown46 { get; set; }\n        [Data] public int Unknown47 { get; set; }\n        [Data] public int Unknown48 { get; set; }\n        [Data] public int Unknown49 { get; set; }\n        [Data] public int Unknown4a { get; set; }\n        [Data] public int Unknown4b { get; set; }\n        [Data] public int Unknown4c { get; set; }\n        [Data] public int Unknown4d { get; set; }\n        [Data] public int Unknown4e { get; set; }\n        [Data] public int Unknown4f { get; set; }\n        [Data] public int Unknown50 { get; set; }\n        [Data] public int Unknown51 { get; set; }\n        [Data] public int Unknown52 { get; set; }\n        [Data] public int Unknown53 { get; set; }\n        [Data] public int Unknown54 { get; set; }\n        [Data] public int Unknown55 { get; set; }\n        [Data] public int Unknown56 { get; set; }\n        [Data] public int Unknown57 { get; set; }\n        [Data] public int Unknown58 { get; set; }\n        [Data] public int Unknown59 { get; set; }\n        [Data] public int Unknown5a { get; set; }\n        [Data] public int Unknown5b { get; set; }\n        [Data] public int Unknown5c { get; set; }\n        [Data] public int Unknown5d { get; set; }\n        [Data] public int Unknown5e { get; set; }\n        [Data] public int Unknown5f { get; set; }\n        [Data] public int Unknown60 { get; set; }\n        [Data] public int Unknown61 { get; set; }\n        [Data] public int Unknown62 { get; set; }\n        [Data] public int Unknown63 { get; set; }\n        [Data] public int Unknown64 { get; set; }\n        [Data] public int Unknown65 { get; set; }\n        [Data] public int Unknown66 { get; set; }\n        [Data] public int Unknown67 { get; set; }\n        [Data] public int Unknown68 { get; set; }\n        [Data] public int Unknown69 { get; set; }\n        [Data] public int Unknown6a { get; set; }\n        [Data] public int Unknown6b { get; set; }\n        [Data] public int Unknown6c { get; set; }\n        [Data] public int Unknown6d { get; set; }\n        [Data] public int Unknown6e { get; set; }\n        [Data] public int Unknown6f { get; set; }\n        [Data] public int Unknown70 { get; set; }\n        [Data] public int Unknown71 { get; set; }\n        [Data] public int Unknown72 { get; set; }\n        [Data] public int Unknown73 { get; set; }\n        [Data] public int Unknown74 { get; set; }\n        [Data] public int Unknown75 { get; set; }\n        [Data] public int Unknown76 { get; set; }\n        [Data] public int Unknown77 { get; set; }\n        [Data] public int Unknown78 { get; set; }\n        [Data] public int Unknown79 { get; set; }\n        [Data] public int Unknown7a { get; set; }\n        [Data] public int Unknown7b { get; set; }\n        [Data] public int Unknown7c { get; set; }\n        [Data] public int Unknown7d { get; set; }\n        [Data] public int Unknown7e { get; set; }\n        [Data] public int Unknown7f { get; set; }\n        [Data] public int Unknown80 { get; set; }\n        [Data] public int Unknown81 { get; set; }\n        [Data] public int Unknown82 { get; set; }\n        [Data] public int Unknown83 { get; set; }\n        [Data] public int Unknown84 { get; set; }\n        [Data] public int Unknown85 { get; set; }\n        [Data] public int Unknown86 { get; set; }\n        [Data] public int Unknown87 { get; set; }\n        [Data] public int Unknown88 { get; set; }\n        [Data] public int Unknown89 { get; set; }\n        [Data] public int Unknown8a { get; set; }\n        [Data] public int Unknown8b { get; set; }\n        [Data] public int Unknown8c { get; set; }\n        [Data] public int Unknown8d { get; set; }\n        [Data] public int Unknown8e { get; set; }\n        [Data] public int Unknown8f { get; set; }\n        [Data] public int Unknown90 { get; set; }\n        [Data] public int Unknown91 { get; set; }\n        [Data] public int Unknown92 { get; set; }\n        [Data] public int Unknown93 { get; set; }\n        [Data] public int Unknown94 { get; set; }\n        [Data] public int Unknown95 { get; set; }\n        [Data] public int Unknown96 { get; set; }\n        [Data] public int Unknown97 { get; set; }\n        [Data] public int Unknown98 { get; set; }\n        [Data] public int Unknown99 { get; set; }\n        [Data] public int Unknown9a { get; set; }\n        [Data] public int Unknown9b { get; set; }\n        [Data] public int Unknown9c { get; set; }\n        [Data] public int Unknown9d { get; set; }\n        [Data] public int Unknown9e { get; set; }\n        [Data] public int Unknown9f { get; set; }\n        [Data] public int UnknownA0 { get; set; }\n        [Data] public int UnknownA1 { get; set; }\n        [Data] public int UnknownA2 { get; set; }\n        [Data] public int UnknownA3 { get; set; }\n        [Data] public int UnknownA4 { get; set; }\n        [Data] public int UnknownA5 { get; set; }\n        [Data] public int UnknownA6 { get; set; }\n        [Data] public int UnknownA7 { get; set; }\n        [Data] public int UnknownA8 { get; set; }\n        [Data] public int UnknownA9 { get; set; }\n        [Data] public int UnknownAa { get; set; }\n        [Data] public int UnknownAb { get; set; }\n        [Data] public int UnknownAc { get; set; }\n        [Data] public int UnknownAd { get; set; }\n        [Data] public int UnknownAe { get; set; }\n        [Data] public int UnknownAf { get; set; }\n        [Data] public int UnknownB0 { get; set; }\n        [Data] public int UnknownB1 { get; set; }\n        [Data] public int UnknownB2 { get; set; }\n        [Data] public int UnknownB3 { get; set; }\n        [Data] public int UnknownB4 { get; set; }\n        [Data] public int UnknownB5 { get; set; }\n        [Data] public int UnknownB6 { get; set; }\n        [Data] public int UnknownB7 { get; set; }\n        [Data] public int UnknownB8 { get; set; }\n        [Data] public int UnknownB9 { get; set; }\n        [Data] public int UnknownBa { get; set; }\n        [Data] public int UnknownBb { get; set; }\n        [Data] public int UnknownBc { get; set; }\n        [Data] public int UnknownBd { get; set; }\n        [Data] public int UnknownBe { get; set; }\n        [Data] public int UnknownBf { get; set; }\n        [Data] public int UnknownC0 { get; set; }\n        [Data] public StoryFlag SoraStoryFlag { get; set; }\n        [Data] public StoryFlag RikuStoryFlag { get; set; }\n        [Data] public TutorialFlags Tutorial { get; set; }\n        [Data] public CardFlags UnlockedCards { get; set; }\n        [Data] public Kh2CardFlags UnlockedKh2Cards { get; set; }\n        [Data] public FriendsFlags UnlockedFriends { get; set; }\n        [Data] public PoohFlags PoohFlags { get; set; }\n        [Data] public int UnknownC7 { get; set; }\n        [Data] public int UnknownC8 { get; set; }\n        [Data] public int UnknownC9 { get; set; }\n        [Data] public int UnknownCa { get; set; }\n        [Data] public int UnknownCb { get; set; }\n        [Data] public int UnknownCc { get; set; }\n        [Data] public int UnknownCd { get; set; }\n        [Data] public int UnknownCe { get; set; }\n        [Data] public int UnknownCf { get; set; }\n        [Data] public int UnknownD0 { get; set; }\n        [Data] public int UnknownD1 { get; set; }\n        [Data] public int UnknownD2 { get; set; }\n        [Data] public int UnknownD3 { get; set; }\n        [Data] public int UnknownD4 { get; set; }\n        [Data] public int UnknownD5 { get; set; }\n        [Data] public int UnknownD6 { get; set; }\n        [Data] public int UnknownD7 { get; set; }\n        [Data] public int UnknownD8 { get; set; }\n        [Data] public int UnknownD9 { get; set; }\n        [Data] public int UnknownDa { get; set; }\n        [Data] public int UnknownDb { get; set; }\n        [Data] public int UnknownDc { get; set; }\n        [Data] public int UnknownDd { get; set; }\n        [Data] public int UnknownDe { get; set; }\n        [Data] public int UnknownDf { get; set; }\n        [Data] public int UnknownE0 { get; set; }\n        [Data] public int UnknownE1 { get; set; }\n        [Data] public int UnknownE2 { get; set; }\n        [Data] public int UnknownE3 { get; set; }\n        [Data] public int UnknownE4 { get; set; }\n        [Data] public int UnknownE5 { get; set; }\n        [Data] public int UnknownE6 { get; set; }\n        [Data] public int UnknownE7 { get; set; }\n        [Data] public int UnknownE8 { get; set; }\n        [Data] public int UnknownE9 { get; set; }\n        [Data] public int UnknownEa { get; set; }\n        [Data] public int UnknownEb { get; set; }\n        [Data] public int UnknownEc { get; set; }\n        [Data] public int UnknownEd { get; set; }\n        [Data] public int UnknownEe { get; set; }\n        [Data] public int UnknownEf { get; set; }\n        [Data] public int UnknownF0 { get; set; }\n        [Data] public int UnknownF1 { get; set; }\n        [Data] public int UnknownF2 { get; set; }\n        [Data] public int UnknownF3 { get; set; }\n        [Data] public int UnknownF4 { get; set; }\n        [Data] public int UnknownF5 { get; set; }\n        [Data] public int UnknownF6 { get; set; }\n        [Data] public int UnknownF7 { get; set; }\n        [Data] public int UnknownF8 { get; set; }\n        [Data] public int UnknownF9 { get; set; }\n        [Data] public int UnknownFa { get; set; }\n        [Data] public int UnknownFb { get; set; }\n        [Data] public int UnknownFc { get; set; }\n        [Data] public int UnknownFd { get; set; }\n        [Data] public int UnknownFe { get; set; }\n        [Data] public int UnknownFf { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/DataRecomTable1.cs",
    "content": "using KHSave.LibRecom.Types;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom\n{\n    public class DataRecomTable1\n    {\n        [Data] public byte Unknown00 { get; set; }\n        [Data] public byte Unknown01 { get; set; }\n        [Data] public byte Unknown02 { get; set; }\n        [Data] public byte Unknown03 { get; set; }\n        [Data] public byte Unknown04 { get; set; }\n        [Data] public byte Unknown05 { get; set; }\n        [Data] public byte Unknown06 { get; set; }\n        [Data] public byte Unknown07 { get; set; }\n        [Data] public byte Unknown08 { get; set; }\n        [Data] public byte Unknown09 { get; set; }\n        [Data] public byte Unknown0a { get; set; }\n        [Data] public byte Unknown0b { get; set; }\n        [Data] public byte Unknown0c { get; set; }\n        [Data] public byte Unknown0d { get; set; }\n        [Data] public byte Unknown0e { get; set; }\n        [Data] public byte Unknown0f { get; set; }\n        [Data] public byte Unknown10 { get; set; }\n        [Data] public byte Unknown11 { get; set; }\n        [Data] public byte Unknown12 { get; set; }\n        [Data] public byte Unknown13 { get; set; }\n        [Data] public byte Unknown14 { get; set; }\n        [Data] public byte Unknown15 { get; set; }\n        [Data] public byte Unknown16 { get; set; }\n        [Data] public byte Unknown17 { get; set; }\n        [Data] public byte Unknown18 { get; set; }\n        [Data] public byte Unknown19 { get; set; }\n        [Data] public byte Unknown1a { get; set; }\n        [Data] public byte Unknown1b { get; set; }\n        [Data] public byte Unknown1c { get; set; }\n        [Data] public byte Unknown1d { get; set; }\n        [Data] public byte Unknown1e { get; set; }\n        [Data] public byte Unknown1f { get; set; }\n        [Data] public byte Unknown20 { get; set; }\n        [Data] public byte Unknown21 { get; set; }\n        [Data] public byte Unknown22 { get; set; }\n        [Data] public byte Unknown23 { get; set; }\n        [Data] public byte Unknown24 { get; set; }\n        [Data] public byte Unknown25 { get; set; }\n        [Data] public byte Unknown26 { get; set; }\n        [Data] public byte Unknown27 { get; set; }\n        [Data] public byte Unknown28 { get; set; }\n        [Data] public byte Unknown29 { get; set; }\n        [Data] public byte Unknown2a { get; set; }\n        [Data] public byte Unknown2b { get; set; }\n        [Data] public byte Unknown2c { get; set; }\n        [Data] public byte Unknown2d { get; set; }\n        [Data] public byte Unknown2e { get; set; }\n        [Data] public byte Unknown2f { get; set; }\n        [Data] public byte Unknown30 { get; set; }\n        [Data] public byte Unknown31 { get; set; }\n        [Data] public byte Unknown32 { get; set; }\n        [Data] public byte Unknown33 { get; set; }\n        [Data] public byte Unknown34 { get; set; }\n        [Data] public byte Unknown35 { get; set; }\n        [Data] public byte Unknown36 { get; set; }\n        [Data] public byte Unknown37 { get; set; }\n        [Data] public byte Unknown38 { get; set; }\n        [Data] public byte Unknown39 { get; set; }\n        [Data] public byte Unknown3a { get; set; }\n        [Data] public byte Unknown3b { get; set; }\n        [Data] public byte Unknown3c { get; set; }\n        [Data] public byte Unknown3d { get; set; }\n        [Data] public byte Unknown3e { get; set; }\n        [Data] public byte Unknown3f { get; set; }\n        [Data] public byte Unknown40 { get; set; }\n        [Data] public byte Unknown41 { get; set; }\n        [Data] public byte Unknown42 { get; set; }\n        [Data] public byte Unknown43 { get; set; }\n        [Data] public byte Unknown44 { get; set; }\n        [Data] public byte Unknown45 { get; set; }\n        [Data] public byte Unknown46 { get; set; }\n        [Data] public byte Unknown47 { get; set; }\n        [Data] public byte Unknown48 { get; set; }\n        [Data] public byte Unknown49 { get; set; }\n        [Data] public byte Unknown4a { get; set; }\n        [Data] public byte Unknown4b { get; set; }\n        [Data] public byte Unknown4c { get; set; }\n        [Data] public byte Unknown4d { get; set; }\n        [Data] public byte Unknown4e { get; set; }\n        [Data] public byte Unknown4f { get; set; }\n        [Data] public byte Unknown50 { get; set; }\n        [Data] public byte Unknown51 { get; set; }\n        [Data] public byte Unknown52 { get; set; }\n        [Data] public byte Unknown53 { get; set; }\n        [Data] public byte Unknown54 { get; set; }\n        [Data] public byte Unknown55 { get; set; }\n        [Data] public byte Unknown56 { get; set; }\n        [Data] public byte Unknown57 { get; set; }\n        [Data] public byte Unknown58 { get; set; }\n        [Data] public byte Unknown59 { get; set; }\n        [Data] public byte Unknown5a { get; set; }\n        [Data] public byte Unknown5b { get; set; }\n        [Data] public byte Unknown5c { get; set; }\n        [Data] public byte Unknown5d { get; set; }\n        [Data] public byte Unknown5e { get; set; }\n        [Data] public byte Unknown5f { get; set; }\n        [Data] public PlayMode PlayMode { get; set; }\n        [Data] public Difficulty Difficulty { get; set; }\n        [Data] public SoundMode SoundMode { get; set; }\n        [Data] public bool NoVibration { get; set; }\n        [Data] public byte Unknown64 { get; set; }\n        [Data] public byte Unknown65 { get; set; }\n        [Data] public byte Unknown66 { get; set; }\n        [Data] public byte Unknown67 { get; set; }\n        [Data] public byte Unknown68 { get; set; }\n        [Data] public byte Unknown69 { get; set; }\n        [Data] public byte Unknown6a { get; set; }\n        [Data] public byte Unknown6b { get; set; }\n        [Data] public byte Unknown6c { get; set; }\n        [Data] public byte Unknown6d { get; set; }\n        [Data] public byte Unknown6e { get; set; }\n        [Data] public byte Unknown6f { get; set; }\n        [Data] public byte Unknown70 { get; set; }\n        [Data] public byte Unknown71 { get; set; }\n        [Data] public byte Unknown72 { get; set; }\n        [Data] public byte Unknown73 { get; set; }\n        [Data] public byte Unknown74 { get; set; }\n        [Data] public byte Unknown75 { get; set; }\n        [Data] public byte Unknown76 { get; set; }\n        [Data] public byte Unknown77 { get; set; }\n        [Data] public byte Unknown78 { get; set; }\n        [Data] public byte Unknown79 { get; set; }\n        [Data] public byte Unknown7a { get; set; }\n        [Data] public byte Unknown7b { get; set; }\n        [Data] public byte Unknown7c { get; set; }\n        [Data] public byte Unknown7d { get; set; }\n        [Data] public byte Unknown7e { get; set; }\n        [Data] public byte Unknown7f { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/DataRecomTable2.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom\n{\n    public class DataRecomTable2\n    {\n        [Data(Count = 0x80)] public byte[] Data { get; set; }\n\n        [Data(0)] public byte Unknown490 { get; set; }\n        [Data] public bool Unknown491_0 { get; set; }\n        [Data] public bool SoraCleared { get; set; }\n        [Data] public bool Unknown492_0 { get; set; }\n        [Data] public bool Kh2Cleared { get; set; }\n        [Data] public bool RikuCleared { get; set; }\n\n        [Data(0x10)] public bool Unknown4a0_0 { get; set; }\n        [Data] public bool Unknown4a0_1 { get; set; }\n        [Data] public bool MarluxiaKilled { get; set; }\n        [Data] public bool GameCleared { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/KHSave.LibRecom.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Xe.BinaryMapper\" Version=\"1.5.2\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.LibRecom/Models/Card.cs",
    "content": "using KHSave.LibRecom.Types;\nusing System;\n\nnamespace KHSave.LibRecom.Models\n{\n    public struct Card : IEquatable<Card>\n    {\n        public CardType Type { get; set; }\n        public int? Value { get; set; }\n        public bool? IsPremium { get; set; }\n\n        public bool Equals(Card other) =>\n            Type == other.Type && Value == other.Value && IsPremium == other.IsPremium;\n\n        public override bool Equals(object obj) =>\n            obj is Card _card && Equals(_card);\n\n        public override int GetHashCode() =>\n            (int)Type | (Value.HasValue ? (Value.Value << 16) : 0x10000000) |\n                (IsPremium.HasValue ? (IsPremium.Value ? 0x40000000 : 0) : 0x20000000);\n\n        public override string ToString()\n        {\n            if (Value.HasValue)\n                return (IsPremium ?? false) ? $\"{Type} {Value} (P)\" : $\"{Type} {Value}\";\n\n            return Type.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Models/CardFlags.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom.Models\n{\n    public class CardFlags\n    {\n        [Data] public bool Spellbinder { get; set; }\n        [Data] public bool MetalChocobo { get; set; }\n        [Data] public bool Lionheart { get; set; }\n        [Data] public bool Oathkeeper { get; set; }\n        [Data] public bool Oblivion { get; set; }\n        [Data] public bool UltimaWeapon { get; set; }\n        [Data] public bool DiamondDust { get; set; }\n        [Data] public bool OneWingedAngel { get; set; }\n        [Data] public bool Fire { get; set; }\n        [Data] public bool Thunder { get; set; }\n        [Data] public bool Gravity { get; set; }\n        [Data] public bool Stop { get; set; }\n        [Data] public bool Aero { get; set; }\n        [Data] public bool Simba { get; set; }\n        [Data] public bool Genie { get; set; }\n        [Data] public bool Bambi { get; set; }\n        [Data] public bool Dumbo { get; set; }\n        [Data] public bool Tinkerbell { get; set; }\n        [Data] public bool Mushu { get; set; }\n        [Data] public bool Cloud { get; set; }\n        [Data] public bool HiPotion { get; set; }\n        [Data] public bool MegaPotion { get; set; }\n        [Data] public bool Ether { get; set; }\n        [Data] public bool MegaEther { get; set; }\n        [Data] public bool Elixir { get; set; }\n        [Data] public bool Megalixir { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Models/CardModel.cs",
    "content": "using KHSave.LibRecom.Types;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace KHSave.LibRecom.Models\n{\n    public static class CardModel\n    {\n        public static readonly Card[] CardInventory =\n            new CardType[]\n            {\n                CardType.KingdomKey,\n                CardType.ThreeWishes,\n                CardType.Crabclaw,\n                CardType.Pumpkinhead,\n                CardType.FairyHarp,\n                CardType.WishingStar,\n                CardType.Spellbinder,\n                CardType.MetalChocobo,\n                CardType.Olympia,\n                CardType.Lionheart,\n                CardType.LadyLuck,\n                CardType.DivineRose,\n                CardType.Oathkeeper,\n                CardType.Oblivion,\n                CardType.UltimaWeapon,\n                CardType.DiamondDust,\n                CardType.OneWingedAngel,\n                CardType.SoulEater,\n                CardType.StarSeeker,\n                CardType.Monochrome,\n                CardType.FollowTheWind,\n                CardType.HiddenDragon,\n                CardType.PhotonDebugger,\n                CardType.BondOfFlame,\n            }.Project().Indexed().WithPremium()\n            .Concat(new CardType[]\n            {\n                CardType.Fire,\n                CardType.Blizzard,\n                CardType.Thunder,\n                CardType.Cure,\n                CardType.Gravity,\n                CardType.Stop,\n                CardType.Aero,\n                CardType.DummyMagic1,\n                CardType.DummyMagic2,\n                CardType.Simba,\n                CardType.Genie,\n                CardType.Bambi,\n                CardType.Dumbo,\n                CardType.TinkerBell,\n                CardType.Mushu,\n                CardType.Cloud,\n            }.Project().Indexed().WithPremium())\n            .Concat(new CardType[]\n            {\n                CardType.Potion,\n                CardType.HiPotion,\n                CardType.MegaPotion,\n                CardType.Ether,\n                CardType.MegaEther,\n                CardType.Elixir,\n                CardType.Megalixir,\n            }.Project().Indexed())\n            .Concat(new CardType[]\n            {\n                CardType.TranquilDarkness,\n                CardType.TeemingDarkness,\n                CardType.FeebleDarkness,\n                CardType.AlmightyDarkness,\n                CardType.SleepingDarkness,\n                CardType.LoomingDarkness,\n                CardType.PremiumRoom,\n                CardType.WhiteRoom,\n                CardType.BlackRoom,\n                CardType.BottomlessDarkness,\n                CardType.RouletteDarkness,\n                CardType.MartialWaking,\n                CardType.SorcerousWaking,\n                CardType.AlchemicWaking,\n                CardType.MeetingGround,\n                CardType.StagnantSpace,\n                CardType.StrongInitiative,\n                CardType.LastingDaze,\n                CardType.CalmBounty,\n                CardType.GuardedTrove,\n                CardType.FalseBounty,\n                CardType.MomentsReprieve,\n                CardType.MinglingWorlds,\n                CardType.MoogleRoom,\n                CardType.RandomJoker,\n            }.Project().Indexed())\n            .Concat(new CardType[]\n            {\n                CardType.Shadow,\n                CardType.Soldier,\n                CardType.LargeBody,\n                CardType.RedNocturne,\n                CardType.BlueRhapsody,\n                CardType.YellowOpera,\n                CardType.GreenRequiem,\n                CardType.Powerwild,\n                CardType.Bouncywild,\n                CardType.AirSoldier,\n                CardType.Bandit,\n                CardType.FatBandit,\n                CardType.BarrelSpider,\n                CardType.SearchGhost,\n                CardType.SeaNeon,\n                CardType.Screwdiver,\n                CardType.Aquatank,\n                CardType.WightKnight,\n                CardType.Gargoyle,\n                CardType.Pirate,\n                CardType.AirPirate,\n                CardType.Darkball,\n                CardType.Defender,\n                CardType.Wyvern,\n                CardType.Wizard,\n                CardType.Neoshadow,\n                CardType.WhiteMushroom,\n                CardType.BlackFungus,\n                CardType.CreeperPlant,\n                CardType.TornadoStep,\n                CardType.Crescendo,\n                CardType.GuardArmor,\n                CardType.ParasiteCage,\n                CardType.Trickmaster,\n                CardType.Darkside,\n                CardType.CardSoldier,\n                CardType.Hades,\n                CardType.Jafar,\n                CardType.OogieBoogie,\n                CardType.Ursula,\n                CardType.Hook,\n                CardType.DragonMaleficient,\n                CardType.Riku,\n                CardType.Axel,\n                CardType.Larxene,\n                CardType.Vexen,\n                CardType.Marluxia,\n                CardType.Lexaeus,\n                CardType.Ansem,\n                CardType.Zexion,\n                CardType.Xemnas,\n                CardType.Xigbar,\n                CardType.Xaldin,\n                CardType.Saix,\n                CardType.Demyx,\n                CardType.Luxord,\n                CardType.Roxas,\n            }.Project())\n            .Concat(new CardType[]\n            {\n                CardType.GoldCard,\n                CardType.PlatinumCard,\n                CardType.Unused\n            }.Project())\n            .ToArray();\n\n        public static int GetCardInventoryIndex(CardType cardType, bool isPremium = false) =>\n            _cardInventoryLookup.TryGetValue(new Card\n            {\n                Type = cardType,\n                IsPremium = isPremium\n            }.ToKey(), out var value) ? value : -1;\n\n        private const int MaxValue = 10; // Cards from 0 to 9\n\n        private static readonly Dictionary<Card, int> _cardInventoryLookup =\n            CardInventory\n            .Select((Key, Value) => new { Key, Value })\n            .Where(x => !x.Key.Value.HasValue || x.Key.Value.Value == 0)\n            .ToDictionary(x => x.Key.ToKey(), x => x.Value);\n\n        private static Card ToKey(this Card card) => new Card\n        {\n            Type = card.Type,\n            IsPremium = card.IsPremium\n        };\n\n        private static IEnumerable<Card> Project(this CardType[] cards) =>\n            cards.Select(x => new Card { Type = x, IsPremium = false });\n\n        private static IEnumerable<Card> Indexed(this IEnumerable<Card> cards) =>\n            cards.Select(x => Enumerable.Range(0, MaxValue).Select(i => new Card\n            {\n                Type = x.Type,\n                Value = i,\n                IsPremium = x.IsPremium\n            })).SelectMany(x => x);\n\n        private static IEnumerable<Card> WithPremium(this IEnumerable<Card> cards) =>\n            cards.Concat(cards.Select(x => new Card { Type = x.Type, Value = x.Value, IsPremium = true }));\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Models/FriendsFlags.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom.Models\n{\n    public class FriendsFlags\n    {\n        [Data] public bool Donald { get; set; }\n        [Data] public bool Goofy { get; set; }\n        [Data] public bool Alladin { get; set; }\n        [Data] public bool Ariel { get; set; }\n        [Data] public bool Jack { get; set; }\n        [Data] public bool PeterPan { get; set; }\n        [Data] public bool Beast { get; set; }\n        [Data] public bool KingMickey { get; set; }\n        [Data] public bool Pluto { get; set; }\n        [Data] public bool Unknown09 { get; set; }\n        [Data] public bool Unknown0a { get; set; }\n        [Data] public bool Unknown0b { get; set; }\n        [Data] public bool Unknown0c { get; set; }\n        [Data] public bool Unknown0d { get; set; }\n        [Data] public bool Unknown0e { get; set; }\n        [Data] public bool Unknown0f { get; set; }\n        [Data] public bool Unknown10 { get; set; }\n        [Data] public bool Unknown11 { get; set; }\n        [Data] public bool Unknown12 { get; set; }\n        [Data] public bool Unknown13 { get; set; }\n        [Data] public bool Unknown14 { get; set; }\n        [Data] public bool Unknown15 { get; set; }\n        [Data] public bool Unknown16 { get; set; }\n        [Data] public bool Unknown17 { get; set; }\n        [Data] public bool Unknown18 { get; set; }\n        [Data] public bool Unknown19 { get; set; }\n        [Data] public bool Unknown1a { get; set; }\n        [Data] public bool Unknown1b { get; set; }\n        [Data] public bool Unknown1c { get; set; }\n        [Data] public bool Unknown1d { get; set; }\n        [Data] public bool Unknown1e { get; set; }\n        [Data] public bool Unknown1f { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Models/Kh2CardFlags.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom.Models\n{\n    public class Kh2CardFlags\n    {\n        [Data] public bool Xemnas { get; set; }\n        [Data] public bool Xigbar { get; set; }\n        [Data] public bool Xaldin { get; set; }\n        [Data] public bool Saix { get; set; }\n        [Data] public bool Demyx { get; set; }\n        [Data] public bool Luxord { get; set; }\n        [Data] public bool Roxas { get; set; }\n        [Data] public bool StarSeeker { get; set; }\n        [Data] public bool Monochrome { get; set; }\n        [Data] public bool FollowTheWind { get; set; }\n        [Data] public bool HiddenDragon { get; set; }\n        [Data] public bool PhotonDebugger { get; set; }\n        [Data] public bool BondOfFlame { get; set; }\n        [Data] public bool Unknown0d { get; set; }\n        [Data] public bool Unknown0e { get; set; }\n        [Data] public bool Unknown0f { get; set; }\n        [Data] public bool Unknown10 { get; set; }\n        [Data] public bool Unknown11 { get; set; }\n        [Data] public bool Unknown12 { get; set; }\n        [Data] public bool Unknown13 { get; set; }\n        [Data] public bool Unknown14 { get; set; }\n        [Data] public bool Unknown15 { get; set; }\n        [Data] public bool Unknown16 { get; set; }\n        [Data] public bool Unknown17 { get; set; }\n        [Data] public bool Unknown18 { get; set; }\n        [Data] public bool Unknown19 { get; set; }\n        [Data] public bool Unknown1a { get; set; }\n        [Data] public bool Unknown1b { get; set; }\n        [Data] public bool Unknown1c { get; set; }\n        [Data] public bool Unknown1d { get; set; }\n        [Data] public bool Unknown1e { get; set; }\n        [Data] public bool Unknown1f { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Models/PoohFlags.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom.Models\n{\n    public class PoohFlags\n    {\n        [Data] public bool Piglet { get; set; }\n        [Data] public bool Owl { get; set; }\n        [Data] public bool Roo { get; set; }\n        [Data] public bool Eeyore { get; set; }\n        [Data] public bool Tigger { get; set; }\n        [Data] public bool Rabbit { get; set; }\n        [Data] public bool Goal1 { get; set; }\n        [Data] public bool Goal2 { get; set; }\n        [Data] public bool Unknown08 { get; set; }\n        [Data] public bool Unknown09 { get; set; }\n        [Data] public bool Unknown0a { get; set; }\n        [Data] public bool Unknown0b { get; set; }\n        [Data] public bool Unknown0c { get; set; }\n        [Data] public bool Unknown0d { get; set; }\n        [Data] public bool Unknown0e { get; set; }\n        [Data] public bool Unknown0f { get; set; }\n        [Data] public bool Unknown10 { get; set; }\n        [Data] public bool Unknown11 { get; set; }\n        [Data] public bool Unknown12 { get; set; }\n        [Data] public bool Unknown13 { get; set; }\n        [Data] public bool Unknown14 { get; set; }\n        [Data] public bool Unknown15 { get; set; }\n        [Data] public bool Unknown16 { get; set; }\n        [Data] public bool Unknown17 { get; set; }\n        [Data] public bool Unknown18 { get; set; }\n        [Data] public bool Unknown19 { get; set; }\n        [Data] public bool Unknown1a { get; set; }\n        [Data] public bool Unknown1b { get; set; }\n        [Data] public bool Unknown1c { get; set; }\n        [Data] public bool Unknown1d { get; set; }\n        [Data] public bool Unknown1e { get; set; }\n        [Data] public bool Unknown1f { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Models/SkillFlags.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom.Models\n{\n    public class SkillFlags\n    {\n        [Data] public int Data { get; set; }\n        [Data(0)] public bool HighJump { get; set; }\n        [Data] public bool Glide { get; set; }\n        [Data] public bool SuperGlide { get; set; }\n        [Data] public bool DodgeRoll { get; set; }\n        [Data] public bool RapidBreak { get; set; }\n        [Data] public bool Duel { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Models/StoryFlag.cs",
    "content": "using Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom.Models\n{\n    public class StoryFlag\n    {\n        [Data] public bool TraverseTown { get; set; }\n        [Data] public bool Agrabah { get; set; }\n        [Data] public bool OlympusColiseum { get; set; }\n        [Data] public bool Wonderland { get; set; }\n        [Data] public bool Monstro { get; set; }\n        [Data] public bool HalloweenTown { get; set; }\n        [Data] public bool Atlantica { get; set; }\n        [Data] public bool Neverland { get; set; }\n        [Data] public bool HollowBastion { get; set; }\n        [Data] public bool HundredAcreWood { get; set; }\n        [Data] public bool TwilightTown { get; set; }\n        [Data] public bool DestinyIsland { get; set; }\n        [Data] public bool CastleOblivion { get; set; }\n        [Data] public bool Unknown0d { get; set; }\n        [Data] public bool Unknown0e { get; set; }\n        [Data] public bool Unknown0f { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Models/TutorialFlags.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom.Models\n{\n    public class TutorialFlags\n    {\n        [Data] public bool KeyRoom { get; set; }\n        [Data] public bool MoogleShop { get; set; }\n        [Data] public bool FloorMove { get; set; }\n        [Data] public bool WarpPoint { get; set; }\n        [Data] public bool SavePoint { get; set; }\n        [Data] public bool Field { get; set; }\n        [Data] public bool WorldSelect { get; set; }\n        [Data] public bool Unknown07 { get; set; }\n        [Data] public bool Unknown08 { get; set; }\n        [Data] public bool Unknown09 { get; set; }\n        [Data] public bool Unknown0a { get; set; }\n        [Data] public bool Unknown0b { get; set; }\n        [Data] public bool Unknown0c { get; set; }\n        [Data] public bool Unknown0d { get; set; }\n        [Data] public bool Unknown0e { get; set; }\n        [Data] public bool Unknown0f { get; set; }\n        [Data] public bool Unknown10 { get; set; }\n        [Data] public bool Unknown11 { get; set; }\n        [Data] public bool Unknown12 { get; set; }\n        [Data] public bool Unknown13 { get; set; }\n        [Data] public bool Unknown14 { get; set; }\n        [Data] public bool Unknown15 { get; set; }\n        [Data] public bool Unknown16 { get; set; }\n        [Data] public bool Unknown17 { get; set; }\n        [Data] public bool Unknown18 { get; set; }\n        [Data] public bool Unknown19 { get; set; }\n        [Data] public bool Unknown1a { get; set; }\n        [Data] public bool Unknown1b { get; set; }\n        [Data] public bool Unknown1c { get; set; }\n        [Data] public bool Unknown1d { get; set; }\n        [Data] public bool Unknown1e { get; set; }\n        [Data] public bool Unknown1f { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/SaveKhRecom.cs",
    "content": "using System.IO;\nusing Xe.BinaryMapper;\n\nnamespace KHSave.LibRecom\n{\n    public class SaveKhRecom\n    {\n        private const int ValidMagicCode = 7;\n\n        [Data] public int MagicCode { get; set; }\n        [Data] public uint Checksum { get; set; }\n        [Data] public int Length { get; set; }\n        [Data] public int Zeroed { get; set; }\n        public DataRecom Data { get; set; }\n\n        public SaveKhRecom()\n        {\n            Data = new DataRecom();\n        }\n\n        public void Write(Stream stream)\n        {\n            byte[] data;\n            using (var saveStream = new MemoryStream())\n            {\n                BinaryMapping.WriteObject(saveStream, Data);\n                data = saveStream.ToArray();\n            }\n\n            MagicCode = ValidMagicCode;\n            Checksum = CalculateChecksum(data);\n            Length = data.Length;\n            Zeroed = 0;\n\n            BinaryMapping.WriteObject(stream, this);\n            stream.Write(data, 0, Length);\n        }\n\n        public static SaveKhRecom Read(Stream stream)\n        {\n            var obj = BinaryMapping.ReadObject<SaveKhRecom>(stream);\n            obj.Data = BinaryMapping.ReadObject<DataRecom>(stream, (int)stream.Position);\n\n            return obj;\n        }\n\n        public static bool IsValid(Stream stream)\n        {\n            var prevPosition = stream.Position;\n            int magicCode = new BinaryReader(stream).ReadInt32();\n            stream.Position = prevPosition;\n\n            return magicCode == ValidMagicCode && stream.Length >= 0x10;\n        }\n\n\n        private static uint CalculateChecksum(byte[] data)\n        {\n            int checksum = -1;\n\n            for (var i = 0; i < data.Length; i++)\n            {\n                checksum ^= data[i] << 31;\n                checksum = checksum << 1 ^ (checksum < 0 ? 0x4c11db7 : 0);\n            }\n\n            return (uint)~checksum;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Types/CardType.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibRecom.Attributes;\n\nnamespace KHSave.LibRecom.Types\n{\n    public enum CardType\n    {\n        [Info] Empty,\n        [Unused] Unused,\n\n        [CardWeapon(\"Kingdom Key\")] KingdomKey,\n        [CardWeapon(\"Three Wishes\")] ThreeWishes,\n        [CardWeapon(\"Crabclaw\")] Crabclaw,\n        [CardWeapon(\"Pumpkinhead\")] Pumpkinhead,\n        [CardWeapon(\"Fairy Harp\")] FairyHarp,\n        [CardWeapon(\"Wishing Star\")] WishingStar,\n        [CardWeapon(\"Spellbinder\")] Spellbinder,\n        [CardWeapon(\"Metal Chocobo\")] MetalChocobo,\n        [CardWeapon(\"Olympia\")] Olympia,\n        [CardWeapon(\"Lionheart\")] Lionheart,\n        [CardWeapon(\"Lady Luck\")] LadyLuck,\n        [CardWeapon(\"Divine Rose\")] DivineRose,\n        [CardWeapon(\"Oathkeeper\")] Oathkeeper,\n        [CardWeapon(\"Oblivion\")] Oblivion,\n        [CardWeapon(\"Ultima Weapon\")] UltimaWeapon,\n        [CardWeapon(\"Diamond Dust\")] DiamondDust,\n        [CardWeapon(\"One-Winged Angel\")] OneWingedAngel,\n        [CardWeapon(\"Soul Eater\")] SoulEater,\n        [CardWeapon(\"Star Seeker\")] StarSeeker,\n        [CardWeapon(\"Monochrome\")] Monochrome,\n        [CardWeapon(\"Follow the Wind\")] FollowTheWind,\n        [CardWeapon(\"Hidden Dragon\")] HiddenDragon,\n        [CardWeapon(\"Photon Debugger\")] PhotonDebugger,\n        [CardWeapon(\"Bond of Flame\")] BondOfFlame,\n\n        [CardMagic] Fire,\n        [CardMagic] Blizzard,\n        [CardMagic] Thunder,\n        [CardMagic] Cure,\n        [CardMagic] Gravity,\n        [CardMagic] Stop,\n        [CardMagic] Aero,\n\n        [Unused] [CardMagic(\"-\")] DummyMagic1,\n        [Unused] [CardMagic(\"-\")] DummyMagic2,\n\n        [CardSummonAttribute(\"Simba\")] Simba,\n        [CardSummonAttribute(\"Genie\")] Genie,\n        [CardSummonAttribute(\"Bambi\")] Bambi,\n        [CardSummonAttribute(\"Dumbo\")] Dumbo,\n        [CardSummonAttribute(\"Tinker Bell\")] TinkerBell,\n        [CardSummonAttribute(\"Mushu\")] Mushu,\n        [CardSummonAttribute(\"Cloud\")] Cloud,\n\n        [CardItem(\"Potion\")] Potion,\n        [CardItem(\"Hi-Potion\")] HiPotion,\n        [CardItem(\"Mega-Potion\")] MegaPotion,\n        [CardItem(\"Ether\")] Ether,\n        [CardItem(\"Mega-Ether\")] MegaEther,\n        [CardItem(\"Elixir\")] Elixir,\n        [CardItem(\"Megalixir\")] Megalixir,\n\n        [CardMapRed(\"Tranquil Darkness\")] TranquilDarkness,\n        [CardMapRed(\"Teeming Darkness\")] TeemingDarkness,\n        [CardMapRed(\"Feeble Darkness\")] FeebleDarkness,\n        [CardMapRed(\"Almighty Darkness\")] AlmightyDarkness,\n        [CardMapRed(\"Sleeping Darkness\")] SleepingDarkness,\n        [CardMapRed(\"Looming Darkness\")] LoomingDarkness,\n        [CardMapRed(\"Premium Room\")] PremiumRoom,\n        [CardMapRed(\"White Room\")] WhiteRoom,\n        [CardMapRed(\"Black Room\")] BlackRoom,\n        [CardMapRed(\"Bottomless Darkness\")] BottomlessDarkness,\n        [CardMapRed(\"Roulette Darkness\")] RouletteDarkness,\n\n        [CardMapGreen(\"Martial Waking\")] MartialWaking,\n        [CardMapGreen(\"Sorcerous Waking\")] SorcerousWaking,\n        [CardMapGreen(\"Alchemic Waking\")] AlchemicWaking,\n        [CardMapGreen(\"Meeting Ground\")] MeetingGround,\n        [CardMapGreen(\"Stagnant Space\")] StagnantSpace,\n        [CardMapGreen(\"Strong Initiative\")] StrongInitiative,\n        [CardMapGreen(\"Lasting Daze\")] LastingDaze,\n\n        [CardMapBlue(\"Calm Bounty\")] CalmBounty,\n        [CardMapBlue(\"Guarded Trove\")] GuardedTrove,\n        [CardMapBlue(\"False Bounty\")] FalseBounty,\n        [CardMapBlue(\"Moment's Reprieve\")] MomentsReprieve,\n        [CardMapBlue(\"Mingling Worlds\")] MinglingWorlds,\n        [CardMapBlue(\"Moogle Room\")] MoogleRoom,\n\n        [CardMapSpecial(\"Random Joker\")] RandomJoker,\n\n        [CardEnemy(\"Shadow\")] Shadow,\n        [CardEnemy(\"Soldier\")] Soldier,\n        [CardEnemy(\"Large Body\")] LargeBody,\n        [CardEnemy(\"Red Nocturne\")] RedNocturne,\n        [CardEnemy(\"Blue Rhapsody\")] BlueRhapsody,\n        [CardEnemy(\"Yellow Opera\")] YellowOpera,\n        [CardEnemy(\"Green Requiem\")] GreenRequiem,\n        [CardEnemy(\"Powerwild\")] Powerwild,\n        [CardEnemy(\"Bouncywild\")] Bouncywild,\n        [CardEnemy(\"Air Soldier\")] AirSoldier,\n        [CardEnemy(\"Bandit\")] Bandit,\n        [CardEnemy(\"Fat Bandit\")] FatBandit,\n        [CardEnemy(\"Barrel Spider\")] BarrelSpider,\n        [CardEnemy(\"Search Ghost\")] SearchGhost,\n        [CardEnemy(\"Sea Neon\")] SeaNeon,\n        [CardEnemy(\"Screwdiver\")] Screwdiver,\n        [CardEnemy(\"Aquatank\")] Aquatank,\n        [CardEnemy(\"Wight Knight\")] WightKnight,\n        [CardEnemy(\"Gargoyle\")] Gargoyle,\n        [CardEnemy(\"Pirate\")] Pirate,\n        [CardEnemy(\"Air Pirate\")] AirPirate,\n        [CardEnemy(\"Darkball\")] Darkball,\n        [CardEnemy(\"Defender\")] Defender,\n        [CardEnemy(\"Wyvern\")] Wyvern,\n        [CardEnemy(\"Wizard\")] Wizard,\n        [CardEnemy(\"Neoshadow\")] Neoshadow,\n        [CardEnemy(\"White Mushroom\")] WhiteMushroom,\n        [CardEnemy(\"Black Fungus\")] BlackFungus,\n        [CardEnemy(\"Creeper Plant\")] CreeperPlant,\n        [CardEnemy(\"Tornado Step\")] TornadoStep,\n        [CardEnemy(\"Crescendo\")] Crescendo,\n        [CardEnemy(\"Guard Armor\")] GuardArmor,\n        [CardEnemy(\"Parasite Cage\")] ParasiteCage,\n        [CardEnemy(\"Trickmaster\")] Trickmaster,\n        [CardEnemy(\"Darkside\")] Darkside,\n        [CardEnemy(\"Card Soldier\")] CardSoldier,\n        [CardEnemy(\"Hades\")] Hades,\n        [CardEnemy(\"Jafar\")] Jafar,\n        [CardEnemy(\"Oogie Boogie\")] OogieBoogie,\n        [CardEnemy(\"Ursula\")] Ursula,\n        [CardEnemy(\"Hook\")] Hook,\n        [CardEnemy(\"Dragon Maleficient\")] DragonMaleficient,\n        [CardEnemy(\"Riku\")] Riku,\n        [CardEnemy(\"Axel\")] Axel,\n        [CardEnemy(\"Larxene\")] Larxene,\n        [CardEnemy(\"Vexen\")] Vexen,\n        [CardEnemy(\"Marluxia\")] Marluxia,\n        [CardEnemy(\"Lexaeus\")] Lexaeus,\n        [CardEnemy(\"Ansem\")] Ansem,\n        [CardEnemy(\"Zexion\")] Zexion,\n        [CardEnemy(\"Xemnas\")] Xemnas,\n        [CardEnemy(\"Xigbar\")] Xigbar,\n        [CardEnemy(\"Xaldin\")] Xaldin,\n        [CardEnemy(\"Saïx\")] Saix,\n        [CardEnemy(\"Demyx\")] Demyx,\n        [CardEnemy(\"Luxord\")] Luxord,\n        [CardEnemy(\"Roxas\")] Roxas,\n        [CardSpecial(\"Gold Card\")] GoldCard,\n        [CardSpecial(\"Platinum Card\")] PlatinumCard,\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Types/Difficulty.cs",
    "content": "namespace KHSave.LibRecom.Types\n{\n    public enum Difficulty : byte\n    {\n        Beginner,\n        Standard,\n        Proud,\n        Extreme\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Types/PlayMode.cs",
    "content": "namespace KHSave.LibRecom.Types\n{\n    public enum PlayMode : byte\n    {\n        Sora,\n        Riku\n    }\n}\n"
  },
  {
    "path": "KHSave.LibRecom/Types/SoundMode.cs",
    "content": "namespace KHSave.LibRecom.Types\n{\n    public enum SoundMode : byte\n    {\n        Stereo,\n        ProLogicII,\n        Mono\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <configSections>\n        <sectionGroup name=\"userSettings\" type=\"System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n            <section name=\"KHSave.SaveEditor.Properties.Settings\" type=\"System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" allowExeDefinition=\"MachineToLocalUser\" requirePermission=\"false\"/>\n        </sectionGroup>\n    </configSections>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.7.2\"/>\n    </startup>\n    <userSettings>\n        <KHSave.SaveEditor.Properties.Settings>\n            <setting name=\"AdvancedMode\" serializeAs=\"String\">\n                <value>False</value>\n            </setting>\n            <setting name=\"IsUpdateCheckingEnabled\" serializeAs=\"String\">\n                <value>True</value>\n            </setting>\n            <setting name=\"LastUpdateCheck\" serializeAs=\"String\">\n                <value/>\n            </setting>\n        </KHSave.SaveEditor.Properties.Settings>\n    </userSettings>\n</configuration>\n"
  },
  {
    "path": "KHSave.SaveEditor/App.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" \n  xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"MyApplication.app\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <!-- UAC Manifest Options\n             If you want to change the Windows User Account Control level replace the \n             requestedExecutionLevel node with one of the following.\n\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n        <requestedExecutionLevel level=\"requireAdministrator\" uiAccess=\"false\" />\n        <requestedExecutionLevel level=\"highestAvailable\" uiAccess=\"false\" />\n\n            Specifying requestedExecutionLevel element will disable file and registry virtualization. \n            Remove this element if your application requires this virtualization for backwards\n            compatibility.\n        -->\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on\n           and is designed to work with. Uncomment the appropriate elements\n           and Windows will automatically select the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <!--<supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />-->\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher\n       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need \n       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should \n       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->\n\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitorV2</dpiAwareness>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>\n    </windowsSettings>\n  </application>\n\n\n  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->\n  \n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity type=\"win32\" name=\"Microsoft.Windows.Common-Controls\" version=\"6.0.0.0\" processorArchitecture=\"*\" publicKeyToken=\"6595b64144ccf1df\" language=\"*\" />\n    </dependentAssembly>\n  </dependency>\n \n\n</assembly>\n"
  },
  {
    "path": "KHSave.SaveEditor/App.xaml",
    "content": "<Application x:Class=\"KHSave.SaveEditor.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"clr-namespace:KHSave.SaveEditor\">\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n                <ResourceDictionary Source=\"pack://application:,,,/Xe.Tools.Wpf;component/Themes/Generic.xaml\"/>\n                <ResourceDictionary Source=\"StyledControls.xaml\"/>\n                <ResourceDictionary>\n                    <DrawingImage x:Key=\"FundIcon\">\n                        <DrawingImage.Drawing>\n                            <DrawingGroup>\n                                <DrawingGroup.Children>\n                                    <GeometryDrawing Brush=\"#ffea4aaa\" Geometry=\"M9 2c-.97 0-1.69.42-2.2 1-.51.58-.78.92-.8 1-.02-.08-.28-.42-.8-1-.52-.58-1.17-1-2.2-1-1.632.086-2.954 1.333-3 3 0 .52.09 1.52.67 2.67C1.25 8.82 3.01 10.61 6 13c2.98-2.39 4.77-4.17 5.34-5.33C11.91 6.51 12 5.5 12 5c-.047-1.69-1.342-2.913-3-3z\" />\n                                </DrawingGroup.Children>\n                            </DrawingGroup>\n                        </DrawingImage.Drawing>\n                    </DrawingImage>\n                </ResourceDictionary>\n            </ResourceDictionary.MergedDictionaries>\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "KHSave.SaveEditor/App.xaml.cs",
    "content": "using KHSave.SaveEditor.Ff7Remake.Data;\nusing KHSave.SaveEditor.Interfaces;\nusing KHSave.SaveEditor.Services;\nusing KHSave.SaveEditor.Views;\nusing System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Windows;\nusing System.Windows.Threading;\nusing Unity;\n\nnamespace KHSave.SaveEditor\n{\n    /// <summary>\n    /// Interaction logic for App.xaml\n    /// </summary>\n    public partial class App : Application\n    {\n        private class ApplicationStartup : IApplicationStartup\n        {\n            public ApplicationStartup(string[] args)\n            {\n                StartupFileName = args.FirstOrDefault();\n#if DEBUG\n                StartupFileName = StartupFileName ?? @\"D:\\Repository\\KH3SaveEditor\\KHSave.Tests\\Saves\\kh2fm.bin\";\n#endif\n            }\n\n#if DEBUG\n            public bool IsDebugging => Debugger.IsAttached;\n#else\n            public bool IsDebugging => false;\n#endif\n\n            public string StartupFileName { get; }\n        }\n\n\n        protected override void OnStartup(StartupEventArgs e)\n        {\n            try\n            {\n                base.OnStartup(e);\n                Initialize(e);\n            }\n            catch (Exception ex)\n            {\n                CaptureException(ex);\n            }\n        }\n\n        private void Initialize(StartupEventArgs e)\n        {\n            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);\n            DispatcherUnhandledException += (sender, args) =>\n            {\n                CaptureException(args.Exception);\n                args.Handled = true;\n            };\n\n            ItemsPreset.LazyInitialize();\n            BgmPreset.LazyInitialize();\n\n            IUnityContainer container = new UnityContainer()\n                .AddExtension(new Diagnostic())\n                .RegisterSingleton<IWindowManager, WindowManager>()\n                .RegisterSingleton<IFileDialogManager, FileDialogManager>()\n                .RegisterInstance<IApplicationStartup>(new ApplicationStartup(e.Args))\n                .RegisterSingleton<IAlertMessage, AlertMessage>()\n                .RegisterSingleton<IUpdater, UpdaterService>()\n                .RegisterSingleton<IAppIdentity, DesktopAppIdentity>()\n                ;\n\n            container.Resolve<MainWindow>().Show();\n        }\n\n        private static void CaptureException(Exception ex)\n        {\n            ReporterService.Instance.SendCrashReport(ex);\n            MessageBox.Show(\n                $\"An unhandled error has occurred:\\n{ex.Message}\\n\\n{ex.StackTrace}\",\n                \"Fatal error\", MessageBoxButton.OK, MessageBoxImage.Error);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Interfaces/IAlertMessage.cs",
    "content": "using KHSave.SaveEditor.Common.Exceptions;\nusing System;\n\nnamespace KHSave.SaveEditor.Interfaces\n{\n    public interface IAlertMessage\n    {\n        void Info(string message, string title = null);\n        void Warning(string message, string title = null);\n        void Error(string message, string title = null);\n        void Error(Exception exception);\n        void Error(VisualException exception);\n        bool? InfoQuestion(string message, string title = null);\n        bool? WarningQuestion(string message, string title = null);\n        bool? ErrorQuestion(string message, string title = null);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Interfaces/IApplicationStartup.cs",
    "content": "namespace KHSave.SaveEditor.Interfaces\n{\n    public interface IApplicationStartup\n    {\n        bool IsDebugging { get; }\n        string StartupFileName { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Interfaces/IFileDialogManager.cs",
    "content": "using System;\nusing System.IO;\n\nnamespace KHSave.SaveEditor.Interfaces\n{\n    public interface IFileDialogManager\n    {\n        bool IsFileOpen { get; }\n        string CurrentFileName { get; }\n\n        void InjectFileName(string fileName, Action<Stream> onSuccess);\n        void Open(Action<Stream> onSuccess);\n        void Save(Action<Stream> onSuccess);\n        void SaveAs(Action<Stream> onSuccess);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Interfaces/IReporter.cs",
    "content": "using System;\n\nnamespace KHSave.SaveEditor.Interfaces\n{\n    public interface IReporter\n    {\n        void SendGameName(string name);\n        void SendCrashReport(Exception ex);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Interfaces/IUpdater.cs",
    "content": "using System.Threading.Tasks;\n\nnamespace KHSave.SaveEditor.Interfaces\n{\n    public interface IUpdater\n    {\n        bool IsAutomaticUpdatesEnabled { get; set; }\n\n        Task<bool> AutomaticallyCheckLastVersionAsync();\n        Task<bool> ForceCheckLastVersionAsync();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Interfaces/IWindowManager.cs",
    "content": "using System;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Interfaces\n{\n    public interface IWindowManager\n    {\n        bool IsRoot { get; }\n        Window RootWindow { get; set; }\n        Window CurrentWindow { get; }\n\n        bool? Push<TWindow>(Action<TWindow> onSetup = null, Func<TWindow, bool> onSuccess = null) where TWindow : Window;\n        bool? Push(Window window);\n\n        void Pull();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/KHSave.SaveEditor.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n    <ApplicationIcon>Icon1.ico</ApplicationIcon>\n    <OutputType>WinExe</OutputType>\n    <StartupObject />\n    <UseWpf>true</UseWpf>\n    <Version>1.15.5</Version>\n    <RepositoryUrl>https://github.com/Xeeynamo/KingdomSaveEditor</RepositoryUrl>\n    <PackageProjectUrl>http://kingdomsaveeditor.xee.dev/</PackageProjectUrl>\n    <AssemblyVersion>1.15.5</AssemblyVersion>\n    <Description>http://kingdomsaveeditor.xee.dev/</Description>\n    <Copyright>Copyright (C) 2021 Luciano Ciccariello</Copyright>\n    <RepositoryType></RepositoryType>\n    <PackageTags></PackageTags>\n    <PackageReleaseNotes></PackageReleaseNotes>\n    <FileVersion>1.15.5</FileVersion>\n    <PackageId>KHSave.SaveEditor</PackageId>\n    <Authors>Luciano (Xeeynamo) Ciccariello</Authors>\n    <Product>Kingdom Save Editor</Product>\n      \n    <PackageLicenseExpression>GPL3</PackageLicenseExpression>\n    <ApplicationManifest>App.manifest</ApplicationManifest>\n  </PropertyGroup>\n  <Target Name=\"_CheckForGenerateAppxPackageOnBuild\" />\n\n  <ItemGroup>\n    <EmbeddedResource Update=\"Properties\\Resources.resx\" Generator=\"ResXFileCodeGenerator\" LastGenOutput=\"Resources.Designer.cs\" />\n    <Compile Update=\"Properties\\Resources.Designer.cs\" DesignTime=\"True\" AutoGen=\"True\" DependentUpon=\"Resources.resx\" />\n    <Compile Update=\"Settings.Designer.cs\" AutoGen=\"True\" DependentUpon=\"Settings.settings\" />\n    <None Update=\"Settings.settings\" LastGenOutput=\"Settings.Designer.cs\" Generator=\"SettingsSingleFileGenerator\" />\n\n    <Resource Include=\"Images\\*.*\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Configuration.ConfigurationManager\" Version=\"6.0.0\" />\n    <PackageReference Include=\"System.Text.Encoding.CodePages\" Version=\"6.0.0\" />\n    <PackageReference Include=\"Unity.Container\" Version=\"5.11.11\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.Archives\\KHSave.Archives.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.Lib02\\KHSave.Lib02.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.Lib1\\KHSave.Lib1.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.Lib2\\KHSave.Lib2.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibDDD\\KHSave.LibDDD.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.Lib3\\KHSave.Lib3.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibBbs\\KHSave.LibBbs.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibFf7Remake\\KHSave.LibFf7Remake.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibPersona3\\KHSave.LibPersona3.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibPersona5\\KHSave.LibPersona5.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibRecom\\KHSave.LibRecom.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Ff7Remake\\KHSave.SaveEditor.Ff7Remake.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Kh02\\KHSave.SaveEditor.Kh02.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Kh1\\KHSave.SaveEditor.Kh1.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Kh2\\KHSave.SaveEditor.Kh2.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Kh3\\KHSave.SaveEditor.Kh3.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.KhBbs\\KHSave.SaveEditor.KhBbs.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.KhDDD\\KHSave.SaveEditor.KhDDD.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.KhRecom\\KHSave.SaveEditor.KhRecom.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Persona3\\KHSave.SaveEditor.Persona3.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Persona5\\KHSave.SaveEditor.Persona5.csproj\" />\n    <ProjectReference Include=\"..\\Xe.ReleaseUpdater\\Xe.VersionCheck\\Xe.VersionCheck.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.SaveEditor/Models/PatreonInfo.cs",
    "content": "using System.Collections.Generic;\n\nnamespace KHSave.SaveEditor.Models\n{\n    public class PatreonInfo\n    {\n        public string PatreonUrl { get; set; }\n\n        public IEnumerable<PatronModel> Patrons { get; set; }\n\n        public SponsorshipInfo SponsorshipInfo { get; set; }\n\n        public IEnumerable<ServiceMessage> Messages { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Models/PatronModel.cs",
    "content": "namespace KHSave.SaveEditor.Models\n{\n    public class PatronModel\n    {\n        public string Name { get; set; }\n\n        public string ProfileUrl { get; set; }\n\n        public string PhotoUrl { get; set; }\n\n        public int TierId { get; set; }\n\n        public string Color { get; set; }\n\n        public string BadgeUrl { get; set; }\n\n        public bool Glow { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Models/ServiceMessage.cs",
    "content": "namespace KHSave.SaveEditor.Models\n{\n    public class ServiceMessage\n    {\n        public string Text { get; set; }\n        public string Title { get; set; }\n        public string Url { get; set; }\n        public double FontSize { get; set; }\n        public bool IsBold { get; set; }\n        public bool IsItalic { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Models/SponsorshipInfo.cs",
    "content": "namespace KHSave.SaveEditor.Models\n{\n    public class SponsorshipInfo\n    {\n        public string Title { get; set; }\n        public string Description { get; set; }\n        public int StartGoal { get; set; }\n        public int EndGoal { get; set; }\n        public int Count { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace KHSave.SaveEditor.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"KHSave.SaveEditor.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Icon similar to (Icon).\n        /// </summary>\n        internal static System.Drawing.Icon Icon1 {\n            get {\n                object obj = ResourceManager.GetObject(\"Icon1\", resourceCulture);\n                return ((System.Drawing.Icon)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"Icon1\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\Icon1.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "KHSave.SaveEditor/Services/AlertMessage.cs",
    "content": "using KHSave.SaveEditor.Common.Exceptions;\nusing KHSave.SaveEditor.Interfaces;\nusing System;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Services\n{\n    public class AlertMessage : IAlertMessage\n    {\n        private readonly IWindowManager windowManager;\n\n        public AlertMessage(IWindowManager windowManager)\n        {\n            this.windowManager = windowManager;\n        }\n\n        public void Info(string message, string title) =>\n            Invoke(message, title, MessageBoxButton.OK, MessageBoxImage.Information);\n\n        public void Warning(string message, string title) =>\n            Invoke(message, title, MessageBoxButton.OK, MessageBoxImage.Warning);\n\n        public void Error(string message, string title) =>\n            Invoke(message, title, MessageBoxButton.OK, MessageBoxImage.Error);\n\n        public void Error(Exception exception) => Error(exception.Message, \"Error\");\n\n        public void Error(VisualException exception) => Error(exception.Message, exception.Title);\n\n        public bool? InfoQuestion(string message, string title) =>\n            Invoke(message, title, MessageBoxButton.YesNoCancel, MessageBoxImage.Information);\n\n        public bool? WarningQuestion(string message, string title) =>\n            Invoke(message, title, MessageBoxButton.YesNoCancel, MessageBoxImage.Warning);\n\n        public bool? ErrorQuestion(string message, string title) =>\n            Invoke(message, title, MessageBoxButton.YesNoCancel, MessageBoxImage.Error);\n\n        private bool? Invoke(string message, string title, MessageBoxButton buttons, MessageBoxImage severity)\n        {\n            switch (MessageBox.Show(windowManager.CurrentWindow, message, title, buttons, severity))\n            {\n                case MessageBoxResult.None:\n                    return null;\n                case MessageBoxResult.OK:\n                    return true;\n                case MessageBoxResult.Cancel:\n                    return null;\n                case MessageBoxResult.Yes:\n                    return true;\n                case MessageBoxResult.No:\n                    return false;\n                default:\n                    return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Services/ContentFactory.cs",
    "content": "using KHSave.SaveEditor.Common.Contracts;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Ff7Remake.ViewModels;\nusing KHSave.SaveEditor.Kh02.ViewModels;\nusing KHSave.SaveEditor.Kh1.ViewModels;\nusing KHSave.SaveEditor.Kh2.ViewModels;\nusing KHSave.SaveEditor.Kh3.ViewModels;\nusing KHSave.SaveEditor.KhBbs.ViewModels;\nusing KHSave.SaveEditor.KhRecom.ViewModels;\nusing KHSave.SaveEditor.Persona5.ViewModels;\nusing KHSave.SaveEditor.KhDDD.ViewModels;\nusing KHSave.SaveEditor.ViewModels;\nusing KHSave.SaveEditor.Views;\nusing System;\nusing System.Windows.Controls;\nusing Unity;\nusing KHSave.LibPersona3.Models;\nusing KHSave.SaveEditor.Persona3.ViewModels;\n\nnamespace KHSave.SaveEditor.Services\n{\n    public enum ContentType\n    {\n        Unload,\n        Archive,\n        KingdomHearts,\n        KingdomHearts2,\n        KingdomHeartsBbs,\n        KingdomHeartsDDD,\n        KingdomHeartsRecom,\n        KingdomHearts02,\n        KingdomHearts3,\n        FinalFantasy7Remake,\n        Persona3,\n        Persona5,\n    }\n\n    public class ContentResponse\n    {\n        public UserControl Control { get; set; }\n        public IOpenStream OpenStream { get; set; }\n        public IWriteToStream WriteToStream { get; set; }\n        public IRefreshUi RefreshUi { get; set; }\n        public IGetSave GetSave { get; set; }\n    }\n\n    public class ContentFactory\n    {\n        private readonly IUnityContainer container;\n\n        public ContentFactory(IUnityContainer container)\n        {\n            this.container = container;\n        }\n\n        public ContentResponse Factory(ContentType saveType) => saveType switch\n        {\n            ContentType.Unload => FactoryView<HomeView, HomeViewModel>(),\n            ContentType.KingdomHearts => FactoryEditorView<Kh1.MainView, Kh1ViewModel>(),\n            ContentType.KingdomHearts2 => FactoryEditorView<Kh2.MainView, Kh2ViewModel>(),\n            ContentType.KingdomHeartsBbs => FactoryEditorView<KhBbs.MainView, KhBbsViewModel>(),\n            ContentType.KingdomHeartsDDD => FactoryEditorView<KhDDD.MainView, KhDDDViewModel>(),\n            ContentType.KingdomHeartsRecom => FactoryEditorView<KhRecom.MainView, KhRecomViewModel>(),\n            ContentType.KingdomHearts02 => FactoryEditorView<Kh02.MainView, Kh02ViewModel>(),\n            ContentType.KingdomHearts3 => FactoryEditorView<Kh3.MainView, Kh3ViewModel>(),\n            ContentType.FinalFantasy7Remake => FactoryEditorView<Ff7Remake.Views.FF7RMainView, FF7RMainViewModel>(),\n            ContentType.Persona3 => FactoryEditorView<Persona3.Views.Persona3MainView, Persona3MainViewModel>(),\n            ContentType.Persona5 => FactoryEditorView<Persona5.Views.Persona5MainView, Persona5MainViewModel>(),\n            _ => throw new Exception($\"Factory for {saveType} not yet implemented.\"),\n        };\n\n        public void LoadIconPack(ContentType saveType)\n        {\n            IconService.IconPack iconPack;\n            switch (saveType)\n            {\n                case ContentType.Unload:\n                    return;\n                case ContentType.KingdomHearts:\n                case ContentType.KingdomHearts2:\n                case ContentType.KingdomHeartsRecom:\n                case ContentType.KingdomHearts02:\n                case ContentType.KingdomHearts3:\n                    iconPack = IconService.IconPack.KingdomHearts2;\n                    break;\n                case ContentType.KingdomHeartsBbs:\n                    iconPack = IconService.IconPack.KingdomHeartsBbs;\n                    break;\n                case ContentType.KingdomHeartsDDD:\n                    iconPack = IconService.IconPack.KingdomHeartsDdd;\n                    break;\n                case ContentType.FinalFantasy7Remake:\n                    iconPack = IconService.IconPack.FF7Remake;\n                    break;\n                case ContentType.Persona3:\n                case ContentType.Persona5:\n                    iconPack = IconService.IconPack.Persona5;\n                    break;\n                default:\n                    throw new Exception($\"IconPack for {saveType} not yet implemented.\");\n            }\n\n            IconService.UseIconPack(iconPack);\n        }\n\n        private ContentResponse FactorySimpleView<TControl>()\n            where TControl : UserControl => new ContentResponse\n            {\n                Control = container.Resolve<TControl>()\n            };\n\n        private ContentResponse FactoryView<TControl, TContext>()\n            where TControl : UserControl\n            where TContext : class\n        {\n            var control = container.Resolve<TControl>();\n            control.DataContext = container.Resolve<TContext>();\n\n            return new ContentResponse\n            {\n                Control = control,\n            };\n        }\n\n        private ContentResponse FactoryEditorView<TControl, TContext>()\n            where TControl : UserControl\n            where TContext : IOpenStream, IWriteToStream, IRefreshUi\n        {\n            var context = container.Resolve<TContext>();\n            var control = container.Resolve<TControl>();\n            control.DataContext = context;\n\n            return new ContentResponse\n            {\n                Control = control,\n                OpenStream = context,\n                WriteToStream = context,\n                RefreshUi = context,\n                GetSave = context as IGetSave,\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Services/DesktopAppIdentity.cs",
    "content": "using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Services\n{\n    public class DesktopAppIdentity : IAppIdentity\n    {\n        private static readonly string[] WindowsStorePathList = new[]\n        {\n            \"\\\\WindowsApps\\\\\",\n            \"/WindowsApps/\",\n            \"58821Xeeynamo.KingdomSaveEditor_\",\n        };\n\n        private static readonly Assembly _assembly = Assembly.GetExecutingAssembly();\n        private static readonly string _assemblyLocation = Path\n            .Combine(AppContext.BaseDirectory, _assembly.ManifestModule.ToString())\n                .Replace(\".dll\", \".exe\");\n        private static readonly FileVersionInfo _fvi = FileVersionInfo.GetVersionInfo(_assemblyLocation);\n\n        public DesktopAppIdentity()\n        {\n            // https://docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes#installation\n            IsMicrosoftStore = WindowsStorePathList.Any(x => AppContext.BaseDirectory.Contains(x));\n        }\n\n        public string Name => _fvi.ProductName;\n\n        public string Version => _fvi.ProductVersion;\n\n        public bool IsMicrosoftStore { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Services/FileDialogManager.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing KHSave.SaveEditor.Interfaces;\nusing Xe.Tools.Wpf.Dialogs;\n\nnamespace KHSave.SaveEditor.Services\n{\n    public class FileDialogManager : IFileDialogManager\n    {\n        private readonly IEnumerable<FileDialogFilter> Filters = FileDialogFilterComposer\n            .Compose()\n            .AddExtensions(\"All supported games\", \"bin\", \"sav\", \"dat;*\")\n            .AddPatterns(\"Kingdom Hearts I\", \";BESCES*\", \";BASLUS-20370*\", \";BISLPM-66233-*\")\n            .AddPatterns(\"Kingdom Hearts II\", \";BISLPM-66675FM-**\")\n            .AddExtensions(\"Kingdom Hearts Birth By Sleep\", \"DAT\")\n            .AddPatterns(\"Kingdom Hearts Re: CoM\", \";BISLUS-21799COM-*\", \";BASLUS-21799COM-*\")\n            .AddExtensions(\"Kingdom Hearts 1.5/2.5 ReMIX\", \"DAT\")\n            .AddPatterns(\"Kingdom Hearts 0.2\", \";ue4savegame*.sav\")\n            .AddPatterns(\"Kingdom Hearts III\", \";__data__slot*.bin\")\n            .AddPatterns(\"Kingdom Hearts PC ports saves\", \"png\")\n            .AddExtensions(\"Final Fantasy VII REMAKE\", \";ff7remake*\")\n            .AddExtensions(\"PS2 Save Archive\", \"psu\", \"cbs\")\n            .AddExtensions(\"PS2 Single Archive (PS3)\", \"psv\")\n            ;\n\n        private readonly IWindowManager _windowManager;\n\n        public bool IsFileOpen { get; private set; }\n\n        public string CurrentFileName { get; private set; }\n\n        public FileDialogManager(IWindowManager windowManager)\n        {\n            _windowManager = windowManager;\n        }\n\n        public void InjectFileName(string fileName, Action<Stream> onSuccess)\n        {\n            IsFileOpen = true;\n            CurrentFileName = fileName;\n            using (var stream = File.OpenRead(fileName))\n            {\n                try\n                { onSuccess(stream); }\n                catch\n                {\n                    IsFileOpen = false;\n                    throw;\n                }\n            }\n        }\n\n        public void Open(Action<Stream> onSuccess) =>\n            FileDialog.OnOpen(fileName => InjectFileName(fileName, onSuccess), Filters);\n\n        public void Save(Action<Stream> onSuccess)\n        {\n            if (IsFileOpen)\n            {\n                using (var stream = File.Create(CurrentFileName))\n                {\n                    onSuccess(stream);\n                }\n            }\n            else\n            {\n                SaveAs(onSuccess);\n            }\n        }\n\n        public void SaveAs(Action<Stream> onSuccess)\n        {\n            FileDialog.OnSave(fileName =>\n            {\n                using (var stream = File.Create(fileName))\n                {\n                    CurrentFileName = fileName;\n                    onSuccess(stream);\n                }\n            }, Filters, defaultFileName: CurrentFileName);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Services/IAppIdentity.cs",
    "content": "namespace KHSave.SaveEditor.Services\n{\n    public interface IAppIdentity\n    {\n        string Name { get; }\n        string Version { get; }\n        bool IsMicrosoftStore { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Services/PatreonService.cs",
    "content": "using KHSave.SaveEditor.Models;\nusing Newtonsoft.Json;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Threading.Tasks;\n\nnamespace KHSave.SaveEditor.Services\n{\n    public class PatreonService\n    {\n        private class PatreonResponse\n        {\n            [JsonProperty(\"patreonUrl\")]\n            public string PatreonUrl { get; set; }\n\n            [JsonProperty(\"patrons\")]\n            public IEnumerable<PatronDto> Patrons { get; set; }\n\n            [JsonProperty(\"sponsorshipInfo\")]\n            public SponsorshipInfo SponsorshipInfo { get; set; }\n\n            [JsonProperty(\"headerInfo\")]\n            public HeaderInfo HeaderInfo { get; set; }\n        }\n\n        public class SponsorshipInfo\n        {\n            [JsonProperty(\"title\")]\n            public string Title { get; set; }\n\n            [JsonProperty(\"description\")]\n            public string Description { get; set; }\n\n            [JsonProperty(\"startGoal\")]\n            public int StartGoal { get; set; }\n\n            [JsonProperty(\"endGoal\")]\n            public int EndGoal { get; set; }\n        }\n\n        public class HeaderInfo\n        {\n            [JsonProperty(\"messages\")]\n            public HeaderMessage[] Messages { get; set; }\n        }\n\n        public class HeaderMessage\n        {\n            [JsonProperty(\"text\")]\n            public string Text { get; set; }\n\n            [JsonProperty(\"title\")]\n            public string Title { get; set; }\n\n            [JsonProperty(\"url\")]\n            public string Url { get; set; }\n\n            [JsonProperty(\"fontSize\")]\n            public double FontSize { get; set; }\n\n            [JsonProperty(\"isBold\")]\n            public bool IsBold { get; set; }\n\n            [JsonProperty(\"isItalic\")]\n            public bool IsItalic { get; set; }\n        }\n\n        private class PatronDto\n        {\n            [JsonProperty(\"name\")]\n            public string Name { get; set; }\n\n            [JsonProperty(\"profileUrl\")]\n            public string ProfileUrl { get; set; }\n\n            [JsonProperty(\"tierId\")]\n            public int TierId { get; set; }\n\n            [JsonProperty(\"color\")]\n            public string Color { get; set; }\n\n            [JsonProperty(\"photoUrl\")]\n            public string PhotoUrl { get; set; }\n\n            [JsonProperty(\"badgeUrl\")]\n            public string BadgeUrl { get; set; }\n\n            [JsonProperty(\"glow\")]\n            public bool Glow { get; set; }\n        }\n\n        private readonly IAppIdentity _appIdentity;\n\n        public PatreonService(IAppIdentity appIdentity)\n        {\n            _appIdentity = appIdentity;\n        }\n\n        public async Task<PatreonInfo> GetPatreonInfo()\n        {\n            var response = await FetchPatreonInfo();\n            return new PatreonInfo\n            {\n                PatreonUrl = response.PatreonUrl,\n                Patrons = response.Patrons?.Select(patron => new PatronModel\n                {\n                    Name = patron.Name,\n                    ProfileUrl = patron.ProfileUrl,\n                    TierId = patron.TierId,\n                    Color = patron.Color,\n                    PhotoUrl = patron.PhotoUrl,\n                    BadgeUrl = patron.BadgeUrl,\n                    Glow = patron.Glow\n                }),\n                SponsorshipInfo = new Models.SponsorshipInfo\n                {\n                    Title = response.SponsorshipInfo?.Title,\n                    Description = response.SponsorshipInfo?.Description,\n                    StartGoal = response.SponsorshipInfo?.StartGoal ?? 0,\n                    EndGoal = response.SponsorshipInfo?.EndGoal ?? 1,\n                    Count = response.Patrons?.Count() ?? 0\n                },\n                Messages = response.HeaderInfo?.Messages?.Select(x => new ServiceMessage\n                {\n                    Text = x.Text,\n                    Title = x.Title,\n                    Url = x.Url,\n                    FontSize = x.FontSize,\n                    IsBold = x.IsBold,\n                    IsItalic = x.IsItalic,\n                }),\n            };\n        }\n\n        private async Task<PatreonResponse> FetchPatreonInfo()\n        {\n            using (var client = new HttpClient())\n            {\n                var version = _appIdentity.Version;\n#if DEBUG\n                version += \"d\";\n#endif\n                client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(\"khsaveeditor\", version));\n\n                var response = await client.GetAsync(\"https://api.xee.dev/v1/khsaveeditor/patreon\");\n                var content = await response.Content.ReadAsStringAsync();\n                return JsonConvert.DeserializeObject<PatreonResponse>(content);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Services/Pcsx2MemoryService.cs",
    "content": "using KHSave.SaveEditor.Common;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace KHSave.SaveEditor.Services\n{\n    public static class Pcsx2MemoryService\n    {\n        private const int Pcsx2EmulationBaseAddress = 0x20000000;\n        private const int Pcsx2EmulationMemoryLength = 0x2000000;\n        private const int BootFileMaximumStringLength = 0x20;\n        private static readonly int[] PlayStation2BootFileOffsets = new int[]\n        {\n            0x12610, // Japan v1.00\n            0x15390, // American 1.60\n            0x15510, // Europe v1.60\n            0x155D0, // Europe v2.00\n            0x15B90, // Every other BIOS from v2.20 or above\n        };\n\n        private class GameEntry\n        {\n            public string BootFile { get; }\n            public long Offset { get; }\n            public int Length { get; }\n\n            public GameEntry(string titleId, long offset, int length)\n            {\n                BootFile = titleId;\n                Offset = offset;\n                Length = length;\n            }\n        }\n\n        private static GameEntry[] Games => new GameEntry[]\n        {\n            new GameEntry(\"SLPM_610.25;1\", 0x203F1210, 0x16c00), // Kingdom Hearts I Premium Showcase\n            new GameEntry(\"SLPS_251.05;1\", 0x203F2080, 0x16c00), // Kingdom Hearts I (JP)\n            new GameEntry(\"SLUS_203.70;1\", 0x203F1C90, 0x16c00), // Kingdom Hearts I (US)\n            new GameEntry(\"SCUS_203.70;1\", 0x203F1C90, 0x16c00), // Kingdom Hearts I (US)\n            new GameEntry(\"SLES_509.67;1\", 0x203F22C0, 0x16c00), // Kingdom Hearts I (UK)\n            new GameEntry(\"SLES_509.68;1\", 0x203F1AB0, 0x16c00), // Kingdom Hearts I (FR)\n            new GameEntry(\"SLES_509.69;1\", 0x203F3CF0, 0x16c00), // Kingdom Hearts I (DE)\n            new GameEntry(\"SLES_509.70;1\", 0x203F3900, 0x16c00), // Kingdom Hearts I (IT)\n            new GameEntry(\"SLES_509.71;1\", 0x203F4620, 0x16c00), // Kingdom Hearts I (ES)\n            new GameEntry(\"SCES_509.67;1\", 0x203F22C0, 0x16c00), // Kingdom Hearts I (UK)\n            new GameEntry(\"SCES_509.68;1\", 0x203F1AB0, 0x16c00), // Kingdom Hearts I (FR)\n            new GameEntry(\"SCES_509.69;1\", 0x203F3CF0, 0x16c00), // Kingdom Hearts I (DE)\n            new GameEntry(\"SCES_509.70;1\", 0x203F3900, 0x16c00), // Kingdom Hearts I (IT)\n            new GameEntry(\"SCES_509.71;1\", 0x203F4620, 0x16c00), // Kingdom Hearts I (ES)\n            new GameEntry(\"SLPS_251.97;1\", 0x203F8380, 0x16c00), // Kingdom Hearts I: Final Mix\n            new GameEntry(\"SLPS_251.98;1\", 0x203F8380, 0x16c00), // Kingdom Hearts I: Final Mix\n\n            new GameEntry(\"SLPM_662.33;1\", 0x2033DCE0, 0xb830), // Kingdom Hearts II (JP)\n            new GameEntry(\"SLUS_210.05;1\", 0x2033E860, 0xb4e0), // Kingdom Hearts II (US)\n            new GameEntry(\"SCUS_210.05;1\", 0x2033E860, 0xb4e0), // Kingdom Hearts II (US)\n            new GameEntry(\"SLES_541.44;1\", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (UK)\n            new GameEntry(\"SLES_542.32;1\", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (FR)\n            new GameEntry(\"SLES_542.33;1\", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (DE)\n            new GameEntry(\"SLES_542.34;1\", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (IT)\n            new GameEntry(\"SCES_542.35;1\", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (ES)\n            new GameEntry(\"SCES_541.44;1\", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (UK)\n            new GameEntry(\"SCES_542.32;1\", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (FR)\n            new GameEntry(\"SCES_542.33;1\", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (DE)\n            new GameEntry(\"SCES_542.34;1\", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (IT)\n            new GameEntry(\"SCES_542.35;1\", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (ES)\n            new GameEntry(\"SLPM_666.75;1\", 0x2032BB30, 0x10fc0), // Kingdom Hearts II: Final Mix\n        };\n\n        public static async Task<string> GetPcsx2ApplicationName(Process process, CancellationToken cancellationToken)\n        {\n            int byteReadCount;\n            var data = new byte[BootFileMaximumStringLength];\n\n            while (!cancellationToken.IsCancellationRequested)\n            {\n                foreach (var offsets in PlayStation2BootFileOffsets)\n                {\n                    using (var searchStream = new ProcessStream(process, Pcsx2EmulationBaseAddress + offsets, 0x20))\n                    {\n                        byteReadCount = searchStream.Read(data, 0, data.Length);\n                    }\n\n                    var bootFile = Encoding.ASCII.GetString(data.TakeWhile(b => !b.Equals(0)).ToArray());\n\n                    // Here the situation becomes weird. We can have 5 possible different scenario:\n                    // 1. The emulator is not booted. so the selected portion of memory will be undefined.\n                    //    The task can wait for the user to load the game.\n                    //    We can impose a quite long sleep, since it takes time from user's interaction.\n                    if (byteReadCount == 0)\n                    {\n                        await Task.Delay(1000);\n                        continue;\n                    }\n\n                    // 2. The emulator is booted to the bios, which will return \"SYS\"\n                    //    or \"LOGO\". The task can wait for the BIOS to boot the game.\n                    //    The boot can happen at any time... or not happen at all.\n                    if (bootFile == \"SYS\" || bootFile == \"LOGO\")\n                    {\n                        await Task.Delay(200);\n                        continue;\n                    }\n\n                    // 3. The game is booting, so the length of bootFile will be 0.\n                    //    The task can wait for the game to be booted.\n                    //    This operation is usually quite fast.\n                    if (bootFile.Length == 0)\n                    {\n                        await Task.Delay(10);\n                        continue;\n                    }\n\n                    // 4. A random string can be found for a fracion of second.\n                    //    Since a game always starts with \"SL\" or \"SC\", prevents\n                    //    to consider that random string as something useful.\n                    if (bootFile.StartsWith(\"SL\") || bootFile.StartsWith(\"SC\"))\n                        return bootFile;\n\n                    await Task.Delay(10);\n                }\n            }\n\n            return null;\n        }\n\n        public static async Task<ProcessStream> CreateStreamFromPcsx2Process(Process process, CancellationToken cancellationToken)\n        {\n            while (!cancellationToken.IsCancellationRequested)\n            {\n                var bootFile = await GetPcsx2ApplicationName(process, cancellationToken);\n                if (cancellationToken.IsCancellationRequested)\n                    return null;\n\n                var game = Games.FirstOrDefault(x => x.BootFile == bootFile);\n                if (game == null)\n                    return null;\n\n                return new ProcessStream(process, game.Offset, (uint)game.Length);\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Services/ReporterService.cs",
    "content": "using KHSave.SaveEditor.Interfaces;\nusing KHSave.SaveEditor.VersionCheck;\nusing Newtonsoft.Json;\nusing System;\nusing System.Diagnostics;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace KHSave.SaveEditor.Services\n{\n    public class ReporterService : IReporter\n    {\n        internal static class GlobalReporterService\n        {\n            private const string AnonymousCookie = \"YW5vbnltb3Vz\";\n            public static string Os => Environment.OSVersion.VersionString;\n            public static string Ver => new DesktopCheckCurrentVersion().GetCurrentVersion();\n\n            public static void SendGameName(string name)\n            {\n                Send(\"open\", new\n                {\n                    gameId = name\n                });\n            }\n\n            public static void SendCrashReport(Exception ex)\n            {\n                Send(\"crash\", new\n                {\n                    exception = ex\n                });\n            }\n\n            public static void DeleteCookies()\n            {\n                Send(\"delete\", new\n                {\n                    cookie = GetCookie()\n                });\n\n                Common.Global.Cookie = string.Empty;\n            }\n\n            private static string GetCookie()\n            {\n                if (Common.Global.AnonymousReporting)\n                    return AnonymousCookie;\n\n                var cookie = Common.Global.Cookie;\n                if (string.IsNullOrEmpty(cookie))\n                    cookie = GenerateCookie();\n\n                return cookie;\n            }\n\n            private static string GenerateCookie() =>\n                Common.Global.Cookie = Convert.ToBase64String(Guid.NewGuid().ToByteArray());\n\n            private static Task Send(string endpoint, object obj)\n            {\n#if !DEBUG\n                if (Debugger.IsAttached)\n                    return Task.CompletedTask;\n\n                return Task.Run(async () =>\n                {\n                    try\n                    {\n                        using var client = new HttpClient();\n                        var content = new StringContent(\n                            JsonConvert.SerializeObject(obj),\n                            Encoding.UTF8,\n                            \"application/json\");\n                        content.Headers.Add(\"kse-os\", Os);\n                        content.Headers.Add(\"kse-ver\", Ver);\n                        content.Headers.Add(\"kse-cookie\", GetCookie());\n\n                        var result = await client.PostAsync($\"https://api.xee.dev/v1/khsaveeditor/{endpoint}\", content);\n                    }\n                    catch { }\n                });\n#else\n                return Task.CompletedTask;\n#endif\n            }\n        }\n\n        public static ReporterService Instance { get; } = new ReporterService();\n\n        public void SendGameName(string name) => GlobalReporterService.SendGameName(name);\n        public void SendCrashReport(Exception ex) => GlobalReporterService.SendCrashReport(ex);\n        public void DeleteCookies() => GlobalReporterService.DeleteCookies();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Services/TransferService.cs",
    "content": "using KHSave.Lib2;\nusing KHSave.Services;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\n\nnamespace KHSave.SaveEditor.Services\n{\n    public static class TransferService\n    {\n        public enum Result\n        {\n            Success,\n            GameNotSupported,\n            SourceNotCompatible,\n            InternalError,\n        }\n\n        public static Result Transfer(object dstSave, Stream srcSaveStream)\n        {\n            Result result;\n            if (dstSave is ISaveKh2 && (result = Transfer(dstSave, srcSaveStream, SaveKh2.IsValid, SaveKh2.Read, SaveKh2.TransferMappings)) != Result.GameNotSupported)\n                return result;\n\n            return Result.GameNotSupported;\n        }\n\n        public static Result Transfer<T>(\n            object save, Stream srcSaveStream, Func<Stream, bool> isValid, Func<Stream, T> read,\n            Dictionary<Type, Action<object, object, PropertyInfo>> mappings)\n            where T : class\n        {\n            if (!(save is T))\n                return Result.GameNotSupported;\n\n            if (!isValid(srcSaveStream.SetPosition(0)))\n                return Result.SourceNotCompatible;\n\n            var srcSave = read(srcSaveStream.SetPosition(0));\n            if (!(srcSave is T))\n                return Result.InternalError;\n\n            TransferServiceLL.CopySave<T>(save, srcSave, mappings);\n            return Result.Success;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Services/UpdaterService.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing KHSave.SaveEditor.Interfaces;\nusing KHSave.SaveEditor.VersionCheck;\nusing KHSave.SaveEditor.Views;\nusing Xe.VersionCheck;\n\nnamespace KHSave.SaveEditor.Services\n{\n    public class UpdaterService : IUpdater\n    {\n        private readonly IWindowManager windowManager;\n        private readonly IAppIdentity _appIdentity;\n\n        private bool IsItTimeForCheckingNewVersion\n        {\n            get\n            {\n                try\n                {\n                    return Common.Global.LastUpdateCheck.AddDays(1) < DateTime.UtcNow;\n                }\n                catch\n                {\n                    return true;\n                }\n            }\n        }\n\n        public bool IsAutomaticUpdatesEnabled\n        {\n            get => Common.Global.IsUpdateCheckingEnabled;\n            set => Common.Global.IsUpdateCheckingEnabled = value;\n        }\n\n        public UpdaterService(IWindowManager windowManager)\n        {\n            this.windowManager = windowManager;\n            _appIdentity = new DesktopAppIdentity();\n        }\n\n        public Task<bool> AutomaticallyCheckLastVersionAsync()\n        {\n            if (IsAutomaticUpdatesEnabled && IsItTimeForCheckingNewVersion)\n                return ForceCheckLastVersionAsync();\n\n            return Task.FromResult(true);\n        }\n\n        public async Task<bool> ForceCheckLastVersionAsync()\n        {\n            if (_appIdentity.IsMicrosoftStore)\n                return false;\n\n            UpdateLastTimeForCheckingNewVersion();\n            var checkCurrentVersion = new DesktopCheckCurrentVersion();\n            var checkLastVersion = new GithubCheckLatestVersion(\"xeeynamo\", \"kh3saveeditor\");\n            var releaseUpdater = new VersionChecker(checkCurrentVersion, checkLastVersion);\n\n            var lastVersion = await releaseUpdater.GetLatestVersionAsync();\n            if (lastVersion != null)\n            {\n                Application.Current.Dispatcher.Invoke(() =>\n                    windowManager.Push(new UpdateWindow(lastVersion)));\n\n                return true;\n            }\n\n            return false;\n        }\n\n        private void UpdateLastTimeForCheckingNewVersion() =>\n            Common.Global.LastUpdateCheck = DateTime.UtcNow;\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Services/WindowManager.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Windows;\nusing KHSave.SaveEditor.Interfaces;\nusing Unity;\n\nnamespace KHSave.SaveEditor.Services\n{\n    public class WindowManager : IWindowManager\n    {\n        private Stack<Window> _windowStack;\n        private Window rootWindow;\n        private readonly IUnityContainer _container;\n\n        public bool IsRoot => _windowStack.Count == 1;\n\n        public Window RootWindow\n        {\n            get => rootWindow;\n            set\n            {\n                _windowStack = new Stack<Window>();\n                _windowStack.Push(value);\n            }\n        }\n\n        public Window CurrentWindow => _windowStack.Peek();\n\n\n        public WindowManager(IUnityContainer container)\n        {\n            _container = container;\n        }\n\n        public bool? Push<TWindow>(Action<TWindow> onSetup, Func<TWindow, bool> onSuccess) where TWindow : Window\n        {\n            var window = _container.Resolve<TWindow>();\n            onSetup?.Invoke(window);\n\n            var result = Push(window);\n            return result == true ? onSuccess?.Invoke(window) ?? true : result;\n        }\n\n        public bool? Push(Window window)\n        {\n            _windowStack.Push(window);\n            return window.ShowDialog();\n        }\n\n        public void Pull()\n        {\n            if (IsRoot)\n                throw new Exception(\"Unable to pull root Window\");\n\n            _windowStack.Pop().Close();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/StyledControls.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:local=\"clr-namespace:KHSave.SaveEditor\">\n    <Style TargetType=\"{x:Type CheckBox}\" x:Key=\"KhCheckboxStyle\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type CheckBox}\">\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image x:Name=\"checkboxImage\" Width=\"18\"\n                                   Source=\"pack://application:,,,/KHSave.SaveEditor;component/Images/kh2-icon-ability.png\"/>\n                        <ContentPresenter/>\n                    </StackPanel>\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsChecked\" Value=\"True\">\n                            <Setter TargetName=\"checkboxImage\" Property=\"Source\"\n                                        Value=\"pack://application:,,,/KHSave.SaveEditor;component/Images/kh2-icon-ability-equipped.png\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>\n"
  },
  {
    "path": "KHSave.SaveEditor/VersionCheck/DesktopCheckCurrentVersion.cs",
    "content": "using KHSave.SaveEditor.Services;\nusing Xe.VersionCheck;\n\nnamespace KHSave.SaveEditor.VersionCheck\n{\n    public class DesktopCheckCurrentVersion : ICheckCurrentVersion\n    {\n        private IAppIdentity _appIdentity;\n\n        public DesktopCheckCurrentVersion()\n        {\n            _appIdentity = new DesktopAppIdentity();\n        }\n\n        public string GetCurrentVersion() => _appIdentity.Version;\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/ViewModels/HomeViewModel.cs",
    "content": "using Xe.Tools;\n\nnamespace KHSave.SaveEditor.ViewModels\n{\n    public class HomeViewModel : BaseNotifyPropertyChanged\n    {\n        private const string DefaultFundLink = \"https://github.com/sponsors/Xeeynamo\";\n        private string _fundLink;\n        private string _sponsorTitle;\n        private string _sponsorDescription;\n        private int _sponsorStartGoal;\n        private int _sponsorEndGoal;\n        private int _sponsorCount;\n\n        public string FundLink\n        {\n            get => _fundLink;\n            set { _fundLink = value; OnPropertyChanged(); }\n        }\n\n        public string SponsorHeaderInfo\n        {\n            get => _sponsorTitle;\n            set\n            {\n                _sponsorTitle = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public int SponsorCount\n        {\n            get => _sponsorCount;\n            set\n            {\n                _sponsorCount = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public int SponsorStartGoal\n        {\n            get => _sponsorStartGoal;\n            set\n            {\n                _sponsorStartGoal = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public int SponsorEndGoal\n        {\n            get => _sponsorEndGoal;\n            set\n            {\n                _sponsorEndGoal = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public string SponsorGoalDetails\n        {\n            get => _sponsorDescription;\n            set\n            {\n                _sponsorDescription = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public HomeViewModel()\n        {\n            FundLink = DefaultFundLink;\n            _sponsorEndGoal = 1;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/ViewModels/MainWindowViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Commands;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.Trssv;\nusing KHSave.Lib2;\nusing KHSave.LibRecom;\nusing KHSave.SaveEditor.Common.Exceptions;\nusing KHSave.Archives;\nusing KHSave.SaveEditor.Common.Views;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Interfaces;\nusing System;\nusing KHSave.SaveEditor.Services;\nusing System.Windows.Controls;\nusing KHSave.Lib3;\nusing KHSave.LibFf7Remake;\nusing KHSave.Lib1;\nusing KHSave.LibBbs;\nusing KHSave.LibDDD;\nusing KHSave.SaveEditor.Views;\nusing KHSave.LibPersona5;\nusing System.Net.Http;\nusing System.Net;\nusing KHSave.LibPersona3;\n\nnamespace KHSave.SaveEditor.ViewModels\n{\n    public class MainWindowViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly IFileDialogManager fileDialogManager;\n        private readonly IWindowManager windowManager;\n        private readonly IAlertMessage alertMessage;\n        private readonly IUpdater updater;\n        private readonly IAppIdentity _appIdentity;\n        private readonly ContentFactory contentFactory;\n        private readonly ReporterService reporterService;\n        private object dataContext;\n        private ContentType _saveKind;\n\n        private bool _isProcess;\n        private string _processTitleName;\n        private ProcessStream _processStream;\n\n        private string OriginalTitle => \"Kingdom Save Editor\";\n        public string CurrentVersion { get; } = new DesktopAppIdentity().Version;\n\n        private Window Window => Application.Current.Windows.OfType<Window>().FirstOrDefault(x => x.IsActive);\n\n        public string Title\n        {\n            get\n            {\n                if (_isProcess)\n                    return $\"[P] {_processTitleName} | {OriginalTitle}\";\n\n                return IsFileOpen ? $\"{fileDialogManager.CurrentFileName} | {OriginalTitle}\" : OriginalTitle;\n            }\n        }\n\n        public Visibility UpdateVisibility => _appIdentity.IsMicrosoftStore ?\n            Visibility.Collapsed : Visibility.Visible;\n\n        public bool IsFileOpen => SaveKind != ContentType.Unload && fileDialogManager.IsFileOpen;\n\n        public ContentType SaveKind\n        {\n            get => _saveKind;\n            set\n            {\n                _saveKind = value;\n                ChangeContent(_saveKind);\n            }\n        }\n\n        public HomeViewModel HomeContext { get; }\n        public RelayCommand OpenCommand { get; }\n        public RelayCommand OpenPcsx2Command { get; }\n        public RelayCommand SaveCommand { get; }\n        public RelayCommand SaveAsCommand { get; }\n        public RelayCommand ImportCommand { get; }\n        public RelayCommand ExitCommand { get; }\n        public RelayCommand GetLatestVersionCommand { get; }\n        public RelayCommand OpenLinkCommand { get; }\n        public RelayCommand OpenGitHubIssueLinkCommand { get; }\n\n        public object DataContext\n        {\n            get => dataContext;\n            set\n            {\n                dataContext = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public Action<UserControl> OnControlChanged { get; set; }\n        public IRefreshUi RefreshUi { get; set; }\n        public IOpenStream OpenStream { get; set; }\n        public IWriteToStream WriteToStream { get; set; }\n        public IGetSave GetSave { get; private set; }\n\n        public bool IsAdvancedMode\n        {\n            get => Global.IsAdvancedMode;\n            set\n            {\n                Global.IsAdvancedMode = value;\n                InvokeRefreshUi();\n            }\n        }\n\n        public bool IsUpdateCheckingEnabled\n        {\n            get => updater.IsAutomaticUpdatesEnabled;\n            set\n            {\n                updater.IsAutomaticUpdatesEnabled = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public bool IsAnonymousReporting\n        {\n            get => Global.AnonymousReporting;\n            set\n            {\n                if (value == true)\n                    reporterService.DeleteCookies();\n                Global.AnonymousReporting = value;\n            }\n        }\n\n        public MainWindowViewModel(\n            IFileDialogManager fileDialogManager,\n            IWindowManager windowManager,\n            IAlertMessage alertMessage,\n            IUpdater updater,\n            IAppIdentity appIdentity,\n            ContentFactory contentFactory,\n            HomeViewModel homeContext)\n        {\n            this.fileDialogManager = fileDialogManager;\n            this.windowManager = windowManager;\n            this.alertMessage = alertMessage;\n            this.updater = updater;\n            _appIdentity = appIdentity;\n            this.contentFactory = contentFactory;\n            this.reporterService = ReporterService.Instance;\n            HomeContext = homeContext;\n\n            OpenCommand = new RelayCommand(o => fileDialogManager.Open(stream => Open(stream)));\n            OpenPcsx2Command = new RelayCommand(o => OpenPcsx2(stream => Open(stream)));\n            SaveCommand = new RelayCommand(o =>\n            {\n                CatchException(() =>\n                {\n                    if (_isProcess)\n                        Save(_processStream);\n                    else\n                    {\n                        // Create in-memory back-up to recover disastrous savings\n                        var backupStream = new MemoryStream();\n                        if (File.Exists(fileDialogManager.CurrentFileName))\n                        {\n                            using (var originalStream = File.OpenRead(fileDialogManager.CurrentFileName))\n                                originalStream.CopyTo(backupStream);\n                        }\n\n                        try\n                        {\n                            fileDialogManager.Save(Save);\n                        }\n                        catch\n                        {\n                            // Restore back-up before throwing an error\n                            fileDialogManager.Save(stream => backupStream.SetPosition(0).CopyTo(stream));\n                            throw;\n                        }\n                    }\n                });\n            },\n                x => IsFileOpen || _isProcess);\n            SaveAsCommand = new RelayCommand(o => CatchException(() => fileDialogManager.SaveAs(Save)),\n                x => IsFileOpen || _isProcess);\n            ImportCommand = new RelayCommand(o => CatchException(() =>\n            {\n                MessageBox.Show(\n                    \"This functionality allows you to import a Kingdom Hearts II save of a region over another region.\\n\\n\" +\n                    \"Note that this will not import the whole save but only the known values, therefore some content of \" +\n                    \"your old save will still be present (eg. Gummiship, Journal, Minigames).\");\n\n                new FileDialogManager(windowManager)\n                    .Open(stream =>\n                    {\n                        if (GetSave == null)\n                            throw new Exception(\"The game you decided to operate with is not within the supported game list that supports import transfer.\");\n\n                        switch (TransferService.Transfer(GetSave.GetSave(), stream))\n                        {\n                            case TransferService.Result.Success:\n                                RefreshUi.RefreshUi();\n                                break;\n                            case TransferService.Result.GameNotSupported:\n                                throw new Exception(\"The game you decided to operate with is NOT within the supported game list that supports import transfer.\");\n                            case TransferService.Result.SourceNotCompatible:\n                                throw new Exception(\"The game you selected is different than the save you have currently opened, therefore it is not possible to import it.\");\n                            case TransferService.Result.InternalError:\n                                throw new Exception(\"Oh well, this was not supposed to happen... you might want to report this. Sorry 😅\");\n                        }\n                    });\n            }), x => (IsFileOpen || _isProcess) && IsTransferSupported());\n            ExitCommand = new RelayCommand(x => Window.Close());\n\n            GetLatestVersionCommand = new RelayCommand(x =>\n            {\n                Task.Run(async () =>\n                {\n                    var found = await updater.ForceCheckLastVersionAsync();\n                    if (found == false)\n                    {\n                        Application.Current.Dispatcher.Invoke(() =>\n                            alertMessage.Info(\"You are up to date :)\", \"Check update\"));\n                    }\n                });\n            });\n\n            OpenLinkCommand = new RelayCommand(url => Process.Start(new ProcessStartInfo()\n            {\n                FileName = url as string,\n                UseShellExecute = true\n            }));\n\n            OpenGitHubIssueLinkCommand = new RelayCommand(async url =>\n            {\n                using var client = new HttpClient(new HttpClientHandler\n                {\n                    AllowAutoRedirect = false,\n                    AutomaticDecompression = DecompressionMethods.All,\n                });\n                using var response = await client.GetAsync(url as string, HttpCompletionOption.ResponseHeadersRead);\n                if (IsIssueSectionClosed(response))\n                    MessageBox.Show(\"The bug report section is temporarily closed as some users written toxic comments in it and due to spam.\",\n                        \"Bug report section temporarily closed\", MessageBoxButton.OK, MessageBoxImage.Warning);\n                else\n                    OpenLinkCommand.Execute(url);\n            });\n        }\n\n        private bool IsTransferSupported()\n        {\n            switch (SaveKind)\n            {\n                case ContentType.KingdomHearts2:\n                    return true;\n                default:\n                    return false;\n            }\n        }\n\n        private void Buffered(Stream stream, Action<Stream> call) => Buffered(stream, bufferedStream =>\n        {\n            call(bufferedStream);\n            return true;\n        });\n\n        private T Buffered<T>(Stream stream, Func<Stream, T> call)\n        {\n            const int DefaultBufferLength = 1024 * 1024;\n            var bufferLength = DefaultBufferLength;\n            if (stream.Length > 0 && stream.Length < DefaultBufferLength)\n                bufferLength = (int)stream.Length;\n\n            var bufferedStream = stream is BufferedStream ? (BufferedStream)stream :\n                new BufferedStream(stream, bufferLength);\n\n            var result = call(bufferedStream);\n            if (bufferedStream.CanWrite)\n                bufferedStream.Flush();\n\n            return result;\n        }\n\n        public void Open(string fileName) => CatchException(() =>\n        {\n            fileDialogManager.InjectFileName(fileName, stream => Open(stream));\n        });\n\n        public void OpenPcsx2(Func<Stream, bool> openStream) => CatchException(() =>\n        {\n            var process = new AttachToProcessWindow(\"pcsx2\").WaitForProcess();\n            if (process != null)\n            {\n                var stream = new AttachToPcsx2GameWindow().WaitForGame(process);\n                if (stream != null)\n                    OpenProcessStream(stream, openStream);\n            }\n        });\n\n        public bool Open(Stream stream) => CatchException(() =>\n        {\n            CloseProcessStream();\n\n            try\n            {\n                if (!Buffered(stream, TryOpen))\n                    throw CreateUnsupportedSaveExceptiom();\n\n                InvokeRefreshUi();\n                OnPropertyChanged(nameof(Title));\n                return true;\n            }\n            catch (SaveNotSupportedException ex)\n            {\n                alertMessage.Error(ex);\n            }\n\n            return false;\n        });\n\n        private void Save(Stream stream)\n        {\n            Buffered(stream, WriteToStream.WriteToStream);\n            OnPropertyChanged(nameof(Title));\n        }\n\n        public bool TryOpen(Stream stream) =>\n            TryOpenKh1(stream) ||\n            TryOpenKh2(stream) ||\n            TryOpenKhBbs(stream) ||\n            TryOpenKhDDD(stream) ||\n            TryOpenKhRecom(stream) ||\n            TryOpenKh02(stream) ||\n            TryOpenKh3(stream) ||\n            TryOpenFF7Remake(stream) ||\n            TryOpenPersona3(stream) ||\n            TryOpenPersona5(stream) ||\n            TryOpenArchive(stream);\n\n        private bool Open(IArchiveFactory archiveFactory, Stream stream)\n        {\n            var archive = archiveFactory.Read(stream);\n            stream.Close();\n            return Open(archive);\n        }\n\n        private bool Open(IArchive archive)\n        {\n            var result = windowManager.Push<ArchiveManagerView>(\n                onSetup: window => window.SetArchive(archive, fileDialogManager.CurrentFileName),\n                onSuccess: window => Open(archive, window.SelectedEntry));\n\n            if (result == false)\n            {\n                ChangeContent(ContentType.Unload);\n            }\n\n            return true;\n        }\n\n        private bool Open(IArchive archive, IArchiveEntry archiveEntry)\n        {\n            bool result;\n\n            using (var stream = new MemoryStream(archiveEntry.Data))\n                result = TryOpen(stream);\n\n            if (!result)\n                throw CreateUnsupportedSaveExceptiom();\n\n            // archiveEntry.Name\n            // archiveEntry.DateCreated\n            // archiveEntry.DateModified\n\n            WriteToStream = new ArchiveWriteToStream(WriteToStream, archive, archiveEntry);\n\n            return result;\n        }\n\n        public bool TryOpenArchive(Stream stream)\n        {\n            if (!ArchiveFactories.TryGetFactory(stream, out var archiveFactory))\n                return false;\n\n            stream.Position = 0;\n            return Open(archiveFactory, stream);\n        }\n\n        public bool TryOpenKh1(Stream stream) => TryOpen(SaveKh1.IsValid, stream, ContentType.KingdomHearts);\n        public bool TryOpenKh2(Stream stream) => TryOpen(SaveKh2.IsValid, stream, ContentType.KingdomHearts2);\n        public bool TryOpenKhBbs(Stream stream) => TryOpen(SaveKhBbs.IsValid, stream, ContentType.KingdomHeartsBbs);\n        public bool TryOpenKhDDD(Stream stream) => TryOpen(SaveKhDDD.IsValid, stream, ContentType.KingdomHeartsDDD);\n        public bool TryOpenKhRecom(Stream stream) => TryOpen(SaveKhRecom.IsValid, stream, ContentType.KingdomHeartsRecom);\n        public bool TryOpenKh02(Stream stream) => TryOpen(SaveKh02.IsValid, stream, ContentType.KingdomHearts02);\n        public bool TryOpenKh3(Stream stream) => TryOpen(SaveKh3.IsValid, stream, ContentType.KingdomHearts3);\n        public bool TryOpenFF7Remake(Stream stream) => TryOpen(SaveFf7Remake.IsValid, stream, ContentType.FinalFantasy7Remake);\n        public bool TryOpenPersona3(Stream stream) => TryOpen(SavePersona3.IsValid, stream, ContentType.Persona3);\n        public bool TryOpenPersona5(Stream stream) => TryOpen(SavePersona5.IsValid, stream, ContentType.Persona5);\n\n        public bool TryOpen(Func<Stream, bool> prediate, Stream stream, ContentType contentType)\n        {\n            if (!prediate(stream))\n                return false;\n\n            _saveKind = contentType;\n            ChangeContent(contentType, stream);\n            return true;\n        }\n\n        private void OpenProcessStream(ProcessStream processStream, Func<Stream, bool> openStream)\n        {\n            if (openStream(processStream))\n            {\n                _isProcess = true;\n                _processStream = processStream;\n                _processTitleName = $\"PCSX2@{processStream.BaseAddress:X08}\";\n\n                OnPropertyChanged(nameof(Title));\n            }\n        }\n\n        private void CloseProcessStream()\n        {\n            if (!_isProcess)\n                return;\n\n            _isProcess = false;\n            _processTitleName = string.Empty;\n            _processStream?.Dispose();\n            _processStream = null;\n\n            OnPropertyChanged(nameof(Title));\n        }\n\n        public static void CatchException(Action action)\n        {\n            try\n            {\n                action();\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, \"Error\", MessageBoxButton.OK, MessageBoxImage.Error);\n            }\n        }\n\n        public static T CatchException<T>(Func<T> action)\n        {\n            try\n            {\n                return action();\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message, \"Error\", MessageBoxButton.OK, MessageBoxImage.Error);\n                return default(T);\n            }\n        }\n\n        private static Exception CreateUnsupportedSaveExceptiom() =>\n            new SaveNotSupportedException(\"The specified save game is not recognized.\\nBe sure to have the last version or that the save is decrypted or supported.\");\n\n        public void InvokeRefreshUi() => RefreshUi?.RefreshUi();\n\n        private void ChangeContent(ContentType contentType, Stream stream = null)\n        {\n            try\n            {\n                reporterService.SendGameName(contentType.ToString());\n                contentFactory.LoadIconPack(contentType);\n                var contentResponse = contentFactory.Factory(contentType);\n\n                RefreshUi = contentResponse.RefreshUi;\n                WriteToStream = contentResponse.WriteToStream;\n                GetSave = contentResponse.GetSave;\n\n                if (stream != null)\n                    contentResponse.OpenStream.OpenStream(stream);\n\n                OnPropertyChanged(nameof(SaveCommand));\n                OnPropertyChanged(nameof(SaveAsCommand));\n                OnPropertyChanged(nameof(ImportCommand));\n                OnControlChanged?.Invoke(contentResponse.Control);\n            }\n            catch (Exception ex)\n            {\n                ReporterService.Instance.SendCrashReport(ex);\n                MessageBox.Show(\n                    $\"An unhandled error has occurred:\\n{ex.Message}\\n\\n{ex.StackTrace}\",\n                    \"Fatal error\", MessageBoxButton.OK, MessageBoxImage.Error);\n            }\n        }\n\n        private static bool IsIssueSectionClosed(HttpResponseMessage response) =>\n            (int)response.StatusCode >= 300 && (int)response.StatusCode < 400 &&\n            response.Headers.TryGetValues(\"Location\", out var location) &&\n            location.Any() && location.First().EndsWith(\"/pulls\");\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/ViewModels/PatronViewModel.cs",
    "content": "using KHSave.SaveEditor.Models;\nusing System;\nusing System.Net.Cache;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\n\nnamespace KHSave.SaveEditor.ViewModels\n{\n    public class PatronViewModel\n    {\n        public PatronViewModel(PatronModel patron)\n        {\n            Brush = GetColor(patron.Color);\n            Name = patron.Name;\n            //ImageUrl = patron.PhotoUrl;\n            //BadgeUrl = patron.BadgeUrl;\n            ProfileUrl = patron.ProfileUrl;\n\n            if (!IsImageEmpty || !IsBadgeEmpty)\n            {\n                ImageSource = new BitmapImage();\n                ImageSource.BeginInit();\n\n                ImageSource.DecodePixelWidth = 64; // Arbitrary, does not respect DPI\n                ImageSource.CacheOption = BitmapCacheOption.OnDemand;\n                ImageSource.CreateOptions = BitmapCreateOptions.DelayCreation;\n                ImageSource.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable);\n                ImageSource.UriSource = new Uri(IsImageEmpty ? BadgeUrl : ImageUrl);\n\n                ImageSource.EndInit();\n            }\n\n            BorderColor = IsStandardBadge ? new SolidColorBrush(Colors.Black) : Brush;\n        }\n\n        public Brush Brush { get; }\n        public Brush BorderColor { get; }\n        public string Name { get; }\n        public string ImageUrl { get; }\n        public string BadgeUrl { get; }\n        public string ProfileUrl { get; }\n        public BitmapImage ImageSource { get; }\n\n        public Visibility ImageVisibility => IsImageEmpty ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility BadgeVisibility => IsBadgeEmpty ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility BorderVisibility => IsBadgeEmpty ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility NormalLabelVisibility => IsProfileUrlEmpty ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility ProfileLinkVisibility => IsProfileUrlEmpty ? Visibility.Collapsed : Visibility.Visible;\n\n        private bool IsStandardBadge => IsImageEmpty && IsBadgeEmpty;\n        private bool IsImageEmpty => string.IsNullOrWhiteSpace(ImageUrl);\n        private bool IsBadgeEmpty => string.IsNullOrWhiteSpace(BadgeUrl);\n        private bool IsProfileUrlEmpty => string.IsNullOrWhiteSpace(ProfileUrl);\n\n        private static SolidColorBrush GetColor(string color)\n        {\n            if (string.IsNullOrWhiteSpace(color) ||\n                color[0] != '#')\n                return new SolidColorBrush(Colors.Red);\n\n            return new BrushConverter().ConvertFromString(color) as SolidColorBrush;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/AttachToPcsx2GameWindow.xaml",
    "content": "﻿<Window x:Class=\"KHSave.SaveEditor.Views.AttachToPcsx2GameWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:KHSave.SaveEditor.Views\"\n        mc:Ignorable=\"d\"\n        WindowStartupLocation=\"CenterOwner\"\n        Title=\"Connecting to PCSX2 game\" Width=\"300\" WindowStyle=\"ToolWindow\"\n        SizeToContent=\"Height\">\n    <Grid Margin=\"10\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"5\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"10\"/>\n            <RowDefinition Height=\"22\"/>\n        </Grid.RowDefinitions>\n        <TextBlock Grid.Row=\"0\" TextWrapping=\"Wrap\"\n            Text=\"Waiting for PCSX2 to boot a supported game...\"/>\n        <TextBlock Grid.Row=\"2\" TextWrapping=\"Wrap\"\n            Text=\"You can cancel this operation at any time.\"/>\n        <ProgressBar Grid.Row=\"4\" IsIndeterminate=\"True\"/>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/AttachToPcsx2GameWindow.xaml.cs",
    "content": "using KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Services;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Views\n{\n    /// <summary>\n    /// Interaction logic for AttachToPcsx2GameWindow.xaml\n    /// </summary>\n    public partial class AttachToPcsx2GameWindow : Window\n    {\n        private ProcessStream _foundStream;\n\n        public AttachToPcsx2GameWindow()\n        {\n            InitializeComponent();\n        }\n\n        public ProcessStream WaitForGame(Process process)\n        {\n            using (var cancellationTokenSource = new CancellationTokenSource())\n            {\n                var task = Task.Run(async () =>\n                {\n                    _foundStream = await Pcsx2MemoryService.CreateStreamFromPcsx2Process(process, cancellationTokenSource.Token);\n\n                    // If the search ends, ask to close the current window dialog\n                    Application.Current.Dispatcher.Invoke(() =>\n                    {\n                        if (_foundStream == null && !cancellationTokenSource.Token.IsCancellationRequested)\n                        {\n                            MessageBox.Show(\n                                \"The loaded game in PCSX2 is not supported.\",\n                                \"Error\",\n                                MessageBoxButton.OK,\n                                MessageBoxImage.Error);\n                        }\n                        Close();\n                    });\n\n                }, cancellationTokenSource.Token);\n\n                ShowDialog();\n\n                // If the search is still running, ask to it to terminate ASAP.\n                cancellationTokenSource.Cancel();\n            }\n\n            return _foundStream;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/AttachToProcessWindow.xaml",
    "content": "﻿<Window x:Class=\"KHSave.SaveEditor.Views.AttachToProcessWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:KHSave.SaveEditor.Views\"\n        mc:Ignorable=\"d\"\n        WindowStartupLocation=\"CenterOwner\"\n        Title=\"Attach to process\" Width=\"300\" WindowStyle=\"ToolWindow\"\n        SizeToContent=\"Height\">\n    <Grid Margin=\"10\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"5\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"10\"/>\n            <RowDefinition Height=\"22\"/>\n        </Grid.RowDefinitions>\n        <TextBlock Grid.Row=\"0\" TextWrapping=\"Wrap\"\n            Text=\"{Binding ProcessName, StringFormat=Attaching to {0}...}\"/>\n        <TextBlock Grid.Row=\"2\" TextWrapping=\"Wrap\"\n            Text=\"You can cancel this operation at any time.\"/>\n        <ProgressBar Grid.Row=\"4\" IsIndeterminate=\"True\"/>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/AttachToProcessWindow.xaml.cs",
    "content": "using System.Diagnostics;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Views\n{\n    /// <summary>\n    /// Interaction logic for AttachToProcessWindow.xaml\n    /// </summary>\n    public partial class AttachToProcessWindow : Window\n    {\n        private Process _foundProcess;\n\n        public AttachToProcessWindow(string processName)\n        {\n            InitializeComponent();\n            DataContext = this;\n\n            _foundProcess = null;\n            ProcessName = processName;\n        }\n\n        public string ProcessName { get; }\n\n        public Process WaitForProcess()\n        {\n            // There might be a chance that the process is already there, so do not bother\n            // to create the window for that.\n            var process = GetFirstProcessOrDefault(ProcessName);\n            if (process != null)\n            {\n                Close();\n                return process;\n            }\n\n            // If not found, create a waiting dialog to give some feedback to the user.\n            using (var cancellationTokenSource = new CancellationTokenSource())\n            {\n                var task = Task.Run(async () =>\n                {\n                    await ProcessSearchAsync(cancellationTokenSource.Token);\n\n                    // If the search ends, ask to close the current window dialog\n                    Application.Current.Dispatcher.Invoke(() => Close());\n\n                }, cancellationTokenSource.Token);\n\n                ShowDialog();\n\n                // If the search is still running, ask to it to terminate ASAP.\n                cancellationTokenSource.Cancel();\n            }\n\n            return _foundProcess;\n        }\n\n        private async Task ProcessSearchAsync(CancellationToken token)\n        {\n            const int Delay = 100;\n            while (!token.IsCancellationRequested)\n            {\n                var processes = Process.GetProcessesByName(ProcessName);\n                if (processes.Length > 0)\n                {\n                    _foundProcess = processes[0];\n                    return;\n                }\n\n                await Task.Delay(Delay);\n            }\n        }\n\n        private static Process GetFirstProcessOrDefault(string processName)\n        {\n            var processes = Process.GetProcessesByName(processName);\n            return processes.Length > 0 ? processes[0] : null;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/HomeView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Views.HomeView\"\r\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Views\"\r\n             mc:Ignorable=\"d\" \r\n             d:DesignHeight=\"450\" d:DesignWidth=\"500\">\r\n    <UserControl.Resources>\r\n        <SolidColorBrush x:Key=\"textForeground\" Color=\"#F1F1F1\" />\r\n        <SolidColorBrush x:Key=\"textHyperlink\" Color=\"#569CD6\" />\r\n        <Thickness x:Key=\"labelMargin\" Left=\"10\" Top=\"0\" Right=\"0\" Bottom=\"3\" />\r\n\r\n        <LinearGradientBrush x:Key=\"ProgressBarIndicatorAnimatedFill\" StartPoint=\"0,0\" EndPoint=\"1,0\">\r\n            <LinearGradientBrush.GradientStops>\r\n                <GradientStopCollection>\r\n                    <GradientStop Color=\"#000000FF\" Offset=\"0\" />\r\n                    <GradientStop Color=\"#604040FF\" Offset=\"0.4\" />\r\n                    <GradientStop Color=\"#604040FF\" Offset=\"0.6\" />\r\n                    <GradientStop Color=\"#000000FF\" Offset=\"1\" />\r\n                </GradientStopCollection>\r\n            </LinearGradientBrush.GradientStops>\r\n        </LinearGradientBrush>\r\n        \r\n        <Style x:Key=\"{x:Type ProgressBar}\" TargetType=\"{x:Type ProgressBar}\">\r\n            <Setter Property=\"Template\">\r\n                <Setter.Value>\r\n                    <ControlTemplate TargetType=\"{x:Type ProgressBar}\">\r\n                        <Grid MinHeight=\"8\" MinWidth=\"200\" Background=\"{TemplateBinding Background}\">\r\n                            <VisualStateManager.VisualStateGroups>\r\n                                <VisualStateGroup x:Name=\"CommonStates\">\r\n                                    <VisualState x:Name=\"Determinate\" />\r\n                                    <VisualState x:Name=\"Indeterminate\">\r\n                                        <Storyboard>\r\n                                            <ObjectAnimationUsingKeyFrames Duration=\"00:00:00\"\r\n                                                 Storyboard.TargetName=\"PART_Indicator\"\r\n                                                 Storyboard.TargetProperty=\"Background\">\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"00:00:00\">\r\n                                                    <DiscreteObjectKeyFrame.Value>\r\n                                                        <SolidColorBrush>Transparent</SolidColorBrush>\r\n                                                    </DiscreteObjectKeyFrame.Value>\r\n                                                </DiscreteObjectKeyFrame>\r\n                                            </ObjectAnimationUsingKeyFrames>\r\n\r\n                                        </Storyboard>\r\n                                    </VisualState>\r\n                                </VisualStateGroup>\r\n                            </VisualStateManager.VisualStateGroups>\r\n                            <Border x:Name=\"PART_Track\" CornerRadius=\"2\" BorderThickness=\"1\">\r\n                                <Border.BorderBrush>\r\n                                    <SolidColorBrush Color=\"#d0d0d0\" />\r\n                                </Border.BorderBrush>\r\n                            </Border>\r\n                            <Border x:Name=\"PART_Indicator\"\r\n                                CornerRadius=\"2\"\r\n                                BorderThickness=\"0\"\r\n                                HorizontalAlignment=\"Left\"\r\n                                Background=\"{TemplateBinding Foreground}\"\r\n                                Margin=\"1,1,1,1\">\r\n                                <Grid ClipToBounds=\"True\" x:Name=\"Animation\">\r\n                                    <Rectangle x:Name=\"PART_GlowRect\"\r\n                                         Width=\"100\"\r\n                                         HorizontalAlignment=\"Left\"\r\n                                         Fill=\"{StaticResource ProgressBarIndicatorAnimatedFill}\"\r\n                                         Margin=\"-100,0,0,0\" />\r\n                                </Grid>\r\n                            </Border>\r\n                        </Grid>\r\n                    </ControlTemplate>\r\n                </Setter.Value>\r\n            </Setter>\r\n            <Setter Property=\"Background\">\r\n                <Setter.Value>\r\n                    <LinearGradientBrush EndPoint=\"1,1\" StartPoint=\"0,0\">\r\n                        <GradientStop Color=\"#d1d4d8\" Offset=\"0\" />\r\n                        <GradientStop Color=\"#e1e4e8\" Offset=\"1\" />\r\n                    </LinearGradientBrush>\r\n                </Setter.Value>\r\n            </Setter>\r\n            <Setter Property=\"Foreground\">\r\n                <Setter.Value>\r\n                    <LinearGradientBrush EndPoint=\"1,1\" StartPoint=\"0,0\">\r\n                        <GradientStop Color=\"#012f7b\" Offset=\"0\" />\r\n                        <GradientStop Color=\"#5ccaf6\" Offset=\"1\" />\r\n                    </LinearGradientBrush>\r\n                </Setter.Value>\r\n            </Setter>\r\n        </Style>\r\n    </UserControl.Resources>\r\n    \r\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\r\n        <StackPanel>\r\n            <Label>No save game is currently load.</Label>\r\n            <StackPanel Name=\"messageList\"/>\r\n            <Separator Margin=\"5\"/>\r\n            <Label>Kingdom Save Editor currently supports the following games:</Label>\r\n            <StackPanel Margin=\"20 0 0 0\">\r\n                <TextBlock>Kingdom Hearts (all versions)</TextBlock>\r\n                <TextBlock>Kingdom Hearts II: EU, US, Final Mix (PS2,PS3,PS4,PC)</TextBlock>\r\n                <TextBlock>Kingdom Hearts Re: Chain of Memories (PS2,PS4,PC)</TextBlock>\r\n                <TextBlock>Kingdom Hearts: Birth By Sleep Final Mix (PSP,PS3,PS4,PC)</TextBlock>\r\n                <TextBlock>Kingdom Hearts: Dream Drop Distance (3DS,PC)</TextBlock>\r\n                <TextBlock>Kingdom Hearts 0.2 (PS4)</TextBlock>\r\n                <TextBlock>Kingdom Hearts III + Re:Mind (PS4)</TextBlock>\r\n                <TextBlock>Final Fantasy VII Remake</TextBlock>\r\n                <TextBlock>Persona 5 and Persona 5 Royal</TextBlock>\r\n            </StackPanel>\r\n            <Separator Margin=\"5\"/>\r\n            <Grid Margin=\"{StaticResource labelMargin}\">\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"Auto\"/>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                </Grid.ColumnDefinitions>\r\n                <Image Grid.Column=\"0\" Margin=\"0 0 5 0\" Width=\"32\"\r\n                    Source=\"{StaticResource FundIcon}\"/>\r\n                <StackPanel Grid.Column=\"1\">\r\n                    <TextBlock Grid.Column=\"1\" TextWrapping=\"Wrap\"\r\n                        Text=\"Fund me to be featured below and help me to improve all my projects!\"/>\r\n\r\n                    <TextBlock Foreground=\"{StaticResource textHyperlink}\">\r\n                    <Hyperlink\r\n                        NavigateUri=\"{Binding FundLink}\"\r\n                        RequestNavigate=\"Hyperlink_RequestNavigate\"\r\n                        TextDecorations=\"{x:Null}\">\r\n                        Click to prepare to fund me today!\r\n                    </Hyperlink>\r\n                    </TextBlock>\r\n                </StackPanel>\r\n            </Grid>\r\n            <StackPanel Margin=\"{StaticResource labelMargin}\">\r\n                <TextBlock Text=\"Funders:\"/>\r\n                <WrapPanel Name=\"patronList\"/>\r\n            </StackPanel>\r\n            <StackPanel Margin=\"5\">\r\n                <TextBlock\r\n                    Margin=\"{StaticResource labelMargin}\"\r\n                    TextWrapping=\"Wrap\"\r\n                    Text=\"{Binding SponsorHeaderInfo}\"/>\r\n                <ProgressBar\r\n                    Visibility=\"Collapsed\"\r\n                    Margin=\"0 0 0 3\"\r\n                    Height=\"10\"\n                    Minimum=\"{Binding SponsorStartGoal}\"\r\n                    Maximum=\"{Binding SponsorEndGoal}\"\r\n                    Value=\"{Binding SponsorCount}\"/>\r\n                <TextBlock\r\n                    Margin=\"{StaticResource labelMargin}\"\r\n                    TextWrapping=\"Wrap\"\r\n                    Text=\"{Binding SponsorGoalDetails}\"/>\r\n            </StackPanel>\r\n        </StackPanel>\r\n    </ScrollViewer>\r\n</UserControl>\r\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/HomeView.xaml.cs",
    "content": "using KHSave.SaveEditor.Services;\nusing KHSave.SaveEditor.ViewModels;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Views\n{\n    /// <summary>\n    /// Interaction logic for UnloadedView.xaml\n    /// </summary>\n    public partial class HomeView : UserControl\n    {\n        public HomeView()\n        {\n            InitializeComponent();\n        }\n\n        private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)\n        {\n            Process.Start(new ProcessStartInfo()\n            {\n                FileName = e.Uri.AbsoluteUri,\n                UseShellExecute = true\n            });\n            e.Handled = true;\n        }\n\n        protected override void OnInitialized(EventArgs e)\n        {\n            base.OnInitialized(e);\n\n            patronList.Children.Add(new Label()\n            {\n                Content = \"Fetching the list of funders from the internet...\"\n            });\n\n#if !DEBUG\n            Task.Run(FetchAndPopulateSponsors());\n#endif\n        }\n\n        private Func<Task> FetchAndPopulateSponsors()\n        {\n            return async () =>\n            {\n                try\n                {\n                    var patreonInfo = await new PatreonService(new DesktopAppIdentity()).GetPatreonInfo();\n                    Application.Current.Dispatcher.Invoke(() => SetServerResponse(patreonInfo));\n                }\n                catch\n                {\n                    Application.Current.Dispatcher.Invoke(() =>\n                    {\n                        patronList.Children.Clear();\n                        patronList.Children.Add(new Label()\n                        {\n                            Content = \"Unable to retrieve the list of funders form internet.\"\n                        });\n                    });\n                }\n            };\n        }\n\n        private void SetServerResponse(Models.PatreonInfo patreonInfo)\n        {\n            var vm = DataContext as HomeViewModel;\n            SetFundLink(vm, patreonInfo.PatreonUrl);\n            SetSponsorList(vm, patreonInfo.Patrons);\n            SetSponsorshipInfo(vm, patreonInfo.SponsorshipInfo);\n            SetMessageList(vm, patreonInfo.Messages);\n        }\n\n        private void SetFundLink(HomeViewModel vm, string fundUrl) =>\n            vm.FundLink = fundUrl;\n\n        private void SetSponsorList(HomeViewModel vm, IEnumerable<Models.PatronModel> sponsors)\n        {\n            if (sponsors == null)\n                return;\n\n            var patronViews = sponsors\n                .Select((patron, i) =>\n                {\n                    return new PatronView((i + 1) / 32.0, patron.Glow)\n                    {\n                        DataContext = new PatronViewModel(patron)\n                    };\n                })\n                .Where(x => x != null);\n\n            patronList.Children.Clear();\n            foreach (var patronView in patronViews)\n                patronList.Children.Add(patronView);\n        }\n\n        private void SetSponsorshipInfo(HomeViewModel vm, Models.SponsorshipInfo info)\n        {\n            if (info == null)\n                return;\n\n            vm.SponsorHeaderInfo = info.Title;\n            vm.SponsorGoalDetails = info.Description;\n            vm.SponsorStartGoal = info.StartGoal;\n            vm.SponsorEndGoal = info.EndGoal;\n            vm.SponsorCount = info.Count;\n        }\n\n        private void SetMessageList(HomeViewModel vm, IEnumerable<Models.ServiceMessage> messages)\n        {\n            if (messages == null)\n                return;\n\n            var identity = new DesktopAppIdentity();\n            var denyDownloads = identity.IsMicrosoftStore;\n\n            messageList.Children.Clear();\n            foreach (var message in messages.Where(x => denyDownloads == false || IsDownloadNewVersion(x) == false))\n            {\n                messageList.Children.Add(new Separator\n                {\n                    Margin = new Thickness(5)\n                });\n\n                messageList.Children.Add(new ServiceMessageView\n                {\n                    Margin = new Thickness(10, 0, 10, 0),\n                    Text = message.Text,\n                    Title = message.Title,\n                    Url = string.IsNullOrEmpty(message.Url) ? \"\" : message.Url,\n                    MyFontSize = message.FontSize <= 0 ? 12 : message.FontSize,\n                    IsBold = message.IsBold,\n                    IsItalic = message.IsItalic,\n                });\n            }\n        }\n\n        private static bool IsDownloadNewVersion(Models.ServiceMessage message)\n        {\n            if (message.Title == \"Download new version\")\n                return true;\n            if (message.Url.StartsWith(\"https://github.com/Xeeynamo/KH3SaveEditor/releases\"))\n                return true;\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/MainWindow.xaml",
    "content": "<Window x:Class=\"KHSave.SaveEditor.Views.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:KHSave.SaveEditor.Views\"\n        xmlns:kh2=\"clr-namespace:KHSave.SaveEditor.Kh2;assembly=KHSave.SaveEditor.Kh2\"\n        xmlns:khRecom=\"clr-namespace:KHSave.SaveEditor.KhRecom;assembly=KHSave.SaveEditor.KhRecom\"\n        xmlns:kh02=\"clr-namespace:KHSave.SaveEditor.Kh02;assembly=KHSave.SaveEditor.Kh02\"\n        xmlns:kh3=\"clr-namespace:KHSave.SaveEditor.Kh3;assembly=KHSave.SaveEditor.Kh3\"\n        xmlns:ext=\"clr-namespace:Xe.Tools.Wpf.Extensions;assembly=Xe.Tools.Wpf\"\n        mc:Ignorable=\"d\"\n        Title=\"{Binding Title}\" Height=\"540\" Width=\"580\" Loaded=\"Window_Loaded\"\n        Drop=\"Window_Drop\" AllowDrop=\"True\">\n    <Window.InputBindings>\n        <KeyBinding Key=\"O\" Modifiers=\"Control\" Command=\"{Binding OpenCommand}\"/>\n        <KeyBinding Key=\"S\" Modifiers=\"Control\" Command=\"{Binding SaveCommand}\"/>\n        <KeyBinding Key=\"S\" Modifiers=\"Control+Shift\" Command=\"{Binding SaveAsCommand}\"/>\n    </Window.InputBindings>\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n        <Menu Grid.Row=\"0\">\n            <MenuItem Header=\"_File\">\n                <MenuItem Header=\"_Open...\" Command=\"{Binding OpenCommand}\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource FolderOpen_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n                <MenuItem Header=\"_Attach to PCSX2...\" Command=\"{Binding OpenPcsx2Command}\">\n                </MenuItem>\n                <MenuItem Header=\"_Save\" Command=\"{Binding SaveCommand}\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource Save_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n                <MenuItem Header=\"Save _as...\" Command=\"{Binding SaveAsCommand}\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource SaveAs_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n                <Separator/>\n                <MenuItem Header=\"Import from different region/edition...\" Command=\"{Binding ImportCommand}\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource Import_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n                <Separator/>\n                <MenuItem Header=\"E_xit\" Command=\"{Binding ExitCommand}\"/>\n            </MenuItem>\n            <MenuItem Header=\"_Options\">\n                <CheckBox\n                    Content=\"_Advanced mode\"\n                    IsChecked=\"{Binding IsAdvancedMode}\"/>\n                <CheckBox\n                    Content=\"Automatic _Update check\"\n                    IsChecked=\"{Binding IsUpdateCheckingEnabled}\"/>\n                <CheckBox\n                    Content=\"Anonymous reporting\"\n                    IsChecked=\"{Binding IsAnonymousReporting}\"/>\n            </MenuItem>\n            <MenuItem Header=\"_Info\">\n                <MenuItem IsEnabled=\"False\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource UIAbout_16x}\"/>\n                    </MenuItem.Icon>\n                    <MenuItem.Header>\n                        <TextBlock Foreground=\"Black\">\n                            <Run Text=\"Version: \"/>\n                            <Run Text=\"{Binding CurrentVersion, Mode=OneTime}\"/>\n                        </TextBlock>\n                    </MenuItem.Header>\n                </MenuItem>\n                <Separator/>\n                <MenuItem\n                    Header=\"Get _latest version\"\n                    Command=\"{Binding GetLatestVersionCommand}\"\n                    Visibility=\"{Binding UpdateVisibility}\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource Download_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n                <MenuItem Header=\"Go to Home Page\" Command=\"{Binding OpenLinkCommand}\"\n                    CommandParameter=\"https://kingdomsaveeditor.xee.dev\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource WebURL_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n                <MenuItem Header=\"Get from Microsoft Store\" Command=\"{Binding OpenLinkCommand}\"\n                    CommandParameter=\"https://www.microsoft.com/store/productId/9NV4D090M1XD\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource WebURL_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n                <MenuItem Header=\"Get the Source Code\" Command=\"{Binding OpenLinkCommand}\"\n                    CommandParameter=\"https://github.com/Xeeynamo/KingdomSaveEditor\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource WebURL_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n                <MenuItem Header=\"Report bug or missing features\" Command=\"{Binding OpenGitHubIssueLinkCommand}\"\n                    CommandParameter=\"https://github.com/Xeeynamo/KingdomSaveEditor/issues\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource WebURL_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n                <MenuItem Header=\"Join Discord server\" Command=\"{Binding OpenLinkCommand}\"\n                    CommandParameter=\"https://kse-discord.xee.dev\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource WebURL_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n                <MenuItem Header=\"Read privacy policy\" Command=\"{Binding OpenLinkCommand}\"\n                    CommandParameter=\"https://kingdomsaveeditor.xee.dev/#privacy\">\n                    <MenuItem.Icon>\n                        <Image Source=\"{StaticResource WebURL_16x}\"/>\n                    </MenuItem.Icon>\n                </MenuItem>\n            </MenuItem>\n        </Menu>\n\n        <Grid x:Name=\"content\" Grid.Row=\"1\" DataContext=\"{Binding DataContext}\"/>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/MainWindow.xaml.cs",
    "content": "using KHSave.SaveEditor.Interfaces;\nusing KHSave.SaveEditor.Services;\nusing KHSave.SaveEditor.ViewModels;\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Views\n{\n    /// <summary>\n    /// Interaction logic for MainWindow.xaml\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        private readonly MainWindowViewModel context;\n        private readonly IUpdater updater;\n\n        public MainWindow(\n            IWindowManager windowManager,\n            IApplicationStartup applicationDebug,\n            IUpdater updater,\n            MainWindowViewModel vm)\n        {\n            InitializeComponent();\n            windowManager.RootWindow = this;\n            DataContext = context = vm;\n\n            context.OnControlChanged = control =>\n            {\n                content.Children.Clear();\n                content.Children.Add(control);\n            };\n            context.SaveKind = ContentType.Unload;\n\n            if (!string.IsNullOrEmpty(applicationDebug.StartupFileName) &&\n                File.Exists(applicationDebug.StartupFileName))\n                context.Open(applicationDebug.StartupFileName);\n\n            this.updater = updater;\n        }\n\n        private void Window_Loaded(object sender, EventArgs e)\n        {\n            Task.Run(() => updater.AutomaticallyCheckLastVersionAsync());\n        }\n\n        private void Window_Drop(object sender, DragEventArgs e)\n        {\n            if (e.Data.GetDataPresent(DataFormats.FileDrop))\n            {\n                var files = e.Data.GetData(DataFormats.FileDrop) as string[];\n                if (files?.Length > 0)\n                {\n                    context.Open(files[0]);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/PatronView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Views.PatronView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"32\" d:DesignWidth=\"80\" Loaded=\"UserControl_Loaded\">\n    <Grid Margin=\"3 3 6 3\" Height=\"24\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n        <Ellipse\n            Margin=\"0 0 3 0\"\n            Width=\"{Binding RelativeSource={RelativeSource Self}, Path=Parent.ActualHeight}\"\n            Fill=\"{Binding Brush}\"/>\n        <Ellipse\n            Margin=\"0 0 3 0\"\n            Visibility=\"{Binding ImageVisibility}\"\n            Width=\"{Binding RelativeSource={RelativeSource Self}, Path=Parent.ActualHeight}\">\n            <Ellipse.Fill>\n                <ImageBrush Stretch=\"Uniform\" ImageSource=\"{Binding ImageSource}\"/>\n            </Ellipse.Fill>\n        </Ellipse>\n        <Rectangle\n            Margin=\"0 0 3 0\"\n            Visibility=\"{Binding BadgeVisibility}\"\n            Width=\"{Binding RelativeSource={RelativeSource Self}, Path=Parent.ActualHeight}\">\n            <Rectangle.Fill>\n                <ImageBrush Stretch=\"Uniform\" ImageSource=\"{Binding ImageSource}\"/>\n            </Rectangle.Fill>\n        </Rectangle>\n        <Ellipse\n            x:Name=\"lightGlow\"\n            Opacity=\"0\"\n            Margin=\"0 0 3 0\"\n            Width=\"{Binding RelativeSource={RelativeSource Self}, Path=Parent.ActualHeight}\"\n            >\n            <Ellipse.Fill>\n                <RadialGradientBrush>\n                    <GradientStop Color=\"#4FFFFFFF\"/>\n                </RadialGradientBrush>\n            </Ellipse.Fill>\n        </Ellipse>\n        <Ellipse\n            Margin=\"0 0 3 0\"\n            Visibility=\"{Binding BorderVisibility}\"\n            Width=\"{Binding RelativeSource={RelativeSource Self}, Path=Parent.ActualHeight}\" Stroke=\"{Binding BorderColor}\">\n            <Ellipse.Effect>\n                <DropShadowEffect x:Name=\"glowEffect\" ShadowDepth=\"0\" Color=\"Black\" Opacity=\"0\" BlurRadius=\"3\"/>\n            </Ellipse.Effect>\n        </Ellipse>\n\n        <TextBlock Visibility=\"{Binding NormalLabelVisibility}\" Grid.Column=\"1\" Text=\"{Binding Name}\" VerticalAlignment=\"Center\"/>\n\n        <TextBlock Visibility=\"{Binding ProfileLinkVisibility}\" Grid.Column=\"1\" Foreground=\"#569CD6\" VerticalAlignment=\"Center\">\n            <Hyperlink\n                NavigateUri=\"{Binding ProfileUrl}\"\n                RequestNavigate=\"Hyperlink_RequestNavigate\"\n                TextDecorations=\"{x:Null}\">\n                <TextBlock Text=\"{Binding Name}\"/>\n            </Hyperlink>\n        </TextBlock>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/PatronView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation;\nusing System.Windows.Media.Effects;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Views\n{\n    /// <summary>\n    /// Interaction logic for PatronView.xaml\n    /// </summary>\n    public partial class PatronView : UserControl\n    {\n        private readonly double remainHiddenSeconds;\n        private readonly bool glow;\n\n        public PatronView() :\n            this(0.0, false)\n        { }\n\n        public PatronView(double remainHiddenSeconds, bool glow)\n        {\n            InitializeComponent();\n            this.remainHiddenSeconds = remainHiddenSeconds;\n            this.glow = glow;\n            Opacity = 0.0;\n        }\n\n        private void UserControl_Loaded(object sender, RoutedEventArgs e)\n        {\n            if (glow)\n            {\n                glowEffect.BeginAnimation(DropShadowEffect.OpacityProperty, new DoubleAnimation\n                {\n                    From = 0.0,\n                    To = 1.0,\n                    EasingFunction = new CircleEase(),\n                    Duration = new Duration(TimeSpan.FromSeconds(1)),\n                    RepeatBehavior = RepeatBehavior.Forever,\n                    AutoReverse = true\n                });\n\n                lightGlow.BeginAnimation(Ellipse.OpacityProperty, new DoubleAnimation\n                {\n                    From = 0.0,\n                    To = 1.0,\n                    EasingFunction = new CircleEase(),\n                    Duration = new Duration(TimeSpan.FromSeconds(1)),\n                    RepeatBehavior = RepeatBehavior.Forever,\n                    AutoReverse = true\n                });\n            }\n\n            BeginAnimation(OpacityProperty, new DoubleAnimation\n            {\n                From = 0.0,\n                To = 1.0,\n                EasingFunction = new CubicEase(),\n                Duration = new Duration(TimeSpan.FromSeconds(0.5 + Math.Sqrt(remainHiddenSeconds / 2.0))),\n                BeginTime = TimeSpan.FromSeconds(remainHiddenSeconds)\n            });\n        }\n\n        private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)\n        {\n            Process.Start(new ProcessStartInfo()\n            {\n                FileName = e.Uri.AbsoluteUri,\n                UseShellExecute = true\n            });\n            e.Handled = true;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/ServiceMessageView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Views.ServiceMessageView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <UserControl.Resources>\n        <SolidColorBrush x:Key=\"textForeground\" Color=\"#F1F1F1\" />\n        <SolidColorBrush x:Key=\"textHyperlink\" Color=\"#569CD6\" />\n        <Thickness x:Key=\"labelMargin\" Left=\"10\" Top=\"0\" Right=\"0\" Bottom=\"3\" />\n    </UserControl.Resources>\n    <StackPanel>\n        <TextBlock\n            Text=\"{Binding Text}\"\n            TextWrapping=\"Wrap\"\n            FontSize=\"{Binding MyFontSize}\"\n            FontWeight=\"{Binding MyFontWeight}\"\n            FontStyle=\"{Binding MyFontStyle}\"/>\n        <TextBlock Foreground=\"{StaticResource textHyperlink}\" Visibility=\"{Binding UrlVisibility}\">\n            <Hyperlink\n                NavigateUri=\"{Binding Url}\"\n                RequestNavigate=\"Hyperlink_RequestNavigate\"\n                TextDecorations=\"{x:Null}\">\n                <TextBlock\n                    Text=\"{Binding Title}\"\n                    TextWrapping=\"Wrap\"\n                    FontSize=\"{Binding MyFontSize}\"\n                    FontWeight=\"{Binding MyFontWeight}\"\n                    FontStyle=\"{Binding MyFontStyle}\"/>\n            </Hyperlink>\n        </TextBlock>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/ServiceMessageView.xaml.cs",
    "content": "using System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Views\n{\n    /// <summary>\n    /// Interaction logic for ServiceMessageView.xaml\n    /// </summary>\n    public partial class ServiceMessageView : UserControl\n    {\n        public ServiceMessageView()\n        {\n            InitializeComponent();\n            DataContext = this;\n        }\n\n        public string Text { get; set; }\n        public string Title { get; set; }\n        public string Url { get; set; }\n        public bool IsBold { get; set; }\n        public bool IsItalic { get; set; }\n        public double MyFontSize { get; set; }\n\n        public Visibility UrlVisibility => string.IsNullOrEmpty(Url) ? Visibility.Collapsed : Visibility.Visible;\n        public FontWeight MyFontWeight => IsBold ? FontWeights.Bold : FontWeights.Normal;\n        public FontStyle MyFontStyle => IsItalic ? FontStyles.Italic : FontStyles.Normal;\n\n        private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)\n        {\n            Process.Start(new ProcessStartInfo()\n            {\n                FileName = e.Uri.AbsoluteUri,\n                UseShellExecute = true\n            });\n            e.Handled = true;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/UpdateWindow.xaml",
    "content": "﻿<Window x:Class=\"KHSave.SaveEditor.Views.UpdateWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:ext=\"clr-namespace:Xe.Tools.Wpf.Extensions\"\n        xmlns:local=\"clr-namespace:KHSave.SaveEditor.Views\"\n        mc:Ignorable=\"d\"\n        Title=\"New version released\"\n        SizeToContent=\"WidthAndHeight\" Height=\"Auto\" Width=\"Auto\" ResizeMode=\"NoResize\">\n    <Window.Resources>\n        <SolidColorBrush x:Key=\"textHyperlink\" Color=\"#3366BB\" />\n    </Window.Resources>\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"Auto\"/>\n        </Grid.ColumnDefinitions>\n        <Image Grid.Row=\"0\" Grid.Column=\"0\"\n            Margin=\"10 0 0 0\"\n            Source=\"Images/icon-128.png\"/>\n        <StackPanel Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"10\">\n            <Label Content=\"A new version of Kingdom Save Editor has been released.\"/>\n            <Label Content=\"It is recommended to update it to enjoy the latest features and fixes.\"/>\n            <Label Content=\"If you installed it from Microsoft Store, it should be automatically updated.\"/>\n            <Label>\n                <Hyperlink\n                    NavigateUri=\"{Binding PageUri}\"\n                    TextDecorations=\"{x:Null}\"\n                    RequestNavigate=\"Hyperlink_RequestNavigate\">\n                    <TextBlock Text=\"{Binding PageUri}\" Foreground=\"{DynamicResource textHyperlink}\"/>\n                </Hyperlink>\n            </Label>\n            <Label Content=\"Do you want to download the new version now?\"/>\n        </StackPanel>\n        <Grid Background=\"#F0F0F0\" Grid.Row=\"1\" Grid.ColumnSpan=\"2\">\n            <StackPanel\n            Orientation=\"Horizontal\"\n            HorizontalAlignment=\"Center\">\n                <Button Content=\"Yesss!!! 🤩\" Margin=\"10\" Width=\"80\" Height=\"24\"\n                Command=\"{Binding DownloadCommand}\"/>\n                <Button Content=\"Later... 😪\" Margin=\"10\" Width=\"80\" Height=\"24\"\n                Command=\"{Binding CancelCommand}\"/>\n            </StackPanel>\n        </Grid>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "KHSave.SaveEditor/Views/UpdateWindow.xaml.cs",
    "content": "using System.Diagnostics;\nusing System.Windows;\nusing Xe.Tools.Wpf.Commands;\nusing Xe.VersionCheck.Model;\n\nnamespace KHSave.SaveEditor.Views\n{\n    /// <summary>\n    /// Interaction logic for UpdateWindow.xaml\n    /// </summary>\n    public partial class UpdateWindow : Window\n    {\n        private readonly ReleaseVersion lastVersion;\n\n        public UpdateWindow(ReleaseVersion lastVersion)\n        {\n            InitializeComponent();\n\n            DataContext = this;\n            this.lastVersion = lastVersion;\n\n            DownloadCommand = new RelayCommand(x =>\n            {\n                Process.Start(new ProcessStartInfo(lastVersion.DownloadUri));\n            });\n\n            CancelCommand = new RelayCommand(x =>\n            {\n                Close();\n            });\n        }\n\n        public string PageUri => lastVersion.PageUri;\n\n        public RelayCommand DownloadCommand { get; }\n\n        public RelayCommand CancelCommand { get; }\n\n        private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)\n        {\n            Process.Start(new ProcessStartInfo()\n            {\n                FileName = e.Uri.AbsoluteUri,\n                UseShellExecute = true\n            });\n            e.Handled = true;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Newtonsoft.Json\" version=\"13.0.1\" targetFramework=\"net471\" />\n  <package id=\"Xe.BinaryMapper\" version=\"1.5.2\" targetFramework=\"net472\" />\n</packages>"
  },
  {
    "path": "KHSave.SaveEditor.Common/Contracts/IGetSave.cs",
    "content": "namespace KHSave.SaveEditor.Common.Contracts\n{\n    public interface IGetSave\n    {\n        object GetSave();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Contracts/IOpenStream.cs",
    "content": "using System.IO;\n\nnamespace KHSave.SaveEditor.Common.Contracts\n{\n    public interface IOpenStream\n    {\n        void OpenStream(Stream stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Contracts/IRefreshUi.cs",
    "content": "namespace KHSave.SaveEditor.Common.Contracts\n{\n    public interface IRefreshUi\n    {\n        void RefreshUi();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Contracts/IWriteToStream.cs",
    "content": "using System.IO;\n\nnamespace KHSave.SaveEditor.Common.Contracts\n{\n    public interface IWriteToStream\n    {\n        void WriteToStream(Stream stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Controls/ItemComboBox.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Common.Controls.ItemComboBox\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Common.Controls\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"22\" d:DesignWidth=\"100\">\n    <ComboBox\n        ItemsSource=\"{Binding ValueSet}\"\n        SelectedValue=\"{Binding ValueSet.SelectedValue}\"\n        SelectedValuePath=\"Value\">\n        <ComboBox.ItemTemplate>\n            <DataTemplate>\n                <StackPanel Orientation=\"Horizontal\">\n                    <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                            Source=\"{Binding Icon}\"/>\n                    <TextBlock Text=\"{Binding Name}\" />\n                </StackPanel>\n            </DataTemplate>\n        </ComboBox.ItemTemplate>\n    </ComboBox>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Controls/ItemComboBox.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Common.Controls\n{\n    /// <summary>\n    /// Interaction logic for ItemComboBox.xaml\n    /// </summary>\n    public partial class ItemComboBox : UserControl\n    {\n        public ItemComboBox()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Controls/TwoEqualColumnsStackPanel.cs",
    "content": "// MIT License\n// \n// Copyright(c) 2018 Luciano (Xeeynamo) Ciccariello\n// \n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n// Part of this software belongs to XeEngine toolset and United Lines Studio\n// and it is currently used to create commercial games by Luciano Ciccariello.\n// Please do not redistribuite this code under your own name, stole it or use\n// it artfully, but instead support it and its author. Thank you.\n\nusing System;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Common.Controls\n{\n    public class TwoEqualColumnsStackPanel : Panel\n    {\n        const double MyMargin = 5.0;\n\n        //protected override Size MeasureOverride(Size constraint)\n        //{\n        //    for (int i = 0; i < VisualChildrenCount; i += 2)\n        //        Children[i].Measure(constraint);\n\n        //    for (int i = 1; i < VisualChildrenCount; i += 2)\n        //        Children[i].Measure(new Size((constraint.Width - MyMargin) / 2.0, constraint.Height));\n\n        //    return new Size(\n        //        constraint.Width,\n        //        0);\n        //}\n\n        protected override Size MeasureOverride(Size constraint)\n        {\n            var y = 0.0;\n            var width = (constraint.Width - MyMargin) / 2.0;\n\n            int count = VisualChildrenCount;\n            for (var i = 0; i < count; i += 4)\n            {\n                var child1 = Children[i];\n                var child2 = count > i + 1 ? Children[i + 1] : null;\n                var child3 = count > i + 2 ? Children[i + 2] : null;\n                var child4 = count > i + 3 ? Children[i + 3] : null;\n\n                child1.Measure(new Size(width, constraint.Height));\n                child3?.Measure(new Size(width, constraint.Height));\n                child2?.Measure(new Size(width, constraint.Height));\n                child4?.Measure(new Size(width, constraint.Height));\n\n                var aboveHeight = Math.Max(child1.DesiredSize.Height, child3?.DesiredSize.Height ?? 0);\n                var belowHeight = Math.Max(child2?.DesiredSize.Height ?? 0, child4?.DesiredSize.Height ?? 0);\n\n                y += aboveHeight + belowHeight + MyMargin;\n            }\n\n            return new Size(constraint.Width, Math.Max(0, y - MyMargin));\n        }\n\n        protected override Size ArrangeOverride(Size arrangeSize)\n        {\n            var width = (arrangeSize.Width - MyMargin) / 2.0;\n            var rightY = (arrangeSize.Width + MyMargin) / 2.0;\n            var y = 0.0;\n\n            int count = VisualChildrenCount;\n            for (var i = 0; i < count; i += 4)\n            {\n                var child1 = Children[i];\n                var child2 = count > i + 1 ? Children[i + 1] : null;\n                var child3 = count > i + 2 ? Children[i + 2] : null;\n                var child4 = count > i + 3 ? Children[i + 3] : null;\n\n                var aboveHeight = Math.Max(child1.DesiredSize.Height, child3?.DesiredSize.Height ?? 0);\n                var belowHeight = Math.Max(child2?.DesiredSize.Height ?? 0, child4?.DesiredSize.Height ?? 0);\n\n                child1.Arrange(new Rect(0, y, width, aboveHeight));\n                child2?.Arrange(new Rect(0, y + aboveHeight, width, belowHeight));\n                child3?.Arrange(new Rect(rightY, y, width, aboveHeight));\n                child4?.Arrange(new Rect(rightY, y + aboveHeight, width, belowHeight));\n\n                y += aboveHeight + belowHeight + MyMargin;\n            }\n\n            return base.ArrangeOverride(arrangeSize);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Exceptions/ImageTooLargeException.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\n\nnamespace KHSave.SaveEditor.Common.Exceptions\n{\n    public class ImageTooLargeException : Exception\n    {\n        public ImageTooLargeException(int sizeLimit) :\n            base($\"The image is too large and it cannot exceed {sizeLimit} bytes.\")\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Exceptions/SaveNotSupportedException.cs",
    "content": "namespace KHSave.SaveEditor.Common.Exceptions\n{\n    public class SaveNotSupportedException : VisualException\n    {\n        public SaveNotSupportedException(string message) :\n            base(message, \"Save not supported\")\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Exceptions/VisualException.cs",
    "content": "using System;\n\nnamespace KHSave.SaveEditor.Common.Exceptions\n{\n    public class VisualException : Exception\n    {\n        public VisualException(string message, string title) :\n            base(message)\n        {\n            Title = title;\n        }\n\n        public string Title { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Global.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing System;\nusing System.Configuration;\nusing System.Runtime.CompilerServices;\n\nnamespace KHSave.SaveEditor.Common\n{\n    internal class Settings : ApplicationSettingsBase\n    {\n        T Get<T>(T defaultValue, [CallerMemberName] string propertyName = null)\n        {\n            try\n            {\n                var value = this[propertyName];\n                return value == null ? defaultValue : (T)value;\n            }\n            catch\n            {\n                return defaultValue;\n            }\n        }\n\n        void Set<T>(T value, [CallerMemberName] string propertyName = null) => this[propertyName] = value;\n\n        [UserScopedSetting]\n        public bool AdvancedMode\n        {\n            get => Get(false);\n            set => Set(value);\n        }\n\n        [UserScopedSetting]\n        public bool IsUpdateCheckingEnabled\n        {\n            get => Get(true);\n            set => Set(value);\n        }\n\n        [UserScopedSetting]\n        public DateTime LastUpdateCheck\n        {\n            get => Get(DateTime.Now);\n            set => Set(value);\n        }\n\n        [UserScopedSetting]\n        public string LastFF7RTab\n        {\n            get => Get(\"Materia\");\n            set => Set(value);\n        }\n\n        [UserScopedSetting]\n        public string LastPersona3Tab\n        {\n            get => Get(\"Characters\");\n            set => Set(value);\n        }\n\n        [UserScopedSetting]\n        public string LastPersona5Tab\n        {\n            get => Get(\"Characters\");\n            set => Set(value);\n        }\n\n        [UserScopedSetting]\n        public string Cookie\n        {\n            get => Get(\"\");\n            set => Set(value);\n        }\n\n        [UserScopedSetting]\n        public bool AnonymousReporting\n        {\n            get => Get(false);\n            set => Set(value);\n        }\n    }\n\n    public static class Global\n    {\n        private static readonly Settings Settings = new Settings();\n\n        public static bool IsAdvancedMode\n        {\n            get => Settings.AdvancedMode;\n            set\n            {\n                Settings.AdvancedMode = value;\n                Settings.Save();\n            }\n        }\n\n        public static bool IsUpdateCheckingEnabled\n        {\n            get => Settings.IsUpdateCheckingEnabled;\n            set\n            {\n                Settings.IsUpdateCheckingEnabled = value;\n                Settings.Save();\n            }\n        }\n\n        public static DateTime LastUpdateCheck\n        {\n            get => Settings.LastUpdateCheck;\n            set\n            {\n                Settings.LastUpdateCheck = value;\n                Settings.Save();\n            }\n        }\n\n        public static string LastFF7RTab\n        {\n            get => Settings.LastFF7RTab;\n            set\n            {\n                Settings.LastFF7RTab = value;\n                Settings.Save();\n            }\n        }\n\n        public static string LastPersona3Tab\n        {\n            get => Settings.LastPersona3Tab;\n            set\n            {\n                Settings.LastPersona3Tab = value;\n                Settings.Save();\n            }\n        }\n\n        public static string LastPersona5Tab\n        {\n            get => Settings.LastPersona5Tab;\n            set\n            {\n                Settings.LastPersona5Tab = value;\n                Settings.Save();\n            }\n        }\n\n        public static string Cookie\n        {\n            get => Settings.Cookie;\n            set\n            {\n                Settings.Cookie = value;\n                Settings.Save();\n            }\n        }\n\n        public static bool AnonymousReporting\n        {\n            get => Settings.AnonymousReporting;\n            set\n            {\n                Settings.AnonymousReporting = value;\n                Settings.Save();\n            }\n        }\n\n\n        public static bool CanDisplay(object item) => IsAdvancedMode || CanDisplayInBasicMode(item);\n\n        public static bool CanDisplayInBasicMode(object item)\n        {\n            return item.GetType() == typeof(string) ||\n                !UnusedAttribute.IsUnused(item);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/KHSave.SaveEditor.Common.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWpf>true</UseWpf>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.Archives\\KHSave.Archives.csproj\" />\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"Views\\ArchiveManagerView.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Models/EnumIconTypeModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Windows.Media;\nusing KHSave.SaveEditor.Common.Services;\n\nnamespace KHSave.SaveEditor.Common.Models\n{\n    public class EnumIconTypeModel<T> : GenericEntryModel<string, T>\n        where T : struct, IConvertible\n    {\n        private bool _isIconRetrieved;\n        private ImageSource _icon;\n\n        public ImageSource Icon\n        {\n            get\n            {\n                if (!_isIconRetrieved)\n                {\n                    _icon = IconService.Icon(Value);\n                    _isIconRetrieved = true;\n                }\n\n                return _icon;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Models/GenericEntryModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Common.Models\n{\n    public class GenericEntryModel<TName, TValue> : BaseNotifyPropertyChanged\n    {\n        public virtual TName Name { get; set; }\n\n        public virtual TValue Value { get; set; }\n\n        public override string ToString() => Name?.ToString() ?? Value?.ToString() ?? \"<null>\";\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Models/GenericEnumListModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace KHSave.SaveEditor.Common.Models\n{\n    public class GenericEnumListModel<TModel, TEnum, TValue> : GenericListModel<TModel, TValue>\n        where TEnum : struct, IConvertible\n        where TModel : GenericEntryModel<string, TValue>\n    {\n        public GenericEnumListModel(\n            Func<TValue> valueGetter,\n            Action<TValue> valueSetter,\n            Func<TEnum, TValue> enumValueGetter,\n            Func<TEnum, string> enumNameGetter = null,\n            Func<TModel, bool> filter = null) :\n            base(GetModels(enumValueGetter, enumNameGetter, filter), valueGetter, valueSetter)\n        { }\n\n        private static IEnumerable<TModel> GetModels(\n            Func<TEnum, TValue> enumValueGetter,\n            Func<TEnum, string> enumNameGetter,\n            Func<TModel, bool> filter)\n        {\n            var type = typeof(TEnum);\n            if (type.IsEnum == false)\n            {\n                throw new InvalidOperationException($\"{type} is not an enum.\");\n            }\n\n            var items = Enum.GetValues(type)\n                .Cast<TEnum>()\n                .Select(e =>\n                {\n                    var item = Activator.CreateInstance<TModel>() as GenericEntryModel<string, TValue>;\n                    item.Value = enumValueGetter(e);\n                    item.Name = enumNameGetter?.Invoke(e) ?? e.ToString();\n\n                    return (TModel)item;\n                });\n\n            return filter != null ? items.Where(filter) : items;\n        }\n    }\n\n    public class GenericEnumListModel<TModel, TEnum> : GenericEnumListModel<TModel, TEnum, TEnum>\n        where TEnum : struct, IConvertible\n        where TModel : GenericEntryModel<string, TEnum>\n    {\n        public GenericEnumListModel(\n            Func<TEnum> valueGetter,\n            Action<TEnum> valueSetter,\n            Func<TEnum, string> enumNameGetter = null,\n            Func<TModel, bool> filter = null) :\n            base(valueGetter, valueSetter, x => x, enumNameGetter, filter)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Models/GenericListModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Common.Models\n{\n    public class GenericListModel<TModel, TName, TValue> : BaseNotifyPropertyChanged, IEnumerable<TModel>\n        where TModel : GenericEntryModel<TName, TValue>\n    {\n        private readonly Func<TValue> valueGetter;\n        private readonly Action<TValue> valueSetter;\n        private readonly TModel[] items;\n\n        public GenericListModel(IEnumerable<TModel> items, Func<TValue> valueGetter, Action<TValue> valueSetter)\n        {\n            this.valueGetter = valueGetter;\n            this.valueSetter = valueSetter;\n            this.items = items.ToArray();\n        }\n\n        public TValue SelectedValue\n        {\n            get => valueGetter();\n            set => valueSetter(value);\n        }\n\n        public IEnumerator<TModel> GetEnumerator() => items.AsEnumerable().GetEnumerator();\n\n        IEnumerator IEnumerable.GetEnumerator() => items.AsEnumerable().GetEnumerator();\n\n        public GenericEntryModel<TName, TValue> this[int i] => items[i];\n    }\n\n    public class GenericListModel<TModel, TValue> : GenericListModel<TModel, string, TValue>\n        where TModel : GenericEntryModel<string, TValue>\n    {\n\n        public GenericListModel(IEnumerable<TModel> items, Func<TValue> valueGetter, Action<TValue> valueSetter) :\n            base(items, valueGetter, valueSetter)\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Models/ItemComboBoxModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Common.Models\n{\n    public class ItemComboBoxModel<T> : BaseNotifyPropertyChanged\n        where T : struct, IConvertible\n    {\n        public KhEnumListModel<EnumIconTypeModel<T>, T> ValueSet { get; }\n\n        public ItemComboBoxModel(Func<T> getter, Action<T> setter)\n        {\n            ValueSet = new KhEnumListModel<EnumIconTypeModel<T>, T>(getter, setter);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Models/KhEnumListModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing KHSave.Attributes;\n\nnamespace KHSave.SaveEditor.Common.Models\n{\n    public class KhEnumListModel<TModel, TEnum, TValue> : GenericEnumListModel<TModel, TEnum, TValue>\n        where TEnum : struct, IConvertible\n        where TModel : GenericEntryModel<string, TValue>\n    {\n        public KhEnumListModel(\n            Func<TValue> valueGetter,\n            Action<TValue> valueSetter,\n            Func<TEnum, TValue> enumValueGetter,\n            Func<TEnum, string> enumNameGetter = null,\n            Func<TModel, bool> filter = null) :\n            base(valueGetter, valueSetter, enumValueGetter, enumNameGetter ?? DefaultNameGetter, filter ?? DefaultFilter)\n        { }\n\n        private static string DefaultNameGetter(TEnum value) => InfoAttribute.GetInfo(value);\n\n        private static bool DefaultFilter(TModel model) => Global.CanDisplay(model.Value);\n    }\n\n    public class KhEnumListModel<TModel, TEnum> : KhEnumListModel<TModel, TEnum, TEnum>\n        where TEnum : struct, IConvertible\n        where TModel : GenericEntryModel<string, TEnum>\n    {\n        public KhEnumListModel(\n            Func<TEnum> valueGetter,\n            Action<TEnum> valueSetter,\n            Func<TEnum, string> enumNameGetter = null,\n            Func<TModel, bool> filter = null) :\n            base(valueGetter, valueSetter, x => x, enumNameGetter, filter)\n        { }\n\n        public KhEnumListModel() :\n            this(() => default(TEnum), x => { })\n        { }\n    }\n\n    public class KhEnumListModel<TEnum> : KhEnumListModel<GenericEntryModel<string, TEnum>, TEnum>\n        where TEnum : struct, IConvertible\n    {\n        public KhEnumListModel(\n            Func<TEnum> valueGetter,\n            Action<TEnum> valueSetter,\n            Func<TEnum, string> enumNameGetter = null,\n            Func<GenericEntryModel<string, TEnum>, bool> filter = null) :\n            base(valueGetter, valueSetter, enumNameGetter, filter)\n        { }\n\n        public KhEnumListModel() :\n            this(() => default(TEnum), x => { })\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/ProcessStream.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace KHSave.SaveEditor.Common\n{\n    public class ProcessStream : Stream\n    {\n        [DllImport(\"kernel32.dll\")]\n        private static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);\n\n        [DllImport(\"kernel32.dll\")]\n        private static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int BytesRead);\n\n        [DllImport(\"kernel32.dll\")]\n        static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, int dwSize, out int lpNumberOfBytesWritten);\n\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        static extern bool OpenProcessToken(IntPtr ProcessHandle, UInt32 DesiredAccess, out IntPtr TokenHandle);\n\n\n        private Process _process;\n        private IntPtr _hProcess;\n        private long position;\n\n        public ProcessStream(Process process, long baseAddress, uint length)\n        {\n            BaseAddress = baseAddress;\n            Length = length;\n\n            OpenProcess(process);\n        }\n\n\n        public long BaseAddress { get; }\n        public override bool CanRead => true;\n\n        public override bool CanSeek => true;\n\n        public override bool CanWrite => true;\n\n        public override long Length { get; }\n\n        public override long Position\n        {\n            get => position;\n            set => position = value;\n        }\n\n        public override void Flush()\n        {\n        }\n\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            int read;\n            var actualCount = (int)Math.Min(count, Math.Max(0, Length - Position));\n            var pos = (IntPtr)(BaseAddress + Position);\n\n            if (offset == 0)\n            {\n                ReadProcessMemory(_hProcess, pos, buffer, actualCount, out read);\n            }\n            else\n            {\n                byte[] data = new byte[actualCount];\n                ReadProcessMemory(_hProcess, pos, buffer, actualCount, out read);\n                Array.Copy(data, 0, buffer, offset, read);\n            }\n\n            Position += read;\n\n            return read;\n        }\n\n        public override long Seek(long offset, SeekOrigin origin)\n        {\n            switch (origin)\n            {\n                case SeekOrigin.Begin:\n                    return Position = offset;\n                case SeekOrigin.Current:\n                    return Position += offset;\n                case SeekOrigin.End:\n                    return Position = Length + offset;\n                default:\n                    return Position;\n            }\n        }\n\n        public override void SetLength(long value)\n        {\n        }\n\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            var actualCount = (int)Math.Min(count, Math.Max(0, Length - Position));\n            var pos = (IntPtr)(BaseAddress + Position);\n\n            int written;\n            if (offset == 0)\n            {\n                WriteProcessMemory(_hProcess, pos, buffer, actualCount, out written);\n            }\n            else\n            {\n                var data = new byte[count];\n                Array.Copy(buffer, offset, data, 0, count);\n                WriteProcessMemory(_hProcess, pos, data, actualCount, out written);\n            }\n\n            Position += written;\n        }\n\n        private void OpenProcess(Process process)\n        {\n            const int TOKEN_QUERY = 8;\n            const int PROCESS_ALL_ACCESS = 0x000F0000 | 0x00100000 | 0xFFF;\n            _hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, process.Id);\n            _process = process;\n\n            var isSuccess = OpenProcessToken(_hProcess, TOKEN_QUERY, out var tokenHandle);\n        }\n\n        public static IEnumerable<Process> GetProcesses() =>\n            Process.GetProcesses();\n\n        public static Process TryGetProcess(Func<Process, bool> predicate, int timeout = 10000, int sleep = 100)\n        {\n            var stopwatch = new Stopwatch();\n            stopwatch.Start();\n\n            do\n            {\n                var process = GetProcesses().FirstOrDefault(predicate);\n                if (process != null)\n                    return process;\n\n                Thread.Sleep(sleep);\n            } while (stopwatch.ElapsedMilliseconds < timeout);\n\n            return null;\n        }\n\n        public static Task<Process> TryGetProcessAsync(Func<Process, bool> predicate, int timeout = 10000, int sleep = 100) =>\n            Task.Run(() => TryGetProcess(predicate, timeout, sleep));\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Services/ArchiveWriteToStream.cs",
    "content": "using System.IO;\nusing KHSave.Archives;\nusing KHSave.SaveEditor.Common.Contracts;\n\nnamespace KHSave.SaveEditor.Common.Services\n{\n    public class ArchiveWriteToStream : IWriteToStream\n    {\n        private readonly IWriteToStream realWriteToStream;\n\n        public ArchiveWriteToStream(IWriteToStream realWriteToStream, IArchive archive, IArchiveEntry entry)\n        {\n            this.realWriteToStream = realWriteToStream;\n            Archive = archive;\n            Entry = entry;\n        }\n\n        public IArchive Archive { get; }\n        public IArchiveEntry Entry { get; }\n\n        public void WriteToStream(Stream stream)\n        {\n            using (var entryStream = new MemoryStream())\n            {\n                realWriteToStream.WriteToStream(entryStream);\n                Entry.Data = entryStream.GetBuffer();\n            }\n\n            bool found = false;\n            for (var i = 0; i < Archive.Entries.Count; i++)\n            {\n                var entry = Archive.Entries[i];\n                if (entry.Name == Entry.Name)\n                {\n                    Archive.Entries[i] = Entry;\n                    found = true;\n                    break;\n                }\n            }\n\n            if (found == false)\n            {\n                Archive.Entries.Add(Entry);\n            }\n\n            Archive.Write(stream);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Services/GenericEqualityComparer.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace KHSave.SaveEditor.Common.Services\n{\n    public class GenericEqualityComparer<T> : IEqualityComparer<T>, IEqualityComparer\n        where T : class\n    {\n        private Func<T, T, bool> _equals;\n\n        public GenericEqualityComparer(Func<T, T, bool> equals)\n        {\n            _equals = equals;\n        }\n\n        public bool Equals(T x, T y) => _equals(x, y);\n\n        public int GetHashCode(T obj) => 0;\n\n        public new bool Equals(object x, object y) => _equals(x as T, y as T);\n\n        public int GetHashCode(object obj) => 0;\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Services/IconService.cs",
    "content": "using KHSave.Attributes;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\n\nnamespace KHSave.SaveEditor.Common.Services\n{\n    public class IconService\n    {\n        public enum IconPack\n        {\n            KingdomHearts2,\n            KingdomHeartsBbs,\n            KingdomHeartsDdd,\n            FF7Remake,\n            Persona5,\n        }\n\n        private static readonly Dictionary<string, string> IconsDefault = new Dictionary<string, string>()\n        {\n            [\"Tent\"] = \"kh2-icon-tent\",\n            [\"Food\"] = \"FoodIcon\",\n            [\"Snack\"] = \"SnackIcon\",\n            [\"Synthesis\"] = \"kh2-icon-synthesis\",\n            [\"MogItem\"] = \"KupoCoinIcon\",\n            [\"Magic\"] = \"kh2-icon-magic\",\n            [\"Link\"] = \"LinkIcon\",\n            [\"Keyblade\"] = \"kh2-equip-keyblade\",\n            [\"Staff\"] = \"kh2-equip-staff\",\n            [\"Shield\"] = \"kh2-equip-shield\",\n            [\"Ability\"] = \"kh2-icon-ability\",\n            [\"CombatStyle\"] = \"kh2-icon-style\",\n            [\"Command\"] = \"kh2-icon-mickey\",\n            [\"Boost\"] = \"kh2-icon-tent\",\n            [\"Form\"] = \"kh2-item-key\",\n            [\"Map\"] = \"kh2-item-key\",\n            [\"Report\"] = \"kh2-item-key\",\n            [\"Summon\"] = \"kh2-item-key\",\n            [\"Recipe\"] = \"KupoCoinIcon\",\n\n            [\"Card\"] = \"card-generic\",\n            [\"CardEnemy\"] = \"card-enemy\",\n            [\"CardFriend\"] = \"card-friend\",\n            [\"CardItem\"] = \"card-item\",\n            [\"CardMagic\"] = \"card-magic\",\n            [\"CardMap\"] = \"card-world\",\n            [\"CardMapRed\"] = \"card-world\",\n            [\"CardMapGreen\"] = \"card-world\",\n            [\"CardMapBlue\"] = \"card-world\",\n            [\"CardMapSpecial\"] = \"card-world\",\n            [\"CardSpecial\"] = \"card-kingdom\",\n            [\"CardSummon\"] = \"card-magic\",\n            [\"CardWeapon\"] = \"card-weapon\",\n            [\"CardWorld\"] = \"card-world\",\n\n            [\"MagicMateria\"] = \"materia-magic\",\n            [\"CommandMateria\"] = \"materia-command\",\n            [\"SupportMateria\"] = \"materia-support\",\n            [\"CompleteMateria\"] = \"materia-complete\",\n            [\"SummonMateria\"] = \"materia-summon\",\n        };\n\n        private static readonly Dictionary<IconPack, Dictionary<string, string>> IconPacks = new Dictionary<IconPack, Dictionary<string, string>>()\n        {\n            [IconPack.KingdomHearts2] = new Dictionary<string, string>()\n            {\n                [\"Consumable\"] = \"kh2-icon-consumable\",\n                [\"KeyItem\"] = \"kh2-item-key\",\n                [\"Money\"] = \"ff7r-item-gil\", // TODO replace with munny\n                [\"Weapon\"] = \"kh2-icon-weapon\",\n                [\"Armor\"] = \"kh2-equip-armor\",\n                [\"Accessory\"] = \"kh2-equip-accessory\",\n                [\"AbilityAction\"] = \"khbbs-icon-ability-status\",\n                [\"AbilityMobility\"] = \"khbbs-icon-ability-price\",\n                [\"AbilitySupport\"] = \"kh2-ability-support\",\n            },\n            [IconPack.KingdomHeartsBbs] = new Dictionary<string, string>()\n            {\n                [\"Attack\"] = \"kh2-equip-keyblade\",\n                [\"Consumable\"] = \"kh2-icon-consumable\",\n                [\"AbilityPrice\"] = \"khbbs-icon-ability-price\",\n                [\"AbilityStatus\"] = \"khbbs-icon-ability-status\",\n                [\"AbilitySupport\"] = \"khbbs-icon-ability-support\",\n                [\"Defense\"] = \"khbbs-icon-defense\",\n                [\"Finisher\"] = \"khbbs-icon-finisher\",\n                [\"Movement\"] = \"khbbs-icon-movement\",\n                [\"Reprisal\"] = \"khbbs-icon-reprisal\",\n                [\"Shotlock\"] = \"khbbs-icon-shotlock\",\n                [\"Dlink\"] = \"khbbs-icon-dlink\",\n                [\"Friendship\"] = \"khbbs-icon-friendship\",\n                [\"CommandStyleLevel1\"] = \"khbbs-icon-commandstyle-lvl1\",\n                [\"CommandStyleLevel2\"] = \"khbbs-icon-commandstyle-lvl2\",\n                [\"CommandStyleOther\"] = \"khbbs-icon-commandstyle-other\",\n            },\n            [IconPack.KingdomHeartsDdd] = new Dictionary<string, string>()\n            // ps: worst KH game ever\n            {\n                [\"Attack\"] = \"khddd-command-attack\",\n                [\"Movement\"] = \"khddd-command-movement\",\n                [\"Defense\"] = \"khddd-command-defense\",\n                [\"Reprisal\"] = \"khddd-command-reprisal\",\n                [\"FlowMotion\"] = \"khddd-command-flow\",\n                [\"Magic\"] = \"khddd-command-magic\",\n                [\"Consumable\"] = \"khddd-command-consumable\",\n                [\"AbilityStats\"] = \"khddd-ability-stats\",\n                [\"AbilitySupport\"] = \"khddd-ability-support\",\n                [\"AbilitySpirits\"] = \"khddd-ability-spirits\",\n                [\"Keyblade\"] = \"khddd-item-keyblade\",\n                [\"DreamPieces\"] = \"khddd-item-dreampiece\",\n                [\"Recipe\"] = \"khddd-item-recipe\",\n                [\"TrainingFood\"] = \"khddd-item-toy\",\n                [\"TrainingToys\"] = \"khddd-item-toy\",\n            },\n            [IconPack.FF7Remake] = new Dictionary<string, string>()\n            {\n                [\"Consumable\"] = \"ff7r-icon-consumable\",\n                [\"KeyItem\"] = \"ff7r-icon-key\",\n                [\"Money\"] = \"ff7r-icon-gil\",\n                [\"Weapon\"] = \"ff7r-icon-weapon\",\n                [\"Armor\"] = \"ff7r-icon-armor\",\n                [\"Accessory\"] = \"ff7r-icon-accessory\",\n\n                [\"WeaponCloud\"] = \"ff7r-icon-cloud\",\n                [\"WeaponBarret\"] = \"ff7r-icon-barret\",\n                [\"WeaponTifa\"] = \"ff7r-icon-tifa\",\n                [\"WeaponAerith\"] = \"ff7r-icon-aerith\",\n                [\"Manuscript\"] = \"ff7r-icon-manuscript\",\n                [\"Materia\"] = \"ff7r-icon-materia\",\n                [\"Track\"] = \"ff7r-icon-track\",\n            },\n            [IconPack.Persona5] = new Dictionary<string, string>()\n            {\n                [\"Skill\"] = \"empty\",\n                [\"HitSkill\"] = \"p5-skill-hit\",\n                [\"GunSkill\"] = \"p5-skill-gun\",\n                [\"FireSkill\"] = \"p5-skill-fire\",\n                [\"IceSkill\"] = \"p5-skill-ice\",\n                [\"WindSkill\"] = \"p5-skill-wind\",\n                [\"ThunderSkill\"] = \"p5-skill-thunder\",\n                [\"BlessSkill\"] = \"p5-skill-holy\",\n                [\"DeathSkill\"] = \"p5-skill-death\",\n                [\"AlmightySkill\"] = \"p5-skill-almighty\",\n                [\"NuclearSkill\"] = \"p5-skill-nuclear\",\n                [\"PsychoSkill\"] = \"p5-skill-psycho\",\n                [\"SupportSkill\"] = \"p5-skill-support\",\n                [\"PoisonSkill\"] = \"p5-skill-poison\",\n                [\"HealSkill\"] = \"p5-skill-heal\",\n                [\"AutoSkill\"] = \"p5-skill-auto\",\n                [\"AutoSkill\"] = \"p5-skill-auto\",\n                [\"Equipment\"] = \"p5-equip-dagger\",\n                [\"Dagger\"] = \"p5-equip-dagger\",\n                [\"Pole\"] = \"p5-equip-pole\",\n                [\"MorganaMelee\"] = \"p5-equip-melee-morgana\",\n                [\"AnnMelee\"] = \"p5-equip-melee-ann\",\n                [\"YusukeMelee\"] = \"p5-equip-melee-yusuke\",\n                [\"MakotoMelee\"] = \"p5-equip-melee-makoto\",\n                [\"HaruMelee\"] = \"p5-equip-melee-haru\",\n                [\"FutabaMelee\"] = \"p5-equip-dagger\",\n                [\"GoroMelee\"] = \"p5-equip-saber\",\n                [\"VioletMelee\"] = \"p5-equip-melee-violet\",\n                [\"RangeJoker\"] = \"p5-equip-range-joker\",\n                [\"RyujiRange\"] = \"p5-equip-range-ryuji\",\n                [\"MorganaRange\"] = \"p5-equip-range-morgana\",\n                [\"AnnRange\"] = \"p5-equip-range-ann\",\n                [\"YusukeRange\"] = \"p5-equip-range-yusuke\",\n                [\"MakotoRange\"] = \"p5-equip-range-makoto\",\n                [\"HaruRange\"] = \"p5-equip-range-haru\",\n                [\"FutabaRange\"] = \"p5-equip-range-joker\",\n                [\"RangeCrow\"] = \"p5-equip-range-crow\",\n                [\"VioletRange\"] = \"p5-equip-range-violet\",\n                [\"Protector\"] = \"p5-equip-protector\",\n                [\"ProtectorMale\"] = \"p5-equip-protector-male\",\n                [\"ProtectorFemale\"] = \"p5-equip-protector-female\",\n                [\"ProtectorUnisex\"] = \"p5-equip-protector-unisex\",\n                [\"ProtectorCat\"] = \"p5-equip-protector-definitively_not_a_cat\",\n                [\"Accessory\"] = \"p5-equip-accessory\",\n                [\"Outfit\"] = \"p5-equip-outfit\",\n            },\n        };\n\n        private static Dictionary<string, Uri> Icons = new Dictionary<string, Uri>();\n\n        static IconService()\n        {\n            UseIconPack(IconPack.KingdomHearts2);\n        }\n\n        public static void UseIconPack(IconPack iconPack)\n        {\n            Icons = IconPacks[iconPack].Concat(IconsDefault)\n                .GroupBy(x => x.Key)\n                .ToDictionary(x => x.Key, x => new Uri($\"pack://application:,,,/KHSave.SaveEditor;component/Images/{x.First().Value}.png\"));\n        }\n\n        public static ImageSource Icon(object item)\n        {\n            var types = InfoAttribute.GetItemTypes(item);\n            foreach (var type in types)\n            {\n                if (Icons.TryGetValue(type, out var uri))\n                    return new BitmapImage(uri);\n            }\n\n            return null;\n        }\n\n        public static ImageSource Icon(string iconName) =>\n            iconName == null ? null :\n            Icons.TryGetValue(iconName, out var uri) ? new BitmapImage(uri) : null;\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Services/SearchEngine.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace KHSave.SaveEditor.Common.Services\n{\n    public class SearchEngine\n    {\n        private const int InvalidNumber = int.MinValue;\n\n        public interface IName\n        {\n            string Name { get; }\n        }\n\n        public interface ICount\n        {\n            int Count { get; }\n        }\n\n        public static IEnumerable<T> Filter<T>(\n            string searchTerm,\n            IEnumerable<T> collection,\n            Func<string, T, bool> additionalFilter = null)\n            where T : class\n        {\n            var subSearchTerms = searchTerm\n                .Split(new char[] { ',', ';' })\n                .Select(x => x.Trim())\n                .Where(x => !string.IsNullOrWhiteSpace(x))\n                .ToArray();\n\n            var searchTermsCount = subSearchTerms.Length;\n            if (searchTermsCount == 0)\n                foreach (var item in collection)\n                    yield return item;\n\n            foreach (var item in collection)\n            {\n                for (var i = 0; i < searchTermsCount; i++)\n                {\n                    var mySearchTerm = subSearchTerms[i];\n                    if (item is IName name && FilterByName(mySearchTerm, name))\n                    {\n                        yield return item;\n                        break;\n                    }\n                    if (item is ICount count && FilterByCount(mySearchTerm, count))\n                    {\n                        yield return item;\n                        break;\n                    }\n                    if (additionalFilter != null && additionalFilter(mySearchTerm, item))\n                    {\n                        yield return item;\n                        break;\n                    }\n                }\n            }\n        }\n\n        public static bool FilterByName(string searchTerm, IName name) =>\n            name.Name.IndexOf(searchTerm, StringComparison.InvariantCultureIgnoreCase) >= 0;\n\n        public static bool FilterByCount(string searchTerm, ICount count)\n        {\n            var op = searchTerm[0];\n            var n = InvalidNumber;\n            if (char.IsNumber(op))\n            {\n                if (!int.TryParse(searchTerm, out n))\n                    n = InvalidNumber;\n                op = '=';\n            }\n            else if (searchTerm.Length > 1)\n            {\n                var subValue = searchTerm.Substring(1).Trim();\n                if (!int.TryParse(subValue, out n))\n                    n = InvalidNumber;\n            }\n\n            if (n == InvalidNumber)\n                return false;\n\n            switch (op)\n            {\n                case '=':\n                    return count.Count == n;\n                case '>':\n                    return count.Count > n;\n                case '<':\n                    return count.Count < n;\n                default:\n                    return true;\n            }\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/ViewModels/ArchiveEntryViewModel.cs",
    "content": "using KHSave.Archives;\nusing KHSave.SaveEditor.Common.Models;\nusing System;\n\nnamespace KHSave.SaveEditor.Common.ViewModels\n{\n    public class ArchiveEntryViewModel : GenericEntryModel<string, ArchiveEntryViewModel>\n    {\n        public ArchiveEntryViewModel(IArchiveEntry archiveEntry)\n        {\n            ArchiveEntry = archiveEntry;\n        }\n\n        public IArchiveEntry ArchiveEntry { get; }\n\n        public string FileName\n        {\n            get => IsEmpty ? \"<empty>\" : ArchiveEntry.Name;\n            set => ArchiveEntry.Name = value;\n        }\n\n        public string DisplayDate =>\n            IsEmpty ? string.Empty : ArchiveEntry.DateModified.ToString();\n\n        public bool IsEmpty => string.IsNullOrEmpty(ArchiveEntry.Name);\n\n        public void ImportData(byte[] data)\n        {\n            if (IsEmpty)\n            {\n                ArchiveEntry.Name = \"New save\";\n                ArchiveEntry.DateCreated = DateTime.Now;\n                ArchiveEntry.DateModified = DateTime.Now;\n            }\n            ArchiveEntry.Data = data;\n\n            OnPropertyChanged(nameof(Name));\n        }\n\n        public void Rename(string newname)\n        {\n            ArchiveEntry.Name = newname;\n\n            OnPropertyChanged(nameof(Name));\n            OnPropertyChanged(nameof(FileName));\n        }\n\n        public void Erase()\n        {\n            ArchiveEntry.Name = string.Empty;\n            ArchiveEntry.DateCreated = DateTime.MinValue;\n            ArchiveEntry.DateModified = DateTime.MinValue;\n            ArchiveEntry.Data = new byte[0];\n\n            OnPropertyChanged(nameof(Name));\n            OnPropertyChanged(nameof(FileName));\n        }\n\n        public override string ToString() => Name;\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/ViewModels/ArchiveManagerViewModel.cs",
    "content": "using KHSave.Archives;\nusing KHSave.SaveEditor.Common.Models;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Commands;\nusing Xe.Tools.Wpf.Dialogs;\n\nnamespace KHSave.SaveEditor.Common.ViewModels\n{\n    public class ArchiveManagerViewModel : BaseNotifyPropertyChanged\n    {\n        private static readonly List<FileDialogFilter> Filters = FileDialogFilterComposer.Compose().AddAllFiles(\"RAW save data\");\n        private ArchiveEntryViewModel _selectedValue;\n\n        private Window Window { get; }\n        private readonly string _archiveFileName;\n\n        public ArchiveManagerViewModel(Window window, IArchive archive, string archiveFileName)\n        {\n            Window = window;\n            Archive = archive;\n            _archiveFileName = archiveFileName;\n            Entries = new GenericListModel<ArchiveEntryViewModel, ArchiveEntryViewModel>(\n                archive.Entries.Select(x => new ArchiveEntryViewModel(x)),\n                Getter, Setter);\n\n            OpenCommand = new RelayCommand(o =>\n            {\n                Window.DialogResult = true;\n                Window.Close();\n            }, o => IsSelected);\n\n            ImportCommand = new RelayCommand(o =>\n            {\n                var selectedEntry = SelectedValue;\n                if (selectedEntry == null)\n                    return;\n\n                FileDialog.OnOpen(fileName =>\n                {\n                    using (var stream = File.OpenRead(fileName))\n                    {\n                        var data = new byte[stream.Length];\n                        stream.Read(data, 0, data.Length);\n                        selectedEntry.ImportData(data);\n                    }\n\n                    using (var stream = File.Create(_archiveFileName))\n                        archive.Write(stream);\n\n                    ShowInfoMessageBox(\"Save imported with success!\");\n                }, Filters);\n            }, o => IsSelected);\n\n            ExportCommand = new RelayCommand(o =>\n            {\n                var selectedEntry = SelectedEntry;\n                if (selectedEntry == null)\n                    return;\n\n                FileDialog.OnSave(fileName =>\n                {\n                    using (var stream = File.Create(fileName))\n                    {\n                        stream.Write(selectedEntry.Data, 0, selectedEntry.Data.Length);\n                    }\n                }, Filters, $\"{SelectedEntry?.Name ?? \"empty save\"}.bin\", Window);\n            }, o => !IsSelectedEmpty);\n\n            CopyCommand = new RelayCommand(o =>\n            {\n\n            }, o => IsSelected);\n\n            PasteCommand = new RelayCommand(o =>\n            {\n\n            }, o => IsSelected);\n\n            RenameCommand = new RelayCommand(o =>\n            {\n                SingleInputDialog sid = new() { Description = \"Please enter a name for the save slot\", Text = SelectedEntry?.Name ?? string.Empty };\n                sid.ShowDialog();\n                if (sid.DialogResult == true && !string.IsNullOrEmpty(sid.Text))\n                    Entries.SelectedValue?.Rename(sid.Text);\n            }, o => !IsSelectedEmpty);\n\n            DeleteCommand = new RelayCommand(o =>\n            {\n                Entries.SelectedValue?.Erase();\n            }, o => !IsSelectedEmpty);\n        }\n\n        public string Title => $\"{Archive.Name} | Archive manager\";\n\n        public RelayCommand OpenCommand { get; }\n        public RelayCommand ImportCommand { get; }\n        public RelayCommand ExportCommand { get; }\n        public RelayCommand CopyCommand { get; }\n        public RelayCommand PasteCommand { get; }\n        public RelayCommand RenameCommand { get; }\n        public RelayCommand DeleteCommand { get; }\n\n        public IArchive Archive { get; }\n\n        public GenericListModel<ArchiveEntryViewModel, ArchiveEntryViewModel> Entries { get; }\n\n        public ArchiveEntryViewModel SelectedValue\n        {\n            get => _selectedValue;\n            set\n            {\n                _selectedValue = value;\n                OnPropertyChanged(nameof(OpenCommand));\n                OnPropertyChanged(nameof(ImportCommand));\n                OnPropertyChanged(nameof(ExportCommand));\n                OnPropertyChanged(nameof(CopyCommand));\n                OnPropertyChanged(nameof(PasteCommand));\n                OnPropertyChanged(nameof(RenameCommand));\n                OnPropertyChanged(nameof(DeleteCommand));\n            }\n        }\n        public IArchiveEntry SelectedEntry => SelectedValue?.ArchiveEntry;\n        private bool IsSelected => SelectedValue != null;\n        private bool IsSelectedEmpty => SelectedValue?.IsEmpty ?? true;\n\n        private ArchiveEntryViewModel Getter() => SelectedValue;\n\n        private void Setter(ArchiveEntryViewModel obj) => SelectedValue = obj;\n\n        private void ShowInfoMessageBox(string message) =>\n            MessageBox.Show(message, \"Archive manager\", MessageBoxButton.OK, MessageBoxImage.Information);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Views/ArchiveManagerView.xaml",
    "content": "<Window x:Class=\"KHSave.SaveEditor.Common.Views.ArchiveManagerView\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:KHSave.SaveEditor.Common.Views\"\n        xmlns:sys=\"clr-namespace:System;assembly=mscorlib\"\n        mc:Ignorable=\"d\"\n        Title=\"{Binding Title}\" Height=\"450\" Width=\"400\">\n    <Window.Resources>\n        <Thickness x:Key=\"ButtonMargin\" Left=\"0\" Top=\"5\" Right=\"5\" Bottom=\"0\" />\n        <sys:Double x:Key=\"ButtonWidth\">50</sys:Double>\n    </Window.Resources>\n    <Grid Margin=\"10\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <ListBox\n            Grid.Row=\"0\"\n            ItemsSource=\"{Binding Entries}\"\n            SelectedValue=\"{Binding Entries.SelectedValue}\"\n            MouseDoubleClick=\"ListBox_MouseDoubleClick\">\n            <ListBox.ItemTemplate>\n                <DataTemplate>\n                    <Grid>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"10\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n                        <TextBlock Grid.Column=\"0\" Text=\"{Binding DisplayDate}\"/>\n                        <TextBlock Grid.Column=\"2\" Text=\"{Binding FileName}\"/>\n                    </Grid>\n                </DataTemplate>\n            </ListBox.ItemTemplate>\n        </ListBox>\n\n        <StackPanel\n            Grid.Row=\"1\"\n            Orientation=\"Horizontal\">\n            <Button\n                Margin=\"{StaticResource ButtonMargin}\"\n                Width=\"{StaticResource ButtonWidth}\"\n                Content=\"_Open\"\n                Command=\"{Binding OpenCommand}\"/>\n            <Button\n                Margin=\"{StaticResource ButtonMargin}\"\n                Width=\"{StaticResource ButtonWidth}\"\n                Content=\"_Import\"\n                Command=\"{Binding ImportCommand}\"/>\n            <Button\n                Margin=\"{StaticResource ButtonMargin}\"\n                Width=\"{StaticResource ButtonWidth}\"\n                Content=\"_Export\"\n                Command=\"{Binding ExportCommand}\"/>\n            <Button\n                Visibility=\"Collapsed\"\n                Margin=\"{StaticResource ButtonMargin}\"\n                Width=\"{StaticResource ButtonWidth}\"\n                Content=\"_Copy\"\n                Command=\"{Binding CopyCommand}\"/>\n            <Button\n                Visibility=\"Collapsed\"\n                Margin=\"{StaticResource ButtonMargin}\"\n                Width=\"{StaticResource ButtonWidth}\"\n                Content=\"_Paste\"\n                Command=\"{Binding PasteCommand}\"/>\n            <Button\n                Margin=\"{StaticResource ButtonMargin}\"\n                Width=\"{StaticResource ButtonWidth}\"\n                Content=\"_Rename\"\n                Command=\"{Binding RenameCommand}\"/>\n            <Button\n                Margin=\"{StaticResource ButtonMargin}\"\n                Width=\"{StaticResource ButtonWidth}\"\n                Content=\"_Delete\"\n                Command=\"{Binding DeleteCommand}\"/>\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "KHSave.SaveEditor.Common/Views/ArchiveManagerView.xaml.cs",
    "content": "using KHSave.Archives;\nusing KHSave.SaveEditor.Common.ViewModels;\nusing System.IO;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Common.Views\n{\n    /// <summary>\n    /// Interaction logic for ArchiveManagerView.xaml\n    /// </summary>\n    public partial class ArchiveManagerView : Window\n    {\n        public ArchiveManagerView()\n        {\n            InitializeComponent();\n        }\n\n        public ArchiveManagerViewModel ViewModel\n        {\n            get => DataContext as ArchiveManagerViewModel;\n            set => DataContext = value;\n        }\n\n        public void SetArchive(IArchive archive, string archvieFileName) =>\n            ViewModel = new ArchiveManagerViewModel(this, archive, archvieFileName);\n\n        public IArchiveEntry SelectedEntry => ViewModel?.SelectedEntry;\n\n        private void ListBox_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)\n        {\n            DialogResult = true;\n            Close();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Data/BgmPreset.cs",
    "content": "using KHSave.SaveEditor.Ff7Remake.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing YamlDotNet.Serialization;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Data\n{\n    public static class BgmPreset\n    {\n        private class BgmResource\n        {\n            [YamlMember(Alias = \"name\")]\n            public string Name { get; set; }\n\n            [YamlMember(Alias = \"bgm\")]\n            public List<BgmItem> Bgm { get; set; }\n        }\n\n        private class BgmItem\n        {\n            [YamlMember(Alias = \"id\")]\n            public int Id { get; set; }\n\n            [YamlMember(Alias = \"name\")]\n            public string Name { get; set; }\n        }\n\n        private static List<BgmModel> _bgm;\n\n        public static void LazyInitialize()\n        {\n            try\n            {\n                Task.Run(async () =>\n                {\n                    _bgm = (await InternalFetchLocations()).Select(x => new BgmModel\n                    {\n                        Id = x.Id,\n                        Name = x.Name\n                    })\n                    .OrderBy(x => x.Id)\n                    .ToList();\n                });\n            }\n            catch\n            {\n                // Whatever happens, we do not want to cause fatal crashes\n            }\n        }\n\n        public static List<BgmModel> Get() => _bgm;\n\n        private static async Task<List<BgmItem>> InternalFetchLocations()\n        {\n            const string url = \"https://raw.githubusercontent.com/Xeeynamo/KH3SaveEditor/master/resources/ff7r-meta-bgm.yml\";\n            using (var client = new HttpClient())\n            {\n                using (var response = await client.GetAsync(url))\n                {\n                    if (response.StatusCode == HttpStatusCode.OK)\n                    {\n                        var body = await response.Content.ReadAsStringAsync();\n                        return new DeserializerBuilder()\n                            .Build()\n                            .Deserialize<BgmResource>(body)\n                            .Bgm;\n                    }\n\n                    throw new Exception($\"Fetch failed: the server returned {response.StatusCode}.\");\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Data/ItemsPreset.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibFf7Remake.Types;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing YamlDotNet.Serialization;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Data\n{\n    public class ItemName\n    {\n        [YamlMember(Alias = \"id\")]\n        public int Id { get; set; }\n\n        [YamlMember(Alias = \"name\")]\n        public string Name { get; set; }\n\n        [YamlMember(Alias = \"icon\")]\n        public string Icon { get; set; }\n    }\n\n    public static class ItemsPreset\n    {\n        public class ItemsResource\n        {\n            [YamlMember(Alias = \"name\")]\n            public string Name { get; set; }\n\n            [YamlMember(Alias = \"items\")]\n            public List<ItemName> Items { get; set; }\n        }\n\n        public class ItemProperty\n        {\n            public int Id { get; set; }\n            public string Name { get; set; }\n            public string Icon { get; set; }\n        }\n\n        private static Dictionary<int, ItemProperty> _data = Enum.GetValues(typeof(InventoryType))\n            .Cast<InventoryType>()\n            .ToDictionary(x => (int)x, x => new ItemProperty\n            {\n                Id = (int)x,\n                Name = InfoAttribute.GetInfo(x),\n                Icon = GetIconAttribute(x)\n            });\n\n        public static void LazyInitialize()\n        {\n            try\n            {\n                Task.Run(async () =>\n                {\n                    foreach (var item in await InternalFetchLocations())\n                    {\n                        _data[item.Id] = new ItemProperty\n                        {\n                            Id = item.Id,\n                            Name = item.Name,\n                            Icon = item.Icon\n                        };\n                    }\n                });\n            }\n            catch\n            {\n                // Whatever happens, we do not want to cause fatal crashes\n            }\n        }\n\n        public static ItemCategory GetItemCategory(InventoryType inventoryType)\n        {\n            if (inventoryType == InventoryType.AiProgrammingCore ||\n                inventoryType == InventoryType.Gil)\n                return ItemCategory.Gil;\n            else if ((int)inventoryType < 100)\n                return ItemCategory.Consumable;\n            else if ((int)inventoryType >= 0x100 && (int)inventoryType < 0x130)\n                return ItemCategory.Track;\n            else if ((int)inventoryType < 1000)\n                return ItemCategory.Key;\n            else if ((int)inventoryType >= 9000 && (int)inventoryType < 9017)\n                return ItemCategory.Armor;\n            else if ((int)inventoryType >= 9017 && (int)inventoryType < 9041)\n                return ItemCategory.Accessory;\n            else if ((int)inventoryType >= 9041 && (int)inventoryType < 9050)\n                return ItemCategory.Armor;\n            else if ((int)inventoryType >= 9050 && (int)inventoryType < 9055)\n                return ItemCategory.Accessory;\n            else if ((int)inventoryType >= 9055 && (int)inventoryType < 9058)\n                return ItemCategory.Armor;\n            else if ((int)inventoryType >= 9058 && (int)inventoryType < 9061)\n                return ItemCategory.Accessory;\n            return (ItemCategory)(-1);\n        }\n\n        public static ItemProperty Get(InventoryType type) => Get((int)type) ?? new ItemProperty\n        {\n            Id = (int)type,\n            Name = $\"{(int)type}\",\n            Icon = null\n        };\n        public static IEnumerable<ItemProperty> GetAll() =>\n            _data.Values.OrderBy(x => x.Id);\n\n        public static ItemProperty Get(int itemId) =>\n            _data.TryGetValue(itemId, out var item) ? item : null;\n\n        private static string GetIconAttribute(InventoryType item)\n        {\n            var memberInfo = typeof(InventoryType).GetMember(item.ToString()).FirstOrDefault();\n\n            if (memberInfo != null)\n            {\n                return memberInfo.CustomAttributes\n                    .Select(x =>\n                    {\n                        var name = x.AttributeType.Name;\n                        var indexAttributeStr = name.IndexOf(\"Attribute\");\n                        return indexAttributeStr > 0 ? name.Substring(0, indexAttributeStr) : null;\n                    })\n                    .FirstOrDefault();\n            }\n\n            return null;\n        }\n\n        private static async Task<IEnumerable<ItemName>> InternalFetchLocations()\n        {\n            const string url = \"https://raw.githubusercontent.com/Xeeynamo/KH3SaveEditor/master/resources/ff7r-meta-items.yml\";\n            using (var client = new HttpClient())\n            {\n                using (var response = await client.GetAsync(url))\n                {\n                    if (response.StatusCode == HttpStatusCode.OK)\n                    {\n                        var body = await response.Content.ReadAsStringAsync();\n                        var model = new DeserializerBuilder()\n                            .Build()\n                            .Deserialize<ItemsResource>(body);\n\n                        return model.Items;\n                    }\n\n                    throw new Exception($\"Fetch failed: the server returned {response.StatusCode}.\");\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Data/LocationsPreset.cs",
    "content": "using KHSave.SaveEditor.Common.Services;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing YamlDotNet.Serialization;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Data\n{\n    public class Location\n    {\n        [YamlMember(Alias = \"chapter\")]\n        public int Chapter { get; set; }\n\n        [YamlMember(Alias = \"oob\")]\n        public bool OutOfBounds { get; set; }\n\n        [YamlMember(Alias = \"description\")]\n        public string Description { get; set; }\n\n        [YamlMember(Alias = \"x\")]\n        public float PositionX { get; set; }\n\n        [YamlMember(Alias = \"y\")]\n        public float PositionY { get; set; }\n\n        [YamlMember(Alias = \"z\")]\n        public float PositionZ { get; set; }\n\n        public Location()\n        {\n\n        }\n\n        public Location(int chapter, bool oob, string description, double x, double y, double z)\n        {\n            Chapter = chapter;\n            OutOfBounds = oob;\n            Description = description;\n            PositionX = (float)x;\n            PositionY = (float)y;\n            PositionZ = (float)z;\n        }\n    }\n\n    public static class LocationsPreset\n    {\n        public class LocationsResource\n        {\n            [YamlMember(Alias = \"name\")]\n            public string Name { get; set; }\n\n            [YamlMember(Alias = \"locations\")]\n            public List<Location> Locations { get; set; }\n        }\n\n        private static GenericEqualityComparer<Location> _locationEqualityComparer = new GenericEqualityComparer<Location>((x, y) =>\n            x.Description == y.Description);\n        private static List<Location> _offlineData = new List<Location>\n        {\n            new Location(1, false, \"Inside the train station\", 5483.766, -8462.45, 6662.088),\n            new Location(1, false, \"End of Chapter 1\", 14145, -10470, 5290),\n            new Location(2, false, \"Beginning of Chapter 2\", -24580.36, -12204.58, -228.8734),\n            new Location(2, false, \"Nibhelim flashback pt.1\", -21708.71, -1268.751, -80),\n            new Location(2, false, \"Nibhelim flashback pt.2\", -18852.58, -3145.46, -39.16602),\n            new Location(2, false, \"Before meeting Aerith\", -14485.03, -898.4921, -69.99866),\n            new Location(2, false, \"Before battling The Huntsman\", 19275.55, 3117.768, -579.7065),\n            new Location(2, false, \"In the train\", 8.310989, -10064.3, -5000),\n            new Location(3, false, \"Sector 7 Slums: Train Station\", 1999.344, -14238.85, 126.1621),\n            new Location(4, false, \"Sector 7 Plate: After bike mini-game\", -87719.63, 15676.29, -1538.711),\n            new Location(5, false, \"Train to Sector 4\", 292.2432, 15003.34, 14178.34),\n            new Location(6, false, \"Sector 4 Plate: Section F-01\", -12493.72, 15620.63, 342.5763),\n            new Location(7, false, \"Mako Reactor 5: Beginning\", 6020.055, 2282.69, 2345.815),\n            new Location(8, false, \"Sector 5 Slums: Church\", -69892.78, 37427, 192.523),\n            new Location(8, false, \"Sector 5 Slums: Aerith's house roof\", 2282.001, 23048.63, 1634.191),\n            new Location(8, false, \"Sector 5 Slums: Aerith's garden\", 1094.311, 25737.78, 1080.449),\n            new Location(8, false, \"Sector 6 Slums: Gate\", 67969.91, -35484.38, 127.1474),\n            new Location(10, false, \"Sewers: Beginning\", -275.946, 26.4429, -50),\n            new Location(11, false, \"Train Graveyard: Beginning\", -50452.12, 41068.95, 16.79639),\n            new Location(15, false, \"Sector 7 Plate: Beginning\", -189.5129, 3905.749, -30.82977),\n            new Location(16, false, \"Sector 0: Electric power tower\", 35556.4, -12843.36, -23791.25),\n            new Location(16, false, \"Sector 0: Close to the bridge\", 21762.28, -14453.08, -29488.62),\n            new Location(17, false, \"Shinra: Aerith's room\", 7314.688, 3183.011, 5026.195),\n            new Location(18, false, \"End of the road\", 31915.78, 27313.2, -0.9995728),\n            new Location(18, false, \"Destiny's crossroads\", 31739.57, 46240.6, 558.6942),\n        };\n\n        private static List<Location> _onlineData;\n\n        public static List<Location> GetLocationsOffline() => _offlineData;\n\n        public static async Task<List<Location>> FetchLocations()\n        {\n            if (_onlineData == null)\n            {\n                var onlineData = await InternalFetchLocations();\n                _onlineData = _offlineData.Concat(onlineData)\n                    .Distinct(_locationEqualityComparer)\n                    .OrderBy(x => x.Chapter)\n                    .ToList();\n            }\n\n            return _onlineData;\n        }\n\n        private static async Task<IEnumerable<Location>> InternalFetchLocations()\n        {\n            const string url = \"https://raw.githubusercontent.com/Xeeynamo/KH3SaveEditor/master/resources/ff7r-meta-locations.yml\";\n            using (var client = new HttpClient())\n            {\n                using (var response = await client.GetAsync(url))\n                {\n                    if (response.StatusCode == HttpStatusCode.OK)\n                    {\n                        var body = await response.Content.ReadAsStringAsync();\n                        var model = new DeserializerBuilder()\n                            .Build()\n                            .Deserialize<LocationsResource>(body);\n\n                        return model.Locations;\n                    }\n\n                    throw new Exception($\"Fetch failed: the server returned {response.StatusCode}.\");\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/KHSave.SaveEditor.Ff7Remake.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"YamlDotNet\" Version=\"11.2.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.LibFf7Remake\\KHSave.LibFf7Remake.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/KHSave.SaveEditor.Ff7Remake_x53vqark_wpftmp.csproj",
    "content": "<Project>\n  <PropertyGroup>\n    <AssemblyName>KHSave.SaveEditor.Ff7Remake</AssemblyName>\n    <IntermediateOutputPath>obj\\Release\\</IntermediateOutputPath>\n    <BaseIntermediateOutputPath>obj\\</BaseIntermediateOutputPath>\n    <MSBuildProjectExtensionsPath>D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\</MSBuildProjectExtensionsPath>\n    <_TargetAssemblyProjectName>KHSave.SaveEditor.Ff7Remake</_TargetAssemblyProjectName>\n  </PropertyGroup>\n  <Import Project=\"Sdk.props\" Sdk=\"Microsoft.NET.Sdk\" />\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"YamlDotNet\" Version=\"11.2.1\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.LibFf7Remake\\KHSave.LibFf7Remake.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\Accessibility.dll\" />\n    <ReferencePath Include=\"C:\\Users\\Xeeyn\\.nuget\\packages\\sharpziplib\\1.3.3\\lib\\netstandard2.1\\ICSharpCode.SharpZipLib.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.Archives\\bin\\Release\\net6\\KHSave.Archives.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave\\bin\\Release\\net6\\KHSave.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.LibFf7Remake\\bin\\Release\\net6\\KHSave.LibFf7Remake.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Common\\bin\\Release\\net6-windows\\KHSave.SaveEditor.Common.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\Microsoft.CSharp.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\Microsoft.VisualBasic.Core.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\Microsoft.VisualBasic.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\Microsoft.VisualBasic.Forms.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\Microsoft.Win32.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\Microsoft.Win32.Registry.AccessControl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\Microsoft.Win32.Registry.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\Microsoft.Win32.SystemEvents.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\mscorlib.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\netstandard.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationCore.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.Aero.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.Aero2.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.AeroLite.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.Classic.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.Luna.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.Royale.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationUI.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\ReachFramework.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.AppContext.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Buffers.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.CodeDom.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Collections.Concurrent.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Collections.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Collections.Immutable.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Collections.NonGeneric.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Collections.Specialized.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.Annotations.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.DataAnnotations.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.EventBasedAsync.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.TypeConverter.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Configuration.ConfigurationManager.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Configuration.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Console.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Core.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Data.Common.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Data.DataSetExtensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Data.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Design.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.Contracts.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.Debug.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.DiagnosticSource.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Diagnostics.EventLog.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.FileVersionInfo.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Diagnostics.PerformanceCounter.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.Process.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.StackTrace.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.TextWriterTraceListener.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.Tools.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.TraceSource.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.Tracing.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.DirectoryServices.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Drawing.Common.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Drawing.Design.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Drawing.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Drawing.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Dynamic.Runtime.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Formats.Asn1.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Globalization.Calendars.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Globalization.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Globalization.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Compression.Brotli.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Compression.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Compression.FileSystem.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Compression.ZipFile.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.FileSystem.AccessControl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.FileSystem.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.FileSystem.DriveInfo.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.FileSystem.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.FileSystem.Watcher.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.IsolatedStorage.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.MemoryMappedFiles.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.IO.Packaging.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Pipes.AccessControl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Pipes.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.UnmanagedMemoryStream.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Linq.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Linq.Expressions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Linq.Parallel.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Linq.Queryable.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Memory.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Http.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Http.Json.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.HttpListener.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Mail.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.NameResolution.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.NetworkInformation.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Ping.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Requests.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Security.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.ServicePoint.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Sockets.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.WebClient.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.WebHeaderCollection.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.WebProxy.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.WebSockets.Client.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.WebSockets.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Numerics.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Numerics.Vectors.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ObjectModel.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Printing.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.DispatchProxy.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Emit.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Emit.ILGeneration.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Emit.Lightweight.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Metadata.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.TypeExtensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Resources.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Resources.Reader.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Resources.ResourceManager.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Resources.Writer.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.CompilerServices.Unsafe.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.CompilerServices.VisualC.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Handles.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.InteropServices.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.InteropServices.RuntimeInformation.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Intrinsics.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Loader.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Numerics.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Serialization.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Serialization.Formatters.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Serialization.Json.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Serialization.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Serialization.Xml.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.AccessControl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Claims.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.Algorithms.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.Cng.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.Csp.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.Encoding.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.OpenSsl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Security.Cryptography.Pkcs.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Security.Cryptography.ProtectedData.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.X509Certificates.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Security.Cryptography.Xml.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Security.Permissions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Principal.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Principal.Windows.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.SecureString.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ServiceModel.Web.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ServiceProcess.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.Encoding.CodePages.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.Encoding.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.Encoding.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.Encodings.Web.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.Json.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.RegularExpressions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Threading.AccessControl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Channels.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Overlapped.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Tasks.Dataflow.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Tasks.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Tasks.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Tasks.Parallel.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Thread.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.ThreadPool.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Timer.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Transactions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Transactions.Local.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ValueTuple.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Web.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Web.HttpUtility.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Controls.Ribbon.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Windows.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Forms.Design.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Forms.Design.Editors.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Forms.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Forms.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Input.Manipulations.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Presentation.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Xaml.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.Linq.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.ReaderWriter.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.Serialization.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.XDocument.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.XmlDocument.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.XmlSerializer.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.XPath.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.XPath.XDocument.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\UIAutomationClient.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\UIAutomationClientSideProviders.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\UIAutomationProvider.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\UIAutomationTypes.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\WindowsBase.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\WindowsFormsIntegration.dll\" />\n    <ReferencePath Include=\"C:\\Users\\Xeeyn\\.nuget\\packages\\xe.binarymapper\\1.5.2\\lib\\netstandard2.0\\Xe.BinaryMapper.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\XeEngine.Tools.Public\\Xe\\bin\\Release\\netstandard2.0\\Xe.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\XeEngine.Tools.Public\\Xe.Drawing\\bin\\Release\\netstandard2.0\\Xe.Drawing.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\XeEngine.Tools.Public\\Xe.Tools\\bin\\Release\\netstandard2.0\\Xe.Tools.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\bin\\Release\\netcoreapp3.1\\Xe.Tools.Wpf.dll\" />\n    <ReferencePath Include=\"C:\\Users\\Xeeyn\\.nuget\\packages\\yamldotnet\\11.2.1\\lib\\netstandard2.1\\YamlDotNet.dll\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\ChapterEntryView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\ChapterMainView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\ChapterObjectsView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\ChapterPlayableView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\ChaptersView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\CharacterEntryView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\CharactersView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\DeveloperView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\EquipmentEntryView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\EquipmentsView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\FF7RMainView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\GlobalView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\InventoryEntryView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\InventoryView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\MateriaEntryView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\MateriaView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\PositionView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\TeleportWindow.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\Unknown1View.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\Unknown2View.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\Views\\Unknown3View.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Ff7Remake\\obj\\Release\\net6-windows\\GeneratedInternalTypeHelper.g.cs\" />\n  </ItemGroup>\n  <Import Project=\"Sdk.targets\" Sdk=\"Microsoft.NET.Sdk\" />\n</Project>"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Models/BgmModel.cs",
    "content": "namespace KHSave.SaveEditor.Ff7Remake.Models\n{\n    public class BgmModel\n    {\n        public int Id { get; set; }\n        public string Name { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Models/ChapterCharacterEntryModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing KHSave.LibFf7Remake.Chunks;\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.LibFf7Remake.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing System.Windows;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Commands;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Models\n{\n    public class ChapterCharacterEntryModel :\n        BaseNotifyPropertyChanged\n    {\n        private readonly ChunkChapter _chapter;\n        private readonly int _characterIndex;\n\n        public ChapterCharacterEntryModel(ChunkChapter chapter, int characterIndex)\n        {\n            _chapter = chapter;\n            _characterIndex = characterIndex;\n            StatusTypes = new KhEnumListModel<CharacterStatusType>(() => default, x => { });\n            TeleportCommand = new RelayCommand(_ =>\n            {\n                new Views.TeleportWindow(this).ShowDialog();\n            });\n        }\n\n        private Vector3f Position => _chapter.Positions[_characterIndex];\n        private Vector3f Rotation => _chapter.Rotations[_characterIndex];\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n        public KhEnumListModel<CharacterStatusType> StatusTypes { get; }\n        public RelayCommand TeleportCommand { get; }\n\n        public string Name => InfoAttribute.GetInfo((CharacterType)_characterIndex);\n        public string TextCoordinates => $\"POS({PosX:F0}, {PosY:F0}, {PosZ:F0})\";\n        public CharacterStatusType Status\n        { get => _chapter.CharacterStatus[_characterIndex]; set => _chapter.CharacterStatus[_characterIndex] = value; }\n\n        public float PosX { get => Position.X; set { Position.X = value; OnPropertyChanged(); OnPropertyChanged(nameof(TextCoordinates)); } }\n        public float PosY { get => Position.Y; set { Position.Y = value; OnPropertyChanged(); OnPropertyChanged(nameof(TextCoordinates)); } }\n        public float PosZ { get => Position.Z; set { Position.Z = value; OnPropertyChanged(); OnPropertyChanged(nameof(TextCoordinates)); } }\n        public float RotX { get => Rotation.X; set { Rotation.X = value; OnPropertyChanged(); OnPropertyChanged(nameof(TextCoordinates)); } }\n        public float RotY { get => Rotation.Y; set { Rotation.Y = value; OnPropertyChanged(); OnPropertyChanged(nameof(TextCoordinates)); } }\n        public float RotZ { get => Rotation.Z; set { Rotation.Z = value; OnPropertyChanged(); OnPropertyChanged(nameof(TextCoordinates)); } }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Models/ChapterEntryModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Chunks;\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.LibFf7Remake.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Ff7Remake.Data;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Models\n{\n    public class ChapterEntryModel : BaseNotifyPropertyChanged\n    {\n        private readonly ChunkChapter _chapter;\n        private readonly int _index;\n\n        public ChapterEntryModel(ChunkChapter chapter, int index, Vector3f cloudPosition)\n        {\n            _chapter = chapter;\n            _index = index;\n            CharacterStatusTypes = new KhEnumListModel<CharacterStatusType>(() => default, x => { });\n\n            if (Global.IsAdvancedMode)\n            {\n                Objects = new Xe.Tools.Wpf.Models.GenericListModel<ChapterObjectEntry>(\n                    chapter.Npc.Select(x => new ChapterObjectEntry(x, chapter.Npc, cloudPosition)));\n                Objects2 = new Xe.Tools.Wpf.Models.GenericListModel<ChapterObjectEntry>(\n                    chapter.Objects.Select(x => new ChapterObjectEntry(x, chapter.Objects, cloudPosition)));\n                Objects3 = new Xe.Tools.Wpf.Models.GenericListModel<ChapterObjectEntry>(\n                    chapter.Enemies.Select(x => new ChapterObjectEntry(x, chapter.Enemies, cloudPosition)));\n            }\n            else\n            {\n                // Speed up loading times on basic mode\n                Objects = new Xe.Tools.Wpf.Models.GenericListModel<ChapterObjectEntry>(new ChapterObjectEntry[0]);\n                Objects2 = Objects;\n                Objects3 = Objects;\n            }\n        }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n        public KhEnumListModel<CharacterStatusType> CharacterStatusTypes { get; }\n\n        public bool IsChapterEnabled => !(_chapter.CharacterStatus?.All(x => x == 0) ?? true);\n        public Visibility ChapterVisibility => IsChapterEnabled ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility ChapterDisabledVisibility => !IsChapterEnabled ? Visibility.Visible : Visibility.Collapsed;\n\n        public string Name\n        {\n            get\n            {\n                var chunkIdDesc = _index switch\n                {\n                    0 => \"Chapter 1\",\n                    1 => \"Chapter 2\",\n                    2 => \"Chapter 3,12\",\n                    3 => \"Chapter 4\",\n                    4 => \"Chapter 5\",\n                    5 => \"Chapter 6\",\n                    6 => \"Chapter 7\",\n                    7 => \"Unused\",\n                    8 => \"Ch. 8,9,13,14\",\n                    9 => \"Ch. 10\",\n                    10 => \"Ch. 11\",\n                    11 => \"Unused\",\n                    12 => \"Unused\",\n                    13 => \"?????\",\n                    14 => \"Unused\",\n                    15 => \"Chapter 15\",\n                    16 => \"Ch. 16,17,18\",\n                    17 => \"Unused\",\n                    18 => \"DLC Chapter 1\",\n                    19 => \"DLC Chapter 2\",\n                    _ => \"\",\n                };\n\n                return $\"#{_index:D02} {chunkIdDesc}\";\n            }\n        }\n\n        public IEnumerable<BgmModel> BgmList => BgmPreset.Get();\n        public bool IsChapterInPlay { get => _chapter.IsChapterInPlay != 0; set => _chapter.IsChapterInPlay = (byte)(value ? 1 : 0); }\n        public byte ChapterId { get => _chapter.ChapterId; set => _chapter.ChapterId = value; }\n        public int Bgm { get => _chapter.Bgm; set { _chapter.Bgm = (ushort)value; OnPropertyChanged(); } }\n\n        public ChapterCharacterEntryModel Entity0 => new ChapterCharacterEntryModel(_chapter, 0);\n        public ChapterCharacterEntryModel Entity1 => new ChapterCharacterEntryModel(_chapter, 1);\n        public ChapterCharacterEntryModel Entity2 => new ChapterCharacterEntryModel(_chapter, 2);\n        public ChapterCharacterEntryModel Entity3 => new ChapterCharacterEntryModel(_chapter, 3);\n        public ChapterCharacterEntryModel Entity4 => new ChapterCharacterEntryModel(_chapter, 4);\n        public ChapterCharacterEntryModel Entity5 => new ChapterCharacterEntryModel(_chapter, 5);\n        public ChapterCharacterEntryModel Entity6 => new ChapterCharacterEntryModel(_chapter, 6);\n        public ChapterCharacterEntryModel Entity7 => new ChapterCharacterEntryModel(_chapter, 7);\n        public ChapterCharacterEntryModel Entity8 => new ChapterCharacterEntryModel(_chapter, 8);\n        public ChapterCharacterEntryModel Entity9 => new ChapterCharacterEntryModel(_chapter, 9);\n        public ChapterCharacterEntryModel Entity10 => new ChapterCharacterEntryModel(_chapter, 10);\n        public ChapterCharacterEntryModel Entity11 => new ChapterCharacterEntryModel(_chapter, 11);\n\n        public Xe.Tools.Wpf.Models.GenericListModel<ChapterObjectEntry> Objects { get; }\n        public Xe.Tools.Wpf.Models.GenericListModel<ChapterObjectEntry> Objects2 { get; }\n        public Xe.Tools.Wpf.Models.GenericListModel<ChapterObjectEntry> Objects3 { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Models/ChapterObjectEntry.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake.Models;\nusing System.Collections.Generic;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Commands;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Models\n{\n    public class ChapterObjectEntry : BaseNotifyPropertyChanged\n    {\n        private readonly ChapterObject _chapterObject;\n\n        public ChapterObjectEntry(ChapterObject chapterObject, IEnumerable<ChapterObject> siblingObjects, Vector3f cloudPosition)\n        {\n            _chapterObject = chapterObject;\n\n            DebugTeleportToCloudCommand = new RelayCommand(_ =>\n            {\n                chapterObject.PositionX = cloudPosition.X;\n                chapterObject.PositionY = cloudPosition.Y;\n                chapterObject.PositionZ = cloudPosition.Z;\n                OnAllPropertiesChanged();\n            });\n            DebugTeleportToObjectCommand = new RelayCommand(_ =>\n            {\n                foreach (var obj in siblingObjects)\n                {\n                    obj.PositionX = chapterObject.PositionX;\n                    obj.PositionY = chapterObject.PositionY;\n                    obj.PositionZ = chapterObject.PositionZ;\n                    OnAllPropertiesChanged();\n                }\n            });\n            DebugIdRandomnessCommand = new RelayCommand(_ =>\n            {\n                foreach (var obj in siblingObjects)\n                {\n                    obj.Index = chapterObject.Index;\n                    OnAllPropertiesChanged();\n                }\n            });\n        }\n\n        public RelayCommand DebugTeleportToCloudCommand { get; }\n        public RelayCommand DebugCloudToObjectCommand { get; }\n        public RelayCommand DebugTeleportToObjectCommand { get; }\n        public RelayCommand DebugIdRandomnessCommand { get; }\n\n        public string Name => ToString();\n\n        public int Index { get => _chapterObject.Index; set { _chapterObject.Index = value; OnPropertyChanged(nameof(Name)); } }\n\n        public float Unknown04 { get => _chapterObject.Unknown04; set { _chapterObject.Unknown04 = value; OnPropertyChanged((nameof(Name))); } }\n        public int Unknown08 { get => _chapterObject.Unknown08; set { _chapterObject.Unknown08 = value; OnPropertyChanged((nameof(Name))); } }\n        public float Unknown0c { get => _chapterObject.Unknown0c; set { _chapterObject.Unknown0c = value; OnPropertyChanged((nameof(Name))); } }\n        public float PositionX { get => _chapterObject.PositionX; set { _chapterObject.PositionX = value; OnPropertyChanged((nameof(Name))); } }\n        public float PositionY { get => _chapterObject.PositionY; set { _chapterObject.PositionY = value; OnPropertyChanged((nameof(Name))); } }\n        public float PositionZ { get => _chapterObject.PositionZ; set { _chapterObject.PositionZ = value; OnPropertyChanged((nameof(Name))); } }\n        public float Rotation { get => _chapterObject.Rotation; set { _chapterObject.Rotation = value; OnPropertyChanged((nameof(Name))); } }\n\n        public override string ToString() => _chapterObject.ToString();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Models/CharacterEntryModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.LibFf7Remake.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Ff7Remake.ViewModels;\nusing System;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Models\n{\n    public class CharacterEntryModel\n    {\n        private readonly SaveFf7Remake _save;\n        private readonly CharacterType _characterType;\n        private readonly Character _character;\n        private readonly CharacterStats _characterStats;\n        private readonly CharacterEquipment _characterEquipment;\n\n        public CharacterEntryModel(SaveFf7Remake save, int index, EquipmentsViewModel weapons, MateriaViewModel materia)\n        {\n            _save = save;\n            _characterType = (CharacterType)index;\n            _character = save.Characters[index];\n            _characterStats = save.CharactersStats[index];\n            _characterEquipment = save.CharactersEquipment[index];\n            Weapons = weapons;\n            Materia = materia;\n        }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n        public EquipmentsViewModel Weapons { get; }\n        public MateriaViewModel Materia { get; }\n\n        public string Name => InfoAttribute.GetInfo(_characterType);\n        public bool IsUnused => _characterType >= CharacterType.Unused7;\n\n        public byte Level { get => _character.Level; set => _character.Level = value; }\n        public bool IsUnlocked { get => _character.IsUnlocked; set => _character.IsUnlocked = value; }\n        public byte AtbBarCount { get => _character.AtbBarCount; set => _character.AtbBarCount = value; }\n        public byte Speed { get => _character.Speed; set => _character.Speed = value; }\n        public int Limit { get => _character.Limit; set => _character.Limit = Math.Max(0, Math.Min(1000, value)); }\n        public int Unknown08 { get => _character.Unknown08; set => _character.Unknown08 = value; }\n        public int Unknown0c { get => _character.Unknown0c; set => _character.Unknown0c = value; }\n        public int CurrentHp { get => _character.CurrentHp; set => _character.CurrentHp = value; }\n        public int MaxHp { get => _character.MaxHp; set => _character.MaxHp = value; }\n        public int CurrentMp { get => _character.CurrentMp; set => _character.CurrentMp = value; }\n        public int MaxMp { get => _character.MaxMp; set => _character.MaxMp = value; }\n        public int Experience { get => _character.Experience; set => _character.Experience = value; }\n        public int Unknown14 { get => _character.Unknown14; set => _character.Unknown14 = value; }\n        public int Attack { get => _character.Attack; set => _character.Attack = value; }\n        public int MagicAttack { get => _character.MagicAttack; set => _character.MagicAttack = value; }\n        public int Defense { get => _character.Defense; set => _character.Defense = value; }\n        public int MagicDefense { get => _character.MagicDefense; set => _character.MagicDefense = value; }\n        public int Luck { get => _character.Luck; set => _character.Luck = value; }\n        public int Unknown3c { get => _character.Unknown3c; set => _character.Unknown3c = value; }\n\n        public int Strength { get => _characterStats.Strength; set => _characterStats.Strength = value; }\n        public int Magic { get => _characterStats.Magic; set => _characterStats.Magic = value; }\n        public int Vitality { get => _characterStats.Vitality; set => _characterStats.Vitality = value; }\n        public int Spirit { get => _characterStats.Spirit; set => _characterStats.Spirit = value; }\n\n        public int EquippedWeapon { get => _characterEquipment.Weapon; set => _characterEquipment.Weapon = value; }\n        public int EquippedArmor { get => _characterEquipment.Armor; set => _characterEquipment.Armor = value; }\n        public int EquippedAccessory { get => _characterEquipment.Accessory; set => _characterEquipment.Accessory = value; }\n        public int SummonMateria { get => _save.SummonMateria[(int)_characterType] + 1; set => _save.SummonMateria[(int)_characterType] = value - 1; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Models/ChunkEntryModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Chunks;\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.SaveEditor.Common.Contracts;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Windows;\nusing Xe.Tools.Wpf.Commands;\nusing Xe.Tools.Wpf.Dialogs;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Models\n{\n    public class ChunkEntryModel\n    {\n        private const string MessageBoxTextDifferentSizeWarning = \"You are importing a chunk that have a different size.\\nThis will potentially lead to unexpected game behaviour.\\n\\nDo you want to continue?\";\n        private readonly SaveFf7Remake _save;\n        private readonly IRefreshUi _refreshUi;\n        private readonly Chunk _chunk;\n        private readonly int _index;\n        private readonly IEnumerable<FileDialogFilter> Filter = FileDialogFilterComposer\n            .Compose()\n            .AddExtensions(\"Final Fantasy VII Remake CHUNK\", \"ff7rchunk\")\n            .AddAllFiles();\n\n        public ChunkEntryModel(SaveFf7Remake save, IRefreshUi refreshUi, Chunk chunk, int index)\n        {\n            _save = save;\n            _refreshUi = refreshUi;\n            _chunk = chunk;\n            _index = index;\n            ImportCommand = new RelayCommand(_ => FileDialog.OnOpen(Import, Filter, $\"chunk{_index}\"));\n            ExportCommand = new RelayCommand(_ => FileDialog.OnSave(Export, Filter, $\"chunk{_index}\"));\n        }\n\n        public RelayCommand ImportCommand { get; }\n        public RelayCommand ExportCommand { get; }\n\n        public byte ChunkType { get => _chunk.Header.Unknown00; set => _chunk.Header.Unknown00 = value; }\n        public byte ChapterId { get => _chunk.Header.Unknown01; set => _chunk.Header.Unknown01 = value; }\n        public byte Unknown { get => _chunk.Header.Unknown02; set => _chunk.Header.Unknown02 = value; }\n\n        public string MagicCode { get => _chunk.Content?.MagicCode; set => _chunk.Content.MagicCode = value; }\n        public int Unknown10 { get => _chunk.Content?.Unknown10 ?? -1; set => _chunk.Content.Unknown10 = value; }\n        public int DataSize\n        {\n            get\n            {\n                if (_chunk.Content == null)\n                    return -1;\n                return Math.Max(0, _chunk.Content.ChunkLength - Chunk.ContentHeaderLength);\n            }\n\n            private set => _chunk.Content.ChunkLength = value + Chunk.ContentHeaderLength;\n        }\n\n        private void Import(string fileName)\n        {\n            using (var stream = File.OpenRead(fileName))\n            {\n                if (stream.Length != DataSize)\n                {\n                    if (MessageBox.Show(MessageBoxTextDifferentSizeWarning, \"Warning\", MessageBoxButton.YesNo, MessageBoxImage.Warning) != MessageBoxResult.Yes)\n                        return;\n                }\n\n                _chunk.Content.RawData = stream.ReadAllBytes();\n                DataSize = _chunk.Content.RawData.Length;\n\n                _save.ReimportChunks();\n                _refreshUi.RefreshUi();\n            }\n        }\n\n        private void Export(string fileName)\n        {\n            using (var stream = File.Create(fileName))\n                stream.Write(_chunk.Content.RawData, 0, _chunk.Content.RawData.Length);\n        }\n\n        public override string ToString() =>\n            $\"Chunk ID #{_index}: {ChunkType}, {ChapterId}, {Unknown} | {MagicCode}\";\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Models/EquipmentEntryModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.LibFf7Remake.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Ff7Remake.Data;\nusing KHSave.SaveEditor.Ff7Remake.ViewModels;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Media;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Models\n{\n    public class EquipmentEntryModel : BaseNotifyPropertyChanged, SearchEngine.IName\n    {\n        private readonly int _arrayIndex;\n        private readonly WeaponFound[] _weaponFound;\n        private readonly MateriaEquipment _equipment;\n        private readonly MateriaViewModel _materiaVm;\n\n        public EquipmentEntryModel(int index, WeaponFound[] weaponFound, MateriaEquipment equipment, MateriaViewModel vm)\n        {\n            _arrayIndex = index;\n            _weaponFound = weaponFound;\n            _equipment = equipment;\n            _materiaVm = vm;\n            EquipmentType = ItemModel.GetItemModels();\n            CharacterTypes = new KhEnumListModel<CharacterType>(() => Character, x => Character = x);\n        }\n\n        private bool IsWeapon => _arrayIndex >= 0; // 8\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility AsWeaponVisibility => IsWeapon ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility ItemTypeVisibility => Global.IsAdvancedMode || Character == CharacterType.None ? Visibility.Visible : Visibility.Collapsed;\n        public bool IsVisible => Global.IsAdvancedMode || Character <= (CharacterType)SaveFf7Remake.LastKnownCharacter || Character == CharacterType.None;\n\n        public IEnumerable<ItemModel> EquipmentType { get; }\n        public KhEnumListModel<CharacterType> CharacterTypes { get; }\n        public ObservableCollection<MateriaEntryModel> Materia => _materiaVm.Items;\n\n        public string Name\n        {\n            get\n            {\n                if (Character != CharacterType.None)\n                    return InfoAttribute.GetInfo(Character);\n\n                var type = ItemId;\n                if (type < 0)\n                    return \"<no equipment>\";\n\n                return ItemsPreset.Get(ItemId)?.Name;\n            }\n        }\n\n        public ImageSource Icon\n        {\n            get\n            {\n                string iconName;\n                switch (Character)\n                {\n                    case CharacterType.Cloud:\n                        iconName = \"WeaponCloud\";\n                        break;\n                    case CharacterType.Barret:\n                        iconName = \"WeaponBarret\";\n                        break;\n                    case CharacterType.Tifa:\n                        iconName = \"WeaponTifa\";\n                        break;\n                    case CharacterType.Aerith:\n                        iconName = \"WeaponAerith\";\n                        break;\n                    case CharacterType.Red13:\n                        iconName = \"Weapon\";\n                        break;\n                    case CharacterType.Yuffie:\n                        iconName = \"WeaponYuffie\";\n                        break;\n                    case CharacterType.Sonon:\n                        iconName = \"WeaponSonon\";\n                        break;\n                    case CharacterType.None:\n                        if (ItemId > 0)\n                            iconName = ItemsPreset.Get(ItemId)?.Icon;\n                        else\n                            iconName = null;\n                        break;\n                    default:\n                        iconName = null;\n                        break;\n                }\n\n                return IconService.Icon(iconName);\n            }\n        }\n\n        private WeaponFound WeaponFound => _weaponFound[_arrayIndex];\n\n        public int Index\n        {\n            get => IsWeapon ? WeaponFound.Index : -1;\n            set\n            {\n                WeaponFound.Index = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public ImageSource MateriaIcon1 => GetMateriaIcon(0);\n        public ImageSource MateriaIcon2 => GetMateriaIcon(1);\n        public ImageSource MateriaIcon3 => GetMateriaIcon(2);\n        public ImageSource MateriaIcon4 => GetMateriaIcon(3);\n        public ImageSource MateriaIcon5 => GetMateriaIcon(4);\n        public ImageSource MateriaIcon6 => GetMateriaIcon(5);\n        public ImageSource MateriaIcon7 => GetMateriaIcon(6);\n        public ImageSource MateriaIcon8 => GetMateriaIcon(7);\n\n        public CharacterType Character\n        {\n            get => (CharacterType)_equipment.Character;\n            set\n            {\n                _equipment.Character = (byte)value;\n                OnPropertyChanged(nameof(Name));\n                OnPropertyChanged(nameof(Icon));\n            }\n        }\n\n        public int ItemId\n        {\n            get => _equipment.ItemId;\n            set\n            {\n                if (value <= 0)\n                    Index = -1;\n                else if (value > 0 && Index == -1)\n                    Index = GetFirstEmptyIndexSlot();\n\n                _equipment.ItemId = value;\n                WeaponFound.ItemId = value;\n                OnPropertyChanged();\n                OnPropertyChanged(nameof(Name));\n                OnPropertyChanged(nameof(Icon));\n            }\n        }\n\n        public int MateriaSlot1 { get => _equipment.MateriaIndex[0] + 1; set { _equipment.MateriaIndex[0] = value - 1; OnPropertyChanged(nameof(MateriaIcon1)); } }\n        public int MateriaSlot2 { get => _equipment.MateriaIndex[1] + 1; set { _equipment.MateriaIndex[1] = value - 1; OnPropertyChanged(nameof(MateriaIcon2)); } }\n        public int MateriaSlot3 { get => _equipment.MateriaIndex[2] + 1; set { _equipment.MateriaIndex[2] = value - 1; OnPropertyChanged(nameof(MateriaIcon3)); } }\n        public int MateriaSlot4 { get => _equipment.MateriaIndex[3] + 1; set { _equipment.MateriaIndex[3] = value - 1; OnPropertyChanged(nameof(MateriaIcon4)); } }\n        public int MateriaSlot5 { get => _equipment.MateriaIndex[4] + 1; set { _equipment.MateriaIndex[4] = value - 1; OnPropertyChanged(nameof(MateriaIcon5)); } }\n        public int MateriaSlot6 { get => _equipment.MateriaIndex[5] + 1; set { _equipment.MateriaIndex[5] = value - 1; OnPropertyChanged(nameof(MateriaIcon6)); } }\n        public int MateriaSlot7 { get => _equipment.MateriaIndex[6] + 1; set { _equipment.MateriaIndex[6] = value - 1; OnPropertyChanged(nameof(MateriaIcon7)); } }\n        public int MateriaSlot8 { get => _equipment.MateriaIndex[7] + 1; set { _equipment.MateriaIndex[7] = value - 1; OnPropertyChanged(nameof(MateriaIcon8)); } }\n\n        private ImageSource GetMateriaIcon(int index)\n        {\n            var materiaId = _equipment.MateriaIndex[index];\n            if (materiaId < 0)\n                return null;\n\n            var materia = Materia.FirstOrDefault(x => x.Index - 1 == materiaId);\n            return materia?.Icon;\n        }\n\n        private int GetFirstEmptyIndexSlot()\n        {\n            var lastIndex = 8;\n\n            foreach (var weapon in _weaponFound\n                .Where(x => x.Index >= lastIndex)\n                .OrderBy(x => x.Index))\n            {\n                if (weapon.Index == lastIndex)\n                    lastIndex = weapon.Index + 1;\n                else\n                    return lastIndex;\n            }\n\n            return lastIndex;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Models/InventroyEntryModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing KHSave.Extensions;\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.LibFf7Remake.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Ff7Remake.Data;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Media;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Models\n{\n    public class InventroyEntryModel :\n        BaseNotifyPropertyChanged,\n        SearchEngine.IName,\n        SearchEngine.ICount\n    {\n        private readonly Inventory _inventory;\n\n        public InventroyEntryModel(Inventory inventory)\n        {\n            _inventory = inventory;\n            ItemTypes = ItemModel.GetItemModels();\n        }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n        public Uri AddItemRequestUrl =>\n            new Uri($\"https://github.com/Xeeynamo/KH3SaveEditor/issues/new?assignees=Xeeynamo&labels=ff7r-item&template=ff7r-missing-item-name-request.md&title=FF7R+Missing+item+name+request+(Item%20ID%20{ItemId})\");\n        public KhEnumListModel<ItemCategory> Categories => new KhEnumListModel<ItemCategory>();\n        public IEnumerable<ItemModel> ItemTypes { get; }\n\n        public string Name => ItemsPreset.Get(Type)?.Name;\n        public ImageSource Icon => IconService.Icon(ItemsPreset.Get(Type)?.Icon);\n\n        public bool IsNameImplemented => !(Name?.All(x => char.IsNumber(x)) ?? true);\n        public Visibility NameRequestVisibility => IsNameImplemented ? Visibility.Collapsed : Visibility.Visible;\n\n        public string Timestamp => _inventory.UnixTimestamp.FromUnixEpoch().ToString();\n        public int Count { get => _inventory.Count; set { _inventory.Count = value; OnPropertyChanged(); } }\n        public InventoryType Type\n        {\n            get => _inventory.Type;\n            set\n            {\n                if (Type == InventoryType.Disabled ||\n                    Type == InventoryType.Empty)\n                {\n                    _inventory.UnixTimestamp = DateTime.Now.ToUnixEpoch();\n                    OnPropertyChanged(nameof(Timestamp));\n                }\n\n                _inventory.Type = value;\n                OnPropertyChanged(nameof(ItemId));\n                OnPropertyChanged(nameof(Icon));\n                OnPropertyChanged(nameof(Name));\n\n                Category = ItemsPreset.GetItemCategory(value);\n                OnPropertyChanged(nameof(Category));\n\n                if (Type == InventoryType.Disabled ||\n                    Type == InventoryType.Empty)\n                {\n                    _inventory.UnixTimestamp = 0;\n                    OnPropertyChanged(nameof(Timestamp));\n                }\n\n                OnPropertyChanged(nameof(Type));\n            }\n        }\n        public int ItemId { get => (int)Type; set { Type = (InventoryType)value; OnPropertyChanged(nameof(Type)); } }\n\n        public int Unused04 { get => _inventory.Unused04; set => _inventory.Unused04 = value; }\n        public ItemCategory Category { get => (ItemCategory)_inventory.Unknown10; set => _inventory.Unknown10 = (int)value; }\n        public int Unused14 { get => _inventory.Unused14; set => _inventory.Unused14 = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Models/ItemModel.cs",
    "content": "using KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Ff7Remake.Data;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows.Media;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Models\n{\n    public class ItemModel\n    {\n        private readonly ItemsPreset.ItemProperty _itemProperty;\n\n        public ItemModel(ItemsPreset.ItemProperty itemProperty)\n        {\n            _itemProperty = itemProperty;\n        }\n\n        public int Id => _itemProperty.Id;\n        public string Name => _itemProperty.Name;\n        public ImageSource Icon => IconService.Icon(_itemProperty.Icon);\n\n        public static IEnumerable<ItemModel> GetItemModels() =>\n            ItemsPreset.GetAll().Select(x => new ItemModel(x));\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Models/MateriaEntryModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Extensions;\nusing KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.LibFf7Remake.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Ff7Remake.Data;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows.Media;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Models\n{\n    public class MateriaEntryModel :\n        BaseNotifyPropertyChanged,\n        SearchEngine.IName\n    {\n        private SaveFf7Remake _save;\n        private Materia _materia;\n\n        public MateriaEntryModel(SaveFf7Remake save, Materia materia)\n        {\n            _save = save;\n            _materia = materia;\n\n            ItemType = ItemModel.GetItemModels();\n            CharacterType = new KhEnumListModel<CharacterType>(() => Character, x => Character = x);\n        }\n\n        public IEnumerable<ItemModel> ItemType { get; }\n        public KhEnumListModel<CharacterType> CharacterType { get; }\n\n        public string Name => ItemsPreset.Get(ItemId)?.Name;\n        public ImageSource Icon => IconService.Icon(ItemsPreset.Get(ItemId)?.Icon);\n\n        public int ItemId\n        {\n            get => _materia.ItemId;\n            set\n            {\n                if (ItemId == (int)InventoryType.Disabled ||\n                    ItemId == (int)InventoryType.Empty)\n                {\n                    _materia.Index = GetFirstEmptyIndexSlot();\n                    _materia.UnixTimestamp = DateTime.Now.ToUnixEpoch();\n                    OnPropertyChanged(nameof(Index));\n                    OnPropertyChanged(nameof(Timestamp));\n                }\n\n                _materia.ItemId = value;\n                OnPropertyChanged(nameof(Icon));\n                OnPropertyChanged(nameof(Name));\n\n                if (ItemId == (int)InventoryType.Disabled ||\n                    ItemId == (int)InventoryType.Empty)\n                {\n                    _materia.Index = 0;\n                    _materia.UnixTimestamp = 0;\n                    OnPropertyChanged(nameof(Index));\n                    OnPropertyChanged(nameof(Timestamp));\n                }\n            }\n        }\n\n        public string Timestamp => _materia.UnixTimestamp.FromUnixEpoch().ToString();\n        public int AbilityPoint { get => _materia.AbilityPoint; set { _materia.AbilityPoint = value; OnPropertyChanged(); } }\n        public byte Level { get => _materia.Level; set => _materia.Level = value; }\n        public CharacterType Character { get => (CharacterType)_materia.Character; set => _materia.Character = (byte)value; }\n        public int Index { get => _materia.Index; set => _materia.Index = value; }\n\n        private int GetFirstEmptyIndexSlot()\n        {\n            var lastIndex = 1;\n\n            foreach (var materia in _save.Materia\n                .Where(x => x.Index > 0)\n                .OrderBy(x => x.Index))\n            {\n                if (materia.Index == lastIndex)\n                    lastIndex = materia.Index + 1;\n                else\n                    return lastIndex;\n            }\n\n            return lastIndex;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/ChaptersViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.SaveEditor.Ff7Remake.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class ChaptersViewModel : GenericListModel<ChapterEntryModel>\n    {\n        public ChaptersViewModel(SaveFf7Remake save) :\n            this(save.Chapters.Select((x, i) => new ChapterEntryModel(x, i, x.Positions[0])))\n        {\n            CurrentChapterId = GetChapterIdFromChapterNumber(save.CurrentChapter);\n        }\n\n        private ChaptersViewModel(IEnumerable<ChapterEntryModel> list) :\n            base(list)\n        { }\n\n        public int CurrentChapterId { get; }\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        protected override void OnSelectedItem(ChapterEntryModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(EntryVisible));\n            OnPropertyChanged(nameof(EntryNotVisible));\n        }\n\n        protected override ChapterEntryModel OnNewItem() =>\n            throw new System.NotImplementedException();\n\n        private static int GetChapterIdFromChapterNumber(int chapterNumber)\n        {\n            return chapterNumber switch\n            {\n                1 => 0,\n                2 => 1,\n                3 => 2,\n                4 => 3,\n                5 => 4,\n                6 => 5,\n                7 => 6,\n                8 => 8,\n                9 => 8,\n                10 => 9,\n                11 => 10,\n                12 => 2,\n                13 => 8,\n                14 => 8,\n                15 => 15,\n                16 => 16,\n                17 => 16,\n                18 => 16,\n                22 => 18,\n                23 => 19,\n                _ => -1,\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/CharactersViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Ff7Remake.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class CharactersViewModel : GenericListModel<CharacterEntryModel>\n    {\n        private readonly SaveFf7Remake _save;\n\n        public CharactersViewModel(SaveFf7Remake save, EquipmentsViewModel weapons, MateriaViewModel materia) :\n            this(save.Characters.Select((_, i) => new CharacterEntryModel(save, i, weapons, materia)))\n        {\n            _save = save;\n        }\n\n        private CharactersViewModel(IEnumerable<CharacterEntryModel> list) :\n            base(list.Where(x => Global.IsAdvancedMode || !x.IsUnused))\n        { }\n\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        protected override void OnSelectedItem(CharacterEntryModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(EntryVisible));\n            OnPropertyChanged(nameof(EntryNotVisible));\n        }\n\n        protected override CharacterEntryModel OnNewItem() =>\n            throw new System.NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/DeveloperViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Chunks;\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.SaveEditor.Ff7Remake.Models;\nusing System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class DeveloperViewModel : GenericListModel<ChunkEntryModel>\n    {\n        private readonly SaveFf7Remake _save;\n        private readonly IRefreshUi _refreshUi;\n        private int _absoluteOffset;\n\n        public DeveloperViewModel(SaveFf7Remake save, IRefreshUi refreshUi) :\n            base(save.Chunks.Select((x, i) => new ChunkEntryModel(save, refreshUi, x, i)))\n        {\n            _save = save;\n            _refreshUi = refreshUi;\n        }\n\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        public string AbsoluteOffset\n        {\n            get => $\"0x{_absoluteOffset:X}\";\n            set\n            {\n                const int HeaderLength = Chunk.TotalHeaderLength;\n                bool isHex = value.Length > 2 && value[0] == '0' && value[1] == 'x';\n                bool successful;\n                if (isHex)\n                    successful = int.TryParse(value.Substring(2), NumberStyles.HexNumber, null, out _absoluteOffset);\n                else\n                    successful = int.TryParse(value, out _absoluteOffset);\n\n                if (!successful)\n                    throw new FormatException(\"Not a decimal or hex string\");\n\n\n                ChunkId = 0;\n                ChunkOffset = _absoluteOffset;\n                var prevChunkOffset = 0;\n                foreach (var chunk in _save.Chunks)\n                {\n                    if (ChunkOffset < chunk.Header.NextChunkOffset)\n                    {\n                        ChunkOffset -= prevChunkOffset + HeaderLength;\n                        break;\n                    }\n\n                    ChunkId++;\n                    prevChunkOffset = chunk.Header.NextChunkOffset;\n                }\n\n                OnPropertyChanged(nameof(ChunkId));\n                OnPropertyChanged(nameof(ChunkOffset));\n            }\n        }\n\n        public int ChunkId { get; private set; }\n        public int ChunkOffset { get; private set; }\n\n        protected override void OnSelectedItem(ChunkEntryModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(EntryVisible));\n            OnPropertyChanged(nameof(EntryNotVisible));\n        }\n\n        protected override ChunkEntryModel OnNewItem() =>\n            throw new NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/EquipmentsViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Ff7Remake.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class EquipmentsViewModel : GenericListModel<EquipmentEntryModel>\n    {\n        private string searchTerm;\n\n        public EquipmentsViewModel(WeaponFound[] weaponFound, IEnumerable<MateriaEquipment> equipments, MateriaViewModel materiaVm) :\n            this(equipments.Select((x, i) => new EquipmentEntryModel(i, weaponFound, x, materiaVm)))\n        {\n        }\n\n        private EquipmentsViewModel(IEnumerable<EquipmentEntryModel> list) :\n            base(list.Where(x => Global.IsAdvancedMode || x.IsVisible))\n        { }\n\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        public string SearchTerm\n        {\n            get => searchTerm;\n            set\n            {\n                searchTerm = value;\n                Filter(items => SearchEngine.Filter(searchTerm, items, AdditionalFilter));\n            }\n        }\n\n        private bool AdditionalFilter(string searchTerm, EquipmentEntryModel obj)\n        {\n            if (obj.Name.IndexOf(searchTerm) >= 0)\n                return true;\n\n            return false;\n        }\n\n        protected override void OnSelectedItem(EquipmentEntryModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(EntryVisible));\n            OnPropertyChanged(nameof(EntryNotVisible));\n        }\n\n        protected override EquipmentEntryModel OnNewItem() =>\n            throw new System.NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/FF7RMainViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.SaveEditor.Common.Contracts;\nusing System.IO;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class FF7RMainViewModel : BaseNotifyPropertyChanged, IRefreshUi, IOpenStream, IWriteToStream\n    {\n        private const string DefaultTab = \"Materia\";\n\n        public SaveFf7Remake Save { get; private set; }\n\n        public CharactersViewModel Characters { get; set; }\n        public InventoryViewModel Inventory { get; set; }\n        public MateriaViewModel Materia { get; set; }\n        public EquipmentsViewModel CharacterEquipments { get; set; }\n        public EquipmentsViewModel WeaponEquipments { get; set; }\n        public ChaptersViewModel Chapters { get; set; }\n        public GlobalViewModel Global { get; set; }\n        public DeveloperViewModel Developer { get; set; }\n        public Unknown1ViewModel Unk1 { get; set; }\n        public Unknown2ViewModel Unk2 { get; set; }\n        public Unknown3ViewModel Unk3 { get; set; }\n\n        public Visibility SimpleVisibility => Common.Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Common.Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n        public string CurrentTabId\n        {\n            get => Common.Global.LastFF7RTab ?? DefaultTab;\n            set => Common.Global.LastFF7RTab = value;\n        }\n\n        public void RefreshUi()\n        {\n            CharacterEquipments = new EquipmentsViewModel(Save.WeaponFound, Save.CharacterMateria, Materia);\n            WeaponEquipments = new EquipmentsViewModel(Save.WeaponFound, Save.WeaponMateria, Materia);\n            Materia = new MateriaViewModel(Save);\n            Characters = new CharactersViewModel(Save, WeaponEquipments, Materia);\n            Inventory = new InventoryViewModel(Save);\n            Chapters = new ChaptersViewModel(Save);\n            Global = new GlobalViewModel(Save);\n            Developer = new DeveloperViewModel(Save, this);\n            Unk1 = new Unknown1ViewModel(Save);\n            Unk2 = new Unknown2ViewModel(Save);\n            Unk3 = new Unknown3ViewModel(Save);\n\n            OnPropertyChanged(nameof(SimpleVisibility));\n            OnPropertyChanged(nameof(AdvancedVisibility));\n            OnPropertyChanged(nameof(Characters));\n            OnPropertyChanged(nameof(Inventory));\n            OnPropertyChanged(nameof(Materia));\n            OnPropertyChanged(nameof(CharacterEquipments));\n            OnPropertyChanged(nameof(WeaponEquipments));\n            OnPropertyChanged(nameof(Chapters));\n            OnPropertyChanged(nameof(Global));\n            OnPropertyChanged(nameof(Developer));\n            OnPropertyChanged(nameof(Unk1));\n            OnPropertyChanged(nameof(Unk2));\n            OnPropertyChanged(nameof(Unk3));\n        }\n\n        public void OpenStream(Stream stream)\n        {\n            Save = SaveFf7Remake.Read(stream);\n            RefreshUi();\n        }\n\n        public void WriteToStream(Stream stream) =>\n            Save.Write(stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/GlobalViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class GlobalViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly SaveFf7Remake _save;\n\n        public GlobalViewModel(SaveFf7Remake save)\n        {\n            _save = save;\n            CharacterType = new KhEnumListModel<CharacterType>();\n        }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public KhEnumListModel<CharacterType> CharacterType { get; }\n\n        public CharacterType PlayableCharacter { get => (CharacterType)_save.PlayableCharacter; set => _save.PlayableCharacter = (byte)value; }\n        public byte CurrentChapter\n        {\n            get => _save.CurrentChapter;\n            set\n            {\n                switch (_save.CurrentChapter = value)\n                {\n                    case 1:\n                        CurrentChapterId = 0;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 0;\n                        break;\n                    case 2:\n                        CurrentChapterId = 1;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 1;\n                        break;\n                    case 3:\n                        CurrentChapterId = 2;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 2;\n                        break;\n                    case 4:\n                        CurrentChapterId = 3;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 3;\n                        break;\n                    case 5:\n                        CurrentChapterId = 4;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 4;\n                        break;\n                    case 6:\n                        CurrentChapterId = 5;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 5;\n                        break;\n                    case 7:\n                        CurrentChapterId = 6;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 6;\n                        break;\n                    case 8:\n                        CurrentChapterId = 8;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 8;\n                        break;\n                    case 9:\n                        CurrentChapterId = 8;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 8;\n                        break;\n                    case 10:\n                        CurrentChapterId = 9;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 9;\n                        break;\n                    case 11:\n                        CurrentChapterId = 10;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 10;\n                        break;\n                    case 12:\n                        CurrentChapterId = 11;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 2;\n                        break;\n                    case 13:\n                        CurrentChapterId = 11;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 2;\n                        break;\n                    case 14:\n                        CurrentChapterId = 12;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 8;\n                        break;\n                    case 15:\n                        CurrentChapterId = 15;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 15;\n                        break;\n                    case 16:\n                        CurrentChapterId = 16;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 16;\n                        break;\n                    case 17:\n                        CurrentChapterId = 16;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 16;\n                        break;\n                    case 18:\n                        CurrentChapterId = 16;\n                        CurrentChapterChunk = CurrentChapterChunk2 = 16;\n                        break;\n                }\n\n                OnPropertyChanged(nameof(CurrentChapterId));\n                OnPropertyChanged(nameof(CurrentChapterChunk));\n                OnPropertyChanged(nameof(CurrentChapterChunk2));\n            }\n        }\n        public byte CurrentChapterId { get => _save.CurrentChapterId; set => _save.CurrentChapterId = value; }\n        public byte CurrentChapterChunk { get => _save.CurrentChapterChunk; set => _save.CurrentChapterChunk = value; }\n        public byte CurrentChapterChunk2 { get => _save.CurrentChapterChunk2; set => _save.CurrentChapterChunk2 = value; }\n\n        public byte Unk01 { get => _save.ChunkCommon.Unk01; set => _save.ChunkCommon.Unk01 = value; }\n        public byte Unk02 { get => _save.ChunkCommon.Unk02; set => _save.ChunkCommon.Unk02 = value; }\n        public byte Unk03 { get => _save.ChunkCommon.Unk03; set => _save.ChunkCommon.Unk03 = value; }\n        public byte Unk04 { get => _save.ChunkCommon.Unk04; set => _save.ChunkCommon.Unk04 = value; }\n        public byte Unk05 { get => _save.ChunkCommon.Unk05; set => _save.ChunkCommon.Unk05 = value; }\n        public int Unk288 { get => _save.ChunkCommon.Unk288; set => _save.ChunkCommon.Unk288 = value; }\n        public int Unk28c { get => _save.ChunkCommon.Unk28c; set => _save.ChunkCommon.Unk28c = value; }\n        public float Unk290 { get => _save.ChunkCommon.Unk290; set => _save.ChunkCommon.Unk290 = value; }\n        public int Unk294 { get => _save.ChunkCommon.Unk294; set => _save.ChunkCommon.Unk294 = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/InventoryViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Ff7Remake.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class InventoryViewModel : GenericListModel<InventroyEntryModel>\n    {\n        private string searchTerm;\n\n        public InventoryViewModel(SaveFf7Remake save) :\n            this(save.Inventory.OrderBy(x => (uint)x.Type).Select(x => new InventroyEntryModel(x)))\n        {\n        }\n\n        private InventoryViewModel(IEnumerable<InventroyEntryModel> list) :\n            base(list)\n        { }\n\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        public string SearchTerm\n        {\n            get => searchTerm;\n            set\n            {\n                searchTerm = value;\n                Filter(items => SearchEngine.Filter(searchTerm, items).OrderBy(x => (uint)x.Type));\n            }\n        }\n\n        protected override void OnSelectedItem(InventroyEntryModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(EntryVisible));\n            OnPropertyChanged(nameof(EntryNotVisible));\n        }\n\n        protected override InventroyEntryModel OnNewItem() =>\n            throw new System.NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/MateriaViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Ff7Remake.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class MateriaViewModel : GenericListModel<MateriaEntryModel>\n    {\n        private readonly SaveFf7Remake _save;\n        private string searchTerm;\n\n        public MateriaViewModel(SaveFf7Remake save) :\n            this(save.Materia.Select((x, i) => new MateriaEntryModel(save, x)))\n        {\n            _save = save;\n        }\n\n        private MateriaViewModel(IEnumerable<MateriaEntryModel> list) :\n            base(list.OrderBy(Order))\n        { }\n\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        public string SearchTerm\n        {\n            get => searchTerm;\n            set\n            {\n                searchTerm = value;\n                Filter(items => SearchEngine.Filter(searchTerm, items).OrderBy(Order));\n            }\n        }\n\n        private static int Order(MateriaEntryModel materia)\n        {\n            if (materia.ItemId <= 0)\n                return int.MaxValue;\n            return (int)materia.ItemId;\n        }\n\n        protected override void OnSelectedItem(MateriaEntryModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(EntryVisible));\n            OnPropertyChanged(nameof(EntryNotVisible));\n        }\n\n        protected override MateriaEntryModel OnNewItem() =>\n            throw new System.NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/TeleportViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.SaveEditor.Ff7Remake.Data;\nusing KHSave.SaveEditor.Ff7Remake.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Commands;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class TeleportViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly ChapterCharacterEntryModel _entry;\n        private int _selectedIndex;\n        private List<Location> _locations;\n\n        public Uri AddLocationRequestUrl => new Uri(\n            $\"https://github.com/Xeeynamo/KH3SaveEditor/issues/new?assignees=Xeeynamo&labels=ff7r-location&template=ff7r-teleport-coordinates-request.md&title=FF7+Remake+new+location+request+\" +\n            $\"({_entry.PosX},{_entry.PosY},{_entry.PosZ})\");\n\n        public Uri SourceCodeUrl => new Uri(\"https://github.com/Xeeynamo/KH3SaveEditor/blob/master/KHSave.LibFf7Remake/Presets.cs\");\n\n        public TeleportViewModel(ChapterCharacterEntryModel entry)\n        {\n            _entry = entry;\n            _locations = LocationsPreset.GetLocationsOffline();\n            FetchStatusText = \"Fetching updated list of locations from internet...\";\n\n            Task.Run(async () =>\n            {\n                List<Location> locations = null;\n                string fetchStatusText = \"<this is a bug>\";\n                try\n                {\n                    locations = await LocationsPreset.FetchLocations();\n                    fetchStatusText = \"Got most up-to-date list from internet.\";\n                }\n                catch\n                {\n                    fetchStatusText = \"There was an error while retrieving the updated location list.\";\n                }\n\n                Application.Current.Dispatcher.Invoke(() =>\n                {\n                    if (locations != null)\n                    {\n                        _locations = locations;\n                        OnPropertyChanged(nameof(Locations));\n                    }\n\n                    FetchStatusText = fetchStatusText;\n                    OnPropertyChanged(nameof(FetchStatusText));\n                });\n            });\n\n            OkCommand = new RelayCommand(_ =>\n            {\n                if (SelectedIndex < 0 || SelectedIndex >= _locations.Count)\n                    return;\n\n                var location = _locations[SelectedIndex];\n                _entry.PosX = location.PositionX;\n                _entry.PosY = location.PositionY;\n                _entry.PosZ = location.PositionZ;\n\n                Application.Current.Windows.OfType<Window>().FirstOrDefault(x => x.IsActive)?.Close();\n            }, _ => SelectedIndex >= 0);\n        }\n\n        public RelayCommand OkCommand { get; }\n\n        public object Locations => _locations.Select(x => new\n        {\n            x.Chapter,\n            IsOutOfBounds = x.OutOfBounds,\n            x.Description,\n            Coordinates = $\"{x.PositionX:F0}, {x.PositionY:F0}, {x.PositionZ:F0}\"\n        });\n\n        public string FetchStatusText { get; private set; }\n\n        public int SelectedIndex\n        {\n            get => _selectedIndex;\n            set\n            {\n                _selectedIndex = value;\n                OnPropertyChanged(nameof(OkCommand));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/Unknown1ViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.LibFf7Remake.Types;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class Unknown1ViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly SaveFf7Remake _save;\n        private int _selectedIndex;\n\n        public Unknown1ViewModel(SaveFf7Remake save)\n        {\n            _save = save;\n        }\n\n        public IEnumerable<string> Items => _save.ChunkCommon.CharactersUnknown\n            .Select((_, i) => InfoAttribute.GetInfo((CharacterType)i));\n        public bool IsItemSelected => SelectedIndex >= 0;\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        public int SelectedIndex\n        {\n            get => _selectedIndex;\n            set\n            {\n                _selectedIndex = value;\n                OnPropertyChanged(nameof(IsItemSelected));\n                OnPropertyChanged(nameof(Unknown00));\n                OnPropertyChanged(nameof(Unknown01));\n                OnPropertyChanged(nameof(Unknown02));\n                OnPropertyChanged(nameof(Unknown03));\n                OnPropertyChanged(nameof(Unknown04));\n                OnPropertyChanged(nameof(Unknown08));\n                OnPropertyChanged(nameof(KillCount));\n            }\n        }\n\n        public UnknownStructure SelectedValue => _save.ChunkCommon.CharactersUnknown[_selectedIndex];\n\n        public byte Unknown00 { get => SelectedValue.Unknown00; set => SelectedValue.Unknown00 = value; }\n        public byte Unknown01 { get => SelectedValue.Unknown01; set => SelectedValue.Unknown01 = value; }\n        public byte Unknown02 { get => SelectedValue.Unknown02; set => SelectedValue.Unknown02 = value; }\n        public byte Unknown03 { get => SelectedValue.Unknown03; set => SelectedValue.Unknown03 = value; }\n        public int Unknown04 { get => SelectedValue.Unknown04; set => SelectedValue.Unknown04 = value; }\n        public int Unknown08 { get => SelectedValue.Unknown08; set => SelectedValue.Unknown08 = value; }\n        public int KillCount { get => SelectedValue.KillCount; set => SelectedValue.KillCount = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/Unknown2ViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.SaveEditor.Ff7Remake.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class Unknown2ViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly SaveFf7Remake _save;\n        private int _selectedIndex;\n\n        public Unknown2ViewModel(SaveFf7Remake save)\n        {\n            _save = save;\n            ItemTypes = ItemModel.GetItemModels();\n        }\n\n        public IEnumerable<ItemModel> ItemTypes { get; }\n\n        public IEnumerable<int> Items => _save.ChunkCommon.UnknownStructure2.Select((_, i) => i);\n        public bool IsItemSelected => SelectedIndex >= 0;\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        public int SelectedIndex\n        {\n            get => _selectedIndex;\n            set\n            {\n                _selectedIndex = value;\n                OnPropertyChanged(nameof(IsItemSelected));\n                OnPropertyChanged(nameof(Unknown00));\n                OnPropertyChanged(nameof(Unknown01));\n                OnPropertyChanged(nameof(Unknown02));\n                OnPropertyChanged(nameof(Unknown03));\n                OnPropertyChanged(nameof(ItemId));\n                OnPropertyChanged(nameof(Unknown08));\n                OnPropertyChanged(nameof(Unknown0c));\n            }\n        }\n\n        public UnknownStructure2 SelectedValue => _save.ChunkCommon.UnknownStructure2[_selectedIndex];\n\n        public byte Unknown00 { get => SelectedValue.Unknown00; set => SelectedValue.Unknown00 = value; }\n        public byte Unknown01 { get => SelectedValue.Unknown01; set => SelectedValue.Unknown01 = value; }\n        public byte Unknown02 { get => SelectedValue.Unknown02; set => SelectedValue.Unknown02 = value; }\n        public byte Unknown03 { get => SelectedValue.Unknown03; set => SelectedValue.Unknown03 = value; }\n        public int ItemId { get => SelectedValue.ItemId; set { SelectedValue.ItemId = value; OnPropertyChanged(); } }\n        public int Unknown08 { get => SelectedValue.Unknown08; set => SelectedValue.Unknown08 = value; }\n        public int Unknown0c { get => SelectedValue.Unknown0c; set => SelectedValue.Unknown0c = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/ViewModels/Unknown3ViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Models;\nusing KHSave.LibFf7Remake.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Ff7Remake.ViewModels\n{\n    public class Unknown3ViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly SaveFf7Remake _save;\n        private int _selectedIndex;\n\n        public Unknown3ViewModel(SaveFf7Remake save)\n        {\n            _save = save;\n            CharacterTypes = new KhEnumListModel<CharacterType>();\n        }\n\n        public KhEnumListModel<CharacterType> CharacterTypes { get; }\n\n        public IEnumerable<int> Items => _save.ChunkCommon.UnknownStructure3.Select((_, i) => i);\n        public bool IsItemSelected => SelectedIndex >= 0;\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        public int SelectedIndex\n        {\n            get => _selectedIndex;\n            set\n            {\n                _selectedIndex = value;\n                OnPropertyChanged(nameof(IsItemSelected));\n                OnPropertyChanged(nameof(Character));\n                OnPropertyChanged(nameof(Unknown01));\n                OnPropertyChanged(nameof(Unknown02));\n                OnPropertyChanged(nameof(Unknown03));\n                OnPropertyChanged(nameof(Unknown04));\n                OnPropertyChanged(nameof(Unknown08));\n                OnPropertyChanged(nameof(Unknown0c));\n                OnPropertyChanged(nameof(Unknown10));\n                OnPropertyChanged(nameof(Character1));\n                OnPropertyChanged(nameof(Character2));\n                OnPropertyChanged(nameof(Character3));\n                OnPropertyChanged(nameof(Character4));\n                OnPropertyChanged(nameof(Character5));\n                OnPropertyChanged(nameof(Character6));\n                OnPropertyChanged(nameof(Character7));\n                OnPropertyChanged(nameof(Character8));\n                OnPropertyChanged(nameof(Character9));\n                OnPropertyChanged(nameof(Character10));\n                OnPropertyChanged(nameof(Character11));\n                OnPropertyChanged(nameof(Character12));\n                OnPropertyChanged(nameof(Unknown20));\n                OnPropertyChanged(nameof(Unknown24));\n                OnPropertyChanged(nameof(Unknown28));\n                OnPropertyChanged(nameof(Unknown2c));\n            }\n        }\n\n        public UnknownStructure3 SelectedValue => _save.ChunkCommon.UnknownStructure3[_selectedIndex];\n\n        public CharacterType Character { get => (CharacterType)SelectedValue.Character; set => SelectedValue.Character = (byte)value; }\n        public byte Unknown01 { get => SelectedValue.Unknown01; set => SelectedValue.Unknown01 = value; }\n        public byte Unknown02 { get => SelectedValue.Unknown02; set => SelectedValue.Unknown02 = value; }\n        public byte Unknown03 { get => SelectedValue.Unused03; set => SelectedValue.Unused03 = value; }\n        public int Unknown04 { get => SelectedValue.Unknown04; set => SelectedValue.Unknown04 = value; }\n        public int Unknown08 { get => SelectedValue.Unknown08; set => SelectedValue.Unknown08 = value; }\n        public int Unknown0c { get => SelectedValue.Unknown0c; set => SelectedValue.Unknown0c = value; }\n        public int Unknown10 { get => SelectedValue.Unknown10; set => SelectedValue.Unknown10 = value; }\n        public CharacterType Character1 { get => (CharacterType)SelectedValue.Characters[0]; set => SelectedValue.Characters[0] = (byte)value; }\n        public CharacterType Character2 { get => (CharacterType)SelectedValue.Characters[1]; set => SelectedValue.Characters[1] = (byte)value; }\n        public CharacterType Character3 { get => (CharacterType)SelectedValue.Characters[2]; set => SelectedValue.Characters[2] = (byte)value; }\n        public CharacterType Character4 { get => (CharacterType)SelectedValue.Characters[3]; set => SelectedValue.Characters[3] = (byte)value; }\n        public CharacterType Character5 { get => (CharacterType)SelectedValue.Characters[4]; set => SelectedValue.Characters[4] = (byte)value; }\n        public CharacterType Character6 { get => (CharacterType)SelectedValue.Characters[5]; set => SelectedValue.Characters[5] = (byte)value; }\n        public CharacterType Character7 { get => (CharacterType)SelectedValue.Characters[6]; set => SelectedValue.Characters[6] = (byte)value; }\n        public CharacterType Character8 { get => (CharacterType)SelectedValue.Characters[7]; set => SelectedValue.Characters[7] = (byte)value; }\n        public CharacterType Character9 { get => (CharacterType)SelectedValue.Characters[8]; set => SelectedValue.Characters[8] = (byte)value; }\n        public CharacterType Character10 { get => (CharacterType)SelectedValue.Characters[9]; set => SelectedValue.Characters[9] = (byte)value; }\n        public CharacterType Character11 { get => (CharacterType)SelectedValue.Characters[10]; set => SelectedValue.Characters[10] = (byte)value; }\n        public CharacterType Character12 { get => (CharacterType)SelectedValue.Characters[11]; set => SelectedValue.Characters[11] = (byte)value; }\n        public int Unknown20 { get => SelectedValue.Unused20; set => SelectedValue.Unused20 = value; }\n        public int Unknown24 { get => SelectedValue.Unused24; set => SelectedValue.Unused24 = value; }\n        public int Unknown28 { get => SelectedValue.Unused28; set => SelectedValue.Unused28 = value; }\n        public int Unknown2c { get => SelectedValue.Unused2c; set => SelectedValue.Unused2c = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/ChapterEntryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.ChapterEntryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"900\" d:DesignWidth=\"300\">\n    <Grid>\n        <TextBlock\n            Visibility=\"{Binding ChapterDisabledVisibility}\"\n            Text=\"This chapter does not contain any data\"/>\n        <Grid Visibility=\"{Binding ChapterVisibility}\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <StackPanel Visibility=\"{Binding SimpleVisibility}\">\n                    <local:ChapterMainView DataContext=\"{Binding}\"/>\n                    <local:ChapterPlayableView DataContext=\"{Binding}\"/>\n                </StackPanel>\n            </ScrollViewer>\n            <TabControl Visibility=\"{Binding AdvancedVisibility}\">\n                <TabItem Header=\"Main\">\n                    <local:ChapterMainView DataContext=\"{Binding}\"/>\n                </TabItem>\n                <TabItem Header=\"Playable\">\n                    <StackPanel>\n                        <local:ChapterPlayableView DataContext=\"{Binding}\"/>\n                    </StackPanel>\n                </TabItem>\n                <TabItem Header=\"NPC\">\n                    <local:ChapterObjectsView DataContext=\"{Binding Objects}\"/>\n                </TabItem>\n                <TabItem Header=\"Objects\">\n                    <local:ChapterObjectsView DataContext=\"{Binding Objects2}\"/>\n                </TabItem>\n                <TabItem Header=\"Enemies\">\n                    <local:ChapterObjectsView DataContext=\"{Binding Objects3}\"/>\n                </TabItem>\n            </TabControl>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/ChapterEntryView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for ChapterEntryView.xaml\n    /// </summary>\n    public partial class ChapterEntryView : UserControl\n    {\n        public ChapterEntryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/ChapterMainView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.ChapterMainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"150\" d:DesignWidth=\"300\">\n    <StackPanel>\n        <Grid Margin=\"0 0 0 5\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"20\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"3\"/>\n                <ColumnDefinition Width=\"1*\"/>\n            </Grid.ColumnDefinitions>\n\n            <CheckBox Grid.Column=\"0\" Content=\"Is chapter enabled\" IsChecked=\"{Binding IsChapterInPlay}\"/>\n            <TextBlock Grid.Column=\"2\" Text=\"Chapter ID \"/>\n            <TextBox Grid.Column=\"4\" Text=\"{Binding ChapterId, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"10\"/>\n                <ColumnDefinition Width=\"60\"/>\n                <ColumnDefinition Width=\"10\"/>\n                <ColumnDefinition Width=\"1*\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Column=\"0\" Text=\"BGM modifier\"/>\n            <TextBox Grid.Column=\"2\" Text=\"{Binding Bgm, UpdateSourceTrigger=PropertyChanged}\"/>\n            <ComboBox\n                    Grid.Column=\"4\"\n                    ItemsSource=\"{Binding BgmList}\"\n                    SelectedValue=\"{Binding Bgm}\"\n                    SelectedValuePath=\"Id\"\n                    DisplayMemberPath=\"Name\"/>\n        </Grid>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/ChapterMainView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for ChapterMainView.xaml\n    /// </summary>\n    public partial class ChapterMainView : UserControl\n    {\n        public ChapterMainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/ChapterObjectsView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.ChapterObjectsView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:controls=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"10\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n        <ComboBox\n            Grid.Row=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"/>\n\n        <ScrollViewer Grid.Row=\"2\" VerticalScrollBarVisibility=\"Auto\">\n            <StackPanel DataContext=\"{Binding SelectedItem}\">\n                <controls:TwoEqualColumnsStackPanel Grid.Column=\"2\">\n                    <TextBlock Text=\"Object ID (relative to map)\"/>\n                    <TextBox Text=\"{Binding Index, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 08 (can only be 1 or 0?)\"/>\n                    <TextBox Text=\"{Binding Unknown08, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Position X\"/>\n                    <TextBox Text=\"{Binding PositionX, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Position Y\"/>\n                    <TextBox Text=\"{Binding PositionY, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Position Z\"/>\n                    <TextBox Text=\"{Binding PositionZ}\"/>\n\n                    <TextBlock Text=\"Unknown 0c\"/>\n                    <TextBox Text=\"{Binding Unknown0c, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Angle rotation? (-180..180)\"/>\n                    <TextBox Text=\"{Binding Unknown04, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Facing angle? (-180..180)\"/>\n                    <TextBox Text=\"{Binding Rotation, UpdateSourceTrigger=PropertyChanged}\"/>\n                </controls:TwoEqualColumnsStackPanel>\n\n                <Separator Margin=\"3 10 3 10\"/>\n                <TextBlock Text=\"Tooling for debug and research:\"/>\n                <Button Margin=\"3\" Command=\"{Binding DebugTeleportToCloudCommand}\"\n                        Content=\"Teleport this object to Cloud location\"/>\n                <Button Margin=\"3\" Command=\"{Binding DebugCloudToObjectCommand}\"\n                        Content=\"Teleport Cloud to this object\"/>\n                <Button Margin=\"3\" Command=\"{Binding DebugTeleportToObjectCommand}\"\n                        Content=\"Teleport all the object to this object\"/>\n                <Button Margin=\"3\" Command=\"{Binding DebugIdRandomnessCommand}\"\n                        Content=\"Assign all the Object IDs to the current Object ID\"/>\n                <TextBlock TextWrapping=\"Wrap\">\n                    Those tooling buttons are for experimental usage;\n                    therefore I did not tweaked the UI to update properly\n                    when you click on them.\n                </TextBlock>\n            </StackPanel>\n        </ScrollViewer>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/ChapterObjectsView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for ChapterObjectsView.xaml\n    /// </summary>\n    public partial class ChapterObjectsView : UserControl\n    {\n        public ChapterObjectsView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/ChapterPlayableView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.ChapterPlayableView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"300\">\n    <StackPanel>\n        <TextBlock Text=\"Character position modifier:\" Margin=\"0 0 0 5\"/>\n        <local:PositionView DataContext=\"{Binding Entity0}\" Margin=\"0 0 0 5\"/>\n        <local:PositionView DataContext=\"{Binding Entity1}\" Margin=\"0 0 0 5\"/>\n        <local:PositionView DataContext=\"{Binding Entity2}\" Margin=\"0 0 0 5\"/>\n        <local:PositionView DataContext=\"{Binding Entity3}\" Margin=\"0 0 0 5\"/>\n        <local:PositionView DataContext=\"{Binding Entity4}\" Margin=\"0 0 0 5\"/>\n        <local:PositionView DataContext=\"{Binding Entity5}\" Margin=\"0 0 0 5\" Visibility=\"{Binding AdvancedVisibility}\"/>\n        <local:PositionView DataContext=\"{Binding Entity6}\" Margin=\"0 0 0 5\" Visibility=\"{Binding AdvancedVisibility}\"/>\n        <local:PositionView DataContext=\"{Binding Entity7}\" Margin=\"0 0 0 5\" Visibility=\"{Binding AdvancedVisibility}\"/>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/ChapterPlayableView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for ChapterPlayableView.xaml\n    /// </summary>\n    public partial class ChapterPlayableView : UserControl\n    {\n        public ChapterPlayableView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/ChaptersView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.ChaptersView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"1*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            SelectedIndex=\"{Binding CurrentChapterId, Mode=OneWay}\"\n            DisplayMemberPath=\"Name\"/>\n\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select a chapter to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\"\n            Visibility=\"{Binding EntryVisible}\">\n            <local:ChapterEntryView DataContext=\"{Binding SelectedItem}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/ChaptersView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for ChaptersView.xaml\n    /// </summary>\n    public partial class ChaptersView : UserControl\n    {\n        public ChaptersView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/CharacterEntryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.CharacterEntryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <StackPanel>\n        <Grid Margin=\"0 0 0 5\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <common:TwoEqualColumnsStackPanel Grid.Column=\"0\">\n                <CheckBox Content=\"Enabled\" IsChecked=\"{Binding IsUnlocked}\"/>\n                <TextBox Text=\"\" Visibility=\"Hidden\"/>\n                <TextBlock Text=\"\"/>\n                <TextBox Text=\"\" Visibility=\"Hidden\"/>\n                <TextBlock Text=\"Current HP\"/>\n                <TextBox Text=\"{Binding CurrentHp, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Maximum HP\"/>\n                <TextBox Text=\"{Binding MaxHp, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Attack\"/>\n                <TextBox Text=\"{Binding Attack, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Magic attack\"/>\n                <TextBox Text=\"{Binding MagicAttack, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Strength\"/>\n                <TextBox Text=\"{Binding Strength, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Magic\"/>\n                <TextBox Text=\"{Binding Magic, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Luck\"/>\n                <TextBox Text=\"{Binding Luck, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Speed\"/>\n                <TextBox Text=\"{Binding Speed, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unknown 08\" Visibility=\"{Binding AdvancedVisibility}\"/>\n                <TextBox Text=\"{Binding Unknown08, UpdateSourceTrigger=PropertyChanged}\" Visibility=\"{Binding AdvancedVisibility}\"/>\n                <TextBlock Text=\"Unknown 0C\" Visibility=\"{Binding AdvancedVisibility}\"/>\n                <TextBox Text=\"{Binding Unknown0c, UpdateSourceTrigger=PropertyChanged}\" Visibility=\"{Binding AdvancedVisibility}\"/>\n            </common:TwoEqualColumnsStackPanel>\n            <common:TwoEqualColumnsStackPanel Grid.Column=\"2\">\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"4\" Text=\"Level\"/>\n                <TextBox Grid.Row=\"2\" Grid.Column=\"4\" Text=\"{Binding Level, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"6\" Text=\"Experience\"/>\n                <TextBox Grid.Row=\"2\" Grid.Column=\"6\" Text=\"{Binding Experience, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Current MP\"/>\n                <TextBox Text=\"{Binding CurrentMp, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Maximum MP\"/>\n                <TextBox Text=\"{Binding MaxMp, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Defense\"/>\n                <TextBox Text=\"{Binding Defense, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Magic defense\"/>\n                <TextBox Text=\"{Binding MagicDefense, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Vitality\"/>\n                <TextBox Text=\"{Binding Vitality, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Spirit\"/>\n                <TextBox Text=\"{Binding Spirit, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"ATB bar count\"/>\n                <TextBox Text=\"{Binding AtbBarCount, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Limit bar\"/>\n                <TextBox Text=\"{Binding Limit, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unknown 14\" Visibility=\"{Binding AdvancedVisibility}\"/>\n                <TextBox Text=\"{Binding Unknown14, UpdateSourceTrigger=PropertyChanged}\" Visibility=\"{Binding AdvancedVisibility}\"/>\n                <TextBlock Text=\"Unknown 3C\" Visibility=\"{Binding AdvancedVisibility}\"/>\n                <TextBox Text=\"{Binding Unknown3c, UpdateSourceTrigger=PropertyChanged}\" Visibility=\"{Binding AdvancedVisibility}\"/>\n            </common:TwoEqualColumnsStackPanel>\n        </Grid>\n\n        <Grid Margin=\"0 0 0 5\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"Weapon\"/>\n            <ComboBox Grid.Row=\"1\" Grid.Column=\"0\"\n                ItemsSource=\"{Binding Weapons}\"\n                SelectedIndex=\"{Binding EquippedWeapon}\">\n                <ComboBox.ItemTemplate>\n                    <DataTemplate>\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                            </Grid.ColumnDefinitions>\n                            <Image Grid.Column=\"0\" Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                            <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" />\n                        </Grid>\n                    </DataTemplate>\n                </ComboBox.ItemTemplate>\n            </ComboBox>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"Armor\"/>\n            <TextBox Grid.Row=\"1\" Grid.Column=\"2\" Text=\"{Binding EquippedArmor, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"4\" Text=\"Accessory\"/>\n            <TextBox Grid.Row=\"1\" Grid.Column=\"4\" Text=\"{Binding EquippedAccessory, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n\n        <Grid Margin=\"0 0 0 5\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"Summon materia\"/>\n            <ComboBox Grid.Row=\"1\" Grid.Column=\"0\"\n                ItemsSource=\"{Binding Materia}\"\n                SelectedValue=\"{Binding SummonMateria}\"\n                SelectedValuePath=\"Index\">\n                <ComboBox.ItemTemplate>\n                    <DataTemplate>\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                            </Grid.ColumnDefinitions>\n                            <Image Grid.Column=\"0\" Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                            <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" />\n                        </Grid>\n                    </DataTemplate>\n                </ComboBox.ItemTemplate>\n            </ComboBox>\n        </Grid>\n\n        <StackPanel>\n            <TextBlock TextWrapping=\"Wrap\">\n                NOTE:\n                Most of the values in this Tab can be re-calculated by the game,\n                nullifying your changes. There are some reports on people that were\n                able to stick those changes for a while, but I was not able to\n                personally confirm it.\n            </TextBlock>\n        </StackPanel>\n\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/CharacterEntryView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for CharacterEntryView.xaml\n    /// </summary>\n    public partial class CharacterEntryView : UserControl\n    {\n        public CharacterEntryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/CharactersView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.CharactersView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"200\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"\n            />\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select a character to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\"\n            Visibility=\"{Binding EntryVisible}\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <local:CharacterEntryView Margin=\"0 0 10 0\"  DataContext=\"{Binding SelectedItem}\"/>\n            </ScrollViewer>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/CharactersView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for CharactersView.xaml\n    /// </summary>\n    public partial class CharactersView : UserControl\n    {\n        public CharactersView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/DeveloperView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.DeveloperView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Row=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            HorizontalContentAlignment=\"Stretch\"/>\n\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select an item to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryVisible}\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <StackPanel>\n                    <GroupBox Header=\"Header\" DataContext=\"{Binding SelectedItem}\">\n                        <StackPanel>\n                            <TextBlock Text=\"Chunk type\"/>\n                            <TextBox Margin=\"0 0 0 3\" Text=\"{Binding ChunkType, UpdateSourceTrigger=PropertyChanged}\"/>\n                            <TextBlock Text=\"Chapter ID (valid only for type 1)\"/>\n                            <TextBox Margin=\"0 0 0 3\" Text=\"{Binding ChapterId, UpdateSourceTrigger=PropertyChanged}\"/>\n                            <TextBlock Text=\"Unknown\"/>\n                            <TextBox Margin=\"0 0 0 3\" Text=\"{Binding Unknown, UpdateSourceTrigger=PropertyChanged}\"/>\n                        </StackPanel>\n                    </GroupBox>\n                    <GroupBox Header=\"Content\" DataContext=\"{Binding SelectedItem}\">\n                        <StackPanel>\n                            <TextBlock Text=\"Magic code?\"/>\n                            <TextBox Margin=\"0 0 0 3\" Text=\"{Binding MagicCode, UpdateSourceTrigger=PropertyChanged}\"/>\n                            <TextBlock Text=\"Unknown 10\"/>\n                            <TextBox Margin=\"0 0 0 3\" Text=\"{Binding Unknown10, UpdateSourceTrigger=PropertyChanged}\"/>\n                            <TextBlock Text=\"Data size\"/>\n                            <TextBox Margin=\"0 0 0 3\" Text=\"{Binding DataSize, Mode=OneWay}\" IsEnabled=\"False\"/>\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"1*\"/>\n                                    <ColumnDefinition Width=\"10\"/>\n                                    <ColumnDefinition Width=\"1*\"/>\n                                </Grid.ColumnDefinitions>\n                                <Button Grid.Column=\"0\" Command=\"{Binding ImportCommand}\">\n                                    <StackPanel Orientation=\"Horizontal\">\n                                        <Image Source=\"{StaticResource Import_16x}\"/>\n                                        <TextBlock Text=\"Import\"/>\n                                    </StackPanel>\n                                </Button>\n                                <Button Grid.Column=\"2\" Command=\"{Binding ExportCommand}\">\n                                    <StackPanel Orientation=\"Horizontal\">\n                                        <Image Source=\"{StaticResource Export_16x}\"/>\n                                        <TextBlock Text=\"Export\"/>\n                                    </StackPanel>\n                                </Button>\n                            </Grid>\n                        </StackPanel>\n                    </GroupBox>\n                    <GroupBox Header=\"Tools\">\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"1*\"/>\n                                <ColumnDefinition Width=\"10\"/>\n                                <ColumnDefinition Width=\"1*\"/>\n                            </Grid.ColumnDefinitions>\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"*\"/>\n                                <RowDefinition Height=\"3\"/>\n                                <RowDefinition Height=\"*\"/>\n                                <RowDefinition Height=\"*\"/>\n                            </Grid.RowDefinitions>\n\n                            <TextBlock Grid.Column=\"0\" Grid.Row=\"0\" Text=\"Absolute offset\"/>\n                            <TextBox Grid.Column=\"2\" Grid.Row=\"0\"\n                                Text=\"{Binding AbsoluteOffset, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                            <TextBlock Grid.Column=\"0\" Grid.Row=\"2\" Text=\"Chunk ID\"/>\n                            <TextBox Grid.Column=\"2\" Grid.Row=\"2\" IsReadOnly=\"True\"\n                                Text=\"{Binding ChunkId, Mode=OneWay}\"/>\n                            <TextBlock Grid.Column=\"0\" Grid.Row=\"3\" Text=\"Chunk offset\"/>\n                            <TextBox Grid.Column=\"2\" Grid.Row=\"3\" IsReadOnly=\"True\"\n                                Text=\"{Binding ChunkOffset, StringFormat=0x{0:X}, Mode=OneWay}\"/>\n                        </Grid>\n                    </GroupBox>\n                </StackPanel>\n            </ScrollViewer>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/DeveloperView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for DeveloperView.xaml\n    /// </summary>\n    public partial class DeveloperView : UserControl\n    {\n        public DeveloperView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/EquipmentEntryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.EquipmentEntryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"400\" d:DesignWidth=\"250\">\n    <StackPanel>\n        <TextBlock\n            Margin=\"0 0 0 5\"\n            Visibility=\"{Binding AsWeaponVisibility}\"\n            Text=\"{Binding Index, StringFormat=Equipment index: {0}}\"/>\n        \n        <TextBlock Text=\"Character\" Visibility=\"{Binding AdvancedVisibility}\"/>\n        <ComboBox\n            Margin=\"0 0 0 5\"\n            Visibility=\"{Binding AdvancedVisibility}\"\n            ItemsSource=\"{Binding CharacterTypes, Mode=OneTime}\"\n            SelectedValue=\"{Binding Character}\"\n            SelectedValuePath=\"Value\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                            Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n\n        <TextBlock Text=\"Item type\" Visibility=\"{Binding ItemTypeVisibility}\"/>\n        <Grid Margin=\"0 0 0 5\" Visibility=\"{Binding ItemTypeVisibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n            <ComboBox\n                Grid.Column=\"0\"\n                ItemsSource=\"{Binding EquipmentType, Mode=OneTime}\"\n                SelectedValue=\"{Binding ItemId}\"\n                SelectedValuePath=\"Id\">\n                <ComboBox.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Orientation=\"Horizontal\">\n                            <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                            Source=\"{Binding Icon}\"/>\n                            <TextBlock Text=\"{Binding Name}\" />\n                        </StackPanel>\n                    </DataTemplate>\n                </ComboBox.ItemTemplate>\n            </ComboBox>\n\n            <TextBox Grid.Column=\"1\" Margin=\"5 0 0 0\" Width=\"70\"\n                Visibility=\"{Binding AdvancedVisibility}\"\n                Text=\"{Binding ItemId, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n\n        <TextBlock Text=\"Materia equipped\"/>\n        <ComboBox\n            ItemsSource=\"{Binding Materia}\"\n            SelectedValue=\"{Binding MateriaSlot1}\"\n            SelectedValuePath=\"Index\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n        <ComboBox\n            ItemsSource=\"{Binding Materia}\"\n            SelectedValue=\"{Binding MateriaSlot2}\"\n            SelectedValuePath=\"Index\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n        <ComboBox\n            ItemsSource=\"{Binding Materia}\"\n            SelectedValue=\"{Binding MateriaSlot3}\"\n            SelectedValuePath=\"Index\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n        <ComboBox\n            ItemsSource=\"{Binding Materia}\"\n            SelectedValue=\"{Binding MateriaSlot4}\"\n            SelectedValuePath=\"Index\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n        <ComboBox\n            ItemsSource=\"{Binding Materia}\"\n            SelectedValue=\"{Binding MateriaSlot5}\"\n            SelectedValuePath=\"Index\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n        <ComboBox\n            ItemsSource=\"{Binding Materia}\"\n            SelectedValue=\"{Binding MateriaSlot6}\"\n            SelectedValuePath=\"Index\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n        <ComboBox\n            Visibility=\"{Binding AdvancedVisibility}\"\n            ItemsSource=\"{Binding Materia}\"\n            SelectedValue=\"{Binding MateriaSlot7}\"\n            SelectedValuePath=\"Index\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n        <ComboBox\n            Visibility=\"{Binding AdvancedVisibility}\"\n            ItemsSource=\"{Binding Materia}\"\n            SelectedValue=\"{Binding MateriaSlot8}\"\n            SelectedValuePath=\"Index\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/EquipmentEntryView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for EquipmentEntryView.xaml\n    /// </summary>\n    public partial class EquipmentEntryView : UserControl\n    {\n        public EquipmentEntryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/EquipmentsView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.EquipmentsView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"1*\"/>\n        </Grid.ColumnDefinitions>\n\n        <Grid Grid.Column=\"0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <ListBox\n                Grid.Row=\"0\"\n                ItemsSource=\"{Binding Items}\"\n                SelectedIndex=\"{Binding SelectedIndex}\"\n                SelectedItem=\"{Binding SelectedItem}\"\n                HorizontalContentAlignment=\"Stretch\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel>\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n                                <Image Grid.Column=\"0\" Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                               Source=\"{Binding Icon}\"/>\n                                <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" />\n                            </Grid>\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n                                <Image Grid.Column=\"0\" Width=\"8\" Height=\"8\" Source=\"{Binding MateriaIcon1}\"/>\n                                <Image Grid.Column=\"1\" Width=\"8\" Height=\"8\" Source=\"{Binding MateriaIcon2}\"/>\n                                <Image Grid.Column=\"2\" Width=\"8\" Height=\"8\" Source=\"{Binding MateriaIcon3}\"/>\n                                <Image Grid.Column=\"3\" Width=\"8\" Height=\"8\" Source=\"{Binding MateriaIcon4}\"/>\n                                <Image Grid.Column=\"4\" Width=\"8\" Height=\"8\" Source=\"{Binding MateriaIcon5}\"/>\n                                <Image Grid.Column=\"5\" Width=\"8\" Height=\"8\" Source=\"{Binding MateriaIcon6}\"/>\n                                <Image Grid.Column=\"6\" Width=\"8\" Height=\"8\" Source=\"{Binding MateriaIcon7}\"/>\n                                <Image Grid.Column=\"7\" Width=\"8\" Height=\"8\" Source=\"{Binding MateriaIcon8}\"/>\n                            </Grid>\n                        </StackPanel>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n\n            <Grid Grid.Row=\"1\" Margin=\"0 5 0 5\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Image Grid.Column=\"0\" Source=\"{StaticResource Search_16x}\"/>\n                <TextBox Grid.Column=\"2\"\n                    Text=\"{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </Grid>\n\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select an equipment to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\"\n            Visibility=\"{Binding EntryVisible}\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <local:EquipmentEntryView Margin=\"0 0 10 0\" DataContext=\"{Binding SelectedItem}\"/>\n            </ScrollViewer>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/EquipmentsView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for EquipmentsViewModel.xaml\n    /// </summary>\n    public partial class EquipmentsView : UserControl\n    {\n        public EquipmentsView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/FF7RMainView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.FF7RMainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"250\" d:DesignWidth=\"300\">\n    <TabControl SelectedValue=\"{Binding CurrentTabId, Mode=TwoWay}\" SelectedValuePath=\"Header\">\n        <TabItem Header=\"Materia\">\n            <local:MateriaView DataContext=\"{Binding Materia}\"/>\n        </TabItem>\n        <TabItem Header=\"Inventory\">\n            <local:InventoryView DataContext=\"{Binding Inventory}\"/>\n        </TabItem>\n        <TabItem Header=\"Equipments\">\n            <TabControl>\n                <TabItem Header=\"Characters (armor)\">\n                    <local:EquipmentsView DataContext=\"{Binding CharacterEquipments}\"/>\n                </TabItem>\n                <TabItem Header=\"Weapons\">\n                    <local:EquipmentsView DataContext=\"{Binding WeaponEquipments}\"/>\n                </TabItem>\n            </TabControl>\n        </TabItem>\n        <TabItem Header=\"Characters\">\n            <local:CharactersView DataContext=\"{Binding Characters}\"/>\n        </TabItem>\n        <TabItem Header=\"Chapters\">\n            <local:ChaptersView DataContext=\"{Binding Chapters}\"/>\n        </TabItem>\n        <TabItem Header=\"Global\">\n            <local:GlobalView DataContext=\"{Binding Global}\"/>\n        </TabItem>\n        <TabItem Header=\"Developer\" Visibility=\"{Binding AdvancedVisibility}\">\n            <local:DeveloperView DataContext=\"{Binding Developer}\"/>\n        </TabItem>\n        <TabItem Header=\"Unk1\" Visibility=\"{Binding AdvancedVisibility}\">\n            <local:Unknown1View DataContext=\"{Binding Unk1}\"/>\n        </TabItem>\n        <TabItem Header=\"Unk2\" Visibility=\"{Binding AdvancedVisibility}\">\n            <local:Unknown2View DataContext=\"{Binding Unk2}\"/>\n        </TabItem>\n        <TabItem Header=\"Unk3\" Visibility=\"{Binding AdvancedVisibility}\">\n            <local:Unknown3View DataContext=\"{Binding Unk3}\"/>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/FF7RMainView.xaml.cs",
    "content": "using KHSave.SaveEditor.Ff7Remake.Data;\nusing System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for FF7RMainView.xaml\n    /// </summary>\n    public partial class FF7RMainView : UserControl\n    {\n        public FF7RMainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/GlobalView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.GlobalView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"500\" d:DesignWidth=\"400\">\n    <StackPanel>\n        <common:TwoEqualColumnsStackPanel Margin=\"0 0 0 5\">\n            <TextBlock Text=\"Playable character\"/>\n            <ComboBox\n                ItemsSource=\"{Binding CharacterType}\"\n                SelectedValue=\"{Binding PlayableCharacter}\"\n                SelectedValuePath=\"Value\"\n                DisplayMemberPath=\"Name\"/>\n\n            <TextBlock Text=\"👀\"/>\n            <TextBlock Text=\"PLACEHOLDER\" Visibility=\"Collapsed\"/>\n\n            <TextBlock Text=\"Current Chapter in play\"/>\n            <TextBox Text=\"{Binding CurrentChapter, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <TextBlock Visibility=\"{Binding AdvancedVisibility}\" Text=\"Chapter ID\"/>\n            <TextBox Visibility=\"{Binding AdvancedVisibility}\"\n                 Text=\"{Binding CurrentChapterId, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <TextBlock Visibility=\"{Binding AdvancedVisibility}\" Text=\"Chapter Chunk ID\"/>\n            <TextBox Visibility=\"{Binding AdvancedVisibility}\"\n                 Text=\"{Binding CurrentChapterChunk, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <TextBlock Visibility=\"{Binding AdvancedVisibility}\" Text=\"Chapter Chunk ID (duplicate?)\"/>\n            <TextBox Visibility=\"{Binding AdvancedVisibility}\"\n                 Text=\"{Binding CurrentChapterChunk2, UpdateSourceTrigger=PropertyChanged}\"/>\n        </common:TwoEqualColumnsStackPanel>\n        <common:TwoEqualColumnsStackPanel Margin=\"0 0 0 5\" Visibility=\"{Binding AdvancedVisibility}\">\n            <TextBlock Text=\"Unknown 01\"/>\n            <TextBox Text=\"{Binding Unk01, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBlock Text=\"Unknown 02\"/>\n            <TextBox Text=\"{Binding Unk02, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBlock Text=\"Unknown 03\"/>\n            <TextBox Text=\"{Binding Unk03, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBlock Text=\"Unknown 04\"/>\n            <TextBox Text=\"{Binding Unk04, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBlock Text=\"Unknown 05\"/>\n            <TextBox Text=\"{Binding Unk05, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <TextBlock Text=\"Unknown 288\"/>\n            <TextBox Text=\"{Binding Unk288, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBlock Text=\"Unknown 28c\"/>\n            <TextBox Text=\"{Binding Unk28c, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBlock Text=\"Unknown 290\"/>\n            <TextBox Text=\"{Binding Unk290, UpdateSourceTrigger=PropertyChanged, StringFormat=F2}\"/>\n            <TextBlock Text=\"Unknown 294\"/>\n            <TextBox Text=\"{Binding Unk294, UpdateSourceTrigger=PropertyChanged}\"/>\n        </common:TwoEqualColumnsStackPanel>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/GlobalView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for GlobalView.xaml\n    /// </summary>\n    public partial class GlobalView : UserControl\n    {\n        public GlobalView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/InventoryEntryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.InventoryEntryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"200\">\n    <UserControl.Resources>\n        <SolidColorBrush x:Key=\"textForeground\" Color=\"#F1F1F1\" />\n        <SolidColorBrush x:Key=\"textHyperlink\" Color=\"#569CD6\" />\n        <Thickness x:Key=\"labelMargin\" Left=\"10\" Top=\"0\" Right=\"0\" Bottom=\"3\" />\n    </UserControl.Resources>\n    <StackPanel>\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"2*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"22\"/>\n            </Grid.RowDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"Item kind\"/>\n            <ComboBox\n                Grid.Row=\"1\" Grid.Column=\"0\"\n                ItemsSource=\"{Binding ItemTypes}\"\n                SelectedValue=\"{Binding ItemId}\"\n                SelectedValuePath=\"Id\">\n                <ComboBox.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Orientation=\"Horizontal\">\n                            <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                                Source=\"{Binding Icon}\"/>\n                            <TextBlock Text=\"{Binding Name}\"/>\n                        </StackPanel>\n                    </DataTemplate>\n                </ComboBox.ItemTemplate>\n            </ComboBox>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"Amount\"/>\n            <TextBox Grid.Row=\"2\" Grid.Column=\"2\" Text=\"{Binding Count, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n\n        <TextBlock Text=\"Date obtained\"/>\n        <TextBox Text=\"{Binding Timestamp, Mode=OneWay}\" IsReadOnly=\"True\"/>\n\n        <common:TwoEqualColumnsStackPanel Visibility=\"{Binding AdvancedVisibility}\" Margin=\"0 0 0 10\">\n            <TextBlock Text=\"Item kind ID\"/>\n            <TextBox Text=\"{Binding ItemId, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBlock Text=\"Category\"/>\n            <ComboBox\n                ItemsSource=\"{Binding Categories}\"\n                SelectedValue=\"{Binding Category}\"\n                DisplayMemberPath=\"Name\"\n                SelectedValuePath=\"Value\"/>\n            <TextBlock Text=\"Unused 04\"/>\n            <TextBox Text=\"{Binding Unused04, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBlock Text=\"Unused 14\"/>\n            <TextBox Text=\"{Binding Unused14, UpdateSourceTrigger=PropertyChanged}\"/>\n        </common:TwoEqualColumnsStackPanel>\n\n        <StackPanel Visibility=\"{Binding NameRequestVisibility}\">\n            <TextBlock TextWrapping=\"Wrap\">\n                This item have \"Item kind\" selection is empty and it is represented by a number.\n                It means that the save editor do not know yet what item is it. If you can prove\n                its name, you can\n                <Hyperlink Foreground=\"{StaticResource textHyperlink}\"\n                    NavigateUri=\"{Binding AddItemRequestUrl, Mode=OneWay}\"\n                    RequestNavigate=\"Hyperlink_RequestNavigate\"\n                    TextDecorations=\"{x:Null}\">\n                request to add the item\n                </Hyperlink>.\n            </TextBlock>\n            <TextBlock TextWrapping=\"Wrap\">\n                To prove the item name, you can set a specific amount and see if in-game the value is\n                there, or you set the amount of all your inventory to 0 but this item. The in-game\n                inventory should be empty and the only item is the one you were searching for.\n            </TextBlock>\n        </StackPanel>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/InventoryEntryView.xaml.cs",
    "content": "using System.Diagnostics;\nusing System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for InventoryEntryView.xaml\n    /// </summary>\n    public partial class InventoryEntryView : UserControl\n    {\n        public InventoryEntryView()\n        {\n            InitializeComponent();\n        }\n\n        private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)\n        {\n            Process.Start(new ProcessStartInfo()\n            {\n                FileName = e.Uri.AbsoluteUri,\n                UseShellExecute = true\n            });\n            e.Handled = true;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/InventoryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.InventoryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"1*\"/>\n        </Grid.ColumnDefinitions>\n\n        <Grid Grid.Column=\"0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <ListBox\n                Grid.Row=\"0\"\n                ItemsSource=\"{Binding Items}\"\n                SelectedIndex=\"{Binding SelectedIndex}\"\n                SelectedItem=\"{Binding SelectedItem}\"\n                HorizontalContentAlignment=\"Stretch\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate>\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n                            <Image Grid.Column=\"0\" Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                               Source=\"{Binding Icon}\"/>\n                            <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" />\n                            <TextBlock Grid.Column=\"2\" Margin=\"0 0 5 0\" Text=\"{Binding Count, StringFormat=x{0:D02}}\" />\n                        </Grid>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n\n            <Grid Grid.Row=\"1\" Margin=\"0 5 0 5\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Image Grid.Column=\"0\" Source=\"{StaticResource Search_16x}\"/>\n                <TextBox Grid.Column=\"2\"\n                    Text=\"{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </Grid>\n        \n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select an item to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\"\n            Visibility=\"{Binding EntryVisible}\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <local:InventoryEntryView Margin=\"0 0 10 0\"  DataContext=\"{Binding SelectedItem}\"/>\n            </ScrollViewer>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/InventoryView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for InventoryView.xaml\n    /// </summary>\n    public partial class InventoryView : UserControl\n    {\n        public InventoryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/MateriaEntryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.MateriaEntryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"200\">\n    <StackPanel>\n        <TextBlock Text=\"Materia type\"/>\n        <ComboBox\n            Margin=\"0 0 0 5\"\n            ItemsSource=\"{Binding ItemType, Mode=OneTime}\"\n            SelectedValue=\"{Binding ItemId}\"\n            SelectedValuePath=\"Id\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                            Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n\n        <common:TwoEqualColumnsStackPanel Margin=\"0 0 0 5\">\n            <TextBlock Text=\"Equipped by\"/>\n            <ComboBox\n                ItemsSource=\"{Binding CharacterType}\"\n                SelectedValue=\"{Binding Character}\"\n                SelectedValuePath=\"Value\"/>\n            <TextBlock Text=\"Obtained\"/>\n            <TextBox Text=\"{Binding Timestamp, Mode=OneWay}\" IsReadOnly=\"True\"/>\n\n            <TextBlock Text=\"Ability point (AP)\"/>\n            <TextBox Text=\"{Binding AbilityPoint, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBlock Text=\"Level\"/>\n            <TextBox Text=\"{Binding Level, UpdateSourceTrigger=PropertyChanged}\"/>\n        </common:TwoEqualColumnsStackPanel>\n\n        <TextBlock Text=\"{Binding Index, StringFormat=Materia index: {0}}\"/>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/MateriaEntryView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for MateriaEntryView.xaml\n    /// </summary>\n    public partial class MateriaEntryView : UserControl\n    {\n        public MateriaEntryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/MateriaView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.MateriaView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"1*\"/>\n        </Grid.ColumnDefinitions>\n\n        <Grid Grid.Column=\"0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <ListBox\n                Grid.Row=\"0\"\n                ItemsSource=\"{Binding Items}\"\n                SelectedIndex=\"{Binding SelectedIndex}\"\n                SelectedItem=\"{Binding SelectedItem}\"\n                HorizontalContentAlignment=\"Stretch\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate>\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n                            <Image Grid.Column=\"0\" Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                               Source=\"{Binding Icon}\"/>\n                            <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" />\n                            <TextBlock Grid.Column=\"2\" Margin=\"0 0 5 0\" Text=\"{Binding AbilityPoint, StringFormat=AP {0:D}}\" />\n                        </Grid>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n\n            <Grid Grid.Row=\"1\" Margin=\"0 5 0 5\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Image Grid.Column=\"0\" Source=\"{StaticResource Search_16x}\"/>\n                <TextBox Grid.Column=\"2\"\n                    Text=\"{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </Grid>\n\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select a materia to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\"\n            Visibility=\"{Binding EntryVisible}\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <local:MateriaEntryView Margin=\"0 0 10 0\"  DataContext=\"{Binding SelectedItem}\"/>\n            </ScrollViewer>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/MateriaView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for MateriaView.xaml\n    /// </summary>\n    public partial class MateriaView : UserControl\n    {\n        public MateriaView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/PositionView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.PositionView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"90\" d:DesignWidth=\"300\">\n    <StackPanel>\n        <Grid Visibility=\"{Binding SimpleVisibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"1*\"/>\n                \n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"2*\"/>\n                \n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"2*\"/>\n                \n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"22\"/>\n            </Grid.ColumnDefinitions>\n            <TextBlock Grid.Column=\"0\" Text=\"{Binding Name}\" Margin=\"0 1 0 0 \"/>\n            <ComboBox Grid.Column=\"2\" ItemsSource=\"{Binding StatusTypes}\"\n                SelectedValue=\"{Binding Status}\" SelectedValuePath=\"Value\"/>\n            <TextBlock Grid.Column=\"4\" Text=\"{Binding TextCoordinates}\"/>\n            <Button Grid.Column=\"6\" Command=\"{Binding TeleportCommand}\">\n                <Image Source=\"{StaticResource EditWindow_16x}\"/>\n            </Button>\n        </Grid>\n        <Grid Margin=\"0 0 0 3\" Visibility=\"{Binding AdvancedVisibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"1*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"2*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"22\"/>\n            </Grid.ColumnDefinitions>\n            <TextBlock Grid.Column=\"0\" Text=\"{Binding Name}\" Margin=\"0 1 0 0 \"/>\n            <ComboBox Grid.Column=\"2\" ItemsSource=\"{Binding StatusTypes}\"\n                SelectedValue=\"{Binding Status}\" SelectedValuePath=\"Value\"/>\n            <Button Grid.Column=\"6\" Command=\"{Binding TeleportCommand}\">\n                <Image Source=\"{StaticResource EditWindow_16x}\"/>\n            </Button>\n        </Grid>\n        <Grid Visibility=\"{Binding AdvancedVisibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                \n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"1*\"/>\n                \n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"1*\"/>\n\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"1*\"/>\n            </Grid.ColumnDefinitions>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"3\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"Position\" Margin=\"0 0 3 0\"/>\n            <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"Rotation\" Margin=\"0 0 3 0\"/>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"X\" Margin=\"0 0 3 0\"/>\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"5\" Text=\"Y\" Margin=\"0 0 3 0\"/>\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"8\" Text=\"Z\" Margin=\"0 0 3 0\"/>\n            <TextBox Grid.Row=\"0\" Grid.Column=\"3\" Text=\"{Binding PosX, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBox Grid.Row=\"0\" Grid.Column=\"6\" Text=\"{Binding PosY, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBox Grid.Row=\"0\" Grid.Column=\"9\" Text=\"{Binding PosZ, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <TextBlock Grid.Row=\"2\" Grid.Column=\"2\" Text=\"X\" Margin=\"0 0 3 0\"/>\n            <TextBlock Grid.Row=\"2\" Grid.Column=\"5\" Text=\"Y\" Margin=\"0 0 3 0\"/>\n            <TextBlock Grid.Row=\"2\" Grid.Column=\"8\" Text=\"Z\" Margin=\"0 0 3 0\"/>\n            <TextBox Grid.Row=\"2\" Grid.Column=\"3\" Text=\"{Binding RotX, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBox Grid.Row=\"2\" Grid.Column=\"6\" Text=\"{Binding RotY, UpdateSourceTrigger=PropertyChanged}\"/>\n            <TextBox Grid.Row=\"2\" Grid.Column=\"9\" Text=\"{Binding RotZ, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n        <Separator Visibility=\"{Binding AdvancedVisibility}\"/>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/PositionView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for PositionView.xaml\n    /// </summary>\n    public partial class PositionView : UserControl\n    {\n        public PositionView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/TeleportWindow.xaml",
    "content": "﻿<Window x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.TeleportWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n        mc:Ignorable=\"d\"\n        Title=\"Character teleportation\" Height=\"450\" Width=\"520\" ResizeMode=\"NoResize\">\n    <Window.Resources>\n        <SolidColorBrush x:Key=\"textForeground\" Color=\"#F1F1F1\" />\n        <SolidColorBrush x:Key=\"textHyperlink\" Color=\"#569CD6\" />\n        <Thickness x:Key=\"labelMargin\" Left=\"10\" Top=\"0\" Right=\"0\" Bottom=\"3\" />\n    </Window.Resources>\n    <Grid Margin=\"10\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"5\"/>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"5\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"10\"/>\n            <RowDefinition Height=\"22\"/>\n        </Grid.RowDefinitions>\n\n        <StackPanel>\n            <TextBlock Grid.Row=\"0\" Text=\"Please select a location you want teleport to.\"/>\n            <TextBlock TextWrapping=\"Wrap\">\n                You can \n                <Hyperlink Foreground=\"{StaticResource textHyperlink}\"\n                    NavigateUri=\"{Binding AddLocationRequestUrl, Mode=OneWay}\"\n                    RequestNavigate=\"Hyperlink_RequestNavigate\"\n                    TextDecorations=\"{x:Null}\">\n                    request to add your location location\n                </Hyperlink>\n                  by specifying chapter location and coodinates, or you can \n                <Hyperlink Foreground=\"{StaticResource textHyperlink}\"\n                    NavigateUri=\"{Binding SourceCodeUrl, Mode=OneWay}\"\n                    RequestNavigate=\"Hyperlink_RequestNavigate\"\n                    TextDecorations=\"{x:Null}\">\n                    add them manually\n                </Hyperlink>\n                to be integrated in the next version of the editor!\n            </TextBlock>\n        </StackPanel>\n        <TextBlock Grid.Row=\"4\" Text=\"{Binding FetchStatusText}\"/>\n        <StackPanel Grid.Row=\"6\" Orientation=\"Horizontal\" HorizontalAlignment=\"Right\">\n            <Button Content=\"_Cancel\" Width=\"75\" Margin=\"0,0,10,0\" IsCancel=\"True\"/>\n            <Button Content=\"_Ok\" Width=\"75\" IsDefault=\"True\" Command=\"{Binding OkCommand}\" />\n        </StackPanel>\n\n        <DataGrid\n            Grid.Row=\"2\"\n            AutoGenerateColumns=\"False\"\n            Background=\"{DynamicResource {x:Static SystemColors.WindowBrushKey}}\"\n            ItemsSource=\"{Binding Locations}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            IsReadOnly=\"True\">\n            <DataGrid.RowStyle>\n                <Style TargetType=\"DataGridRow\">\n                    <Setter Property=\"Height\" Value=\"24\" />\n                    <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n                </Style>\n            </DataGrid.RowStyle>\n            <DataGrid.Columns>\n                <DataGridTextColumn Header=\"Chapter\" Width=\"Auto\" Binding=\"{Binding Chapter}\"/>\n                <DataGridCheckBoxColumn Header=\"OOB\" Width=\"Auto\" Binding=\"{Binding IsOutOfBounds, Mode=OneWay}\"/>\n                <DataGridTextColumn Header=\"Description\" Width=\"*\" Binding=\"{Binding Description}\"/>\n                <DataGridTextColumn Header=\"Coordinates\" Width=\"Auto\" Binding=\"{Binding Coordinates}\"/>\n            </DataGrid.Columns>\n        </DataGrid>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/TeleportWindow.xaml.cs",
    "content": "using KHSave.SaveEditor.Ff7Remake.Models;\nusing KHSave.SaveEditor.Ff7Remake.ViewModels;\nusing System.Diagnostics;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for TeleportWindow.xaml\n    /// </summary>\n    public partial class TeleportWindow : Window\n    {\n        public TeleportWindow(ChapterCharacterEntryModel chapterCharacter)\n        {\n            InitializeComponent();\n            DataContext = new TeleportViewModel(chapterCharacter);\n        }\n\n        private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)\n        {\n            Process.Start(new ProcessStartInfo()\n            {\n                FileName = e.Uri.AbsoluteUri,\n                UseShellExecute = true\n            });\n            e.Handled = true;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/Unknown1View.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.Unknown1View\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\"\n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"/>\n\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select an entry to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\"\n            Visibility=\"{Binding EntryVisible}\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <common:TwoEqualColumnsStackPanel Margin=\"0 0 10 0\" >\n                    <TextBlock Text=\"Unknown 00\"/>\n                    <TextBox Text=\"{Binding Unknown00, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 01\"/>\n                    <TextBox Text=\"{Binding Unknown01, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 02\"/>\n                    <TextBox Text=\"{Binding Unknown02, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 03\"/>\n                    <TextBox Text=\"{Binding Unknown03, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 04\"/>\n                    <TextBox Text=\"{Binding Unknown04, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 08\"/>\n                    <TextBox Text=\"{Binding Unknown08, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Kill count\"/>\n                    <TextBox Text=\"{Binding KillCount, UpdateSourceTrigger=PropertyChanged}\"/>\n                </common:TwoEqualColumnsStackPanel>\n            </ScrollViewer>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/Unknown1View.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for Unknown1View.xaml\n    /// </summary>\n    public partial class Unknown1View : UserControl\n    {\n        public Unknown1View()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/Unknown2View.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.Unknown2View\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"/>\n\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select an entry to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" \n            Visibility=\"{Binding EntryVisible}\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <common:TwoEqualColumnsStackPanel Margin=\"0 0 10 0\">\n                    <TextBlock Text=\"Unknown 00\"/>\n                    <TextBox Text=\"{Binding Unknown00, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 01\"/>\n                    <TextBox Text=\"{Binding Unknown01, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 02\"/>\n                    <TextBox Text=\"{Binding Unknown02, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 03\"/>\n                    <TextBox Text=\"{Binding Unknown03, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Item\"/>\n                    <ComboBox\n                        ItemsSource=\"{Binding ItemTypes}\"\n                        SelectedValue=\"{Binding ItemId}\"\n                        SelectedValuePath=\"Id\"\n                        DisplayMemberPath=\"Name\"/>\n\n                    <TextBlock Text=\"Item ID (when Item is blank)\"/>\n                    <TextBox Text=\"{Binding ItemId, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 08\"/>\n                    <TextBox Text=\"{Binding Unknown08, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 0c\"/>\n                    <TextBox Text=\"{Binding Unknown0c, UpdateSourceTrigger=PropertyChanged}\"/>\n                </common:TwoEqualColumnsStackPanel>\n            </ScrollViewer>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/Unknown2View.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for Unknown2View.xaml\n    /// </summary>\n    public partial class Unknown2View : UserControl\n    {\n        public Unknown2View()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/Unknown3View.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Ff7Remake.Views.Unknown3View\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Ff7Remake.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"/>\n\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select an entry to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\"\n            Visibility=\"{Binding EntryVisible}\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <common:TwoEqualColumnsStackPanel Margin=\"0 0 10 0\" >\n                    <TextBlock Text=\"Character I guess...?\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character}\" SelectedValuePath=\"Value\"/>\n\n                    <TextBlock Text=\"Unknown 01\"/>\n                    <TextBox Text=\"{Binding Unknown01, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 02\"/>\n                    <TextBox Text=\"{Binding Unknown02, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 03 (always 0?)\"/>\n                    <TextBox Text=\"{Binding Unknown03, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 04\"/>\n                    <TextBox Text=\"{Binding Unknown04, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 08\"/>\n                    <TextBox Text=\"{Binding Unknown08, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 0c\"/>\n                    <TextBox Text=\"{Binding Unknown0c, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 10\"/>\n                    <TextBox Text=\"{Binding Unknown10, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Character 1\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character1}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 2\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character2}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 3\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character3}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 4\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character4}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 5\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character5}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 6\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character6}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 7\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character7}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 8\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character8}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 9\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character9}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 10\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character10}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 11\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character11}\" SelectedValuePath=\"Value\"/>\n                    <TextBlock Text=\"Character 12\"/>\n                    <ComboBox ItemsSource=\"{Binding CharacterTypes}\" SelectedValue=\"{Binding Character12}\" SelectedValuePath=\"Value\"/>\n\n                    <TextBlock Text=\"Unknown 20 (always 0?)\"/>\n                    <TextBox Text=\"{Binding Unknown20, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 24 (always 0?)\"/>\n                    <TextBox Text=\"{Binding Unknown24, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 28 (always 0?)\"/>\n                    <TextBox Text=\"{Binding Unknown28, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <TextBlock Text=\"Unknown 2c (always 0?)\"/>\n                    <TextBox Text=\"{Binding Unknown2c, UpdateSourceTrigger=PropertyChanged}\"/>\n                </common:TwoEqualColumnsStackPanel>\n            </ScrollViewer>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Ff7Remake/Views/Unknown3View.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Ff7Remake.Views\n{\n    /// <summary>\n    /// Interaction logic for Unknown3View.xaml\n    /// </summary>\n    public partial class Unknown3View : UserControl\n    {\n        public Unknown3View()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh02/KHSave.SaveEditor.Kh02.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.Lib02\\KHSave.Lib02.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh02/MainView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh02.MainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh02\"\n             xmlns:views=\"clr-namespace:KHSave.SaveEditor.Kh02.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"350\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Column=\"0\" Margin=\"3\" VerticalAlignment=\"Center\"\n                Text=\"Slot\"/>\n            <ComboBox Grid.Column=\"1\" Margin=\"3\"\n                ItemsSource=\"{Binding Slots.Items}\"\n                SelectedValue=\"{Binding SelectedSlot}\"\n                SelectedValuePath=\"Value\"\n                DisplayMemberPath=\"Name\"/>\n            <Button Grid.Column=\"2\" Margin=\"3\"\n                Visibility=\"Hidden\"\n                Content=\"Settings\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"1\" IsEnabled=\"{Binding IsSlotSelected}\">\n            <TabControl DataContext=\"{Binding SelectedSlot}\">\n                <TabItem Header=\"System\">\n                    <views:SystemView\n                    Grid.Row=\"1\"\n                    DataContext=\"{Binding}\"/>\n                </TabItem>\n            </TabControl>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh02/MainView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh02\n{\n    /// <summary>\n    /// Interaction logic for MainView.xaml\n    /// </summary>\n    public partial class MainView : UserControl\n    {\n        public MainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh02/Models/SlotListModel.cs",
    "content": "using KHSave.SaveEditor.Kh02.ViewModels;\nusing KHSave.Trssv;\nusing KHSave.Trssv.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh02.Models\n{\n    public class SlotListModel : GenericListModel<SlotViewModel>\n    {\n        public SlotListModel(SaveKh02 save) :\n            this(save.Slots)\n        { }\n\n        public SlotListModel(IEnumerable<Slot> slots) :\n            this(slots.Select((x, i) => new SlotViewModel(i, x)))\n        { }\n\n        public SlotListModel(IEnumerable<SlotViewModel> slots) :\n            base(slots)\n        { }\n\n        protected override SlotViewModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh02/ViewModels/GlobalSystemViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Trssv;\n\nnamespace KHSave.SaveEditor.Kh02.ViewModels\n{\n    public class GlobalSystemViewModel\n    {\n        private readonly SaveKh02 save;\n\n        public GlobalSystemViewModel(SaveKh02 save)\n        {\n            this.save = save;\n        }\n\n        public bool IsVibrationEnable { get => save.IsVibrationEnable; set => save.IsVibrationEnable = value; }\n        public bool InvertCameraVertical { get => save.InvertCameraVertical; set => save.InvertCameraVertical = value; }\n        public bool InvertCameraHorizontal { get => save.InvertCameraHorizontal; set => save.InvertCameraHorizontal = value; }\n        public bool IsMapVisible { get => save.IsMapVisible; set => save.IsMapVisible = value; }\n        public bool IsSubtitlesVisible { get => save.IsSubtitlesVisible; set => save.IsSubtitlesVisible = value; }\n        public bool Unk10_Bit5 { get => save.Unk10_Bit5; set => save.Unk10_Bit5 = value; }\n        public bool CanEarnExp { get => save.CanEarnExp; set => save.CanEarnExp = value; }\n\n        public int CameraSpeed { get => save.CameraSpeed; set => save.CameraSpeed = value; }\n        public int Brightness { get => save.Brightness; set => save.Brightness = value; }\n        public int TheaterModeWatched { get => save.TheaterModeWatched; set => save.TheaterModeWatched = value; }\n        public int TheaterMode { get => save.TheaterMode; set => save.TheaterMode = value; }\n    }\n}\n\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh02/ViewModels/Kh02ViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.SaveEditor.Kh02.Models;\nusing KHSave.Trssv;\nusing System.IO;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh02.ViewModels\n{\n    public class Kh02ViewModel : BaseNotifyPropertyChanged, IRefreshUi, IOpenStream, IWriteToStream\n    {\n        private SlotViewModel selectedSlot;\n\n        public SaveKh02 Save { get; private set; }\n\n        public GlobalSystemViewModel GlobalSystem { get; set; }\n\n        public GenericListModel<SlotViewModel> Slots { get; set; }\n\n        public SlotViewModel SelectedSlot\n        {\n            get => selectedSlot;\n            set\n            {\n                selectedSlot = value;\n                OnPropertyChanged();\n                OnPropertyChanged(nameof(IsSlotSelected));\n            }\n        }\n\n        public bool IsSlotSelected => SelectedSlot != null;\n\n        public Kh02ViewModel()\n        {\n        }\n\n        public void RefreshUi()\n        {\n            GlobalSystem = new GlobalSystemViewModel(Save);\n\n            OnPropertyChanged(nameof(GlobalSystem));\n\n            var prevSlot = SelectedSlot;\n            SelectedSlot = null;\n            OnPropertyChanged(nameof(SelectedSlot));\n            SelectedSlot = prevSlot;\n        }\n\n        public void OpenStream(Stream stream)\n        {\n            Save = SaveKh02.Read(stream);\n            Slots = new SlotListModel(Save);\n        }\n\n        public void WriteToStream(Stream stream) => Save.Write(stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh02/ViewModels/SlotViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.Trssv.Models;\nusing KHSave.Trssv.Types;\nusing System;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Kh02.ViewModels\n{\n    public class SlotViewModel : GenericEntryModel<string, SlotViewModel>\n    {\n        private readonly Slot slot;\n        private readonly int slotIndex;\n\n        public SlotViewModel(int slotIndex, Slot slot)\n        {\n            this.slotIndex = slotIndex;\n            this.slot = slot;\n            Name = $\"Slot {slotIndex}\";\n            Value = this;\n\n            Difficulty = new KhEnumListModel<DifficultyType>(() => slot.Difficulty, x => slot.Difficulty = x);\n            Location = new KhEnumListModel<LocationType>(() => slot.Location, x => slot.Location = x);\n            Maps = new KhEnumListModel<MapType>(\n                () => Enum.TryParse<MapType>(CurrentMap, out var result) ? result : default(MapType),\n                x => MapInfoAttribute.GetMapId(x),\n                x => InfoAttribute.GetInfo(x));\n            SpawnPoints = new KhEnumListModel<SpawnType>(\n                () => Enum.TryParse<SpawnType>(MapSpawn, out var result) ? result : default(SpawnType),\n                x => x.ToString());\n        }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public KhEnumListModel<DifficultyType> Difficulty { get; }\n        public KhEnumListModel<LocationType> Location { get; }\n        public KhEnumListModel<MapType> Maps { get; }\n        public KhEnumListModel<SpawnType> SpawnPoints { get; }\n\n        public byte DisplayLevel { get => slot.Level; set => slot.Level = value; }\n        public int TotalExp { get => slot.Experience; set => slot.Experience = value; }\n        public int StoryProgression { get => slot.StoryProgression; set => slot.StoryProgression = value; }\n        public string MapPath { get => slot.MapPath; set => slot.MapPath = value; }\n        public string MapSpawn { get => slot.MapSpawn; set => slot.MapSpawn = value; }\n        public string PlayerScript { get => slot.PlayerScript; set => slot.PlayerScript = value; }\n        public string PlayerCharacter { get => slot.PlayerCharacter; set => slot.PlayerCharacter = value; }\n        public string SupportCharacter { get => slot.SupportCharacter; set => slot.SupportCharacter = value; }\n\n        public string CurrentMap\n        {\n            get\n            {\n                var separatorIndex = MapPath.LastIndexOf('/') + 1;\n                return separatorIndex > 0 ? MapPath.Substring(separatorIndex) : string.Empty;\n            }\n            set\n            {\n                MapPath = $\"/Game/Levels/dw/{value}/{value}\";\n                OnPropertyChanged();\n                OnPropertyChanged(nameof(MapPath));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh02/Views/SystemView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh02.Views.SystemView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh02.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <StackPanel>\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Difficulty\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Difficulty}\"\n                    SelectedValue=\"{Binding Difficulty.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Location\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Location}\"\n                    SelectedValue=\"{Binding Location.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Display level\"/>\n                <TextBox Text=\"{Binding DisplayLevel, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Total exp\"/>\n                <TextBox Text=\"{Binding TotalExp, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid Visibility=\"{Binding SimpleVisibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <!--<ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>-->\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Map\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Maps}\"\n                    SelectedValue=\"{Binding CurrentMap}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>\n\n            <!--<StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Spawn point\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding SpawnPoints}\"\n                    SelectedValue=\"{Binding MapSpawn}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>-->\n        </Grid>\n\n        <GroupBox Header=\"Room mod (advanced mode)\" Visibility=\"{Binding AdvancedVisibility}\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"5\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"0\" Text=\"Map path\"/>\n                <TextBox Grid.Column=\"0\" Grid.Row=\"1\" Text=\"{Binding MapPath, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Column=\"2\" Grid.Row=\"0\" Text=\"Spawn point\"/>\n                <TextBox Grid.Column=\"2\" Grid.Row=\"1\" Text=\"{Binding MapSpawn, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"3\" Text=\"Player script\"/>\n                <TextBox Grid.Column=\"0\" Grid.Row=\"4\" Text=\"{Binding PlayerScript, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Column=\"2\" Grid.Row=\"3\" Text=\"Pawn path\"/>\n                <TextBox Grid.Column=\"2\" Grid.Row=\"4\" Text=\"{Binding PlayerCharacter, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </GroupBox>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh02/Views/SystemView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh02.Views\n{\n    /// <summary>\n    /// Interaction logic for SystemView.xaml\n    /// </summary>\n    public partial class SystemView : UserControl\n    {\n        public SystemView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Interfaces/IGetAbilities.cs",
    "content": "using KHSave.Lib1.Types;\nusing KHSave.SaveEditor.Common.Models;\n\nnamespace KHSave.SaveEditor.Kh1.Interfaces\n{\n    public interface IGetAbilities\n    {\n        KhEnumListModel<AbilityType> Abilities { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/KHSave.SaveEditor.Kh1.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.Lib1\\KHSave.Lib1.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\" />\n  </ItemGroup>\n  \n</Project>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/MainView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh1.MainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh1\" \n             xmlns:views=\"clr-namespace:KHSave.SaveEditor.Kh1.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <TabControl>\n        <TabItem Header=\"System\">\n            <views:SystemView DataContext=\"{Binding System}\"/>\n        </TabItem>\n        <TabItem Header=\"Inventory\">\n            <views:InventoryView DataContext=\"{Binding Inventory}\"/>\n        </TabItem>\n        <TabItem Header=\"Players\">\n            <views:PlayersView DataContext=\"{Binding Players}\"/>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/MainView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh1\n{\n    /// <summary>\n    /// Interaction logic for MainView.xaml\n    /// </summary>\n    public partial class MainView : UserControl\n    {\n        public MainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Models/InventoryItemModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib1.Types;\nusing KHSave.SaveEditor.Common.Services;\nusing System.Windows.Media;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh1.Models\n{\n    public class InventoryItemModel :\n        BaseNotifyPropertyChanged,\n        SearchEngine.ICount,\n        SearchEngine.IName\n    {\n        private readonly int _index;\n        private readonly byte[] _inventoryCount;\n\n        public InventoryItemModel(int index, byte[] inventoryCount)\n        {\n            _index = index;\n            _inventoryCount = inventoryCount;\n        }\n\n        public EquipmentType Type => (EquipmentType)_index;\n        public string Name => InfoAttribute.GetInfo(Type);\n        public ImageSource Icon => IconService.Icon(Type);\n\n        public int Count => Amount;\n\n        public byte Amount\n        {\n            get => _inventoryCount[_index];\n            set\n            {\n                _inventoryCount[_index] = value;\n                OnPropertyChanged();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Service/EquipmentManagerFactory.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing KHSave.Lib1.Models;\nusing KHSave.Lib1.Types;\n\nnamespace KHSave.SaveEditor.Kh1.Service\n{\n    public static class EquipmentManagerFactory\n    {\n        private class AccessoryEquipmentManager : IEquipmentManager\n        {\n            private readonly Character character;\n\n            internal AccessoryEquipmentManager(Character character)\n            {\n                this.character = character;\n            }\n\n            public byte Count { get => character.AccessoryCount; set => character.AccessoryCount = Math.Min(byte.MaxValue, value); }\n\n            public EquipmentType GetEquipment(byte index) => (EquipmentType)character.Accessories[index];\n            public void SetEquipment(byte index, EquipmentType equipment) => character.Accessories[index] = (byte)equipment;\n        }\n\n        private class ConsumableEquipmentManager : IEquipmentManager\n        {\n            private readonly Character character;\n\n            internal ConsumableEquipmentManager(Character character)\n            {\n                this.character = character;\n            }\n\n            public byte Count { get => character.ItemCount; set => character.ItemCount = Math.Min(byte.MaxValue, value); }\n\n            public EquipmentType GetEquipment(byte index) => (EquipmentType)character.Items[index];\n            public void SetEquipment(byte index, EquipmentType equipment) => character.Items[index] = (byte)equipment;\n        }\n\n        public static IEquipmentManager ForAccessory(Character character) => new AccessoryEquipmentManager(character);\n        public static IEquipmentManager ForConsumable(Character character) => new ConsumableEquipmentManager(character);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Service/IEquipmentManager.cs",
    "content": "using KHSave.Lib1.Types;\n\nnamespace KHSave.SaveEditor.Kh1.Service\n{\n    public interface IEquipmentManager\n    {\n        byte Count { get; set; }\n\n        EquipmentType GetEquipment(byte index);\n        void SetEquipment(byte index, EquipmentType equipment);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/ViewModels/AbilityViewModel.cs",
    "content": "using KHSave.Lib1.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh1.Interfaces;\n\nnamespace KHSave.SaveEditor.Kh1.ViewModels\n{\n    public class AbilityViewModel\n    {\n        private readonly byte[] _abilities;\n        private readonly int _abilityIndex;\n        private readonly IGetAbilities _getAbilities;\n\n        public AbilityViewModel(byte[] abilities, int index, IGetAbilities getAbilities)\n        {\n            _abilities = abilities;\n            _abilityIndex = index;\n            _getAbilities = getAbilities;\n        }\n\n        private byte AbilityId\n        {\n            get => _abilities[_abilityIndex];\n            set => _abilities[_abilityIndex] = value;\n        }\n\n        public bool IsEnabled\n        {\n            get => AbilityId < 0x80;\n            set => AbilityId = (byte)((AbilityId & 0x7F) | (value ? 0x00 : 0x80));\n        }\n\n        public AbilityType Ability\n        {\n            get => (AbilityType)(AbilityId & 0x7F);\n            set => AbilityId = (byte)(((int)value & 0x7F) | (AbilityId & 0x80));\n        }\n\n        public string Name => Ability.ToString();\n\n        public KhEnumListModel<AbilityType> AbilityList => _getAbilities.Abilities;\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/ViewModels/EquipmentItemsViewModel.cs",
    "content": "using KHSave.Lib1.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh1.Service;\nusing System;\nusing System.Collections.Generic;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh1.ViewModels\n{\n    public class EquipmentItemsViewModel\n    {\n        private readonly IEquipmentManager equipmentManager;\n\n        public class EquipmentItemViewModel : BaseNotifyPropertyChanged\n        {\n            private readonly EquipmentItemsViewModel _vm;\n            private readonly byte _index;\n\n            internal EquipmentItemViewModel(EquipmentItemsViewModel vm, byte index)\n            {\n                _vm = vm;\n                _index = index;\n                ValueSet = new KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType>(() => Equipment, value => Equipment = value);\n            }\n\n            public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n            public bool Enabled\n            {\n                get => _vm.IsEnabled(_index);\n                set => _vm.SetEnabled(_index, value);\n            }\n\n            public EquipmentType Equipment\n            {\n                get => _vm.GetEquipment(_index);\n                set => _vm.SetEquipment(_index, value);\n            }\n\n            public IEnumerable<EnumIconTypeModel<EquipmentType>> ValueSet { get; }\n\n            public void InvalidateEnabled()\n            {\n                OnPropertyChanged(nameof(Enabled));\n            }\n        }\n\n\n        public EquipmentItemsViewModel(IEquipmentManager equipmentManager)\n        {\n            this.equipmentManager = equipmentManager;\n            Equipment1 = new EquipmentItemViewModel(this, 0);\n            Equipment2 = new EquipmentItemViewModel(this, 1);\n            Equipment3 = new EquipmentItemViewModel(this, 2);\n            Equipment4 = new EquipmentItemViewModel(this, 3);\n            Equipment5 = new EquipmentItemViewModel(this, 4);\n            Equipment6 = new EquipmentItemViewModel(this, 5);\n            Equipment7 = new EquipmentItemViewModel(this, 6);\n            Equipment8 = new EquipmentItemViewModel(this, 7);\n            Equipment9 = new EquipmentItemViewModel(this, 8);\n            Equipment10 = new EquipmentItemViewModel(this, 9);\n            Equipment11 = new EquipmentItemViewModel(this, 10);\n            Equipment12 = new EquipmentItemViewModel(this, 11);\n        }\n\n        public EquipmentItemViewModel Equipment1 { get; private set; }\n        public EquipmentItemViewModel Equipment2 { get; private set; }\n        public EquipmentItemViewModel Equipment3 { get; private set; }\n        public EquipmentItemViewModel Equipment4 { get; private set; }\n        public EquipmentItemViewModel Equipment5 { get; private set; }\n        public EquipmentItemViewModel Equipment6 { get; private set; }\n        public EquipmentItemViewModel Equipment7 { get; private set; }\n        public EquipmentItemViewModel Equipment8 { get; private set; }\n        public EquipmentItemViewModel Equipment9 { get; private set; }\n        public EquipmentItemViewModel Equipment10 { get; private set; }\n        public EquipmentItemViewModel Equipment11 { get; private set; }\n        public EquipmentItemViewModel Equipment12 { get; private set; }\n\n        public bool IsEnabled(byte index) => equipmentManager.Count > index;\n        public void SetEnabled(byte index, bool enabled)\n        {\n            if (enabled)\n            {\n                equipmentManager.Count = (byte)Math.Max(equipmentManager.Count, index + 1);\n            }\n            else\n            {\n                equipmentManager.Count = Math.Min(equipmentManager.Count, index);\n            }\n\n            Equipment1.InvalidateEnabled();\n            Equipment2.InvalidateEnabled();\n            Equipment3.InvalidateEnabled();\n            Equipment4.InvalidateEnabled();\n            Equipment5.InvalidateEnabled();\n            Equipment6.InvalidateEnabled();\n            Equipment7.InvalidateEnabled();\n            Equipment8.InvalidateEnabled();\n            Equipment9.InvalidateEnabled();\n            Equipment10.InvalidateEnabled();\n            Equipment11.InvalidateEnabled();\n            Equipment12.InvalidateEnabled();\n        }\n        public EquipmentType GetEquipment(byte index) => equipmentManager.GetEquipment(index);\n        public void SetEquipment(byte index, EquipmentType equipment) => equipmentManager.SetEquipment(index, equipment);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/ViewModels/InventoryViewModel.cs",
    "content": "using KHSave.Lib1;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Kh1.Models;\nusing System.Linq;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh1.ViewModels\n{\n    public class InventoryViewModel : GenericListModel<InventoryItemModel>\n    {\n        private string _searchTerm;\n\n        public InventoryViewModel(ISaveKh1 save) :\n            base(save.InventoryCount.Select((_, i) => new InventoryItemModel(i, save.InventoryCount)))\n        {\n\n        }\n\n        public string SearchTerm\n        {\n            get => _searchTerm;\n            set\n            {\n                _searchTerm = value;\n                Filter(items => SearchEngine.Filter(_searchTerm, items).OrderBy(x => (uint)x.Type));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/ViewModels/Kh1ViewModel.cs",
    "content": "using KHSave.Lib1;\nusing KHSave.Lib1.Types;\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.SaveEditor.Common.Exceptions;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh1.Interfaces;\nusing System;\nusing System.IO;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh1.ViewModels\n{\n    public class Kh1ViewModel : BaseNotifyPropertyChanged,\n        IRefreshUi,\n        IOpenStream,\n        IWriteToStream,\n        IGetAbilities\n    {\n        public ISaveKh1 Save { get; private set; }\n\n        public Kh1ViewModel()\n        {\n            Abilities = new KhEnumListModel<AbilityType>();\n        }\n\n        public SystemViewModel System { get; private set; }\n        public InventoryViewModel Inventory { get; private set; }\n        public PlayersViewModel Players { get; private set; }\n        public KhEnumListModel<AbilityType> Abilities { get; }\n\n        public void RefreshUi()\n        {\n            System = new SystemViewModel(Save, this);\n            Inventory = new InventoryViewModel(Save);\n            Players = new PlayersViewModel(Save, this);\n\n            OnPropertyChanged(nameof(System));\n            OnPropertyChanged(nameof(Inventory));\n            OnPropertyChanged(nameof(Players));\n        }\n\n        public void OpenStream(Stream stream)\n        {\n            try\n            {\n                Save = SaveKh1.Read(stream);\n            }\n            catch (NotSupportedException ex)\n            {\n                throw new SaveNotSupportedException(ex.Message);\n            }\n\n            RefreshUi();\n        }\n\n        public void WriteToStream(Stream stream) => Save.Write(stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/ViewModels/PlayerViewModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib1.Models;\nusing KHSave.Lib1.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh1.Interfaces;\nusing KHSave.SaveEditor.Kh1.Service;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Kh1.ViewModels\n{\n    public class PlayerViewModel\n    {\n        private readonly Character character;\n        private readonly int index;\n\n        public PlayerViewModel(Character character, int index, IGetAbilities getAbilities)\n        {\n            this.character = character;\n            this.index = index;\n\n            Weapon = new ItemComboBoxModel<EquipmentType>(() => character.Weapon, x => character.Weapon = x);\n            Accessories = new EquipmentItemsViewModel(EquipmentManagerFactory.ForAccessory(character));\n            Consumables = new EquipmentItemsViewModel(EquipmentManagerFactory.ForConsumable(character));\n            Abilities = character.Abilities\n                .Select((_, i) => new AbilityViewModel(character.Abilities, i, getAbilities))\n                .ToList();\n        }\n\n        public string Name => InfoAttribute.GetInfo((PlayableCharacterType)index);\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public ItemComboBoxModel<EquipmentType> Weapon { get; }\n        public EquipmentItemsViewModel Accessories { get; }\n        public EquipmentItemsViewModel Consumables { get; }\n        public List<AbilityViewModel> Abilities { get; }\n        public byte HpCur { get => character.HpCur; set => character.HpCur = value; }\n        public byte HpMax { get => character.HpMax; set => character.HpMax = value; }\n        public byte MpCur { get => character.MpCur; set => character.MpCur = value; }\n        public byte MpMax { get => character.MpMax; set => character.MpMax = value; }\n        public byte ApMax { get => character.ApMax; set => character.ApMax = value; }\n        public byte Level { get => character.Level; set => character.Level = value; }\n        public int Experience { get => character.Experience; set => character.Experience = value; }\n        public byte Strength { get => character.Strength; set => character.Strength = value; }\n        public byte Defense { get => character.Defense; set => character.Defense = value; }\n        public byte AccessoryCount { get => character.AccessoryCount; set => character.AccessoryCount = value; }\n        public byte ItemCount { get => character.ItemCount; set => character.ItemCount = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/ViewModels/PlayersViewModel.cs",
    "content": "using KHSave.Lib1;\nusing KHSave.Lib1.Models;\nusing KHSave.SaveEditor.Kh1.Interfaces;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh1.ViewModels\n{\n    public class PlayersViewModel : GenericListModel<PlayerViewModel>\n    {\n        private readonly ISaveKh1 save;\n\n        public PlayersViewModel(ISaveKh1 save, IGetAbilities getAbilities) :\n            this(save.Characters, getAbilities)\n        {\n            this.save = save;\n        }\n\n        public PlayersViewModel(IEnumerable<Character> list, IGetAbilities getAbilities) :\n            this(list.Select((pc, index) => new PlayerViewModel(pc, index, getAbilities)))\n        {\n\n        }\n\n        public PlayersViewModel(IEnumerable<PlayerViewModel> list) :\n            base(list)\n        {\n\n        }\n\n        public Visibility PlayerVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility PlayerNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        protected override void OnSelectedItem(PlayerViewModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(PlayerVisible));\n            OnPropertyChanged(nameof(PlayerNotVisible));\n        }\n\n        protected override PlayerViewModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/ViewModels/SystemViewModel.cs",
    "content": "using KHSave.Lib1;\nusing KHSave.Lib1.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh1.Interfaces;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace KHSave.SaveEditor.Kh1.ViewModels\n{\n    public class SystemViewModel\n    {\n        private readonly ISaveKh1 save;\n        private readonly IGetAbilities _getAbilities;\n\n        public SystemViewModel(ISaveKh1 save, IGetAbilities getAbilities)\n        {\n            this.save = save;\n            _getAbilities = getAbilities;\n            ShortcutItems = new KhEnumListModel<EnumIconTypeModel<CommandType>, CommandType>(() => default(CommandType), x => { });\n            Pc0 = new KhEnumListModel<PlayableCharacterType>(() => save.PlayableCharacter, x => save.PlayableCharacter = x);\n            Pc1 = new KhEnumListModel<PlayableCharacterType>(() => save.CompanionCharacter1, x => save.CompanionCharacter1 = x);\n            Pc2 = new KhEnumListModel<PlayableCharacterType>(() => save.CompanionCharacter2, x => save.CompanionCharacter2 = x);\n            Pc3 = new KhEnumListModel<PlayableCharacterType>(() => save.CompanionCharacter3, x => save.CompanionCharacter3 = x);\n            Difficulties = save.IsFinalMix ? GetDifficulty<DifficultyFm>() : GetDifficulty<Difficulty>();\n            Worlds = new KhEnumListModel<WorldType>();\n\n            SharedAbility1 = new AbilityViewModel(save.SharedAbilities, 0, getAbilities);\n            SharedAbility2 = new AbilityViewModel(save.SharedAbilities, 1, getAbilities);\n            SharedAbility3 = new AbilityViewModel(save.SharedAbilities, 2, getAbilities);\n            SharedAbility4 = new AbilityViewModel(save.SharedAbilities, 3, getAbilities);\n        }\n\n        public KhEnumListModel<EnumIconTypeModel<CommandType>, CommandType> ShortcutItems { get; }\n        public KhEnumListModel<PlayableCharacterType> Pc0 { get; }\n        public KhEnumListModel<PlayableCharacterType> Pc1 { get; }\n        public KhEnumListModel<PlayableCharacterType> Pc2 { get; }\n        public KhEnumListModel<PlayableCharacterType> Pc3 { get; }\n        public KhEnumListModel<AbilityType> Abilities => _getAbilities.Abilities;\n        public List<GenericEntryModel<string, byte>> Difficulties { get; }\n        public KhEnumListModel<WorldType> Worlds { get; }\n\n        public AbilityViewModel SharedAbility1 { get; }\n        public AbilityViewModel SharedAbility2 { get; }\n        public AbilityViewModel SharedAbility3 { get; }\n        public AbilityViewModel SharedAbility4 { get; }\n\n        public CommandType ShortcutCircle { get => save.ShortcutCircle; set => save.ShortcutCircle = value; }\n        public CommandType ShortcutTriangle { get => save.ShortcutTriangle; set => save.ShortcutTriangle = value; }\n        public CommandType ShortcutSquare { get => save.ShortcutSquare; set => save.ShortcutSquare = value; }\n\n        public uint Munny { get => save.Munny; set => save.Munny = value; }\n        public byte Difficulty { get => save.Difficulty; set => save.Difficulty = value; }\n\n        public WorldType World { get => save.World; set => save.World = value; }\n        public uint Room { get => save.Room; set => save.Room = value; }\n        public uint SpawnLocation { get => save.SpawnLocation; set => save.SpawnLocation = value; }\n\n        private List<GenericEntryModel<string, byte>> GetDifficulty<T>()\n            where T : struct, IConvertible => new KhEnumListModel<T>()\n                .Select(x => new GenericEntryModel<string, byte>()\n                {\n                    Name = x.Name,\n                    Value = (byte)(object)x.Value\n                })\n                .ToList();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/AbilityView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Kh1.Views.AbilityView\"\r\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh1.Views\"\r\n             mc:Ignorable=\"d\" \r\n             d:DesignHeight=\"22\" d:DesignWidth=\"160\">\r\n    <Grid>\r\n        <Grid.ColumnDefinitions>\r\n            <ColumnDefinition Width=\"Auto\"/>\r\n            <ColumnDefinition Width=\"5\"/>\r\n            <ColumnDefinition Width=\"*\"/>\r\n        </Grid.ColumnDefinitions>\r\n\r\n        <CheckBox Grid.Column=\"0\" VerticalAlignment=\"Center\"\r\n            Style=\"{StaticResource KhCheckboxStyle}\"\n                  IsChecked=\"{Binding IsEnabled, UpdateSourceTrigger=PropertyChanged}\"/>\r\n        <ComboBox Grid.Column=\"2\"\r\n            ItemsSource=\"{Binding AbilityList}\"\r\n            SelectedValue=\"{Binding Ability, UpdateSourceTrigger=PropertyChanged}\"\r\n            DisplayMemberPath=\"Name\"\r\n            SelectedValuePath=\"Value\"/>\r\n    </Grid>\r\n</UserControl>\r\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/AbilityView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh1.Views\n{\n    /// <summary>\n    /// Interaction logic for AbilityView.xaml\n    /// </summary>\n    public partial class AbilityView : UserControl\n    {\n        public AbilityView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/InventoryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh1.Views.InventoryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh1.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <Grid.Resources>\n            <DataTemplate x:Key=\"DateTemplate\" >\n                <StackPanel Orientation=\"Horizontal\">\n                    <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                    <TextBlock Text=\"{Binding Name}\" />\n                </StackPanel>\n            </DataTemplate>\n        </Grid.Resources>\n\n        <DataGrid\n            Grid.Row=\"0\"\n            AutoGenerateColumns=\"False\"\n            Background=\"{DynamicResource {x:Static SystemColors.WindowBrushKey}}\"\n            ItemsSource=\"{Binding Items}\">\n            <DataGrid.RowStyle>\n                <Style TargetType=\"DataGridRow\">\n                    <Setter Property=\"Height\" Value=\"24\" />\n                    <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n                </Style>\n            </DataGrid.RowStyle>\n            <DataGrid.Columns>\n                <DataGridTemplateColumn\n                    Header=\"Item name\"\n                    Width=\"*\"\n                    IsReadOnly=\"True\"\n                    CanUserReorder=\"False\"\n                    CellTemplate=\"{StaticResource DateTemplate}\"/>\n                <DataGridTextColumn\n                    Header=\"Amount\"\n                    Width=\"Auto\"\n                    CanUserReorder=\"False\"\n                    Binding=\"{Binding Amount, UpdateSourceTrigger=PropertyChanged}\"/>\n            </DataGrid.Columns>\n        </DataGrid>\n\n        <Grid Grid.Row=\"1\" Margin=\"0 5 0 5\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Image Grid.Column=\"0\" Source=\"{StaticResource Search_16x}\"/>\n            <TextBox Grid.Column=\"2\" Text=\"{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/InventoryView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh1.Views\n{\n    /// <summary>\n    /// Interaction logic for InventoryView.xaml\n    /// </summary>\n    public partial class InventoryView : UserControl\n    {\n        public InventoryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/PlayerEquipmentView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh1.Views.PlayerEquipmentView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh1.Views\"\n             xmlns:controls=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"22\" d:DesignWidth=\"100\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n        <CheckBox\n            Grid.Column=\"0\"\n            VerticalAlignment=\"Center\" Margin=\"0 0 3 0\"\n            Visibility=\"{Binding AdvancedVisibility}\"\n            IsChecked=\"{Binding Enabled}\"/>\n        <controls:ItemComboBox\n            Grid.Column=\"1\"\n            IsEnabled=\"{Binding Enabled}\"\n            DataContext=\"{Binding}\"/>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/PlayerEquipmentView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh1.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayerEquipmentView.xaml\n    /// </summary>\n    public partial class PlayerEquipmentView : UserControl\n    {\n        public PlayerEquipmentView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/PlayerView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh1.Views.PlayerView\"\r\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh1.Views\" \r\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\r\n             mc:Ignorable=\"d\" \r\n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\r\n    <TabControl>\r\n        <TabItem Header=\"Stats\">\r\n            <StackPanel>\r\n                <common:TwoEqualColumnsStackPanel>\r\n                    <TextBlock Text=\"Level\"/>\r\n                    <TextBox Text=\"{Binding Level, UpdateSourceTrigger=PropertyChanged}\"/>\r\n\r\n                    <TextBlock Text=\"Weapon\"/>\r\n                    <common:ItemComboBox DataContext=\"{Binding Weapon}\"/>\r\n\r\n                    <TextBlock Text=\"HP current\"/>\r\n                    <TextBox Text=\"{Binding HpCur, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                    <TextBlock Text=\"HP max\"/>\r\n                    <TextBox Text=\"{Binding HpMax, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                    <TextBlock Text=\"MP current\"/>\r\n                    <TextBox Text=\"{Binding MpCur, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                    <TextBlock Text=\"MP max\"/>\r\n                    <TextBox Text=\"{Binding MpMax, UpdateSourceTrigger=PropertyChanged}\"/>\r\n\r\n                    <TextBlock Text=\"AP max\"/>\r\n                    <TextBox Text=\"{Binding ApMax, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                    <TextBlock Text=\"Strength\"/>\r\n                    <TextBox Text=\"{Binding Strength, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                    <TextBlock Text=\"Defense\"/>\r\n                    <TextBox Text=\"{Binding Defense, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                    <TextBlock Text=\"Total experience\"/>\r\n                    <TextBox Text=\"{Binding Experience, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                </common:TwoEqualColumnsStackPanel>\r\n            </StackPanel>\r\n        </TabItem>\r\n        <TabItem Header=\"Equipment\">\r\n            <StackPanel>\r\n                <GroupBox Header=\"Accessories\" DataContext=\"{Binding Accessories}\">\r\n                    <common:TwoEqualColumnsStackPanel>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment1}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment3}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment2}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment4}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment5}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment7}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment6}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment8}\"/>\r\n                    </common:TwoEqualColumnsStackPanel>\r\n                </GroupBox>\r\n                <GroupBox Header=\"Consumable items\" DataContext=\"{Binding Consumables}\">\r\n                    <common:TwoEqualColumnsStackPanel>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment1}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment3}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment2}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment4}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment5}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment7}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment6}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment8}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment9}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment10}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment11}\"/>\r\n                        <local:PlayerEquipmentView DataContext=\"{Binding Equipment12}\"/>\r\n                    </common:TwoEqualColumnsStackPanel>\r\n                </GroupBox>\r\n            </StackPanel>\r\n        </TabItem>\r\n        <TabItem Header=\"Abilities\">\r\n            <ListBox ItemsSource=\"{Binding Abilities}\">\r\n                <ListBox.ItemTemplate>\r\n                    <DataTemplate>\r\n                        <DockPanel>\r\n                            <local:AbilityView DataContext=\"{Binding}\"/>\r\n                        </DockPanel>\r\n                    </DataTemplate>\r\n                </ListBox.ItemTemplate>\r\n            </ListBox>\r\n        </TabItem>\r\n    </TabControl>\r\n</UserControl>\r\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/PlayerView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh1.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayerView.xaml\n    /// </summary>\n    public partial class PlayerView : UserControl\n    {\n        public PlayerView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/PlayersView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh1.Views.PlayersView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh1.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"\n            />\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding PlayerNotVisible}\">\n            <Label Content=\"Select a player to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding PlayerVisible}\">\n            <local:PlayerView DataContext=\"{Binding SelectedItem}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/PlayersView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh1.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayersView.xaml\n    /// </summary>\n    public partial class PlayersView : UserControl\n    {\n        public PlayersView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/SystemView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh1.Views.SystemView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh1.Views\" \n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"800\" d:DesignWidth=\"450\">\n    <StackPanel>\n        <GroupBox Header=\"Shortcuts\">\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Circle\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding ShortcutItems}\"\n                    SelectedValue=\"{Binding ShortcutCircle}\"\n                    SelectedValuePath=\"Value\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                                <TextBlock Text=\"{Binding Name}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n                </ComboBox>\n                <TextBlock Text=\"Triangle\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding ShortcutItems}\"\n                    SelectedValue=\"{Binding ShortcutTriangle}\"\n                    SelectedValuePath=\"Value\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                                <TextBlock Text=\"{Binding Name}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n                </ComboBox>\n                <TextBlock Text=\"Square\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding ShortcutItems}\"\n                    SelectedValue=\"{Binding ShortcutSquare}\"\n                    SelectedValuePath=\"Value\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                                <TextBlock Text=\"{Binding Name}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n                </ComboBox>\n            </common:TwoEqualColumnsStackPanel>\n        </GroupBox>\n        <GroupBox Header=\"Non/Playable characters\">\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Character 1\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Pc0}\"\n                    SelectedValue=\"{Binding Pc0.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBlock Text=\"Character 2\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Pc1}\"\n                    SelectedValue=\"{Binding Pc1.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBlock Text=\"Character 3\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Pc2}\"\n                    SelectedValue=\"{Binding Pc2.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBlock Text=\"Character 4\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Pc3}\"\n                    SelectedValue=\"{Binding Pc3.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </common:TwoEqualColumnsStackPanel>\n        </GroupBox>\n        <GroupBox Header=\"Shared Abilities\">\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Ability 1\"/>\n                <local:AbilityView DataContext=\"{Binding SharedAbility1}\"/>\n\n                <TextBlock Text=\"Ability 2\"/>\n                <local:AbilityView DataContext=\"{Binding SharedAbility2}\"/>\n\n                <TextBlock Text=\"Ability 3\"/>\n                <local:AbilityView DataContext=\"{Binding SharedAbility3}\"/>\n\n                <TextBlock Text=\"Ability 4\"/>\n                <local:AbilityView DataContext=\"{Binding SharedAbility4}\"/>\n            </common:TwoEqualColumnsStackPanel>\n        </GroupBox>\n        <GroupBox Header=\"Misc\">\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Munny\"/>\n                <TextBox Text=\"{Binding Munny, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Difficulty\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Difficulties}\"\n                    SelectedValue=\"{Binding Difficulty}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </common:TwoEqualColumnsStackPanel>\n        </GroupBox>\n        <GroupBox Header=\"Room modifier\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"World\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"Room\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"4\" Text=\"Spawn location\"/>\n\n                <ComboBox\n                    ItemsSource=\"{Binding Worlds}\"\n                    SelectedValue=\"{Binding World}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"\n                    Grid.Row=\"1\" Grid.Column=\"0\"/>\n                <TextBox Grid.Row=\"1\" Grid.Column=\"2\"\n                    Text=\"{Binding Room, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBox Grid.Row=\"1\" Grid.Column=\"4\"\n                    Text=\"{Binding SpawnLocation, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </GroupBox>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh1/Views/SystemView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh1.Views\n{\n    /// <summary>\n    /// Interaction logic for SystemView.xaml\n    /// </summary>\n    public partial class SystemView : UserControl\n    {\n        public SystemView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Data/Rooms.cs",
    "content": "using KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Kh2.Models;\nusing System.Linq;\n\nnamespace KHSave.SaveEditor.Kh2\n{\n    public static partial class Data\n    {\n        public static RoomModel[] Rooms = new RoomModel[]\n        {\n            new RoomModel(WorldType.Agrabah, 0, GameType.All, \"Agrabah\"),\n            new RoomModel(WorldType.Agrabah, 1, GameType.All, \"Bazaar\"),\n            new RoomModel(WorldType.Agrabah, 2, GameType.All, \"The Peddler´s Shop\"),\n            new RoomModel(WorldType.Agrabah, 3, GameType.All, \"The Palace\"),\n            new RoomModel(WorldType.Agrabah, 4, GameType.All, \"Vault\"),\n            new RoomModel(WorldType.Agrabah, 5, GameType.All, \"Above Agrabah\"),\n            new RoomModel(WorldType.Agrabah, 6, GameType.All, \"Palace Walls\"),\n            new RoomModel(WorldType.Agrabah, 7, GameType.All, \"The Cave of Wonders: Entrance\"),\n            new RoomModel(WorldType.Agrabah, 8, GameType.None, \"Unused\"),\n            new RoomModel(WorldType.Agrabah, 9, GameType.All, \"The Cave of Wonders: Stone Guardians\"),\n            new RoomModel(WorldType.Agrabah, 10, GameType.All, \"The Cave of Wonders: Treasure Room\"),\n            new RoomModel(WorldType.Agrabah, 11, GameType.All, \"Ruined Chamber\"),\n            new RoomModel(WorldType.Agrabah, 12, GameType.All, \"The Cave of Wonders: Valley of Stone\"),\n            new RoomModel(WorldType.Agrabah, 13, GameType.All, \"The Cave of Wonders: Chasm of Challenges\"),\n            new RoomModel(WorldType.Agrabah, 14, GameType.All, \"Sandswept Ruins\"),\n            new RoomModel(WorldType.Agrabah, 15, GameType.All, \"The Peddler´s Shop\"),\n            new RoomModel(WorldType.BestCastle, 0, GameType.All, \"Entrance Hall\"),\n            new RoomModel(WorldType.BestCastle, 1, GameType.All, \"Parlor\"),\n            new RoomModel(WorldType.BestCastle, 2, GameType.All, \"Belle´s Room\"),\n            new RoomModel(WorldType.BestCastle, 3, GameType.All, \"The Beast´s Room\"),\n            new RoomModel(WorldType.BestCastle, 4, GameType.All, \"Ballroom\"),\n            new RoomModel(WorldType.BestCastle, 5, GameType.All, \"Ballroom\"),\n            new RoomModel(WorldType.BestCastle, 6, GameType.All, \"Courtyard\"),\n            new RoomModel(WorldType.BestCastle, 7, GameType.All, \"The East Wing\"),\n            new RoomModel(WorldType.BestCastle, 8, GameType.All, \"The West Hall\"),\n            new RoomModel(WorldType.BestCastle, 9, GameType.All, \"The West Wing\"),\n            new RoomModel(WorldType.BestCastle, 10, GameType.All, \"Dungeon\"),\n            new RoomModel(WorldType.BestCastle, 11, GameType.All, \"Undercroft\"),\n            new RoomModel(WorldType.BestCastle, 12, GameType.All, \"Secret Passage\"),\n            new RoomModel(WorldType.BestCastle, 13, GameType.All, \"Bridge\"),\n            new RoomModel(WorldType.BestCastle, 14, GameType.All, \"Ballroom\"),\n            new RoomModel(WorldType.BestCastle, 15, GameType.All, \"Bridge\"),\n            new RoomModel(WorldType.PortRoyal, 0, GameType.All, \"Rampart\"),\n            new RoomModel(WorldType.PortRoyal, 1, GameType.All, \"Harbor\"),\n            new RoomModel(WorldType.PortRoyal, 2, GameType.All, \"Town\"),\n            new RoomModel(WorldType.PortRoyal, 3, GameType.All, \"The Interceptor\"),\n            new RoomModel(WorldType.PortRoyal, 4, GameType.All, \"The Interceptor: Ship´s Hold\"),\n            new RoomModel(WorldType.PortRoyal, 5, GameType.All, \"The Black Pearl\"),\n            new RoomModel(WorldType.PortRoyal, 6, GameType.All, \"The Black Pearl: Captain´s Stateroom\"),\n            new RoomModel(WorldType.PortRoyal, 7, GameType.All, \"The Interceptor\"),\n            new RoomModel(WorldType.PortRoyal, 8, GameType.All, \"Isla de Muerta: Rock Face\"),\n            new RoomModel(WorldType.PortRoyal, 9, GameType.All, \"Isla de Muerta: Cave Mouth\"),\n            new RoomModel(WorldType.PortRoyal, 10, GameType.All, \"Isla de Muerta: Treasure Heap\"),\n            new RoomModel(WorldType.PortRoyal, 11, GameType.All, \"Ship Graveyard: The Interceptor´s Hold\"),\n            new RoomModel(WorldType.PortRoyal, 12, GameType.All, \"Isla de Muerta: Powder Store\"),\n            new RoomModel(WorldType.PortRoyal, 13, GameType.All, \"Isla de Muerta: Moonlight Nook\"),\n            new RoomModel(WorldType.PortRoyal, 14, GameType.All, \"Ship Graveyard: Seadrift Keep\"),\n            new RoomModel(WorldType.PortRoyal, 15, GameType.All, \"Ship Graveyard: Seadrift Row\"),\n            new RoomModel(WorldType.PortRoyal, 16, GameType.All, \"Isla de Muerta: Rock Face\"),\n            new RoomModel(WorldType.PortRoyal, 17, GameType.All, \"Isla de Muerta: Treasure Heap\"),\n            new RoomModel(WorldType.PortRoyal, 18, GameType.All, \"The Black Pearl\"),\n            new RoomModel(WorldType.PortRoyal, 19, GameType.All, \"The Black Pearl\"),\n            new RoomModel(WorldType.PortRoyal, 20, GameType.All, \"The Black Pearl\"),\n            new RoomModel(WorldType.PortRoyal, 21, GameType.All, \"The Interceptor\"),\n            new RoomModel(WorldType.PortRoyal, 22, GameType.All, \"The Interceptor\"),\n            new RoomModel(WorldType.PortRoyal, 23, GameType.All, \"The Black Pearl: Captain´s Stateroom\"),\n            new RoomModel(WorldType.PortRoyal, 24, GameType.All, \"Harbor\"),\n            new RoomModel(WorldType.PortRoyal, 25, GameType.All, \"Isla de Muerta: Rock Face\"),\n            new RoomModel(WorldType.DisneyCastle, 0, GameType.All, \"Audience Chamber\"),\n            new RoomModel(WorldType.DisneyCastle, 1, GameType.All, \"Library\"),\n            new RoomModel(WorldType.DisneyCastle, 2, GameType.All, \"Colonnade\"),\n            new RoomModel(WorldType.DisneyCastle, 3, GameType.All, \"Courtyard\"),\n            new RoomModel(WorldType.DisneyCastle, 4, GameType.All, \"The Hall of the Cornerstone\"),\n            new RoomModel(WorldType.DisneyCastle, 5, GameType.All, \"The Hall of the Cornerstone\"),\n            new RoomModel(WorldType.DisneyCastle, 6, GameType.Fm, \"Gummi Hangar\"),\n            new RoomModel(WorldType.DisneyCastle, 7, GameType.All, \"The Wilderness\"),\n            new RoomModel(WorldType.DestinyIsland, 0, GameType.All, \"Beach\"),\n            new RoomModel(WorldType.DestinyIsland, 1, GameType.All, \"Main Island: Ocean's Road\"),\n            new RoomModel(WorldType.DestinyIsland, 2, GameType.All, \"Main Island: Shore\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 0, GameType.All, \"Where Nothing Gathers\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 1, GameType.All, \"Alley to Between\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 2, GameType.All, \"Fragment Crossing\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 3, GameType.All, \"Memory´s Skyscraper\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 4, GameType.All, \"The Brink of Despair\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 5, GameType.All, \"The Soundless Prison\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 6, GameType.All, \"Nothing´s Call\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 7, GameType.All, \"Crooked Ascension\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 8, GameType.All, \"Crooked Ascension\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 9, GameType.All, \"Twilight´s View\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 10, GameType.All, \"Hall of Empty Melodies\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 11, GameType.All, \"Hall of Empty Melodies\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 12, GameType.All, \"Naught´s Skyway\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 13, GameType.All, \"Proof of Existence\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 14, GameType.All, \"Havoc´s Divide\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 15, GameType.All, \"Addled Impasse\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 16, GameType.All, \"Naught´s Approach\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 17, GameType.All, \"Ruin and Creation´s Passage\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 18, GameType.All, \"The Altar of Naught\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 19, GameType.All, \"Memory´s Contortion\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 20, GameType.All, \"The World of Nothing\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 21, GameType.All, \"Station of Awakening\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 22, GameType.All, \"The World of Nothing\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 23, GameType.All, \"The World of Nothing\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 24, GameType.All, \"The World of Nothing\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 25, GameType.All, \"The World of Nothing\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 26, GameType.All, \"The World of Nothing\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 27, GameType.All, \"The World of Nothing\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 28, GameType.All, \"The World of Nothing\"),\n            new RoomModel(WorldType.TheWorldThatNeverWas, 29, GameType.All, \"The World of Nothing\"),\n            new RoomModel(WorldType.EndOfSea, 0, GameType.All, \"The Dark Margin\"),\n            new RoomModel(WorldType.EndOfSea, 1, GameType.All, \"loop demo\"),\n            new RoomModel(WorldType.HollowBastion, 0, GameType.All, \"Villain's Vale\"),\n            new RoomModel(WorldType.HollowBastion, 1, GameType.All, \"The Dark Depths\"),\n            new RoomModel(WorldType.HollowBastion, 2, GameType.All, \"The Great Maw\"),\n            new RoomModel(WorldType.HollowBastion, 3, GameType.All, \"Crystal Fissure\"),\n            new RoomModel(WorldType.HollowBastion, 4, GameType.All, \"Castle Gate\"),\n            new RoomModel(WorldType.HollowBastion, 5, GameType.All, \"Ansem´s Study\"),\n            new RoomModel(WorldType.HollowBastion, 6, GameType.All, \"Postern\"),\n            new RoomModel(WorldType.HollowBastion, 7, GameType.All, \"Restoration Site\"),\n            new RoomModel(WorldType.HollowBastion, 8, GameType.All, \"Bailey\"),\n            new RoomModel(WorldType.HollowBastion, 9, GameType.All, \"Borough\"),\n            new RoomModel(WorldType.HollowBastion, 10, GameType.All, \"Marketplace\"),\n            new RoomModel(WorldType.HollowBastion, 11, GameType.All, \"Corridors\"),\n            new RoomModel(WorldType.HollowBastion, 12, GameType.All, \"Heartless Manufactory\"),\n            new RoomModel(WorldType.HollowBastion, 13, GameType.All, \"Merlin´s House\"),\n            new RoomModel(WorldType.HollowBastion, 14, GameType.All, \"Castle Oblivion\"),\n            new RoomModel(WorldType.HollowBastion, 15, GameType.All, \"Ansem´s Study\"),\n            new RoomModel(WorldType.HollowBastion, 16, GameType.All, \"Ravine Trail\"),\n            new RoomModel(WorldType.HollowBastion, 17, GameType.All, \"The Great Maw\"),\n            new RoomModel(WorldType.HollowBastion, 18, GameType.All, \"Restoration Site\"),\n            new RoomModel(WorldType.HollowBastion, 19, GameType.All, \"Bailey\"),\n            new RoomModel(WorldType.HollowBastion, 20, GameType.All, \"Corridors\"),\n            new RoomModel(WorldType.HollowBastion, 21, GameType.Fm, \"Cavern of Remembrance: Depths\"),\n            new RoomModel(WorldType.HollowBastion, 22, GameType.Fm, \"Cavern of Remembrance: Mining Area\"),\n            new RoomModel(WorldType.HollowBastion, 23, GameType.Fm, \"Cavern of Remembrance: Engine Chamber\"),\n            new RoomModel(WorldType.HollowBastion, 24, GameType.Fm, \"Cavern of Remembrance: Mineshaft\"),\n            new RoomModel(WorldType.HollowBastion, 25, GameType.Fm, \"Transport to Remembrance\"),\n            new RoomModel(WorldType.HollowBastion, 26, GameType.Fm, \"Garden of Assemblage\"),\n            new RoomModel(WorldType.HollowBastion, 27, GameType.Fm, \"Underground Facility\"),\n            new RoomModel(WorldType.HollowBastion, 28, GameType.None, \"Memory's Contortion\"),\n            new RoomModel(WorldType.HollowBastion, 29, GameType.None, \"The World of Nothing\"),\n            new RoomModel(WorldType.HollowBastion, 30, GameType.None, \"Hall of Empty Melodies\"),\n            new RoomModel(WorldType.HollowBastion, 31, GameType.None, \"Bridgeₓₓₓₓₓₓₓ\"),\n            new RoomModel(WorldType.HollowBastion, 32, GameType.Fm, \"The Old Mansion\"),\n            new RoomModel(WorldType.HollowBastion, 33, GameType.Fm, \"Station of Remembrance\"),\n            new RoomModel(WorldType.HollowBastion, 34, GameType.Fm, \"Destiny Island\"),\n            new RoomModel(WorldType.HollowBastion, 35, GameType.None, \"Addled Impasse\"),\n            new RoomModel(WorldType.HollowBastion, 36, GameType.None, \"Mansion: Basement Hall\"),\n            new RoomModel(WorldType.HollowBastion, 37, GameType.None, \"Havoc's Divide\"),\n            new RoomModel(WorldType.HollowBastion, 38, GameType.Fm, \"Station of Oblivion\"),\n            new RoomModel(WorldType.HollowBastion, 39, GameType.None, \"Station of Awakening\"),\n            new RoomModel(WorldType.HollowBastion, 40, GameType.None, \"Gathering Place\"),\n            new RoomModel(WorldType.OlympusColiseum, 0, GameType.All, \"The Coliseum\"),\n            new RoomModel(WorldType.OlympusColiseum, 1, GameType.All, \"Coliseum Gates\"),\n            new RoomModel(WorldType.OlympusColiseum, 2, GameType.All, \"Coliseum Gates\"),\n            new RoomModel(WorldType.OlympusColiseum, 3, GameType.All, \"Underworld Entrance\"),\n            new RoomModel(WorldType.OlympusColiseum, 4, GameType.All, \"Coliseum Foyer\"),\n            new RoomModel(WorldType.OlympusColiseum, 5, GameType.All, \"Valley of the Dead\"),\n            new RoomModel(WorldType.OlympusColiseum, 6, GameType.All, \"Hades´ Chamber\"),\n            new RoomModel(WorldType.OlympusColiseum, 7, GameType.All, \"Cave of the Dead: Entrance\"),\n            new RoomModel(WorldType.OlympusColiseum, 8, GameType.All, \"Well of Captivity\"),\n            new RoomModel(WorldType.OlympusColiseum, 9, GameType.All, \"The Underdrome\"),\n            new RoomModel(WorldType.OlympusColiseum, 10, GameType.All, \"Cave of the Dead: Inner Chamber\"),\n            new RoomModel(WorldType.OlympusColiseum, 11, GameType.All, \"Underworld Caverns: Entrance\"),\n            new RoomModel(WorldType.OlympusColiseum, 12, GameType.All, \"The Lock\"),\n            new RoomModel(WorldType.OlympusColiseum, 13, GameType.All, \"The Underdrome\"),\n            new RoomModel(WorldType.OlympusColiseum, 14, GameType.All, \"Coliseum Gates\"),\n            new RoomModel(WorldType.OlympusColiseum, 15, GameType.All, \"Cave of the Dead: Passage\"),\n            new RoomModel(WorldType.OlympusColiseum, 16, GameType.All, \"Underworld Caverns: The Lost Road\"),\n            new RoomModel(WorldType.OlympusColiseum, 17, GameType.All, \"Underworld Caverns: Atrium\"),\n            new RoomModel(WorldType.OlympusColiseum, 18, GameType.All, \"Coliseum Gates\"),\n            new RoomModel(WorldType.OlympusColiseum, 19, GameType.All, \"The Underdrome\"),\n            new RoomModel(WorldType.PrideLand, 0, GameType.All, \"Pride Rock\"),\n            new RoomModel(WorldType.PrideLand, 1, GameType.All, \"Stone Hollow\"),\n            new RoomModel(WorldType.PrideLand, 2, GameType.All, \"The King´s Den\"),\n            new RoomModel(WorldType.PrideLand, 3, GameType.All, \"Wildebeest Valley\"),\n            new RoomModel(WorldType.PrideLand, 4, GameType.All, \"The Savannah\"),\n            new RoomModel(WorldType.PrideLand, 5, GameType.All, \"Elephant Graveyard\"),\n            new RoomModel(WorldType.PrideLand, 6, GameType.All, \"Gorge\"),\n            new RoomModel(WorldType.PrideLand, 7, GameType.All, \"Wastelands\"),\n            new RoomModel(WorldType.PrideLand, 8, GameType.All, \"Jungle\"),\n            new RoomModel(WorldType.PrideLand, 9, GameType.All, \"Oasis\"),\n            new RoomModel(WorldType.PrideLand, 10, GameType.All, \"Pride Rock\"),\n            new RoomModel(WorldType.PrideLand, 11, GameType.All, \"Oasis\"),\n            new RoomModel(WorldType.PrideLand, 12, GameType.All, \"Overlook\"),\n            new RoomModel(WorldType.PrideLand, 13, GameType.All, \"Peak\"),\n            new RoomModel(WorldType.PrideLand, 14, GameType.All, \"Scar´s Darkness\"),\n            new RoomModel(WorldType.PrideLand, 15, GameType.All, \"The Savannah\"),\n            new RoomModel(WorldType.PrideLand, 16, GameType.All, \"Wildebeest Valley\"),\n            new RoomModel(WorldType.Atlantica, 0, GameType.All, \"Triton's Throne\"),\n            new RoomModel(WorldType.Atlantica, 1, GameType.All, \"Ariel´s Grotto\"),\n            new RoomModel(WorldType.Atlantica, 2, GameType.All, \"Undersea Courtyard\"),\n            new RoomModel(WorldType.Atlantica, 3, GameType.All, \"Undersea Courtyard\"),\n            new RoomModel(WorldType.Atlantica, 4, GameType.All, \"The Palace: Performance Hall\"),\n            new RoomModel(WorldType.Atlantica, 5, GameType.All, \"Sunken Ship\"),\n            new RoomModel(WorldType.Atlantica, 6, GameType.All, \"The Shore\"),\n            new RoomModel(WorldType.Atlantica, 7, GameType.All, \"The Shore\"),\n            new RoomModel(WorldType.Atlantica, 8, GameType.All, \"The Shore\"),\n            new RoomModel(WorldType.Atlantica, 9, GameType.All, \"Wrath of the Sea\"),\n            new RoomModel(WorldType.Atlantica, 10, GameType.All, \"Wedding Ship\"),\n            new RoomModel(WorldType.LandOfDragons, 0, GameType.All, \"Bamboo Grove\"),\n            new RoomModel(WorldType.LandOfDragons, 1, GameType.All, \"Encampment\"),\n            new RoomModel(WorldType.LandOfDragons, 2, GameType.All, \"Checkpoint\"),\n            new RoomModel(WorldType.LandOfDragons, 3, GameType.All, \"Mountain Trail\"),\n            new RoomModel(WorldType.LandOfDragons, 4, GameType.All, \"Village\"),\n            new RoomModel(WorldType.LandOfDragons, 5, GameType.All, \"Village Cave\"),\n            new RoomModel(WorldType.LandOfDragons, 6, GameType.All, \"Ridge\"),\n            new RoomModel(WorldType.LandOfDragons, 7, GameType.All, \"Summit\"),\n            new RoomModel(WorldType.LandOfDragons, 8, GameType.All, \"Imperial Square\"),\n            new RoomModel(WorldType.LandOfDragons, 9, GameType.All, \"Palace Gate\"),\n            new RoomModel(WorldType.LandOfDragons, 10, GameType.All, \"Antechamber\"),\n            new RoomModel(WorldType.LandOfDragons, 11, GameType.All, \"Throne Room\"),\n            new RoomModel(WorldType.LandOfDragons, 12, GameType.All, \"Village\"),\n            new RoomModel(WorldType.LandOfDragons, 13, GameType.None, \"Palace Gate\"),\n            new RoomModel(WorldType.HalloweenTown, 0, GameType.All, \"Halloween Town Square\"),\n            new RoomModel(WorldType.HalloweenTown, 1, GameType.All, \"Dr. Finklestein´s Lab\"),\n            new RoomModel(WorldType.HalloweenTown, 2, GameType.All, \"Graveyard\"),\n            new RoomModel(WorldType.HalloweenTown, 3, GameType.All, \"Curly Hill\"),\n            new RoomModel(WorldType.HalloweenTown, 4, GameType.All, \"Hinterlands\"),\n            new RoomModel(WorldType.HalloweenTown, 5, GameType.All, \"Yuletide Hill\"),\n            new RoomModel(WorldType.HalloweenTown, 6, GameType.All, \"Candy Cane Lane\"),\n            new RoomModel(WorldType.HalloweenTown, 7, GameType.All, \"Christmas Tree Plaza\"),\n            new RoomModel(WorldType.HalloweenTown, 8, GameType.All, \"Santa´s House\"),\n            new RoomModel(WorldType.HalloweenTown, 9, GameType.All, \"Toy Factory: Shipping and Receiving\"),\n            new RoomModel(WorldType.HalloweenTown, 10, GameType.All, \"Toy Factory: The Wrapping Room\"),\n            new RoomModel(WorldType.HundredsAcreWood, 0, GameType.All, \"The Hundred Acre Wood\"),\n            new RoomModel(WorldType.HundredsAcreWood, 1, GameType.All, \"Starry Hill\"),\n            new RoomModel(WorldType.HundredsAcreWood, 2, GameType.All, \"Pooh Bear´s House\"),\n            new RoomModel(WorldType.HundredsAcreWood, 3, GameType.All, \"Rabbit´s House\"),\n            new RoomModel(WorldType.HundredsAcreWood, 4, GameType.All, \"Piglet´s House\"),\n            new RoomModel(WorldType.HundredsAcreWood, 5, GameType.All, \"Kanga´s House\"),\n            new RoomModel(WorldType.HundredsAcreWood, 6, GameType.All, \"A Windsday Tale\"),\n            new RoomModel(WorldType.HundredsAcreWood, 7, GameType.All, \"The Honey Hunt\"),\n            new RoomModel(WorldType.HundredsAcreWood, 8, GameType.All, \"Blossom Valley\"),\n            new RoomModel(WorldType.HundredsAcreWood, 9, GameType.All, \"The Spooky Cave\"),\n            new RoomModel(WorldType.SpaceParanoids, 0, GameType.All, \"Pit Cell\"),\n            new RoomModel(WorldType.SpaceParanoids, 1, GameType.All, \"Canyon\"),\n            new RoomModel(WorldType.SpaceParanoids, 2, GameType.All, \"Game Grid\"),\n            new RoomModel(WorldType.SpaceParanoids, 3, GameType.All, \"Dataspace\"),\n            new RoomModel(WorldType.SpaceParanoids, 4, GameType.All, \"I/O Tower: Hallway\"),\n            new RoomModel(WorldType.SpaceParanoids, 5, GameType.All, \"I/O Tower: Communications Room\"),\n            new RoomModel(WorldType.SpaceParanoids, 6, GameType.All, \"Simulation Hangar\"),\n            new RoomModel(WorldType.SpaceParanoids, 7, GameType.All, \"Solar Sailer Simulation\"),\n            new RoomModel(WorldType.SpaceParanoids, 8, GameType.All, \"Central Computer Mesa\"),\n            new RoomModel(WorldType.SpaceParanoids, 9, GameType.All, \"Central Computer Core\"),\n            new RoomModel(WorldType.SpaceParanoids, 10, GameType.All, \"Solar Sailer Simulation\"),\n            new RoomModel(WorldType.SpaceParanoids, 11, GameType.All, \"Solar Sailer Simulation\"),\n            new RoomModel(WorldType.TwilightTown, 0, GameType.All, \"The Empty Real\"),\n            new RoomModel(WorldType.TwilightTown, 1, GameType.All, \"Roxas' Room\"),\n            new RoomModel(WorldType.TwilightTown, 2, GameType.All, \"The Usual Spot\"),\n            new RoomModel(WorldType.TwilightTown, 3, GameType.All, \"Back Alley\"),\n            new RoomModel(WorldType.TwilightTown, 4, GameType.All, \"Sandslot\"),\n            new RoomModel(WorldType.TwilightTown, 5, GameType.All, \"Sandslot\"),\n            new RoomModel(WorldType.TwilightTown, 6, GameType.All, \"Market Street: Station Heights\"),\n            new RoomModel(WorldType.TwilightTown, 7, GameType.All, \"Market Street: Tram Common\"),\n            new RoomModel(WorldType.TwilightTown, 8, GameType.All, \"Station Plaza\"),\n            new RoomModel(WorldType.TwilightTown, 9, GameType.All, \"Central Station\"),\n            new RoomModel(WorldType.TwilightTown, 10, GameType.All, \"Sunset Terrace\"),\n            new RoomModel(WorldType.TwilightTown, 11, GameType.All, \"Sunset Station\"),\n            new RoomModel(WorldType.TwilightTown, 12, GameType.All, \"Sunset Hill\"),\n            new RoomModel(WorldType.TwilightTown, 13, GameType.All, \"The Woods\"),\n            new RoomModel(WorldType.TwilightTown, 14, GameType.All, \"The Old Mansion\"),\n            new RoomModel(WorldType.TwilightTown, 15, GameType.All, \"Mansion: Foyer\"),\n            new RoomModel(WorldType.TwilightTown, 16, GameType.All, \"Mansion: Dining Room\"),\n            new RoomModel(WorldType.TwilightTown, 17, GameType.All, \"Mansion: Library\"),\n            new RoomModel(WorldType.TwilightTown, 18, GameType.All, \"Mansion: The White Room\"),\n            new RoomModel(WorldType.TwilightTown, 19, GameType.All, \"Mansion: Basement Hall\"),\n            new RoomModel(WorldType.TwilightTown, 20, GameType.All, \"Mansion: Basement Hall\"),\n            new RoomModel(WorldType.TwilightTown, 21, GameType.All, \"Mansion: Computer Room\"),\n            new RoomModel(WorldType.TwilightTown, 22, GameType.All, \"Mansion: Basement Corridor\"),\n            new RoomModel(WorldType.TwilightTown, 23, GameType.All, \"Mansion: Pod Room\"),\n            new RoomModel(WorldType.TwilightTown, 24, GameType.All, \"On the Train\"),\n            new RoomModel(WorldType.TwilightTown, 25, GameType.All, \"The Tower\"),\n            new RoomModel(WorldType.TwilightTown, 26, GameType.All, \"Tower: Entryway\"),\n            new RoomModel(WorldType.TwilightTown, 27, GameType.All, \"Tower: Sorcerer´s Loft\"),\n            new RoomModel(WorldType.TwilightTown, 28, GameType.All, \"Tower: Wardrobe\"),\n            new RoomModel(WorldType.TwilightTown, 29, GameType.All, \"Tower: Star Chamber\"),\n            new RoomModel(WorldType.TwilightTown, 30, GameType.All, \"Tower: Moon Chamber\"),\n            new RoomModel(WorldType.TwilightTown, 31, GameType.All, \"Tower: Wayward Stairs\"),\n            new RoomModel(WorldType.TwilightTown, 32, GameType.All, \"Station of Serenity\"),\n            new RoomModel(WorldType.TwilightTown, 33, GameType.All, \"Station of Calling\"),\n            new RoomModel(WorldType.TwilightTown, 34, GameType.All, \"Station of Awakening\"),\n            new RoomModel(WorldType.TwilightTown, 35, GameType.All, \"The Mysterial Train\"),\n            new RoomModel(WorldType.TwilightTown, 36, GameType.All, \"Tunnelway\"),\n            new RoomModel(WorldType.TwilightTown, 37, GameType.All, \"Underground Concourse\"),\n            new RoomModel(WorldType.TwilightTown, 38, GameType.All, \"Tower: Wayward Stairs\"),\n            new RoomModel(WorldType.TwilightTown, 39, GameType.All, \"Tower: Wayward Stairs\"),\n            new RoomModel(WorldType.TwilightTown, 40, GameType.All, \"Betwixt and Between\"),\n            new RoomModel(WorldType.TwilightTown, 41, GameType.All, \"The Old Mansion\"),\n            new RoomModel(WorldType.TimelessRiver, 0, GameType.All, \"Cornerstone Hill\"),\n            new RoomModel(WorldType.TimelessRiver, 1, GameType.All, \"Pier\"),\n            new RoomModel(WorldType.TimelessRiver, 2, GameType.All, \"Waterway\"),\n            new RoomModel(WorldType.TimelessRiver, 3, GameType.All, \"Wharf\"),\n            new RoomModel(WorldType.TimelessRiver, 4, GameType.All, \"Lilliput\"),\n            new RoomModel(WorldType.TimelessRiver, 5, GameType.All, \"Building Site\"),\n            new RoomModel(WorldType.TimelessRiver, 6, GameType.All, \"Scene of the Fire\"),\n            new RoomModel(WorldType.TimelessRiver, 7, GameType.All, \"Mickey´s House\"),\n            new RoomModel(WorldType.TimelessRiver, 8, GameType.All, \"Villain´s Vale\"),\n            new RoomModel(WorldType.WorldMap, 0, GameType.All, \"World Map\"),\n            new RoomModel(WorldType.WorldZZ, 0, GameType.None, \"いつものばしょ\"),\n            new RoomModel(WorldType.WorldZZ, 1, GameType.None, \"ロビ–\"),\n            new RoomModel(WorldType.WorldZZ, 2, GameType.None, \"しょうじょのへや\"),\n            new RoomModel(WorldType.WorldZZ, 3, GameType.None, \"ちかおおひろま\"),\n            new RoomModel(WorldType.WorldZZ, 4, GameType.None, \"コンピュ–タル–ム\"),\n            new RoomModel(WorldType.WorldZZ, 5, GameType.None, \"カプセルル–ム\"),\n            new RoomModel(WorldType.WorldZZ, 6, GameType.None, \"メインカプセル\"),\n            new RoomModel(WorldType.WorldZZ, 7, GameType.None, \"かいがん\"),\n            new RoomModel(WorldType.WorldZZ, 8, GameType.None, \"ロクサスのへや\"),\n            new RoomModel(WorldType.WorldZZ, 9, GameType.None, \"ディスティニ–アイランド\"),\n            new RoomModel(WorldType.WorldZZ, 10, GameType.None, \"メインストリ–ト\"),\n            new RoomModel(WorldType.WorldZZ, 11, GameType.None, \"さんばし\"),\n            new RoomModel(WorldType.WorldZZ, 12, GameType.None, \"トロン\"),\n            new RoomModel(WorldType.WorldZZ, 13, GameType.None, \"トイ·スト–リ–\"),\n            new RoomModel(WorldType.WorldZZ, 14, GameType.None, \"モンスタ–ズ·インク\"),\n            new RoomModel(WorldType.WorldZZ, 15, GameType.None, \"あきち\"),\n            new RoomModel(WorldType.WorldZZ, 16, GameType.None, \"たいかいかいじょう\"),\n            new RoomModel(WorldType.WorldZZ, 17, GameType.None, \"ろじうら\"),\n            new RoomModel(WorldType.WorldZZ, 18, GameType.None, \"やしきへのみち\"),\n            new RoomModel(WorldType.WorldZZ, 19, GameType.None, \"もんぜん\"),\n            new RoomModel(WorldType.WorldZZ, 20, GameType.None, \"ダイニングル–ム\"),\n            new RoomModel(WorldType.WorldZZ, 21, GameType.None, \"DIVETOHEART\"),\n            new RoomModel(WorldType.WorldZZ, 22, GameType.None, \"メインえき\"),\n            new RoomModel(WorldType.WorldZZ, 23, GameType.None, \"ホロウバスティオン1\"),\n            new RoomModel(WorldType.WorldZZ, 24, GameType.None, \"テストマップ(リアルタイム1)\"),\n            new RoomModel(WorldType.WorldZZ, 25, GameType.None, \"GBA1\"),\n            new RoomModel(WorldType.WorldZZ, 26, GameType.None, \"GBA2\"),\n            new RoomModel(WorldType.WorldZZ, 27, GameType.None, \"いちばんがい\"),\n            new RoomModel(WorldType.WorldZZ, 28, GameType.None, \"ホロウバスティオン2\"),\n            new RoomModel(WorldType.WorldZZ, 29, GameType.None, \"テストマップ(ライオンキング)\"),\n            new RoomModel(WorldType.WorldZZ, 30, GameType.None, \"テストマップ(ム–ラン)\"),\n            new RoomModel(WorldType.WorldZZ, 31, GameType.None, \"GBA3\"),\n            new RoomModel(WorldType.WorldZZ, 32, GameType.None, \"テストマップ(コリジョン)\"),\n            new RoomModel(WorldType.WorldZZ, 33, GameType.None, \"テストマップ(エントランス)\"),\n            new RoomModel(WorldType.WorldZZ, 34, GameType.None, \"テストマップ(アトリビュ–ト)\"),\n            new RoomModel(WorldType.WorldZZ, 35, GameType.None, \"テストマップ(カリブ)\"),\n            new RoomModel(WorldType.WorldZZ, 36, GameType.None, \"テストマップ\"),\n            new RoomModel(WorldType.WorldZZ, 37, GameType.None, \"キャラチェック\"),\n            new RoomModel(WorldType.WorldZZ, 38, GameType.None, \"サウンドチェック\"),\n            new RoomModel(WorldType.WorldZZ, 39, GameType.None, \"テストマップ(カベ)\"),\n            new RoomModel(WorldType.WorldZZ, 40, GameType.None, \"FM(1)\"),\n            new RoomModel(WorldType.WorldZZ, 41, GameType.None, \"FM(2)\"),\n            new RoomModel(WorldType.WorldZZ, 42, GameType.None, \"FM(3)\"),\n            new RoomModel(WorldType.WorldZZ, 43, GameType.None, \"FM(4)\"),\n            new RoomModel(WorldType.WorldZZ, 44, GameType.None, \"FM(5)\"),\n            new RoomModel(WorldType.WorldZZ, 45, GameType.None, \"FM(6)\"),\n            new RoomModel(WorldType.WorldZZ, 46, GameType.None, \"コックピット\"),\n            new RoomModel(WorldType.WorldZZ, 47, GameType.None, \"FM(7)\"),\n            new RoomModel(WorldType.WorldZZ, 48, GameType.None, \"FM(8)\"),\n            new RoomModel(WorldType.WorldZZ, 49, GameType.None, \"FM(9)\"),\n            new RoomModel(WorldType.WorldZZ, 50, GameType.None, \"COM(1)\"),\n            new RoomModel(WorldType.WorldZZ, 51, GameType.None, \"COM(2)\"),\n            new RoomModel(WorldType.WorldZZ, 52, GameType.None, \"COM(3)\"),\n            new RoomModel(WorldType.WorldZZ, 53, GameType.None, \"COM(4)\"),\n            new RoomModel(WorldType.WorldZZ, 54, GameType.None, \"COM(5)\"),\n            new RoomModel(WorldType.WorldZZ, 55, GameType.None, \"COM(6)\"),\n            new RoomModel(WorldType.WorldZZ, 56, GameType.None, \"COM(7)\"),\n            new RoomModel(WorldType.WorldZZ, 57, GameType.None, \"COM(8)\"),\n            new RoomModel(WorldType.WorldZZ, 58, GameType.None, \"COM(9)\"),\n            new RoomModel(WorldType.WorldZZ, 59, GameType.None, \"COM(10)\"),\n            new RoomModel(WorldType.WorldZZ, 60, GameType.None, \"COM(11)\"),\n            new RoomModel(WorldType.WorldZZ, 61, GameType.None, \"COM(12)\"),\n            new RoomModel(WorldType.WorldZZ, 62, GameType.None, \"COM(13)\"),\n            new RoomModel(WorldType.WorldZZ, 63, GameType.None, \"COM(14)\"),\n        };\n\n        public static RoomModel GetRoom(int world, int room) =>\n            Rooms.FirstOrDefault(x => (int)x.World == world && x.RoomIndex == room);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Interfaces/IResourceGetter.cs",
    "content": "using KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing System.Collections.Generic;\n\nnamespace KHSave.SaveEditor.Kh2.Interfaces\n{\n    public interface IResourceGetter\n    {\n        KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType> Equipments { get; }\n\n        IEnumerable<EnumIconTypeModel<EquipmentType>> Abilities { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/KHSave.SaveEditor.Kh2.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.Lib2\\KHSave.Lib2.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/MainView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Kh2.MainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2\"\n             xmlns:views=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <TabControl>\n        <TabItem Header=\"System\">\n            <views:SystemView DataContext=\"{Binding System}\"/>\n        </TabItem>\n        <TabItem Header=\"Inventory\">\n            <views:InventoryView DataContext=\"{Binding Inventory}\"/>\n        </TabItem>\n        <TabItem Header=\"Characters\">\n            <views:PlayersView DataContext=\"{Binding Characters}\"/>\n        </TabItem>\n        <TabItem Header=\"Drive forms\">\n            <views:DriveFormsView DataContext=\"{Binding DriveForms}\"/>\n        </TabItem>\n        <TabItem Header=\"Worlds\">\n            <views:WorldsView DataContext=\"{Binding Worlds}\"/>\n        </TabItem>\n        <TabItem Header=\"Room visited\">\n            <views:RoomVisitedView DataContext=\"{Binding RoomVisited}\"/>\n        </TabItem>\n        <TabItem Header=\"Story\">\n            <views:ProgressView DataContext=\"{Binding Progress}\"/>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/MainView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh2\n{\n    /// <summary>\n    /// Interaction logic for MainView.xaml\n    /// </summary>\n    public partial class MainView : UserControl\n    {\n        public MainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Models/AbilityModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh2.Interfaces;\nusing System.Collections.Generic;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh2.Models\n{\n    public class AbilityModel : BaseNotifyPropertyChanged\n    {\n        private readonly int _index;\n        private readonly ushort[] _abilities;\n        private readonly IResourceGetter _resourceGetter;\n\n        public AbilityModel(int index, ushort[] abilities, IResourceGetter resourceGetter)\n        {\n            _index = index;\n            _abilities = abilities;\n            _resourceGetter = resourceGetter;\n        }\n\n        public IEnumerable<EnumIconTypeModel<EquipmentType>> Abilities => _resourceGetter.Abilities;\n\n        private ushort AbilityData\n        {\n            get => _abilities[_index];\n            set => _abilities[_index] = value;\n        }\n\n\n        public EquipmentType AbilityType\n        {\n            get => (EquipmentType)(AbilityData & 0x7fff);\n            set\n            {\n                AbilityData = (ushort)((int)value | (Active ? 0x8000 : 0));\n                OnPropertyChanged(nameof(Active));\n            }\n        }\n\n        public bool Active\n        {\n            get => AbilityData >= 0x8000;\n            set\n            {\n                if (value)\n                    AbilityData |= 0x8000;\n                else\n                    AbilityData &= 0x7fff;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Models/InventoryItemModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Common.Services;\nusing System.Windows.Media;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh2.Models\n{\n    public class InventoryItemModel :\n        BaseNotifyPropertyChanged,\n        SearchEngine.ICount,\n        SearchEngine.IName\n    {\n        private readonly int _index;\n        private readonly byte[] _inventoryCount;\n\n        public InventoryItemModel(int index, byte[] inventoryCount)\n        {\n            _index = index;\n            _inventoryCount = inventoryCount;\n        }\n\n        public InventoryType Type => (InventoryType)_index;\n        public string Name => InfoAttribute.GetInfo(Type);\n        public ImageSource Icon => IconService.Icon(Type);\n\n        public int Count => Amount;\n\n        public byte Amount\n        {\n            get => _inventoryCount[_index];\n            set\n            {\n                _inventoryCount[_index] = value;\n                OnPropertyChanged();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Models/MapScriptModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib2.Models;\nusing KHSave.Lib2.Types;\n\nnamespace KHSave.SaveEditor.Kh2.Models\n{\n    public class MapScriptModel\n    {\n        private readonly WorldType _world;\n        private readonly int _place;\n        private readonly IPlaceScript _placeScript;\n\n        public MapScriptModel(WorldType world, int placeIndex, IPlaceScript placeScript)\n        {\n            _world = world;\n            _place = placeIndex;\n            _placeScript = placeScript;\n        }\n\n        public string Name => $\"{WorldAttribute.GetWorldId(_world)}{_place:D02}\";\n\n        public int Map\n        {\n            get => _placeScript.Map;\n            set => _placeScript.Map = (byte)value;\n        }\n\n        public int Battle\n        {\n            get => _placeScript.Battle;\n            set => _placeScript.Battle = (byte)value;\n        }\n\n        public int Event\n        {\n            get => _placeScript.Event;\n            set => _placeScript.Event = (byte)value;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Models/ProgressModel.cs",
    "content": "using KHSave.Lib2;\nusing KHSave.Lib2.Models;\nusing KHSave.SaveEditor.Common.Services;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh2.Models\n{\n    public class ProgressModel : BaseNotifyPropertyChanged, SearchEngine.IName\n    {\n        private readonly int _worldId;\n        private readonly Progress _progress;\n\n        public ProgressModel(int worldId, Progress progress, int flag)\n        {\n            _worldId = worldId;\n            _progress = progress;\n            Flag = flag;\n        }\n\n        public int Flag { get; }\n\n        public string World => Constants.WorldNames[_worldId];\n\n        public string Label => Name.Substring(3);\n\n        public string Name => Constants.Progress[Flag];\n\n        public bool Done\n        {\n            get => _progress.GetFlag(Flag % 1024);\n            set\n            {\n                _progress.SetFlag(Flag % 1024, value);\n                OnPropertyChanged();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Models/RoomModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib2.Types;\nusing System.Text;\n\nnamespace KHSave.SaveEditor.Kh2.Models\n{\n    public class RoomModel\n    {\n        public WorldType World { get; set; }\n        public int RoomIndex { get; set; }\n        public GameType GameType { get; }\n        public GameType Edition { get; set; }\n        public string Description { get; set; }\n\n        public RoomModel(WorldType world, int roomIndex, GameType gameType, string description = null)\n        {\n            World = world;\n            RoomIndex = roomIndex;\n            GameType = gameType;\n            Description = description;\n        }\n\n        public override string ToString()\n        {\n            var sb = new StringBuilder();\n            sb.Append($\"{WorldAttribute.GetWorldId(World)}_{RoomIndex:D02}\");\n            sb.Append($\" | {WorldAttribute.GetInfo(World)}\");\n\n            if (!string.IsNullOrEmpty(Description))\n                sb.Append($\" - {Description}\");\n\n            return sb.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Service/EquipmentManagerFactory.cs",
    "content": "using System;\nusing KHSave.Lib2.Models;\nusing KHSave.Lib2.Types;\n\nnamespace KHSave.SaveEditor.Kh2.Service\n{\n    public static class EquipmentManagerFactory\n    {\n        private class ArmorEquipmentManager : IEquipmentManager\n        {\n            private readonly ICharacter character;\n\n            internal ArmorEquipmentManager(ICharacter character)\n            {\n                this.character = character;\n            }\n\n            public uint Count { get => character.ArmorCount; set => character.ArmorCount = (byte)Math.Min(byte.MaxValue, value); }\n\n            public EquipmentType GetEquipment(uint index) => (EquipmentType)character.Armors[index];\n            public void SetEquipment(uint index, EquipmentType equipment) => character.Armors[index] = (short)equipment;\n        }\n\n        private class AccessoryEquipmentManager : IEquipmentManager\n        {\n            private readonly ICharacter character;\n\n            internal AccessoryEquipmentManager(ICharacter character)\n            {\n                this.character = character;\n            }\n\n            public uint Count { get => character.AccessoryCount; set => character.AccessoryCount = (byte)Math.Min(byte.MaxValue, value); }\n\n            public EquipmentType GetEquipment(uint index) => (EquipmentType)character.Accessories[index];\n            public void SetEquipment(uint index, EquipmentType equipment) => character.Accessories[index] = (short)equipment;\n        }\n\n        private class ConsumableEquipmentManager : IEquipmentManager\n        {\n            private readonly ICharacter character;\n\n            internal ConsumableEquipmentManager(ICharacter character)\n            {\n                this.character = character;\n            }\n\n            public uint Count { get => character.ItemCount; set => character.ItemCount = (byte)Math.Min(byte.MaxValue, value); }\n\n            public EquipmentType GetEquipment(uint index) => (EquipmentType)character.Items[index];\n            public void SetEquipment(uint index, EquipmentType equipment) => character.Items[index] = (short)equipment;\n        }\n\n        public static IEquipmentManager ForArmor(ICharacter character) => new ArmorEquipmentManager(character);\n        public static IEquipmentManager ForAccessory(ICharacter character) => new AccessoryEquipmentManager(character);\n        public static IEquipmentManager ForConsumable(ICharacter character) => new ConsumableEquipmentManager(character);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Service/IEquipmentManager.cs",
    "content": "using KHSave.Lib2.Types;\n\nnamespace KHSave.SaveEditor.Kh2.Service\n{\n    public interface IEquipmentManager\n    {\n        uint Count { get; set; }\n\n        EquipmentType GetEquipment(uint index);\n        void SetEquipment(uint index, EquipmentType equipment);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/CharacterViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing KHSave.Lib2.Models;\nusing KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh2.Interfaces;\nusing KHSave.SaveEditor.Kh2.Models;\nusing KHSave.SaveEditor.Kh2.Service;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class CharacterViewModel\n    {\n        private readonly ICharacter character;\n        private readonly int index;\n        private readonly IResourceGetter _resourceGetter;\n\n        public CharacterViewModel(ICharacter character, int index, IResourceGetter resourceGetter)\n        {\n            this.character = character;\n            this.index = index;\n            _resourceGetter = resourceGetter;\n\n            Armors = new EquipmentItemsViewModel(EquipmentManagerFactory.ForArmor(character), resourceGetter);\n            Accessories = new EquipmentItemsViewModel(EquipmentManagerFactory.ForAccessory(character), resourceGetter);\n            Consumables = new EquipmentItemsViewModel(EquipmentManagerFactory.ForConsumable(character), resourceGetter);\n            Abilities = character.Abilities.Select((_, i) => new AbilityModel(i, character.Abilities, resourceGetter)).ToList();\n        }\n\n        public string Name => InfoAttribute.GetInfo((CharacterType)index);\n\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType> Equipments => _resourceGetter.Equipments;\n        public EquipmentType Weapon { get => character.Weapon; set => character.Weapon = value; }\n        public EquipmentItemsViewModel Armors { get; }\n        public EquipmentItemsViewModel Accessories { get; }\n        public EquipmentItemsViewModel Consumables { get; }\n        public List<AbilityModel> Abilities { get; set; }\n        public short Unk02 { get => character.Unk02; set => character.Unk02 = value; }\n        public byte HpCur { get => character.HpCur; set => character.HpCur = value; }\n        public byte HpMax { get => character.HpMax; set => character.HpMax = value; }\n        public byte MpCur { get => character.MpCur; set => character.MpCur = value; }\n        public byte MpMax { get => character.MpMax; set => character.MpMax = value; }\n        public byte ApBoost { get => character.ApBoost; set => character.ApBoost = value; }\n        public byte StrengthBoost { get => character.StrengthBoost; set => character.StrengthBoost = value; }\n        public byte MagicBoost { get => character.MagicBoost; set => character.MagicBoost = value; }\n        public byte DefenseBoost { get => character.DefenseBoost; set => character.DefenseBoost = value; }\n        public byte Unk0c { get => character.Unk0c; set => character.Unk0c = value; }\n        public byte Unk0d { get => character.Unk0d; set => character.Unk0d = value; }\n        public byte Unk0e { get => character.Unk0e; set => character.Unk0e = value; }\n        public byte Level { get => character.Level; set => character.Level = value; }\n        public byte ArmorCount { get => character.ArmorCount; set => character.ArmorCount = value; }\n        public byte AccessoryCount { get => character.AccessoryCount; set => character.AccessoryCount = value; }\n        public byte ItemCount { get => character.ItemCount; set => character.ItemCount = value; }\n        public byte UnknownCount { get => character.UnknownCount; set => character.UnknownCount = value; }\n\n        public BattleStyleType BattleStyle { get => character.BattleStyle; set => character.BattleStyle = value; }\n        public AbilityStyleType AbilityStyle1 { get => character.AbilityStyle1; set => character.AbilityStyle1 = value; }\n        public AbilityStyleType AbilityStyle2 { get => character.AbilityStyle2; set => character.AbilityStyle2 = value; }\n        public AbilityStyleType AbilityStyle3 { get => character.AbilityStyle3; set => character.AbilityStyle3 = value; }\n        public AbilityStyleType AbilityStyle4 { get => character.AbilityStyle4; set => character.AbilityStyle4 = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/CharactersViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib2;\nusing KHSave.Lib2.Models;\nusing KHSave.SaveEditor.Kh2.Interfaces;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class CharactersViewModel : GenericListModel<CharacterViewModel>\n    {\n        private readonly ISaveKh2 save;\n\n        public CharactersViewModel(ISaveKh2 save, IResourceGetter resourceGetter) :\n            this(save.Characters.Select((pc, index) => new CharacterViewModel(pc, index, resourceGetter)))\n        {\n            this.save = save;\n        }\n\n        public CharactersViewModel(IEnumerable<CharacterViewModel> list) :\n            base(list)\n        {\n\n        }\n\n        public Visibility PlayerVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility PlayerNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        protected override void OnSelectedItem(CharacterViewModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(PlayerVisible));\n            OnPropertyChanged(nameof(PlayerNotVisible));\n        }\n\n        protected override CharacterViewModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/DriveFormsViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib2;\nusing KHSave.Lib2.Models;\nusing KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh2.Interfaces;\nusing KHSave.SaveEditor.Kh2.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class DriveFormViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly IDriveForm _driveForm;\n        private readonly DriveFormType _type;\n        private readonly IResourceGetter _resourceGetter;\n\n        public DriveFormViewModel(IDriveForm driveForm, DriveFormType type, IResourceGetter resourceGetter)\n        {\n            _driveForm = driveForm;\n            _type = type;\n            _resourceGetter = resourceGetter;\n            Abilities = _driveForm.Abilities.Select((_, i) => new AbilityModel(i, _driveForm.Abilities, resourceGetter)).ToList();\n        }\n\n        public IEnumerable<EnumIconTypeModel<EquipmentType>> AbilityTypes => _resourceGetter.Abilities;\n        public EquipmentType Weapon { get => _driveForm.Weapon; set => _driveForm.Weapon = value; }\n        public KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType> Equipments => _resourceGetter.Equipments;\n\n        public string Name => _type.ToString();\n        public byte Level { get => _driveForm.Level; set => _driveForm.Level = value; }\n        public int Experience { get => _driveForm.Experience; set => _driveForm.Experience = value; }\n        public List<AbilityModel> Abilities { get; set; }\n    }\n\n    public class DriveFormsViewModel : GenericListModel<DriveFormViewModel>\n    {\n        private readonly ISaveKh2 save;\n\n        public DriveFormsViewModel(ISaveKh2 save, IResourceGetter resourceGetter) :\n            this(save.DriveForms.Select((x, index) => new DriveFormViewModel(x, GetDriveFormType(index, save.IsFinalMix), resourceGetter)))\n        {\n            this.save = save;\n        }\n\n        public DriveFormsViewModel(IEnumerable<DriveFormViewModel> list) :\n            base(list)\n        {\n\n        }\n\n        public Visibility Visible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility NotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        protected override void OnSelectedItem(DriveFormViewModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(Visible));\n            OnPropertyChanged(nameof(NotVisible));\n        }\n\n        protected override DriveFormViewModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n\n        private static DriveFormType GetDriveFormType(int index, bool isFinalMix)\n        {\n            if (!isFinalMix && index >= (int)DriveFormType.Limit)\n                index++;\n\n            return (DriveFormType)index;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/EquipmentItemsViewModel.cs",
    "content": "using KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh2.Interfaces;\nusing KHSave.SaveEditor.Kh2.Service;\nusing System;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class EquipmentItemsViewModel\n    {\n        private readonly IEquipmentManager equipmentManager;\n\n        public class EquipmentItemViewModel : BaseNotifyPropertyChanged\n        {\n            private readonly EquipmentItemsViewModel _vm;\n            private readonly uint _index;\n            private readonly IResourceGetter _resourceGetter;\n\n            internal EquipmentItemViewModel(EquipmentItemsViewModel vm, uint index, IResourceGetter resourceGetter)\n            {\n                _vm = vm;\n                _index = index;\n                _resourceGetter = resourceGetter;\n            }\n\n            public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n            public bool Enabled\n            {\n                get => _vm.IsEnabled(_index);\n                set => _vm.SetEnabled(_index, value);\n            }\n\n            public EquipmentType Equipment\n            {\n                get => _vm.GetEquipment(_index);\n                set => _vm.SetEquipment(_index, value);\n            }\n\n            public KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType> ValueSet => _resourceGetter.Equipments;\n\n            public void InvalidateEnabled()\n            {\n                OnPropertyChanged(nameof(Enabled));\n            }\n        }\n\n\n        public EquipmentItemsViewModel(IEquipmentManager equipmentManager, IResourceGetter resourceGetter)\n        {\n            this.equipmentManager = equipmentManager;\n            Equipment1 = new EquipmentItemViewModel(this, 0, resourceGetter);\n            Equipment2 = new EquipmentItemViewModel(this, 1, resourceGetter);\n            Equipment3 = new EquipmentItemViewModel(this, 2, resourceGetter);\n            Equipment4 = new EquipmentItemViewModel(this, 3, resourceGetter);\n            Equipment5 = new EquipmentItemViewModel(this, 4, resourceGetter);\n            Equipment6 = new EquipmentItemViewModel(this, 5, resourceGetter);\n            Equipment7 = new EquipmentItemViewModel(this, 6, resourceGetter);\n            Equipment8 = new EquipmentItemViewModel(this, 7, resourceGetter);\n        }\n\n        public EquipmentItemViewModel Equipment1 { get; private set; }\n        public EquipmentItemViewModel Equipment2 { get; private set; }\n        public EquipmentItemViewModel Equipment3 { get; private set; }\n        public EquipmentItemViewModel Equipment4 { get; private set; }\n        public EquipmentItemViewModel Equipment5 { get; private set; }\n        public EquipmentItemViewModel Equipment6 { get; private set; }\n        public EquipmentItemViewModel Equipment7 { get; private set; }\n        public EquipmentItemViewModel Equipment8 { get; private set; }\n\n        public bool IsEnabled(uint index) => equipmentManager.Count > index;\n        public void SetEnabled(uint index, bool enabled)\n        {\n            if (enabled)\n            {\n                equipmentManager.Count = Math.Max(equipmentManager.Count, index + 1);\n            }\n            else\n            {\n                equipmentManager.Count = Math.Min(equipmentManager.Count, index);\n            }\n\n            Equipment1.InvalidateEnabled();\n            Equipment2.InvalidateEnabled();\n            Equipment3.InvalidateEnabled();\n            Equipment4.InvalidateEnabled();\n            Equipment5.InvalidateEnabled();\n            Equipment6.InvalidateEnabled();\n            Equipment7.InvalidateEnabled();\n            Equipment8.InvalidateEnabled();\n        }\n        public EquipmentType GetEquipment(uint index) => equipmentManager.GetEquipment(index);\n        public void SetEquipment(uint index, EquipmentType equipment) => equipmentManager.SetEquipment(index, equipment);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/InventoryViewModel.cs",
    "content": "using KHSave.Lib2;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Kh2.Models;\nusing System.Linq;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class InventoryViewModel : GenericListModel<InventoryItemModel>\n    {\n        private string _searchTerm;\n\n        public InventoryViewModel(ISaveKh2 save) :\n            base(save.InventoryCount.Select((_, i) => new InventoryItemModel(i, save.InventoryCount)))\n        {\n\n        }\n\n        public string SearchTerm\n        {\n            get => _searchTerm;\n            set\n            {\n                _searchTerm = value;\n                Filter(items => SearchEngine.Filter(_searchTerm, items).OrderBy(x => (uint)x.Type));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/Kh2ViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing KHSave.Lib2;\nusing KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.SaveEditor.Common.Exceptions;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh2.Interfaces;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class Kh2ViewModel : BaseNotifyPropertyChanged, IRefreshUi, IOpenStream, IWriteToStream, IGetSave, IResourceGetter\n    {\n        private static readonly List<EnumIconTypeModel<EquipmentType>> _abilities =\n            new EnumIconTypeModel<EquipmentType>[]\n            {\n                new EnumIconTypeModel<EquipmentType>()\n                {\n                    Name = \"Empty\",\n                    Value = EquipmentType.Empty\n                }\n            }\n            .Concat(\n                Enum.GetValues(typeof(EquipmentType))\n                    .Cast<EquipmentType>()\n                    .Where(x => InfoAttribute.GetItemTypes(x).Any(v => v == \"Ability\"))\n                    .Select(x => new EnumIconTypeModel<EquipmentType>\n                    {\n                        Name = InfoAttribute.GetInfo(x),\n                        Value = x,\n                    })\n            ).ToList();\n\n        private ISaveKh2 save;\n\n        public Kh2ViewModel()\n        {\n        }\n\n        public SystemViewModel System { get; private set; }\n        public InventoryViewModel Inventory { get; private set; }\n        public CharactersViewModel Characters { get; private set; }\n        public DriveFormsViewModel DriveForms { get; private set; }\n        public WorldsViewModel Worlds { get; private set; }\n        public RoomVisitedViewModel RoomVisited { get; private set; }\n        public ProgressViewModel Progress { get; private set; }\n\n        public KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType> Equipments { get; } =\n            new KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType>();\n\n        public IEnumerable<EnumIconTypeModel<EquipmentType>> Abilities => _abilities;\n\n        public void RefreshUi()\n        {\n            System = new SystemViewModel(save);\n            Inventory = new InventoryViewModel(save);\n            Characters = new CharactersViewModel(save, this);\n            DriveForms = new DriveFormsViewModel(save, this);\n            Worlds = new WorldsViewModel(save);\n            RoomVisited = new RoomVisitedViewModel(save);\n            Progress = new ProgressViewModel(save.StoryProgress);\n\n            OnPropertyChanged(nameof(System));\n            OnPropertyChanged(nameof(Inventory));\n            OnPropertyChanged(nameof(Characters));\n            OnPropertyChanged(nameof(Characters));\n            OnPropertyChanged(nameof(DriveForms));\n            OnPropertyChanged(nameof(Worlds));\n            OnPropertyChanged(nameof(RoomVisited));\n            OnPropertyChanged(nameof(Progress));\n        }\n\n        public void OpenStream(Stream stream)\n        {\n            try\n            {\n                save = SaveKh2.Read(stream);\n                RefreshUi();\n            }\n            catch (NotImplementedException ex)\n            {\n                throw new SaveNotSupportedException(ex.Message);\n            }\n        }\n\n        public void WriteToStream(Stream stream) => SaveKh2.Write(stream, save);\n\n        public object GetSave() => save;\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/ProgressViewModel.cs",
    "content": "using KHSave.Lib2;\nusing KHSave.Lib2.Models;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Kh2.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Xe.Tools.Wpf.Commands;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class ProgressViewModel : GenericListModel<ProgressModel>\n    {\n        private string _searchTerm;\n\n        public ProgressViewModel(Progress[] progresses) :\n            base(GetProgressModels(progresses))\n        {\n            SetAllCommand = new RelayCommand(_ =>\n            {\n                foreach (var item in Items)\n                    item.Done = true;\n            });\n            ResetAllCommand = new RelayCommand(_ =>\n            {\n                foreach (var item in Items)\n                    item.Done = false;\n            });\n        }\n\n        public string SearchTerm\n        {\n            get => _searchTerm;\n            set\n            {\n                _searchTerm = value;\n                Filter(items => SearchEngine.Filter(_searchTerm, items, AdditionalFilters).OrderBy(x => (uint)x.Flag));\n            }\n        }\n\n        private bool AdditionalFilters(string searchTerm, ProgressModel item) =>\n            item.World.ToLower().IndexOf(searchTerm.ToLower()) >= 0;\n\n        public RelayCommand SetAllCommand { get; }\n        public RelayCommand ResetAllCommand { get; }\n\n        private static IEnumerable<ProgressModel> GetProgressModels(Progress[] progresses)\n        {\n            return Constants.Progress\n                .Select(x => new ProgressModel(x.Key / 1024, progresses[x.Key / 1024], x.Key));\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/RoomViewModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Kh2.Models;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class RoomViewModel\n    {\n        public RoomViewModel(RoomModel room)\n        {\n            World = room.World;\n            Value = (byte)room.RoomIndex;\n            Name = $\"{WorldAttribute.GetWorldId(World)}{room.RoomIndex:D02} {room.Description}\";\n            if (room.Edition == GameType.Fm)\n                Name += \" (Final Mix)\";\n        }\n\n        public WorldType World { get; }\n\n        public byte Value { get; }\n\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/RoomVisitedViewModel.cs",
    "content": "using KHSave.Lib2;\nusing KHSave.SaveEditor.Kh2.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class RoomVisitedViewModel : BaseNotifyPropertyChanged\n    {\n        public class RoomVisitedEntry\n        {\n            private readonly RoomModel _roomModel;\n            private readonly byte[] _rooms;\n            private readonly int _index;\n\n            internal RoomVisitedEntry(RoomModel roomModel, byte[] rooms, int index)\n            {\n                _roomModel = roomModel;\n                _rooms = rooms;\n                _index = index;\n            }\n\n            public string Name => _roomModel.ToString();\n\n            public bool Visited\n            {\n                get => (_rooms[_index / 8] & (1 << (_index & 7))) != 0;\n                set\n                {\n                    var bit = 1 << (_index & 7);\n                    if (value)\n                        _rooms[_index / 8] |= (byte)bit;\n                    else\n                        _rooms[_index / 8] &= (byte)(~bit);\n                }\n            }\n        }\n\n        private byte[] _roomVisited;\n\n        public RoomVisitedViewModel(ISaveKh2 save)\n        {\n            _roomVisited = save.RoomVisitedFlag;\n            Entries = Enumerable.Range(0, save.RoomVisitedFlag.Length * 8)\n                .Select(i => new\n                {\n                    Index = i,\n                    Room = Data.GetRoom(i / 64, i & 63)\n                })\n                .Where(x => x.Room != null)\n                .Select(x => new RoomVisitedEntry(x.Room, _roomVisited, x.Index))\n                .ToList();\n        }\n\n        public List<RoomVisitedEntry> Entries { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/SystemViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib2;\nusing KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.InteropServices.ComTypes;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class SystemViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly ISaveKh2 save;\n\n        public SystemViewModel(ISaveKh2 save)\n        {\n            this.save = save;\n            ShortcutItems = new KhEnumListModel<EnumIconTypeModel<CommandType>, CommandType>(() => default(CommandType), x => { });\n            Difficulty = new KhEnumListModel<Difficulty>(() => save.Difficulty, x => save.Difficulty = x);\n            Worlds = new KhEnumListModel<WorldType>();\n        }\n\n        public KhEnumListModel<EnumIconTypeModel<CommandType>, CommandType> ShortcutItems { get; }\n        public KhEnumListModel<Difficulty> Difficulty { get; }\n        public KhEnumListModel<WorldType> Worlds { get; }\n        public IEnumerable<RoomViewModel> Rooms => Data.Rooms.Where(x => x.World == WorldId).Select(x => new RoomViewModel(x));\n\n        public int Timer { get => save.Timer; set => save.Timer = value; }\n        public int Munny { get => save.MunnyAmount; set => save.MunnyAmount = value; }\n        public int Experience { get => save.Experience; set => save.Experience = value; }\n        public int BonusLevel { get => save.BonusLevel; set => save.BonusLevel = value; }\n\n        public WorldType WorldId\n        {\n            get => save.WorldId;\n            set\n            {\n                save.WorldId = value;\n                OnPropertyChanged(nameof(Rooms));\n            }\n        }\n        public byte RoomId { get => save.RoomId; set => save.RoomId = value; }\n        public byte SpawnId { get => save.SpawnId; set => save.SpawnId = value; }\n\n        public CommandType ShortcutCircle { get => save.ShortcutCircle; set => save.ShortcutCircle = value; }\n        public CommandType ShortcutTriangle { get => save.ShortcutTriangle; set => save.ShortcutTriangle = value; }\n        public CommandType ShortcutSquare { get => save.ShortcutSquare; set => save.ShortcutSquare = value; }\n        public CommandType ShortcutCross { get => save.ShortcutCross; set => save.ShortcutCross = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/ViewModels/WorldsViewModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.Lib2;\nusing KHSave.Lib2.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Kh2.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh2.ViewModels\n{\n    public class WorldViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly ISaveKh2 _save;\n        private readonly WorldType _world;\n\n        public WorldViewModel(ISaveKh2 save, int index)\n        {\n            _save = save;\n            _world = (WorldType)index;\n            Pc0 = new KhEnumListModel<PlayableCharacterType>(\n                () => save.WorldPartyMembers[index].PlayableCharacter,\n                x => save.WorldPartyMembers[index].PlayableCharacter = x);\n            Pc1 = new KhEnumListModel<PlayableCharacterType>(\n                () => save.WorldPartyMembers[index].CompanionCharacter1,\n                x => save.WorldPartyMembers[index].CompanionCharacter1 = x);\n            Pc2 = new KhEnumListModel<PlayableCharacterType>(\n                () => save.WorldPartyMembers[index].CompanionCharacter2,\n                x => save.WorldPartyMembers[index].CompanionCharacter2 = x);\n            Pc3 = new KhEnumListModel<PlayableCharacterType>(\n                () => save.WorldPartyMembers[index].CompanionCharacter3,\n                x => save.WorldPartyMembers[index].CompanionCharacter3 = x);\n\n            Scripts = Enumerable.Range(0, 64)\n                .Select(x => new MapScriptModel(_world, x, _save.PlaceScripts[(int)_world * 64 + x]))\n                .ToList();\n        }\n\n        public string Name => WorldAttribute.GetWorldId(_world);\n\n        public KhEnumListModel<PlayableCharacterType> Pc0 { get; }\n        public KhEnumListModel<PlayableCharacterType> Pc1 { get; }\n        public KhEnumListModel<PlayableCharacterType> Pc2 { get; }\n        public KhEnumListModel<PlayableCharacterType> Pc3 { get; }\n        public List<MapScriptModel> Scripts { get; }\n    }\n\n    public class WorldsViewModel : GenericListModel<WorldViewModel>\n    {\n        public WorldsViewModel(ISaveKh2 save) :\n            this(Enumerable.Range(0, Constants.WorldCount).Select(i => new WorldViewModel(save, i)))\n        { }\n\n        public WorldsViewModel(IEnumerable<WorldViewModel> list) :\n            base(list)\n        { }\n\n        public Visibility Visible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility NotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        protected override void OnSelectedItem(WorldViewModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(Visible));\n            OnPropertyChanged(nameof(NotVisible));\n        }\n\n        protected override WorldViewModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/DriveFormView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.DriveFormView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\" xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"300\">\n    <UserControl.Resources>\n        <CollectionViewSource x:Key=\"AbilityTypes\" Source=\"{Binding AbilityTypes}\"/>\n    </UserControl.Resources>\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"5\"/>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"5\"/>\n        </Grid.RowDefinitions>\n        <StackPanel Grid.Row=\"0\">\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Level\"/>\n                <TextBox Text=\"{Binding Level, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Exp. to next level\"/>\n                <TextBox Text=\"{Binding Experience, UpdateSourceTrigger=PropertyChanged}\"/>\n            </common:TwoEqualColumnsStackPanel>\n\n            <TextBlock Text=\"Secondary weapon\"/>\n            <ComboBox\n                ItemsSource=\"{Binding Equipments}\"\n                SelectedValue=\"{Binding Weapon}\"\n                SelectedValuePath=\"Value\">\n                <ComboBox.ItemTemplate>\n                    <DataTemplate>\n                        <StackPanel Orientation=\"Horizontal\">\n                            <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                            Source=\"{Binding Icon}\"/>\n                            <TextBlock Text=\"{Binding Name}\" />\n                        </StackPanel>\n                    </DataTemplate>\n                </ComboBox.ItemTemplate>\n            </ComboBox>\n        </StackPanel>\n\n        <DataGrid Grid.Row=\"2\"\n            Background=\"{DynamicResource {x:Static SystemColors.WindowBrushKey}}\"\n            AutoGenerateColumns=\"False\"\n            ItemsSource=\"{Binding Abilities}\"\n            GridLinesVisibility=\"None\"\n            HeadersVisibility=\"None\">\n            <DataGrid.RowStyle>\n                <Style TargetType=\"DataGridRow\">\n                    <Setter Property=\"Height\" Value=\"24\" />\n                    <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n                </Style>\n            </DataGrid.RowStyle>\n            <DataGrid.Columns>\n                <DataGridTemplateColumn Header=\"Active\" Width=\"24\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <CheckBox Margin=\"3 0 0 0\"\n                                Style=\"{StaticResource KhCheckboxStyle}\"\n                                IsChecked=\"{Binding Active, UpdateSourceTrigger=PropertyChanged}\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n                <DataGridTemplateColumn Width=\"*\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <ComboBox\n                                ItemsSource=\"{Binding Abilities, Mode=OneTime}\"\n                                SelectedValue=\"{Binding AbilityType, UpdateSourceTrigger=PropertyChanged}\"\n                                SelectedValuePath=\"Value\">\n                                <ComboBox.ItemTemplate>\n                                    <DataTemplate>\n                                        <StackPanel Orientation=\"Horizontal\">\n                                            <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                                                Source=\"{Binding Icon}\"/>\n                                            <TextBlock Text=\"{Binding Name}\" />\n                                        </StackPanel>\n                                    </DataTemplate>\n                                </ComboBox.ItemTemplate>\n                            </ComboBox>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n            </DataGrid.Columns>\n        </DataGrid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/DriveFormView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for DriveFormView.xaml\n    /// </summary>\n    public partial class DriveFormView : UserControl\n    {\n        public DriveFormView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/DriveFormsView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.DriveFormsView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"300\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"\n            />\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding NotVisible}\">\n            <Label Content=\"Select a drive form to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding Visible}\">\n            <local:DriveFormView DataContext=\"{Binding SelectedItem}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/DriveFormsView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for DriveFormsView.xaml\n    /// </summary>\n    public partial class DriveFormsView : UserControl\n    {\n        public DriveFormsView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/InventoryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.InventoryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <Grid.Resources>\n            <DataTemplate x:Key=\"DateTemplate\" >\n                <StackPanel Orientation=\"Horizontal\">\n                    <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                    <TextBlock Text=\"{Binding Name}\" />\n                </StackPanel>\n            </DataTemplate>\n        </Grid.Resources>\n\n        <DataGrid\n            Grid.Row=\"0\"\n            AutoGenerateColumns=\"False\"\n            Background=\"{DynamicResource {x:Static SystemColors.WindowBrushKey}}\"\n            ItemsSource=\"{Binding Items}\">\n            <DataGrid.RowStyle>\n                <Style TargetType=\"DataGridRow\">\n                    <Setter Property=\"Height\" Value=\"24\" />\n                    <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n                </Style>\n            </DataGrid.RowStyle>\n            <DataGrid.Columns>\n                <DataGridTemplateColumn\n                    Header=\"Item name\"\n                    Width=\"*\"\n                    IsReadOnly=\"True\"\n                    CanUserReorder=\"False\"\n                    CellTemplate=\"{StaticResource DateTemplate}\"/>\n                <DataGridTextColumn\n                    Header=\"Amount\"\n                    Width=\"Auto\"\n                    CanUserReorder=\"False\"\n                    Binding=\"{Binding Amount, UpdateSourceTrigger=PropertyChanged}\"/>\n            </DataGrid.Columns>\n        </DataGrid>\n\n        <Grid Grid.Row=\"1\" Margin=\"0 5 0 5\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Image Grid.Column=\"0\" Source=\"{StaticResource Search_16x}\"/>\n            <TextBox Grid.Column=\"2\" Text=\"{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/InventoryView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for InventoryView.xaml\n    /// </summary>\n    public partial class InventoryView : UserControl\n    {\n        public InventoryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/PlayerEquipmentView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.PlayerEquipmentView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\"\n             xmlns:controls=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"22\" d:DesignWidth=\"100\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n        <CheckBox\n            Grid.Column=\"0\"\n            VerticalAlignment=\"Center\" Margin=\"0 0 3 0\"\n            Visibility=\"{Binding AdvancedVisibility}\"\n            IsChecked=\"{Binding Enabled}\"/>\n        <ComboBox\n            Grid.Column=\"1\"\n            IsEnabled=\"{Binding Enabled}\"\n            ItemsSource=\"{Binding ValueSet}\"\n            SelectedValue=\"{Binding Equipment}\"\n            SelectedValuePath=\"Value\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                            Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/PlayerEquipmentView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayerEquipmentView.xaml\n    /// </summary>\n    public partial class PlayerEquipmentView : UserControl\n    {\n        public PlayerEquipmentView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/PlayerView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.PlayerView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             xmlns:xe=\"clr-namespace:Xe.Tools.Wpf.Controls;assembly=Xe.Tools.Wpf\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"800\" d:DesignWidth=\"450\">\n    <UserControl.Resources>\n        <CollectionViewSource x:Key=\"AbilityTypes\" Source=\"{Binding AbilityTypes}\"/>\n    </UserControl.Resources>\n    <TabControl>\n        <TabItem Header=\"Stats\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <StackPanel>\n                    <common:TwoEqualColumnsStackPanel>\n                        <TextBlock Text=\"Level\"/>\n                        <TextBox Text=\"{Binding Level, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                        <TextBlock Text=\"Weapon\"/>\n                        <ComboBox\n                            ItemsSource=\"{Binding Equipments}\"\n                            SelectedValue=\"{Binding Weapon}\"\n                            SelectedValuePath=\"Value\">\n                            <ComboBox.ItemTemplate>\n                                <DataTemplate>\n                                    <StackPanel Orientation=\"Horizontal\">\n                                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                                            Source=\"{Binding Icon}\"/>\n                                        <TextBlock Text=\"{Binding Name}\" />\n                                    </StackPanel>\n                                </DataTemplate>\n                            </ComboBox.ItemTemplate>\n                        </ComboBox>\n\n                        <TextBlock Text=\"HP current\"/>\n                        <TextBox Text=\"{Binding HpCur, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"HP max\"/>\n                        <TextBox Text=\"{Binding HpMax, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"MP current\"/>\n                        <TextBox Text=\"{Binding MpCur, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"MP max\"/>\n                        <TextBox Text=\"{Binding MpMax, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                        <TextBlock Text=\"AP boost\"/>\n                        <TextBox Text=\"{Binding ApBoost, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"Strength boost\"/>\n                        <TextBox Text=\"{Binding StrengthBoost, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"Magic boost\"/>\n                        <TextBox Text=\"{Binding MagicBoost, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"Defense boost\"/>\n                        <TextBox Text=\"{Binding DefenseBoost, UpdateSourceTrigger=PropertyChanged}\"/>\n                    </common:TwoEqualColumnsStackPanel>\n                    <common:TwoEqualColumnsStackPanel Visibility=\"{Binding AdvancedVisibility}\">\n                        <TextBlock Text=\"Unk02\"/>\n                        <TextBox Text=\"{Binding Unk02, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"Unk0c\"/>\n                        <TextBox Text=\"{Binding Unk0c, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"Unk0d\"/>\n                        <TextBox Text=\"{Binding Unk0d, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"Unk0e\"/>\n                        <TextBox Text=\"{Binding Unk0e, UpdateSourceTrigger=PropertyChanged}\"/>\n                    </common:TwoEqualColumnsStackPanel>\n                </StackPanel>\n            </ScrollViewer>\n        </TabItem>\n        <TabItem Header=\"Equipment\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <StackPanel>\n                    <GroupBox Header=\"Armors\" DataContext=\"{Binding Armors}\">\n                        <common:TwoEqualColumnsStackPanel>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment1}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment3}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment2}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment4}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment5}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment7}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment6}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment8}\"/>\n                        </common:TwoEqualColumnsStackPanel>\n                    </GroupBox>\n                    <GroupBox Header=\"Accessories\" DataContext=\"{Binding Accessories}\">\n                        <common:TwoEqualColumnsStackPanel>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment1}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment3}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment2}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment4}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment5}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment7}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment6}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment8}\"/>\n                        </common:TwoEqualColumnsStackPanel>\n                    </GroupBox>\n                    <GroupBox Header=\"Consumable items\" DataContext=\"{Binding Consumables}\">\n                        <common:TwoEqualColumnsStackPanel>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment1}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment3}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment2}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment4}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment5}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment7}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment6}\"/>\n                            <local:PlayerEquipmentView DataContext=\"{Binding Equipment8}\"/>\n                        </common:TwoEqualColumnsStackPanel>\n                    </GroupBox>\n                </StackPanel>\n            </ScrollViewer>\n        </TabItem>\n        <TabItem Header=\"Abilities\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <DataGrid\n                    Background=\"{DynamicResource {x:Static SystemColors.WindowBrushKey}}\"\n                    AutoGenerateColumns=\"False\"\n                    ItemsSource=\"{Binding Abilities}\"\n                    GridLinesVisibility=\"None\"\n                    HeadersVisibility=\"None\">\n                    <DataGrid.RowStyle>\n                        <Style TargetType=\"DataGridRow\">\n                            <Setter Property=\"Height\" Value=\"24\" />\n                            <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n                        </Style>\n                    </DataGrid.RowStyle>\n                    <DataGrid.Columns>\n                        <DataGridTemplateColumn Header=\"Active\" Width=\"24\">\n                            <DataGridTemplateColumn.CellTemplate>\n                                <DataTemplate>\n                                    <CheckBox\n                                        Margin=\"3 0 0 0\"\n                                        Style=\"{StaticResource KhCheckboxStyle}\"\n                                        IsChecked=\"{Binding Active, UpdateSourceTrigger=PropertyChanged}\"/>\n                                </DataTemplate>\n                            </DataGridTemplateColumn.CellTemplate>\n                        </DataGridTemplateColumn>\n                        <DataGridTemplateColumn Width=\"*\">\n                            <DataGridTemplateColumn.CellTemplate>\n                                <DataTemplate>\n                                    <ComboBox\n                                        ItemsSource=\"{Binding Abilities, Mode=OneTime}\"\n                                        SelectedValue=\"{Binding AbilityType, UpdateSourceTrigger=PropertyChanged}\"\n                                        SelectedValuePath=\"Value\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <StackPanel Orientation=\"Horizontal\">\n                                                    <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                                                        Source=\"{Binding Icon}\"/>\n                                                    <TextBlock Text=\"{Binding Name}\" />\n                                                </StackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n                                    </ComboBox>\n                                </DataTemplate>\n                            </DataGridTemplateColumn.CellTemplate>\n                        </DataGridTemplateColumn>\n                    </DataGrid.Columns>\n                </DataGrid>\n            </ScrollViewer>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/PlayerView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayerView.xaml\n    /// </summary>\n    public partial class PlayerView : UserControl\n    {\n        public PlayerView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/PlayersView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.PlayersView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"\n            />\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding PlayerNotVisible}\">\n            <Label Content=\"Select a player to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding PlayerVisible}\">\n            <local:PlayerView DataContext=\"{Binding SelectedItem}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/PlayersView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayersView.xaml\n    /// </summary>\n    public partial class PlayersView : UserControl\n    {\n        public PlayersView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/ProgressView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.ProgressView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"250\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"3\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <DataGrid\n            Grid.Row=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            AutoGenerateColumns=\"False\">\n            <DataGrid.Columns>\n                <DataGridTextColumn\n                    Header=\"World\" Width=\"Auto\"\n                    IsReadOnly=\"True\"\n                    CanUserSort=\"False\"\n                    Binding=\"{Binding World}\"/>\n                <DataGridCheckBoxColumn\n                    Header=\"Done\" Width=\"Auto\"\n                    CanUserSort=\"False\"\n                    Binding=\"{Binding Done}\"/>\n                <DataGridTextColumn\n                    Header=\"Label\" Width=\"*\"\n                    IsReadOnly=\"True\"\n                    CanUserSort=\"False\"\n                    Binding=\"{Binding Label}\"/>\n            </DataGrid.Columns>\n        </DataGrid>\n\n        <Grid Grid.Row=\"2\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"60\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"60\"/>\n            </Grid.ColumnDefinitions>\n            <Image Grid.Column=\"0\" Source=\"{StaticResource Search_16x}\"/>\n            <TextBox Grid.Column=\"2\" Text=\"{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}\"/>\n            <Button Grid.Column=\"4\" Content=\"Set all\" Command=\"{Binding SetAllCommand}\"/>\n            <Button Grid.Column=\"6\" Content=\"Reset all\" Command=\"{Binding ResetAllCommand}\"/>\n        </Grid>\n\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/ProgressView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for ProgressView.xaml\n    /// </summary>\n    public partial class ProgressView : UserControl\n    {\n        public ProgressView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/RoomVisitedView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.RoomVisitedView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"250\" d:DesignWidth=\"200\">\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <TextBlock Grid.Row=\"1\" TextWrapping=\"Wrap\" Margin=\"5\">\n            When a map is visited, the game will show its name rather than a '???'.\n        </TextBlock>\n        \n        <DataGrid\n            Grid.Row=\"0\"\n            ItemsSource=\"{Binding Entries}\"\n            AutoGenerateColumns=\"False\">\n            <DataGrid.Columns>\n                <DataGridTextColumn Binding=\"{Binding Name}\"\n                    Header=\"Map name\" Width=\"*\" CanUserReorder=\"False\"/>\n                <DataGridCheckBoxColumn Binding=\"{Binding Visited}\"\n                    Header=\"Visited\" Width=\"60\" CanUserReorder=\"False\"/>\n            </DataGrid.Columns>\n        </DataGrid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/RoomVisitedView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for RoomFoundView.xaml\n    /// </summary>\n    public partial class RoomVisitedView : UserControl\n    {\n        public RoomVisitedView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/SystemView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.SystemView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"800\" d:DesignWidth=\"450\">\n    <StackPanel>\n        <GroupBox Header=\"Shortcuts\">\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Circle\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding ShortcutItems}\"\n                    SelectedValue=\"{Binding ShortcutCircle}\"\n                    SelectedValuePath=\"Value\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                                <TextBlock Text=\"{Binding Name}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n                </ComboBox>\n                <TextBlock Text=\"Triangle\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding ShortcutItems}\"\n                    SelectedValue=\"{Binding ShortcutTriangle}\"\n                    SelectedValuePath=\"Value\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                                <TextBlock Text=\"{Binding Name}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n                </ComboBox>\n                <TextBlock Text=\"Square\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding ShortcutItems}\"\n                    SelectedValue=\"{Binding ShortcutSquare}\"\n                    SelectedValuePath=\"Value\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                                <TextBlock Text=\"{Binding Name}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n                </ComboBox>\n                <TextBlock Text=\"Cross\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding ShortcutItems}\"\n                    SelectedValue=\"{Binding ShortcutCross}\"\n                    SelectedValuePath=\"Value\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                                <TextBlock Text=\"{Binding Name}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n                </ComboBox>\n            </common:TwoEqualColumnsStackPanel>\n        </GroupBox>\n        <GroupBox Header=\"Misc\">\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Difficulty\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Difficulty}\"\n                    SelectedValue=\"{Binding Difficulty.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n\n                <TextBlock Text=\"Munnies\"/>\n                <TextBox Text=\"{Binding Munny, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Total experience\"/>\n                <TextBox Text=\"{Binding Experience, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Bonus level\"/>\n                <TextBox Text=\"{Binding BonusLevel, UpdateSourceTrigger=PropertyChanged}\"/>\n            </common:TwoEqualColumnsStackPanel>\n        </GroupBox>\n        <GroupBox Header=\"Room modifier\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"2*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"2*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"World\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"Room\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"4\" Text=\"Spawn location\"/>\n\n                <ComboBox Grid.Row=\"1\" Grid.Column=\"0\"\n                    ItemsSource=\"{Binding Worlds}\"\n                    SelectedValue=\"{Binding WorldId}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <ComboBox Grid.Row=\"1\" Grid.Column=\"2\"\n                    ItemsSource=\"{Binding Rooms}\"\n                    SelectedValue=\"{Binding RoomId}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBox Grid.Row=\"1\" Grid.Column=\"4\"\n                    Text=\"{Binding SpawnId, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </GroupBox>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/SystemView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for SystemView.xaml\n    /// </summary>\n    public partial class SystemView : UserControl\n    {\n        public SystemView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/WorldView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.WorldView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\" xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"300\">\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n        <GroupBox Header=\"Party members\">\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Character 1\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Pc0}\"\n                    SelectedValue=\"{Binding Pc0.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBlock Text=\"Character 2\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Pc1}\"\n                    SelectedValue=\"{Binding Pc1.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBlock Text=\"Character 3\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Pc2}\"\n                    SelectedValue=\"{Binding Pc2.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBlock Text=\"Character 4\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Pc3}\"\n                    SelectedValue=\"{Binding Pc3.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </common:TwoEqualColumnsStackPanel>\n        </GroupBox>\n\n        <DataGrid\n            Margin=\"0 5 10 5\"\n            Grid.Row=\"1\"\n            Grid.Column=\"2\"\n            AutoGenerateColumns=\"False\"\n            IsReadOnly=\"False\"\n            ItemsSource=\"{Binding Scripts}\">\n            <DataGrid.Columns>\n                <DataGridTextColumn\n                    Header=\"Name\"\n                    Width=\"*\"\n                    IsReadOnly=\"True\"\n                    Binding=\"{Binding Name, Mode=OneWay}\"/>\n                <DataGridTextColumn\n                    Header=\"Map\"\n                    Width=\"*\"\n                    IsReadOnly=\"False\"\n                    Binding=\"{Binding Map, UpdateSourceTrigger=PropertyChanged}\"/>\n                <DataGridTextColumn\n                    Header=\"Battle\"\n                    Width=\"*\"\n                    IsReadOnly=\"False\"\n                    Binding=\"{Binding Battle, UpdateSourceTrigger=PropertyChanged}\"/>\n                <DataGridTextColumn\n                    Header=\"Event\"\n                    Width=\"*\"\n                    IsReadOnly=\"False\"\n                    Binding=\"{Binding Event, UpdateSourceTrigger=PropertyChanged}\"/>\n            </DataGrid.Columns>\n        </DataGrid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/WorldView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for WorldView.xaml\n    /// </summary>\n    public partial class WorldView : UserControl\n    {\n        public WorldView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/WorldsView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Kh2.Views.WorldsView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh2.Views\"\n             mc:Ignorable=\"d\"\n             d:DesignHeight=\"450\" d:DesignWidth=\"300\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"\n            />\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding NotVisible}\">\n            <Label Content=\"Select a world to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding Visible}\">\n            <local:WorldView DataContext=\"{Binding SelectedItem}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh2/Views/WorldsView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Kh2.Views\n{\n    /// <summary>\n    /// Interaction logic for WorldsView.xaml\n    /// </summary>\n    public partial class WorldsView : UserControl\n    {\n        public WorldsView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/KHSave.SaveEditor.Kh3.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.Lib3\\KHSave.Lib3.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/KHSave.SaveEditor.Kh3_kwhjhtac_wpftmp.csproj",
    "content": "<Project>\n  <PropertyGroup>\n    <AssemblyName>KHSave.SaveEditor.Kh3</AssemblyName>\n    <IntermediateOutputPath>obj\\Release\\</IntermediateOutputPath>\n    <BaseIntermediateOutputPath>obj\\</BaseIntermediateOutputPath>\n    <MSBuildProjectExtensionsPath>D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\</MSBuildProjectExtensionsPath>\n    <_TargetAssemblyProjectName>KHSave.SaveEditor.Kh3</_TargetAssemblyProjectName>\n  </PropertyGroup>\n  <Import Project=\"Sdk.props\" Sdk=\"Microsoft.NET.Sdk\" />\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.Lib3\\KHSave.Lib3.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\Accessibility.dll\" />\n    <ReferencePath Include=\"C:\\Users\\Xeeyn\\.nuget\\packages\\crc32.net\\1.2.0\\lib\\netstandard2.0\\Crc32.NET.dll\" />\n    <ReferencePath Include=\"C:\\Users\\Xeeyn\\.nuget\\packages\\sharpziplib\\1.3.3\\lib\\netstandard2.1\\ICSharpCode.SharpZipLib.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.Archives\\bin\\Release\\net6\\KHSave.Archives.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave\\bin\\Release\\net6\\KHSave.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.Lib3\\bin\\Release\\net6\\KHSave.Lib3.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Common\\bin\\Release\\net6-windows\\KHSave.SaveEditor.Common.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\Microsoft.CSharp.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\Microsoft.VisualBasic.Core.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\Microsoft.VisualBasic.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\Microsoft.VisualBasic.Forms.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\Microsoft.Win32.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\Microsoft.Win32.Registry.AccessControl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\Microsoft.Win32.Registry.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\Microsoft.Win32.SystemEvents.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\mscorlib.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\netstandard.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationCore.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.Aero.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.Aero2.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.AeroLite.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.Classic.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.Luna.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationFramework.Royale.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\PresentationUI.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\ReachFramework.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.AppContext.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Buffers.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.CodeDom.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Collections.Concurrent.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Collections.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Collections.Immutable.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Collections.NonGeneric.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Collections.Specialized.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.Annotations.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.DataAnnotations.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.EventBasedAsync.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ComponentModel.TypeConverter.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Configuration.ConfigurationManager.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Configuration.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Console.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Core.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Data.Common.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Data.DataSetExtensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Data.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Design.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.Contracts.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.Debug.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.DiagnosticSource.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Diagnostics.EventLog.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.FileVersionInfo.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Diagnostics.PerformanceCounter.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.Process.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.StackTrace.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.TextWriterTraceListener.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.Tools.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.TraceSource.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Diagnostics.Tracing.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.DirectoryServices.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Drawing.Common.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Drawing.Design.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Drawing.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Drawing.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Dynamic.Runtime.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Formats.Asn1.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Globalization.Calendars.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Globalization.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Globalization.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Compression.Brotli.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Compression.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Compression.FileSystem.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Compression.ZipFile.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.FileSystem.AccessControl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.FileSystem.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.FileSystem.DriveInfo.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.FileSystem.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.FileSystem.Watcher.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.IsolatedStorage.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.MemoryMappedFiles.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.IO.Packaging.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Pipes.AccessControl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.Pipes.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.IO.UnmanagedMemoryStream.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Linq.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Linq.Expressions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Linq.Parallel.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Linq.Queryable.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Memory.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Http.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Http.Json.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.HttpListener.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Mail.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.NameResolution.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.NetworkInformation.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Ping.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Requests.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Security.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.ServicePoint.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.Sockets.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.WebClient.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.WebHeaderCollection.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.WebProxy.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.WebSockets.Client.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Net.WebSockets.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Numerics.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Numerics.Vectors.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ObjectModel.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Printing.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.DispatchProxy.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Emit.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Emit.ILGeneration.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Emit.Lightweight.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Metadata.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Reflection.TypeExtensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Resources.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Resources.Reader.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Resources.ResourceManager.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Resources.Writer.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.CompilerServices.Unsafe.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.CompilerServices.VisualC.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Handles.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.InteropServices.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.InteropServices.RuntimeInformation.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Intrinsics.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Loader.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Numerics.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Serialization.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Serialization.Formatters.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Serialization.Json.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Serialization.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Runtime.Serialization.Xml.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.AccessControl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Claims.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.Algorithms.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.Cng.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.Csp.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.Encoding.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.OpenSsl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Security.Cryptography.Pkcs.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Security.Cryptography.ProtectedData.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Cryptography.X509Certificates.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Security.Cryptography.Xml.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Security.Permissions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Principal.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.Principal.Windows.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Security.SecureString.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ServiceModel.Web.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ServiceProcess.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.Encoding.CodePages.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.Encoding.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.Encoding.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.Encodings.Web.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.Json.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Text.RegularExpressions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Threading.AccessControl.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Channels.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Overlapped.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Tasks.Dataflow.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Tasks.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Tasks.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Tasks.Parallel.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Thread.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.ThreadPool.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Threading.Timer.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Transactions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Transactions.Local.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.ValueTuple.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Web.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Web.HttpUtility.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Controls.Ribbon.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Windows.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Extensions.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Forms.Design.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Forms.Design.Editors.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Forms.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Forms.Primitives.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Input.Manipulations.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Windows.Presentation.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\System.Xaml.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.Linq.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.ReaderWriter.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.Serialization.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.XDocument.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.XmlDocument.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.XmlSerializer.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.XPath.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.NETCore.App.Ref\\6.0.1\\ref\\net6.0\\System.Xml.XPath.XDocument.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\UIAutomationClient.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\UIAutomationClientSideProviders.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\UIAutomationProvider.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\UIAutomationTypes.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\WindowsBase.dll\" />\n    <ReferencePath Include=\"C:\\Program Files\\dotnet\\packs\\Microsoft.WindowsDesktop.App.Ref\\6.0.0\\ref\\net6.0\\WindowsFormsIntegration.dll\" />\n    <ReferencePath Include=\"C:\\Users\\Xeeyn\\.nuget\\packages\\xe.binarymapper\\1.5.2\\lib\\netstandard2.0\\Xe.BinaryMapper.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\XeEngine.Tools.Public\\Xe\\bin\\Release\\netstandard2.0\\Xe.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\XeEngine.Tools.Public\\Xe.Drawing\\bin\\Release\\netstandard2.0\\Xe.Drawing.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\XeEngine.Tools.Public\\Xe.Tools\\bin\\Release\\netstandard2.0\\Xe.Tools.dll\" />\n    <ReferencePath Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\bin\\Release\\netcoreapp3.1\\Xe.Tools.Wpf.dll\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\MainView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\EquipmentItemEntryView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\EquipmentItemsView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\InventoryView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\MaterialsView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\PartyView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\PhotosView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\PlayerAbilityView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\PlayerEquipmentView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\PlayerStatusView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\PlayersView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\PlayerView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\RecordMinigamesView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\RecordsView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\ShortcutsView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\StoryView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\Views\\SystemView.g.cs\" />\n    <Compile Include=\"D:\\repo\\xeeynamo\\KH3SaveEditor\\KHSave.SaveEditor.Kh3\\obj\\Release\\net6-windows\\GeneratedInternalTypeHelper.g.cs\" />\n  </ItemGroup>\n  <Import Project=\"Sdk.targets\" Sdk=\"Microsoft.NET.Sdk\" />\n</Project>"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/MainView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.MainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3\"\n             xmlns:views=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"350\" d:DesignWidth=\"400\">\n    <TabControl>\n        <TabItem Header=\"System\">\n            <views:SystemView\n                    Grid.Row=\"1\"\n                    DataContext=\"{Binding KhSystem}\"/>\n        </TabItem>\n        <TabItem Header=\"Inventory\">\n            <views:InventoryView\n                    Grid.Row=\"1\"\n                    DataContext=\"{Binding Inventory}\"/>\n        </TabItem>\n        <TabItem Header=\"Materials\">\n            <views:MaterialsView\n                    Grid.Row=\"1\"\n                    DataContext=\"{Binding Materials}\"/>\n        </TabItem>\n        <TabItem Header=\"Characters\">\n            <views:PlayersView\n                    Grid.Row=\"1\"\n                    DataContext=\"{Binding Players}\"/>\n        </TabItem>\n        <TabItem Header=\"Party\">\n            <views:PartyView\n                    Grid.Row=\"1\"\n                    DataContext=\"{Binding Party}\"/>\n        </TabItem>\n        <TabItem Header=\"Story\">\n            <views:StoryView\n                    Grid.Row=\"1\"\n                    DataContext=\"{Binding Story}\"/>\n        </TabItem>\n        <TabItem Header=\"Shortcuts\">\n            <views:ShortcutsView\n                    Grid.Row=\"1\"\n                    DataContext=\"{Binding Shortcuts}\"/>\n        </TabItem>\n        <TabItem Header=\"Records\">\n            <views:RecordsView\n                    Grid.Row=\"1\"\n                    DataContext=\"{Binding Records}\"/>\n        </TabItem>\n        <TabItem Header=\"Photos\">\n            <views:PhotosView\n                    Grid.Row=\"1\"\n                    DataContext=\"{Binding Photos}\"/>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/MainView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3\n{\n    /// <summary>\n    /// Interaction logic for MainView.xaml\n    /// </summary>\n    public partial class MainView : UserControl\n    {\n        public MainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Models/AttractionRecordItemModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections.Generic;\nusing KHSave.Attributes;\n\nnamespace KHSave.SaveEditor.Kh3.Models\n{\n    public class AttractionRecordItemModel<T>\n        where T : struct, IConvertible\n    {\n        private readonly List<short> itemsTotalUses;\n        private readonly List<int> itemsScore;\n        private readonly int index;\n\n        public AttractionRecordItemModel(List<short> itemsTotalUses, List<int> itemsScore, int index)\n        {\n            this.itemsTotalUses = itemsTotalUses;\n            this.itemsScore = itemsScore;\n            this.index = index;\n        }\n\n        public string Name => InfoAttribute.GetInfo((T)(object)index);\n\n        public int HighScore\n        {\n            get => itemsScore[index];\n            set => itemsScore[index] = value;\n        }\n\n        public short TotalUses\n        {\n            get => itemsTotalUses[index];\n            set => itemsTotalUses[index] = value;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Models/EquipmentItemEntryViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib3.Models;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.Lib3.Types;\nusing System;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Kh3.Models\n{\n    public class EquipmentItemEntryViewModel<T> : BaseNotifyPropertyChanged\n        where T : struct, IConvertible\n    {\n        public EquipmentItem Item { get; }\n\n        public bool Enabled\n        {\n            get => Item.Enabled != 0;\n            set\n            {\n                Item.Enabled = (byte)(value ? 1 : 0);\n                OnPropertyChanged();\n            }\n        }\n\n        public KhEnumListModel<EnumIconTypeModel<T>, T> ValueSet { get; }\n\n        public KhEnumListModel<EnumIconTypeModel<ItemType>, ItemType> ItemType { get; }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public EquipmentItemEntryViewModel(EquipmentItem item)\n        {\n            Item = item;\n            ValueSet = new KhEnumListModel<EnumIconTypeModel<T>, T>(\n                () => (T)(object)item.Id,\n                x => item.Id = (byte)(object)x);\n            ItemType = new KhEnumListModel<EnumIconTypeModel<ItemType>, ItemType>(\n                () => item.ItemType,\n                x => item.ItemType = x);\n        }\n    }\n\n    public class EquipmentItemEntryViewModel : BaseNotifyPropertyChanged\n    {\n        public EquipmentItem Item { get; }\n\n        public bool Enabled\n        {\n            get => Item.Enabled != 0;\n            set\n            {\n                Item.Enabled = (byte)(value ? 1 : 0);\n                OnPropertyChanged();\n            }\n        }\n\n        public object ValueSet { get; private set; }\n\n        public KhEnumListModel<EnumIconTypeModel<ItemType>, ItemType> ItemType { get; }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public EquipmentItemEntryViewModel(EquipmentItem item)\n        {\n            Item = item;\n            ItemType = new KhEnumListModel<EnumIconTypeModel<ItemType>, ItemType>(\n                () => item.ItemType,\n                x => DisplayItemType(item.ItemType = x));\n\n            DisplayItemType(item.ItemType);\n        }\n\n        public void DisplayItemType(ItemType itemType)\n        {\n            switch (itemType)\n            {\n                case KHSave.Lib3.Types.ItemType.Consumable:\n                case KHSave.Lib3.Types.ItemType.ConsumableMirrored:\n                    ValueSet = NewList<ConsumableType>();\n                    break;\n                case KHSave.Lib3.Types.ItemType.Tent:\n                    ValueSet = NewList<TentType>();\n                    break;\n                case KHSave.Lib3.Types.ItemType.Weapon:\n                    ValueSet = NewList<WeaponType>();\n                    break;\n                case KHSave.Lib3.Types.ItemType.Armor:\n                    ValueSet = NewList<ArmorType>();\n                    break;\n                case KHSave.Lib3.Types.ItemType.Accessory:\n                    ValueSet = NewList<AccessoryType>();\n                    break;\n                case KHSave.Lib3.Types.ItemType.Snack:\n                    ValueSet = NewList<SnackType>();\n                    break;\n                case KHSave.Lib3.Types.ItemType.Synthesis:\n                    ValueSet = NewList<SynthesisType>();\n                    break;\n                case KHSave.Lib3.Types.ItemType.Food:\n                    ValueSet = NewList<FoodType>();\n                    break;\n                case KHSave.Lib3.Types.ItemType.KeyItem:\n                    ValueSet = NewList<KeyItemType>();\n                    break;\n                default:\n                    ValueSet = null;\n                    break;\n            }\n\n            OnPropertyChanged(nameof(ValueSet));\n        }\n\n        private object NewList<T>()\n        where T : struct, IConvertible\n        {\n            return new KhEnumListModel<EnumIconTypeModel<T>, T>(\n                () => (T)(object)Item.Id,\n                x => Item.Id = (byte)(object)x);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Models/FlantasticModel.cs",
    "content": "using KHSave.Lib3.Models;\n\nnamespace KHSave.SaveEditor.Kh3.Models\n{\n    public class FlantasticModel\n    {\n        private readonly FlantasticRecord flantasticRecord;\n\n        public FlantasticModel(string name, FlantasticRecord flantasticRecord)\n        {\n            Name = name;\n            this.flantasticRecord = flantasticRecord;\n        }\n\n        public string Name { get; }\n\n        public int HighScore\n        {\n            get => flantasticRecord.HighScore;\n            set => flantasticRecord.HighScore = flantasticRecord.HighScore2 = value;\n        }\n\n        public int AttemptCount\n        {\n            get => flantasticRecord.AttemptCount;\n            set => flantasticRecord.AttemptCount = value;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Models/InventoryItemViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing KHSave.Attributes;\nusing KHSave.Lib3.Models;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.Lib3.Types;\nusing KHSave.SaveEditor.Common.Services;\n\nnamespace KHSave.SaveEditor.Kh3.Models\n{\n    public class InventoryItemViewModel :\n        EnumIconTypeModel<InventoryType>,\n        SearchEngine.IName, SearchEngine.ICount\n    {\n        private readonly InventoryEntry inventoryEntry;\n        private bool isSelected;\n\n        public InventoryItemViewModel(InventoryEntry inventoryEntry, int index)\n        {\n            this.inventoryEntry = inventoryEntry;\n            Value = (InventoryType)index;\n        }\n\n        public bool IsSelected\n        {\n            get => isSelected;\n            set\n            {\n                isSelected = value;\n                OnPropertyChanged();\n            }\n        }\n\n        public override string Name => InfoAttribute.GetInfo(Value);\n\n        public int Count\n        {\n            get => inventoryEntry.Count;\n            set\n            {\n                inventoryEntry.Count = (byte)Math.Min(byte.MaxValue, Math.Max(byte.MinValue, value));\n                OnPropertyChanged(nameof(Count));\n            }\n        }\n\n        public bool Obtained { get => inventoryEntry.Obtained; set => inventoryEntry.Obtained = value; }\n        public bool Unseen { get => inventoryEntry.Unseen; set => inventoryEntry.Unseen = value; }\n        public bool ShopVisible\n        {\n            get => inventoryEntry.ShopFlag1 | inventoryEntry.ShopFlag2;\n            set\n            {\n                inventoryEntry.ShopFlag1 = inventoryEntry.ShopFlag2 = value;\n                OnPropertyChanged(nameof(ShopSeen));\n                OnPropertyChanged(nameof(Flag3));\n            }\n        }\n        public bool ShopSeen\n        {\n            get => inventoryEntry.ShopFlag1; set\n            {\n                inventoryEntry.ShopFlag1 = value;\n                OnPropertyChanged(nameof(ShopVisible));\n            }\n        }\n        public bool Flag3\n        {\n            get => inventoryEntry.ShopFlag2; set\n            {\n                inventoryEntry.ShopFlag2 = value;\n                OnPropertyChanged(nameof(ShopVisible));\n            }\n        }\n        public bool Flag4 { get => inventoryEntry.Flag4; set => inventoryEntry.Flag4 = value; }\n        public bool Flag5 { get => inventoryEntry.Flag5; set => inventoryEntry.Flag5 = value; }\n        public bool Flag6 { get => inventoryEntry.Flag6; set => inventoryEntry.Flag6 = value; }\n        public bool Flag7 { get => inventoryEntry.Flag7; set => inventoryEntry.Flag7 = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Models/MapViewModel.cs",
    "content": "namespace KHSave.SaveEditor.Kh3.Models\n{\n    public class MapViewModel\n    {\n        private readonly string mapPath;\n        private readonly Lib3.Presets.Presets.Map map;\n\n        public MapViewModel(string id, Lib3.Presets.Presets.Map map)\n        {\n            this.mapPath = id;\n            this.map = map;\n            if (string.IsNullOrEmpty(map.Name))\n                Description = id;\n            else\n                Description = $\"{id} | {map.Name}\";\n        }\n\n        public string Description { get; }\n\n        public string Value => mapPath;\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Models/MaterialModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing KHSave.Lib3;\nusing KHSave.Lib3.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing System;\n\nnamespace KHSave.SaveEditor.Kh3.Models\n{\n    public class MaterialModel : EnumIconTypeModel<MaterialType>\n    {\n        private readonly ISaveKh3 save;\n        private readonly int index;\n\n        public MaterialModel(ISaveKh3 save, int index)\n        {\n            this.save = save;\n            this.index = index;\n        }\n\n        public MaterialType MaterialType => (MaterialType)index;\n\n        public override string Name => InfoAttribute.GetInfo(MaterialType);\n        public int Count\n        {\n            get => save.MaterialsCount[index];\n            set\n            {\n                save.MaterialsCount[index] = (short)Math.Min(short.MaxValue, Math.Max(0, value));\n                OnPropertyChanged(nameof(Count));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Models/RecordAttractionListModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh3.Models\n{\n    public class RecordAttractionListModel<T> :\n        GenericListModel<AttractionRecordItemModel<T>>,\n        IEnumerable<AttractionRecordItemModel<T>>\n        where T : struct, IConvertible\n    {\n        public RecordAttractionListModel(List<short> list1, List<int> list2)\n            : base(list1.Select((x, i) => new AttractionRecordItemModel<T>(list1, list2, i)))\n        {\n        }\n\n        public RecordAttractionListModel(IEnumerable<AttractionRecordItemModel<T>> list)\n            : base(list)\n        {\n        }\n\n        public IEnumerator<AttractionRecordItemModel<T>> GetEnumerator()\n        {\n            return Items.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return Items.GetEnumerator();\n        }\n\n        protected override AttractionRecordItemModel<T> OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Models/RecordShotlockListModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh3.Models\n{\n    public class RecordShotlockListModel<T> :\n        GenericListModel<ShotlockRecordItemModel<T>>,\n        IEnumerable<ShotlockRecordItemModel<T>>\n        where T : struct, IConvertible\n    {\n        public RecordShotlockListModel(List<short> list1, List<short> list2)\n            : base(list1.Select((x, i) => new ShotlockRecordItemModel<T>(list1, list2, i)))\n        {\n        }\n\n        public RecordShotlockListModel(IEnumerable<ShotlockRecordItemModel<T>> list)\n            : base(list)\n        {\n        }\n\n        public IEnumerator<ShotlockRecordItemModel<T>> GetEnumerator()\n        {\n            return Items.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return Items.GetEnumerator();\n        }\n\n        protected override ShotlockRecordItemModel<T> OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Models/ShotlockRecordItemModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections.Generic;\nusing KHSave.Attributes;\n\nnamespace KHSave.SaveEditor.Kh3.Models\n{\n    public class ShotlockRecordItemModel<T>\n        where T : struct, IConvertible\n    {\n        private readonly List<short> itemsTotalUses;\n        private readonly List<short> itemsScore;\n        private readonly int index;\n\n        public ShotlockRecordItemModel(List<short> itemsTotalUses, List<short> itemsScore, int index)\n        {\n            this.itemsTotalUses = itemsTotalUses;\n            this.itemsScore = itemsScore;\n            this.index = index;\n        }\n\n        public string Name => InfoAttribute.GetInfo((T)(object)index);\n\n        public short HighScore\n        {\n            get => itemsScore[index];\n            set => itemsScore[index] = value;\n        }\n\n        public short TotalUses\n        {\n            get => itemsTotalUses[index];\n            set => itemsTotalUses[index] = value;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Models/SpawnModel.cs",
    "content": "namespace KHSave.SaveEditor.Kh3.Models\n{\n    public class SpawnModel\n    {\n        public string Name { get; set; }\n        public string Value { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/AbilitiesViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing KHSave.Attributes;\nusing KHSave.Lib3.Models;\nusing KHSave.Lib3.Types;\nusing Xe.Tools.Wpf.Models;\nusing KHSave.SaveEditor.Common.Models;\nusing System.Windows;\nusing KHSave.SaveEditor.Common;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class AbilitiesViewModel : GenericListModel<AbilityEntryViewModel>\n    {\n        public AbilitiesViewModel(IEnumerable<Ability> list)\n            : this(list\n                  .Select((x, i) => new AbilityEntryViewModel(x, i))\n                  .Where(x => Global.CanDisplay(x.Value)))\n        { }\n\n        public AbilitiesViewModel(IEnumerable<AbilityEntryViewModel> list)\n            : base(list)\n        {\n\n        }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n        protected override AbilityEntryViewModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n\n    public class AbilityEntryViewModel : EnumIconTypeModel<AbilityType>\n    {\n        private readonly Ability ability;\n\n        public AbilityEntryViewModel(Ability ability, int index)\n        {\n            this.ability = ability;\n            Value = (AbilityType)index;\n        }\n\n        public override string Name => InfoAttribute.GetInfo(Value);\n\n        public string Raw\n        {\n            get => $\"{ability.Data:X07}\";\n            set\n            {\n                if (!int.TryParse(value, System.Globalization.NumberStyles.HexNumber, null, out var newVaule))\n                    return;\n\n                ability.Data = newVaule;\n                OnPropertyChanged(nameof(Unlocked));\n                OnPropertyChanged(nameof(Active));\n                OnPropertyChanged(nameof(Unseen));\n                OnPropertyChanged(nameof(Duplicate));\n            }\n        }\n\n        public bool Unlocked { get => ability.Unlocked; set { ability.Unlocked = value; OnPropertyChanged(nameof(Raw)); } }\n        public bool Active { get => ability.Enabled; set { ability.Enabled = value; OnPropertyChanged(nameof(Raw)); } }\n        public bool Unseen { get => ability.Unseen; set { ability.Unseen = value; OnPropertyChanged(nameof(Raw)); } }\n        public bool Duplicate { get => ability.Flag3; set { ability.Flag3 = value; OnPropertyChanged(nameof(Raw)); } }\n\n        public override string ToString()\n        {\n            return Name;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/EquipmentItemsViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections.Generic;\nusing KHSave.Lib3.Models;\nusing KHSave.SaveEditor.Kh3.Models;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class EquipmentItemsViewModel<T>\n        where T : struct, IConvertible\n    {\n        public EquipmentItemEntryViewModel<T> Item1 { get; }\n        public EquipmentItemEntryViewModel<T> Item2 { get; }\n        public EquipmentItemEntryViewModel<T> Item3 { get; }\n        public EquipmentItemEntryViewModel<T> Item4 { get; }\n        public EquipmentItemEntryViewModel<T> Item5 { get; }\n        public EquipmentItemEntryViewModel<T> Item6 { get; }\n        public EquipmentItemEntryViewModel<T> Item7 { get; }\n        public EquipmentItemEntryViewModel<T> Item8 { get; }\n\n        public EquipmentItemsViewModel(IReadOnlyList<EquipmentItem> items)\n        {\n            Item1 = new EquipmentItemEntryViewModel<T>(items[0]);\n            Item2 = new EquipmentItemEntryViewModel<T>(items[1]);\n            Item3 = new EquipmentItemEntryViewModel<T>(items[2]);\n            Item4 = new EquipmentItemEntryViewModel<T>(items[3]);\n            Item5 = new EquipmentItemEntryViewModel<T>(items[4]);\n            Item6 = new EquipmentItemEntryViewModel<T>(items[5]);\n            Item7 = new EquipmentItemEntryViewModel<T>(items[6]);\n            Item8 = new EquipmentItemEntryViewModel<T>(items[7]);\n        }\n    }\n\n    public class EquipmentItemsViewModel\n    {\n        public EquipmentItemEntryViewModel Item1 { get; }\n        public EquipmentItemEntryViewModel Item2 { get; }\n        public EquipmentItemEntryViewModel Item3 { get; }\n        public EquipmentItemEntryViewModel Item4 { get; }\n        public EquipmentItemEntryViewModel Item5 { get; }\n        public EquipmentItemEntryViewModel Item6 { get; }\n        public EquipmentItemEntryViewModel Item7 { get; }\n        public EquipmentItemEntryViewModel Item8 { get; }\n\n        public EquipmentItemsViewModel(IReadOnlyList<EquipmentItem> items)\n        {\n            Item1 = new EquipmentItemEntryViewModel(items[0]);\n            Item2 = new EquipmentItemEntryViewModel(items[1]);\n            Item3 = new EquipmentItemEntryViewModel(items[2]);\n            Item4 = new EquipmentItemEntryViewModel(items[3]);\n            Item5 = new EquipmentItemEntryViewModel(items[4]);\n            Item6 = new EquipmentItemEntryViewModel(items[5]);\n            Item7 = new EquipmentItemEntryViewModel(items[6]);\n            Item8 = new EquipmentItemEntryViewModel(items[7]);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/InventoryViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing KHSave.Lib3.Models;\nusing Xe.Tools.Wpf.Commands;\nusing Xe.Tools.Wpf.Models;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Kh3.Models;\nusing System;\nusing KHSave.SaveEditor.Common.Services;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class InventoryViewModel : GenericListModel<InventoryItemViewModel>\n    {\n        private string searchTerm;\n\n        public RelayCommand SelectAllCommand { get; }\n        public RelayCommand Research0Command { get; }\n        public RelayCommand Research1Command { get; }\n        public RelayCommand Research2Command { get; }\n        public RelayCommand Research3Command { get; }\n        public RelayCommand Research4Command { get; }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public string SearchTerm\n        {\n            get => searchTerm;\n            set\n            {\n                searchTerm = value;\n                Filter(items => SearchEngine.Filter(searchTerm, items, FilterByFlag));\n            }\n        }\n\n        public IEnumerable<InventoryItemViewModel> SelectedItems => Items.Where(x => x.IsSelected);\n\n        public InventoryViewModel(IEnumerable<InventoryEntry> list) :\n            this(list.Select((item, index) => new InventoryItemViewModel(item, index)))\n        { }\n\n        public InventoryViewModel(IEnumerable<InventoryItemViewModel> list) :\n            base(list.Where(x => Global.CanDisplay(x.Value)))\n        {\n            Research0Command = new RelayCommand(o => DoResearch(500), x => true);\n            Research1Command = new RelayCommand(o => DoResearch(600), x => true);\n            Research2Command = new RelayCommand(o => DoResearch(700), x => true);\n            Research3Command = new RelayCommand(o => DoResearch(800), x => true);\n            Research4Command = new RelayCommand(o => DoResearch(900), x => true);\n\n            SelectAllCommand = new RelayCommand(o =>\n            {\n                foreach (var item in Items)\n                    item.IsSelected = true;\n            }, x => true);\n        }\n\n        public int? SelectedItemCount\n        {\n            get => GetForAll(SelectedItems, x => x.Count, out var count) ? count : (int?)null;\n            set => SetForAll(SelectedItems, (x, v) => x.Count = v ?? 0, value);\n        }\n\n        public bool? SelectedItemFlagObtained\n        {\n            get => GetForAll(SelectedItems, x => x.Obtained, out var flag) ? flag : (bool?)null;\n            set => SetForAll(SelectedItems, (x, v) => x.Obtained = v ?? false, value);\n        }\n\n        public bool? SelectedItemFlagUnseen\n        {\n            get => GetForAll(SelectedItems, x => x.Unseen, out var flag) ? flag : (bool?)null;\n            set => SetForAll(SelectedItems, (x, v) => x.Unseen = v ?? false, value);\n        }\n\n        public bool? SelectedItemFlagShop\n        {\n            get => GetForAll(SelectedItems, x => x.ShopVisible, out var flag) ? flag : (bool?)null;\n            set\n            {\n                SetForAll(SelectedItems, (x, v) => x.ShopVisible = v ?? false, value);\n                OnPropertyChanged(nameof(SelectedItemFlag2));\n                OnPropertyChanged(nameof(SelectedItemFlag3));\n            }\n        }\n\n        public bool? SelectedItemFlag2\n        {\n            get => GetForAll(SelectedItems, x => x.ShopSeen, out var flag) ? flag : (bool?)null;\n            set\n            {\n                SetForAll(SelectedItems, (x, v) => x.ShopSeen = v ?? false, value);\n                OnPropertyChanged(nameof(SelectedItemFlagShop));\n            }\n        }\n\n        public bool? SelectedItemFlag3\n        {\n            get => GetForAll(SelectedItems, x => x.Flag3, out var flag) ? flag : (bool?)null;\n            set\n            {\n                SetForAll(SelectedItems, (x, v) => x.Flag3 = v ?? false, value);\n                OnPropertyChanged(nameof(SelectedItemFlagShop));\n            }\n        }\n\n        public bool? SelectedItemFlag4\n        {\n            get => GetForAll(SelectedItems, x => x.Flag4, out var flag) ? flag : (bool?)null;\n            set => SetForAll(SelectedItems, (x, v) => x.Flag4 = v ?? false, value);\n        }\n\n        public bool? SelectedItemFlag5\n        {\n            get => GetForAll(SelectedItems, x => x.Flag5, out var flag) ? flag : (bool?)null;\n            set => SetForAll(SelectedItems, (x, v) => x.Flag5 = v ?? false, value);\n        }\n\n        public bool? SelectedItemFlag6\n        {\n            get => GetForAll(SelectedItems, x => x.Flag6, out var flag) ? flag : (bool?)null;\n            set => SetForAll(SelectedItems, (x, v) => x.Flag6 = v ?? false, value);\n        }\n\n        public bool? SelectedItemFlag7\n        {\n            get => GetForAll(SelectedItems, x => x.Flag7, out var flag) ? flag : (bool?)null;\n            set => SetForAll(SelectedItems, (x, v) => x.Flag7 = v ?? false, value);\n        }\n\n        public void ChangeSelectedItems()\n        {\n            OnPropertyChanged(nameof(SelectedItemCount));\n            OnPropertyChanged(nameof(SelectedItemFlagObtained));\n            OnPropertyChanged(nameof(SelectedItemFlagUnseen));\n            OnPropertyChanged(nameof(SelectedItemFlagShop));\n            OnPropertyChanged(nameof(SelectedItemFlag2));\n            OnPropertyChanged(nameof(SelectedItemFlag3));\n            OnPropertyChanged(nameof(SelectedItemFlag4));\n            OnPropertyChanged(nameof(SelectedItemFlag5));\n            OnPropertyChanged(nameof(SelectedItemFlag6));\n            OnPropertyChanged(nameof(SelectedItemFlag7));\n        }\n\n        private void DoResearch(int startIndex, int count = 100)\n        {\n            for (var i = 0; i < count; i++)\n            {\n                Items[startIndex + i].Count = i + 1;\n            }\n        }\n\n        private static bool GetForAll<TModel, TValue>(IEnumerable<TModel> items, Func<TModel, TValue> getter, out TValue value)\n        {\n            if (!(items is List<TModel> list)) // speed hack\n                list = items.ToList();\n\n            if (list.Count == 0)\n            {\n                value = default(TValue);\n                return false;\n            }\n\n            value = getter(list[0]);\n\n            if (list.Count == 1)\n                return true;\n\n            var myValue = value;\n            return list.All(x => getter(x).GetHashCode() == myValue.GetHashCode());\n        }\n\n        private static void SetForAll<TModel, TValue>(IEnumerable<TModel> items, Action<TModel, TValue> setter, TValue value)\n        {\n            foreach (var item in items)\n                setter(item, value);\n        }\n\n        private static bool FilterByFlag(string value, InventoryItemViewModel x)\n        {\n            if (value.Length == 0)\n                return false;\n\n            var expectedValue = value[0] != '!';\n\n            if (ContainsWord(value, \"unseen\"))\n                return x.Unseen == expectedValue;\n            if (ContainsWord(value, \"obtained\"))\n                return x.Obtained == expectedValue;\n            if (ContainsWord(value, \"shop\"))\n                return x.ShopVisible == expectedValue;\n\n            return false;\n        }\n\n        private static bool ContainsWord(string value, string contains) =>\n            contains.IndexOf(value) >= 0 || value.IndexOf(contains) >= 0;\n\n        protected override InventoryItemViewModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/Kh3ViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.IO;\nusing Xe.Tools;\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.Lib3;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class Kh3ViewModel : BaseNotifyPropertyChanged, IRefreshUi, IOpenStream, IWriteToStream\n    {\n        public ISaveKh3 Save { get; private set; }\n\n        public SystemViewModel KhSystem { get; set; }\n        public InventoryViewModel Inventory { get; set; }\n        public MaterialsViewModel Materials { get; set; }\n        public PlayersViewModel Players { get; set; }\n        public PartyViewModel Party { get; set; }\n        public StoryViewModel Story { get; set; }\n        public ShortcutsViewModel Shortcuts { get; set; }\n        public RecordsViewModel Records { get; set; }\n        public PhotosViewModel Photos { get; set; }\n\n        public Kh3ViewModel()\n        {\n        }\n\n        public void RefreshUi()\n        {\n            KhSystem = new SystemViewModel(Save);\n            Inventory = new InventoryViewModel(Save.Inventory);\n            Materials = new MaterialsViewModel(Save);\n            Players = new PlayersViewModel(Save.Pc);\n            Party = new PartyViewModel(Save);\n            Story = new StoryViewModel(Save);\n            Shortcuts = new ShortcutsViewModel(Save);\n            Records = new RecordsViewModel(Save);\n            Photos = new PhotosViewModel(Save.Photos);\n\n            OnPropertyChanged(nameof(KhSystem));\n            OnPropertyChanged(nameof(Inventory));\n            OnPropertyChanged(nameof(Materials));\n            OnPropertyChanged(nameof(Players));\n            OnPropertyChanged(nameof(Party));\n            OnPropertyChanged(nameof(Story));\n            OnPropertyChanged(nameof(Shortcuts));\n            OnPropertyChanged(nameof(Records));\n            OnPropertyChanged(nameof(Photos));\n        }\n\n        public void OpenStream(Stream stream)\n        {\n            Save = SaveKh3.Read(stream);\n            RefreshUi();\n        }\n\n        public void WriteToStream(Stream stream) => Save.Write(stream);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/MaterialsViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib3;\nusing KHSave.Lib3.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Kh3.Models;\nusing System.Linq;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class MaterialsViewModel : GenericListModel<MaterialModel>\n    {\n        public MaterialsViewModel(ISaveKh3 save) :\n            base(save.MaterialsCount\n                .Where((_, i) => Global.CanDisplay((MaterialType)i))\n                .Select((_, i) => new MaterialModel(save, i)))\n        { }\n\n        protected override MaterialModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/PartyViewModel.cs",
    "content": "using KHSave.Lib3;\nusing KHSave.Lib3.Types;\nusing KHSave.SaveEditor.Common.Models;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class PartyViewModel\n    {\n        private readonly ISaveKh3 _save;\n\n        public KhEnumListModel<DesireChoice> DesireChoice { get; }\n        public KhEnumListModel<PowerChoice> PowerChoice { get; }\n        public KhEnumListModel<PartyCharacter> PartyMembers { get; }\n\n        public PartyCharacter PartyMember1 { get => _save.Party[0]; set => _save.Party[0] = value; }\n        public PartyCharacter PartyMember2 { get => _save.Party[1]; set => _save.Party[1] = value; }\n        public PartyCharacter PartyMember3 { get => _save.Party[2]; set => _save.Party[2] = value; }\n        public PartyCharacter PartyMember4 { get => _save.Party[3]; set => _save.Party[3] = value; }\n        public PartyCharacter PartyMember5 { get => _save.Party[4]; set => _save.Party[4] = value; }\n\n        public PartyViewModel(ISaveKh3 save)\n        {\n            _save = save;\n            DesireChoice = new KhEnumListModel<DesireChoice>(() => save.DesireChoice, x => save.DesireChoice = x);\n            PowerChoice = new KhEnumListModel<PowerChoice>(() => save.PowerChoice, x => save.PowerChoice = x);\n            PartyMembers = new KhEnumListModel<PartyCharacter>(() => default(PartyCharacter), x => { });\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/PhotoEntryViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.IO;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing KHSave.SaveEditor.Common.Exceptions;\nusing KHSave.Lib3.Models;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Commands;\nusing Xe.Tools.Wpf.Dialogs;\nusing System.Collections.Generic;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class PhotoEntryViewModel : BaseNotifyPropertyChanged\n    {\n        private static readonly List<FileDialogFilter> Filters = FileDialogFilterComposer.Compose().AddExtensions(\"JPEG image\", \"jpg\");\n        private readonly PhotoEntry _entry;\n\n        private Window Window => Application.Current.Windows.OfType<Window>().FirstOrDefault(x => x.IsActive);\n\n        public int Index { get; }\n\n        public ImageSource Image { get; set; }\n\n        public RelayCommand ExportCommand { get; }\n\n        public RelayCommand ImportCommand { get; }\n\n        public string Description => $\"Photo #{Index}\";\n\n        public PhotoEntryViewModel(PhotoEntry entry, int index)\n        {\n            _entry = entry;\n            Index = index + 1;\n\n            CreateThumbnailImage();\n\n            ExportCommand = new RelayCommand(o =>\n            {\n                FileDialog.OnSave(fileName =>\n                {\n                    try\n                    {\n                        Export(fileName);\n                    }\n                    catch (Exception e)\n                    {\n                        MessageBox.Show(Window, $\"Unable to export the photo due to the following error:\\n{e.Message}\", \"Error\", MessageBoxButton.OK,\n                            MessageBoxImage.Error);\n                    }\n                }, Filters, $\"Kingdom Hearts III - Photo {Index}.jpg\", Window);\n            }, x => true);\n\n            ImportCommand = new RelayCommand(o =>\n            {\n                FileDialog.OnOpen(fileName =>\n                {\n                    try\n                    {\n                        Import(fileName);\n                    }\n                    catch (ImageTooLargeException e)\n                    {\n                        MessageBox.Show(Window, e.Message, \"Error\", MessageBoxButton.OK,\n                            MessageBoxImage.Error);\n                    }\n                    catch (Exception e)\n                    {\n                        MessageBox.Show(Window, $\"Unable to import the photo due to the following error:\\n{e.Message}\", \"Error\", MessageBoxButton.OK,\n                            MessageBoxImage.Error);\n                    }\n                }, Filters, $\"Kingdom Hearts III - Photo {Index}.jpg\", Window);\n            }, x => true);\n        }\n\n        public void Export(string fileName)\n        {\n            Directory.CreateDirectory(Path.GetDirectoryName(fileName));\n            using (var stream = File.Open(fileName, FileMode.Create))\n            {\n                stream.Write(_entry.Data, 0, _entry.Length);\n            }\n        }\n\n        public void Import(string fileName)\n        {\n            using (var stream = File.Open(fileName, FileMode.Open))\n            {\n                if (stream.Length > _entry.Data.Length)\n                    throw new ImageTooLargeException(_entry.Data.Length);\n\n                _entry.Data = new byte[_entry.Data.Length];\n                _entry.Length = (int)stream.Length;\n                stream.Read(_entry.Data, 0, _entry.Data.Length);\n            }\n        }\n\n        public void Delete()\n        {\n            _entry.Length = 0;\n            _entry.Data = new byte[_entry.Data.Length];\n            CreateThumbnailImage();\n        }\n\n        private void CreateThumbnailImage()\n        {\n            if (_entry.Length > 0)\n            {\n                using (var memStream = new MemoryStream(_entry.Data))\n                {\n                    Image = BitmapFrame.Create(memStream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);\n                }\n            }\n            else\n            {\n                Image = null;\n            }\n\n            OnPropertyChanged(nameof(Image));\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/PhotosViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Windows;\nusing KHSave.Lib3.Models;\nusing Xe.Tools.Wpf.Commands;\nusing Xe.Tools.Wpf.Dialogs;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class PhotosViewModel : GenericListModel<PhotoEntryViewModel>\n    {\n        private Window Window => Application.Current.Windows.OfType<Window>().FirstOrDefault(x => x.IsActive);\n\n        public string Info => $\"Photos: {Items.Count}\";\n\n        public RelayCommand ExportAllCommand { get; }\n\n        public RelayCommand DeleteAllCommand { get; }\n\n        public PhotosViewModel(IEnumerable<PhotoEntry> list) :\n            this(list.Select((pc, index) => new PhotoEntryViewModel(pc, index)))\n        {\n\n        }\n\n        public PhotosViewModel(IEnumerable<PhotoEntryViewModel> list) :\n            base(list.Where(x => x.Image != null))\n        {\n            ExportAllCommand = new RelayCommand(o =>\n            {\n                FileDialog.OnFolder(folder =>\n                {\n                    try\n                    {\n                        foreach (var item in Items)\n                        {\n                            item.Export(Path.Combine(folder, $\"Kingdom Hearts III - Photo {item.Index}.jpg\"));\n                        }\n                    }\n                    catch (Exception e)\n                    {\n                        MessageBox.Show(Window, $\"Unable to export all the photo due to the following error:\\n{e.Message}\", \"Error\", MessageBoxButton.OK,\n                            MessageBoxImage.Error);\n                    }\n                });\n            }, x => true);\n\n            DeleteAllCommand = new RelayCommand(o =>\n            {\n                const string msg = \"Do you really want to delete all the photos?\\nYou still can not save if you change your mind.\";\n                var result = MessageBox.Show(Window, msg, \"Delete all photos\", MessageBoxButton.YesNo,\n                    MessageBoxImage.Warning);\n\n                if (result == MessageBoxResult.Yes)\n                {\n                    foreach (var item in Items)\n                    {\n                        item.Delete();\n                    }\n                }\n\n                Items.Clear();\n                OnPropertyChanged(nameof(Info));\n                OnPropertyChanged(nameof(Items));\n\n            }, x => true);\n        }\n\n        protected override PhotoEntryViewModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/PlayerViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.Windows;\nusing Xe.Tools;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Kh3.Models;\nusing KHSave.SaveEditor.Kh3.ViewModels;\nusing KHSave.Lib3.Types;\nusing KHSave.Lib3.Models;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class PlayerViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly PlayableCharacter playableCharacter;\n        private readonly int index;\n\n        public PlayerViewModel(PlayableCharacter playableCharacter, int index)\n        {\n            this.playableCharacter = playableCharacter;\n            this.index = index;\n\n            Weapon1 = new EquipmentItemEntryViewModel(playableCharacter.Weapons[0]);\n            Weapon2 = new EquipmentItemEntryViewModel(playableCharacter.Weapons[1]);\n            Weapon3 = new EquipmentItemEntryViewModel(playableCharacter.Weapons[2]);\n            Armors = new EquipmentItemsViewModel(playableCharacter.Armors);\n            Accessories = new EquipmentItemsViewModel(playableCharacter.Accessories);\n            Consumables = new EquipmentItemsViewModel(playableCharacter.Items);\n            Abilities = new AbilitiesViewModel(playableCharacter.Abilities);\n\n            AiCombatStyle = new ItemComboBoxModel<AiCombatStyleType>(\n                () => playableCharacter.Ai.CombatStyle,\n                x => playableCharacter.Ai.CombatStyle = x);\n            AiAbility = new ItemComboBoxModel<AiAbilityType>(\n                () => playableCharacter.Ai.Abilitiy,\n                x => playableCharacter.Ai.Abilitiy = x);\n            AiRecovery = new ItemComboBoxModel<AiRecoveryType>(\n                () => playableCharacter.Ai.Recovery,\n                x => playableCharacter.Ai.Recovery = x);\n        }\n\n        public string Name => ((PlayableCharacterType)index).ToString();\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public byte AtkBoost\n        {\n            get => playableCharacter.AtkBoost;\n            set => playableCharacter.AtkBoost = value;\n        }\n\n        public byte MagBoost\n        {\n            get => playableCharacter.MagBoost;\n            set => playableCharacter.MagBoost = value;\n        }\n\n        public byte DefBoost\n        {\n            get => playableCharacter.DefBoost;\n            set => playableCharacter.DefBoost = value;\n        }\n\n        public byte ApBoost\n        {\n            get => playableCharacter.ApBoost;\n            set => playableCharacter.ApBoost = value;\n        }\n\n        public int Hp\n        {\n            get => playableCharacter.Hp;\n            set => playableCharacter.Hp = value;\n        }\n\n        public int Mp\n        {\n            get => playableCharacter.Mp;\n            set => playableCharacter.Mp = value;\n        }\n\n        public int Focus\n        {\n            get => playableCharacter.Focus;\n            set => playableCharacter.Focus = value;\n        }\n\n        public EquipmentItemEntryViewModel Weapon1 { get; }\n        public EquipmentItemEntryViewModel Weapon2 { get; }\n        public EquipmentItemEntryViewModel Weapon3 { get; }\n        public EquipmentItemsViewModel Armors { get; }\n        public EquipmentItemsViewModel Accessories { get; }\n        public EquipmentItemsViewModel Consumables { get; }\n\n        public ItemComboBoxModel<AiCombatStyleType> AiCombatStyle { get; }\n        public ItemComboBoxModel<AiAbilityType> AiAbility { get; }\n        public ItemComboBoxModel<AiRecoveryType> AiRecovery { get; }\n\n        public AbilitiesViewModel Abilities { get; }\n\n        public string Text => playableCharacter.ToString();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/PlayersViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing KHSave.Lib3.Models;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class PlayersViewModel : GenericListModel<PlayerViewModel>\n    {\n        public PlayersViewModel(IEnumerable<PlayableCharacter> list) :\n            base(list.Select((pc, index) => new PlayerViewModel(pc, index)))\n        {\n\n        }\n\n        public PlayersViewModel(IEnumerable<PlayerViewModel> list) :\n            base(list)\n        {\n\n        }\n\n        public Visibility PlayerVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility PlayerNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        protected override void OnSelectedItem(PlayerViewModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(PlayerVisible));\n            OnPropertyChanged(nameof(PlayerNotVisible));\n        }\n\n        protected override PlayerViewModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/RecordsViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.Collections.Generic;\nusing KHSave.Lib3.Types;\nusing KHSave.SaveEditor.Kh3.Models;\nusing KHSave.Extensions;\nusing KHSave.Lib3;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public partial class RecordsViewModel\n    {\n        private readonly ISaveKh3 save;\n\n        public RecordShotlockListModel<RecordShotlockType> Shotlocks { get; }\n        public RecordAttractionListModel<RecordAttractionType> Attractions { get; }\n        public IEnumerable<FlantasticModel> Flantastics { get; }\n\n        public int VerumRexHighScore { get => save.Records.VerumRexHighScore; set => save.Records.VerumRexHighScore = value; }\n        public int VerumRexTimer { get => save.Records.VerumRexTimer; set => save.Records.VerumRexTimer = value; }\n        public int FlashTracer1HighScore { get => save.Records.FlashTracer1HighScore; set => save.Records.FlashTracer1HighScore = value; }\n        public int FlashTracer2HighScore { get => save.Records.FlashTracer2HighScore; set => save.Records.FlashTracer2HighScore = value; }\n        public int FlashTracer1Timer { get => save.Records.FlashTracer1Timer; set => save.Records.FlashTracer1Timer = value; }\n        public int FlashTracer2Timer { get => save.Records.FlashTracer2Timer; set => save.Records.FlashTracer2Timer = value; }\n        public int FrozenSliderHighScore { get => save.Records.FrozenSliderHighScore; set => save.Records.FrozenSliderHighScore = value; }\n        public int FrozenSliderTimer { get => save.Records.FrozenSliderTimer; set => save.Records.FrozenSliderTimer = value; }\n        public int FrozenSliderMedals { get => save.Records.FrozenSliderMedals; set => save.Records.FrozenSliderMedals = value; }\n        public int FestivalDanceHighScore { get => save.Records.FestivalDanceHighScore; set => save.Records.FestivalDanceHighScore = value; }\n        public int FestivalDanceLongestChain { get => save.Records.FestivalDanceLongestChain; set => save.Records.FestivalDanceLongestChain = value; }\n\n        public bool FrozenSliderMedal1\n        {\n            get => save.Records.FrozenSliderMedals.GetFlag(0);\n            set => save.Records.FrozenSliderMedals = save.Records.FrozenSliderMedals.SetFlag(0, value);\n        }\n        public bool FrozenSliderMedal2\n        {\n            get => save.Records.FrozenSliderMedals.GetFlag(1);\n            set => save.Records.FrozenSliderMedals = save.Records.FrozenSliderMedals.SetFlag(1, value);\n        }\n        public bool FrozenSliderMedal3\n        {\n            get => save.Records.FrozenSliderMedals.GetFlag(2);\n            set => save.Records.FrozenSliderMedals = save.Records.FrozenSliderMedals.SetFlag(2, value);\n        }\n        public bool FrozenSliderMedal4\n        {\n            get => save.Records.FrozenSliderMedals.GetFlag(3);\n            set => save.Records.FrozenSliderMedals = save.Records.FrozenSliderMedals.SetFlag(3, value);\n        }\n        public bool FrozenSliderMedal5\n        {\n            get => save.Records.FrozenSliderMedals.GetFlag(4);\n            set => save.Records.FrozenSliderMedals = save.Records.FrozenSliderMedals.SetFlag(4, value);\n        }\n        public bool FrozenSliderMedal6\n        {\n            get => save.Records.FrozenSliderMedals.GetFlag(5);\n            set => save.Records.FrozenSliderMedals = save.Records.FrozenSliderMedals.SetFlag(5, value);\n        }\n        public bool FrozenSliderMedal7\n        {\n            get => save.Records.FrozenSliderMedals.GetFlag(6);\n            set => save.Records.FrozenSliderMedals = save.Records.FrozenSliderMedals.SetFlag(6, value);\n        }\n        public bool FrozenSliderMedal8\n        {\n            get => save.Records.FrozenSliderMedals.GetFlag(7);\n            set => save.Records.FrozenSliderMedals = save.Records.FrozenSliderMedals.SetFlag(7, value);\n        }\n        public bool FrozenSliderMedal9\n        {\n            get => save.Records.FrozenSliderMedals.GetFlag(8);\n            set => save.Records.FrozenSliderMedals = save.Records.FrozenSliderMedals.SetFlag(8, value);\n        }\n        public bool FrozenSliderMedal10\n        {\n            get => save.Records.FrozenSliderMedals.GetFlag(9);\n            set => save.Records.FrozenSliderMedals = save.Records.FrozenSliderMedals.SetFlag(9, value);\n        }\n\n        public RecordsViewModel(ISaveKh3 save)\n        {\n            this.save = save;\n            Shotlocks = new RecordShotlockListModel<RecordShotlockType>(save.RecordShotlocksUseCount, save.Records.ShotlocksHighScore);\n            Attractions = new RecordAttractionListModel<RecordAttractionType>(save.RecordAttractionsUseCount, save.Records.AttractionsHighScore);\n            Flantastics = GetFlantasticModels(save);\n        }\n\n        private static IEnumerable<FlantasticModel> GetFlantasticModels(ISaveKh3 save) =>\n            new FlantasticModel[]\n            {\n                new FlantasticModel(\"Cherry Flan\", save.Records.CherryFlan),\n                new FlantasticModel(\"Strawberry Flan\", save.Records.StrawberryFlan),\n                new FlantasticModel(\"Orange Flan\", save.Records.OrangeFlan),\n                new FlantasticModel(\"Banana Flan\", save.Records.BananaFlan),\n                new FlantasticModel(\"Grape Flan\", save.Records.GrapeFlan),\n                new FlantasticModel(\"Watermelon Flan\", save.Records.WatermelonFlan),\n                new FlantasticModel(\"Honeydew Flan\", save.Records.HoneydewFlan),\n            };\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/ShortcutsViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Lib3;\nusing KHSave.Lib3.Types;\nusing KHSave.SaveEditor.Common.Models;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class ShortcutsViewModel\n    {\n        public class ShortcutGroupViewModel\n        {\n            private readonly ISaveKh3 _save;\n            public ItemComboBoxModel<CommandType> Circle { get; set; }\n            public ItemComboBoxModel<CommandType> Triangle { get; set; }\n            public ItemComboBoxModel<CommandType> Square { get; set; }\n            public ItemComboBoxModel<CommandType> Cross { get; set; }\n\n            public ShortcutGroupViewModel(ISaveKh3 save, int groupIndex)\n            {\n                _save = save;\n\n                Circle = new ItemComboBoxModel<CommandType>(\n                    () => save.Shortcuts[groupIndex].Circle,\n                    x => save.Shortcuts[groupIndex].Circle = x);\n\n                Triangle = new ItemComboBoxModel<CommandType>(\n                    () => save.Shortcuts[groupIndex].Triangle,\n                    x => save.Shortcuts[groupIndex].Triangle = x);\n\n                Square = new ItemComboBoxModel<CommandType>(\n                    () => save.Shortcuts[groupIndex].Square,\n                    x => save.Shortcuts[groupIndex].Square = x);\n\n                Cross = new ItemComboBoxModel<CommandType>(\n                    () => save.Shortcuts[groupIndex].Cross,\n                    x => save.Shortcuts[groupIndex].Cross = x);\n            }\n        }\n\n        private readonly ISaveKh3 _save;\n\n        public ShortcutsViewModel(ISaveKh3 save)\n        {\n            _save = save;\n            Shortcut1 = new ShortcutGroupViewModel(_save, 0);\n            Shortcut2 = new ShortcutGroupViewModel(_save, 1);\n            Shortcut3 = new ShortcutGroupViewModel(_save, 2);\n\n            Magic1 = new ItemComboBoxModel<CommandType>(() => save.Magics[0], x => save.Magics[0] = x);\n            Magic2 = new ItemComboBoxModel<CommandType>(() => save.Magics[1], x => save.Magics[1] = x);\n            Magic3 = new ItemComboBoxModel<CommandType>(() => save.Magics[2], x => save.Magics[2] = x);\n            Magic4 = new ItemComboBoxModel<CommandType>(() => save.Magics[3], x => save.Magics[3] = x);\n            Magic5 = new ItemComboBoxModel<CommandType>(() => save.Magics[4], x => save.Magics[4] = x);\n            Magic6 = new ItemComboBoxModel<CommandType>(() => save.Magics[5], x => save.Magics[5] = x);\n            Link1 = new ItemComboBoxModel<CommandType>(() => save.Links[0], x => save.Links[0] = x);\n            Link2 = new ItemComboBoxModel<CommandType>(() => save.Links[1], x => save.Links[1] = x);\n            Link3 = new ItemComboBoxModel<CommandType>(() => save.Links[2], x => save.Links[2] = x);\n            Link4 = new ItemComboBoxModel<CommandType>(() => save.Links[3], x => save.Links[3] = x);\n            Link5 = new ItemComboBoxModel<CommandType>(() => save.Links[4], x => save.Links[4] = x);\n        }\n\n\n        public ShortcutGroupViewModel Shortcut1 { get; set; }\n        public ShortcutGroupViewModel Shortcut2 { get; set; }\n        public ShortcutGroupViewModel Shortcut3 { get; set; }\n        public ItemComboBoxModel<CommandType> Magic1 { get; set; }\n        public ItemComboBoxModel<CommandType> Magic2 { get; set; }\n        public ItemComboBoxModel<CommandType> Magic3 { get; set; }\n        public ItemComboBoxModel<CommandType> Magic4 { get; set; }\n        public ItemComboBoxModel<CommandType> Magic5 { get; set; }\n        public ItemComboBoxModel<CommandType> Magic6 { get; set; }\n        public ItemComboBoxModel<CommandType> Link1 { get; set; }\n        public ItemComboBoxModel<CommandType> Link2 { get; set; }\n        public ItemComboBoxModel<CommandType> Link3 { get; set; }\n        public ItemComboBoxModel<CommandType> Link4 { get; set; }\n        public ItemComboBoxModel<CommandType> Link5 { get; set; }\n\n\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/StoryViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Attributes;\nusing KHSave.SaveEditor.Common;\nusing KHSave.Lib3.Types;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\nusing Xe.Tools.Models;\nusing Xe.Tools.Wpf.Commands;\nusing Xe.Tools.Wpf.Models;\nusing KHSave.Lib3;\nusing KHSave.Lib3.Presets;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class StoryViewModel : GenericListModel<StoryEntryModel>\n    {\n        public StoryViewModel(ISaveKh3 save) :\n            this(save.Storyflags)\n        {\n        }\n\n        public StoryViewModel(List<int> storyflags) :\n            base(storyflags.Select((_, index) => new StoryEntryModel(storyflags, index)))\n        {\n\n        }\n\n        protected override StoryEntryModel OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n\n    public class StoryCommand : RelayCommand\n    {\n        public StoryCommand(\n            ISaveKh3 save,\n            string name,\n            string map,\n            Dictionary<StoryFlagType, int> flags,\n            bool zeroEverything = false)\n            : base(x =>\n            {\n                if (!ThrowConfirmationMessage(name))\n                    return;\n\n                if (!string.IsNullOrEmpty(map))\n                {\n                    save.MapPath = map;\n                    save.MapSpawn = \"default\";\n                }\n\n                if (zeroEverything)\n                {\n                    for (var i = 0; i < save.Storyflags.Count; i++)\n                    {\n                        save.Storyflags[i] = 0;\n                    }\n                }\n\n                for (var i = 0; i < save.Storyflags.Count; i++)\n                {\n                    if (flags.TryGetValue((StoryFlagType)i, out var newFlag))\n                    {\n                        save.Storyflags[i] = newFlag;\n                    }\n                }\n            })\n        {\n            Name = name;\n        }\n\n        public string Name { get; }\n\n        public override string ToString() => Name;\n\n        private static bool ThrowConfirmationMessage(string name)\n        {\n            var response = MessageBox.Show(\n                \"You are modifying the progress of the story.\\n\" +\n                \"This technique it is not 100% save and you could incur\\n\" +\n                \"in some glitches or infinite black screern during your run.\\n\" +\n                $\"Do you want to apply the change '{name}'?\",\n                \"Confirmation\",\n                MessageBoxButton.YesNo,\n                MessageBoxImage.Warning);\n\n            return response == MessageBoxResult.Yes;\n        }\n    }\n\n    public class StoryEntryModel : BaseNotifyPropertyChanged\n    {\n        private readonly List<int> storyFlag;\n        private readonly int index;\n\n        public GenericListModel<EnumItemModel<int>> Preset { get; }\n\n        public StoryEntryModel(List<int> storyFlag, int index)\n        {\n            this.storyFlag = storyFlag;\n            this.index = index;\n\n            if (Presets.STORY.TryGetValue((StoryFlagType)index, out var preset))\n            {\n                Preset = new StoryPresetModel(preset);\n            }\n        }\n\n        public string Name => InfoAttribute.GetInfo((StoryFlagType)index) ?? $\"{index:X02}\";\n\n        public int Value\n        {\n            get => storyFlag[index];\n            set\n            {\n                storyFlag[index] = value;\n                OnPropertyChanged(nameof(Value));\n            }\n        }\n    }\n\n    public class StoryPresetModel : GenericListModel<EnumItemModel<int>>\n    {\n        public StoryPresetModel(Dictionary<int, string> preset) :\n            base(preset.Select(x => new EnumItemModel<int>\n            {\n                Value = (int)x.Key,\n                Name = x.Value\n            }))\n        { }\n\n        protected override EnumItemModel<int> OnNewItem()\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/ViewModels/SystemViewModel.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System.Windows;\nusing KHSave.Attributes;\nusing KHSave.Lib3.Types;\nusing Xe.Tools;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Common;\nusing System.Collections.Generic;\nusing KHSave.SaveEditor.Kh3.Models;\nusing System.Linq;\nusing KHSave.Lib3;\n\nnamespace KHSave.SaveEditor.Kh3.ViewModels\n{\n    public class SystemViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly ISaveKh3 save;\n\n        public enum RoomSpawnType\n        {\n            [Info(\"Start\")] Lv_Start,\n            [Info(\"Save\")] Lv_Save,\n            [Info(\"AutoSave\")] AutoSave\n        }\n\n        public SystemViewModel(ISaveKh3 save)\n        {\n            this.save = save;\n            Difficulty = new KhEnumListModel<DifficultyType>(() => save.Difficulty, x => save.Difficulty = x);\n            WorldIcon = new KhEnumListModel<WorldType>(() => save.WorldLogo, x => save.WorldLogo = x);\n            Location = new KhEnumListModel<LocationType>(() => save.LocationName, x => save.LocationName = x);\n            CharacterIcon = new KhEnumListModel<CharacterIconType>(() => save.BaseSaveIcon, x =>\n            {\n                save.BaseSaveIcon = x;\n                save.DlcSaveIcon = x;\n            });\n            Maps = Lib3.Presets.Presets.MAPS.Select(x => new MapViewModel(x.Key, x.Value)).ToList();\n\n            PlayableCharacters =\n                Lib3.Presets.Presets.PlayablePawns.Select(x => new SpawnModel\n                {\n                    Name = x.Value.Name,\n                    Value = string.Format(Lib3.Presets.Presets.PlayablePawnPath, x.Key)\n                })\n                .Concat(Lib3.Presets.Presets.PlayableDlcPawns.Select(x => new SpawnModel\n                {\n                    Name = x.Value.Name,\n                    Value = x.Key\n                }))\n                .ToArray();\n        }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public KhEnumListModel<DifficultyType> Difficulty { get; }\n        public KhEnumListModel<WorldType> WorldIcon { get; }\n        public KhEnumListModel<LocationType> Location { get; }\n        public KhEnumListModel<CharacterIconType> CharacterIcon { get; }\n        public KhEnumListModel<GenericEntryModel<string, string>, WorldType, string> RoomWorld { get; }\n        public IEnumerable<MapViewModel> Maps { get; }\n        public IEnumerable<SpawnModel> PlayableCharacters { get; }\n\n        public int TotalExp\n        {\n            get => save.TotalExp;\n            set => save.TotalExp = value;\n        }\n\n        public int Munny\n        {\n            get => save.Munny;\n            set => save.Munny = value;\n        }\n\n        public byte DisplayLevel\n        {\n            get => save.Level;\n            set => save.Level = value;\n        }\n\n        public bool SaveClear\n        {\n            get => save.SaveClear;\n            set => save.SaveClear = value;\n        }\n\n        public short SavesCount\n        {\n            get => save.SavesCount;\n            set => save.SavesCount = value;\n        }\n\n        public int EnemiesDefeated\n        {\n            get => save.EnemiesDefeated;\n            set => save.EnemiesDefeated = value;\n        }\n\n        public int CrabsCollected\n        {\n            get => save.CrabsCollected;\n            set => save.CrabsCollected = value;\n        }\n\n        public int MaxSelfieCount\n        {\n            get => save.PhotoMaxCount;\n            set => save.PhotoMaxCount = value;\n        }\n\n        public short VersionMajor\n        {\n            get => save.MajorVersion;\n            set => save.MajorVersion = value;\n        }\n\n        public short VersionMinor\n        {\n            get => save.MinorVersion;\n            set => save.MinorVersion = value;\n        }\n\n        public int BonusHp\n        {\n            get => save.BonusHp;\n            set => save.BonusHp = value;\n        }\n\n        public int BonusMp\n        {\n            get => save.BonusMp;\n            set => save.BonusMp = value;\n        }\n\n        public int BonusStrength\n        {\n            get => save.BonusStrength;\n            set => save.BonusStrength = value;\n        }\n\n        public int BonusMagic\n        {\n            get => save.BonusMagic;\n            set => save.BonusMagic = value;\n        }\n\n        public int BonusDefense\n        {\n            get => save.BonusDefense;\n            set => save.BonusDefense = value;\n        }\n\n        public string MapPath\n        {\n            get => save.MapPath;\n            set => save.MapPath = value;\n        }\n\n        public string MapSpawn\n        {\n            get => save.MapSpawn;\n            set => save.MapSpawn = value;\n        }\n\n        public string DlcMapPath\n        {\n            get => save.DlcMapPath;\n            set => save.DlcMapPath = value;\n        }\n\n        public string DlcMapSpawn\n        {\n            get => save.DlcSpawnPoint;\n            set => save.DlcSpawnPoint = value;\n        }\n\n        public string PlayerScript\n        {\n            get => save.PlayerScript;\n            set => save.PlayerScript = value;\n        }\n\n        public string PlayerCharacter\n        {\n            get => save.PlayerCharacter;\n            set => save.PlayerCharacter = value;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/EquipmentItemEntryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.EquipmentItemEntryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             xmlns:controls=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"22\" d:DesignWidth=\"100\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n        <CheckBox\n            Grid.Column=\"0\"\n            VerticalAlignment=\"Center\" Margin=\"0 0 3 0\"\n            Visibility=\"{Binding AdvancedVisibility}\"\n            IsChecked=\"{Binding Enabled}\"/>\n        <ComboBox\n            Grid.Column=\"1\"\n            Width=\"44\"\n            IsEnabled=\"{Binding Enabled}\"\n            ItemsSource=\"{Binding ItemType}\"\n            SelectedValue=\"{Binding ItemType.SelectedValue}\"\n            SelectedValuePath=\"Value\">\n            <ComboBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                            Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ComboBox.ItemTemplate>\n        </ComboBox>\n        <controls:ItemComboBox\n            Grid.Column=\"2\"\n            IsEnabled=\"{Binding Enabled}\"\n            DataContext=\"{Binding}\"/>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/EquipmentItemEntryView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for EquipmentItemEntryView.xaml\n    /// </summary>\n    public partial class EquipmentItemEntryView : UserControl\n    {\n        public EquipmentItemEntryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/EquipmentItemsView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.EquipmentItemsView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"100\" d:DesignWidth=\"300\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"*\"/>\n            <ColumnDefinition Width=\"5\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <StackPanel Grid.Column=\"0\" Grid.Row=\"0\">\n            <local:EquipmentItemEntryView DataContext=\"{Binding Item1}\"/>\n        </StackPanel>\n\n        <StackPanel Grid.Column=\"2\" Grid.Row=\"0\">\n            <local:EquipmentItemEntryView DataContext=\"{Binding Item2}\"/>\n        </StackPanel>\n\n        <StackPanel Grid.Column=\"0\" Grid.Row=\"1\">\n            <local:EquipmentItemEntryView DataContext=\"{Binding Item3}\"/>\n        </StackPanel>\n\n        <StackPanel Grid.Column=\"2\" Grid.Row=\"1\">\n            <local:EquipmentItemEntryView DataContext=\"{Binding Item4}\"/>\n        </StackPanel>\n\n        <StackPanel Grid.Column=\"0\" Grid.Row=\"2\">\n            <local:EquipmentItemEntryView DataContext=\"{Binding Item5}\"/>\n        </StackPanel>\n\n        <StackPanel Grid.Column=\"2\" Grid.Row=\"2\">\n            <local:EquipmentItemEntryView DataContext=\"{Binding Item6}\"/>\n        </StackPanel>\n\n        <StackPanel Grid.Column=\"0\" Grid.Row=\"3\">\n            <local:EquipmentItemEntryView DataContext=\"{Binding Item7}\"/>\n        </StackPanel>\n\n        <StackPanel Grid.Column=\"2\" Grid.Row=\"3\">\n            <local:EquipmentItemEntryView DataContext=\"{Binding Item8}\"/>\n        </StackPanel>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/EquipmentItemsView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for EquipmentItemsView.xaml\n    /// </summary>\n    public partial class EquipmentItemsView : UserControl\n    {\n        public EquipmentItemsView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/InventoryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.InventoryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n        </Grid.ColumnDefinitions>\n\n        <Grid Grid.Column=\"0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <ListBox\n                Grid.Row=\"0\"\n                ItemsSource=\"{Binding Items}\"\n                SelectedIndex=\"{Binding SelectedIndex}\"\n                SelectedItem=\"{Binding SelectedItem}\"\n                SelectionMode=\"Extended\"\n                SelectionChanged=\"ListBox_SelectionChanged\"\n                HorizontalContentAlignment=\"Stretch\">\n                <ListBox.InputBindings>\n                    <KeyBinding Gesture=\"Ctrl+A\" Command=\"{Binding SelectAllCommand}\" />\n                </ListBox.InputBindings>\n                <ListBox.ItemContainerStyle>\n                    <Style TargetType=\"ListBoxItem\">\n                        <Setter Property=\"IsSelected\" Value=\"{Binding IsSelected}\" />\n                    </Style>\n                </ListBox.ItemContainerStyle>\n                <ListBox.ItemTemplate>\n                    <DataTemplate>\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n                            <Image Grid.Column=\"0\" Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                               Source=\"{Binding Icon}\"/>\n                            <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" />\n                            <TextBlock Grid.Column=\"2\" Margin=\"0 0 5 0\" Text=\"{Binding Count, StringFormat=x{0:D02}}\" />\n                        </Grid>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n            \n            <Grid Grid.Row=\"1\" Margin=\"0 5 0 5\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Image Grid.Column=\"0\" Source=\"{StaticResource Search_16x}\"/>\n                <TextBox Grid.Column=\"2\" Text=\"{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </Grid>\n\n        <StackPanel Grid.Column=\"2\" IsEnabled=\"{Binding IsItemSelected}\">\n            <TextBlock Text=\"Item count\"/>\n            <TextBox Margin=\"0 0 0 5\" Text=\"{Binding SelectedItemCount, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <TextBlock Text=\"Flags\"/>\n            <CheckBox Content=\"Obtained\" IsChecked=\"{Binding SelectedItemFlagObtained}\"/>\n            <CheckBox Content=\"Unseen\" IsChecked=\"{Binding SelectedItemFlagUnseen}\"/>\n            <CheckBox Content=\"Shop seen\" IsChecked=\"{Binding SelectedItemFlagShop}\"/>\n            \n            <StackPanel Visibility=\"{Binding AdvancedVisibility}\">\n                <CheckBox Margin=\"10 0 0 0\"\n                    Content=\"Seen in shop\" IsChecked=\"{Binding SelectedItemFlag2}\"/>\n                <CheckBox Margin=\"10 0 0 0\"\n                    Content=\"Shop flag 2\" IsChecked=\"{Binding SelectedItemFlag3}\"/>\n                <CheckBox Content=\"Flag 4\" IsChecked=\"{Binding SelectedItemFlag4}\"/>\n                <CheckBox Content=\"Flag 5\" IsChecked=\"{Binding SelectedItemFlag5}\"/>\n                <CheckBox Content=\"Flag 6\" IsChecked=\"{Binding SelectedItemFlag6}\"/>\n                <CheckBox Content=\"Flag 7\" IsChecked=\"{Binding SelectedItemFlag7}\"/>\n            </StackPanel>\n        </StackPanel>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/InventoryView.xaml.cs",
    "content": "using KHSave.SaveEditor.Kh3.Models;\nusing KHSave.SaveEditor.Kh3.ViewModels;\nusing System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for InventoryView.xaml\n    /// </summary>\n    public partial class InventoryView : UserControl\n    {\n        public InventoryView()\n        {\n            InitializeComponent();\n        }\n\n        private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n        {\n            if (DataContext is InventoryViewModel vm)\n                vm.ChangeSelectedItems();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/MaterialsView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.MaterialsView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <StackPanel Grid.Row=\"1\">\n            <TextBlock Text=\"Amount\"/>\n            <TextBox Margin=\"0 5 0 0\" Text=\"{Binding SelectedItem.Count, UpdateSourceTrigger=PropertyChanged}\"/>\n        </StackPanel>\n\n        <ListBox\n            Grid.Row=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            HorizontalContentAlignment=\"Stretch\">\n            <ListBox.ItemTemplate>\n                <DataTemplate>\n                    <Grid>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Image Grid.Column=\"0\" Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                               Source=\"{Binding Icon}\"/>\n                        <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" />\n                        <TextBlock Grid.Column=\"2\" Margin=\"0 0 5 0\" Text=\"{Binding Count, StringFormat=x{0:D02}}\" />\n                    </Grid>\n                </DataTemplate>\n            </ListBox.ItemTemplate>\n        </ListBox>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/MaterialsView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for MaterialsView.xaml\n    /// </summary>\n    public partial class MaterialsView : UserControl\n    {\n        public MaterialsView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PartyView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.PartyView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <StackPanel>\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Desire choice\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding DesireChoice}\"\n                    SelectedValue=\"{Binding DesireChoice.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Power choice\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding PowerChoice}\"\n                    SelectedValue=\"{Binding PowerChoice.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>\n        </Grid>\n\n        <TextBlock Text=\"Party member #1\"/>\n        <ComboBox\n            ItemsSource=\"{Binding PartyMembers}\"\n            SelectedValue=\"{Binding PartyMember1}\"\n            DisplayMemberPath=\"Name\"\n            SelectedValuePath=\"Value\"/>\n\n        <TextBlock Text=\"Party member #2\"/>\n        <ComboBox\n            ItemsSource=\"{Binding PartyMembers}\"\n            SelectedValue=\"{Binding PartyMember2}\"\n            DisplayMemberPath=\"Name\"\n            SelectedValuePath=\"Value\"/>\n\n        <TextBlock Text=\"Party member #3\"/>\n        <ComboBox\n            ItemsSource=\"{Binding PartyMembers}\"\n            SelectedValue=\"{Binding PartyMember3}\"\n            DisplayMemberPath=\"Name\"\n            SelectedValuePath=\"Value\"/>\n\n        <TextBlock Text=\"Party member #4\"/>\n        <ComboBox\n            ItemsSource=\"{Binding PartyMembers}\"\n            SelectedValue=\"{Binding PartyMember4}\"\n            DisplayMemberPath=\"Name\"\n            SelectedValuePath=\"Value\"/>\n\n        <TextBlock Text=\"Party member #5\"/>\n        <ComboBox\n            ItemsSource=\"{Binding PartyMembers}\"\n            SelectedValue=\"{Binding PartyMember5}\"\n            DisplayMemberPath=\"Name\"\n            SelectedValuePath=\"Value\"/>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PartyView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for PartyView.xaml\n    /// </summary>\n    public partial class PartyView : UserControl\n    {\n        public PartyView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PhotosView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.PhotosView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <UserControl.Resources>\n        <DataTemplate x:Key=\"PhotoTemplate\">\n            <StackPanel>\n                <Image Width=\"240\" Height=\"135\" Stretch=\"Fill\" Source=\"{Binding Image}\"/>\n                <Grid>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"*\"/>\n                        <ColumnDefinition Width=\"5\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                        <ColumnDefinition Width=\"5\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                    </Grid.ColumnDefinitions>\n                    <TextBlock Grid.Column=\"0\" Margin=\"10 0 0 0\" Text=\"{Binding Description}\"/>\n                    <Button Grid.Column=\"2\" Content=\"Export\" Command=\"{Binding ExportCommand}\"/>\n                    <Button Grid.Column=\"4\" Content=\"Import\" Command=\"{Binding ImportCommand}\"/>\n                </Grid>\n            </StackPanel>\n        </DataTemplate>\n    </UserControl.Resources>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <Label Grid.Column=\"0\" Content=\"{Binding Info}\"/>\n            <Button Grid.Column=\"2\" Content=\"Export all\" Command=\"{Binding ExportAllCommand}\"/>\n            <Button Grid.Column=\"4\" Content=\"Delete all\" Command=\"{Binding DeleteAllCommand}\"/>\n        </Grid>\n\n        <ListView\n            Grid.Row=\"1\"\n            Name=\"MovieListView\"\n            ItemTemplate=\"{StaticResource PhotoTemplate}\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedValuePath=\"Value\">\n            <ListView.ItemsPanel>\n                <ItemsPanelTemplate>\n                    <UniformGrid Columns=\"2\" />\n                </ItemsPanelTemplate>\n            </ListView.ItemsPanel>\n        </ListView>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PhotosView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for PhotosView.xaml\n    /// </summary>\n    public partial class PhotosView : UserControl\n    {\n        public PhotosView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PlayerAbilityView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.PlayerAbilityView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"300\" d:DesignWidth=\"300\">\n    <Grid DataContext=\"{Binding Abilities}\">\n        <DataGrid\n            ItemsSource=\"{Binding Items}\"\n            Visibility=\"{Binding SimpleVisibility}\"\n            AutoGenerateColumns=\"False\">\n            <DataGrid.Columns>\n                <DataGridTextColumn Header=\"Name\" Binding=\"{Binding Name}\" Width=\"*\" />\n                <DataGridTemplateColumn Width=\"Auto\" Header=\"Unlocked\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <CheckBox IsChecked=\"{Binding Unlocked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n                <DataGridTemplateColumn Width=\"Auto\" Header=\"Active\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <CheckBox IsChecked=\"{Binding Active, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n                <DataGridTemplateColumn Width=\"Auto\" Header=\"Unseen\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <CheckBox IsChecked=\"{Binding Unseen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n                <DataGridTemplateColumn Width=\"Auto\" Header=\"Duplicate\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <CheckBox IsChecked=\"{Binding Duplicate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n            </DataGrid.Columns>\n        </DataGrid>\n\n        <DataGrid\n            ItemsSource=\"{Binding Items}\"\n            Visibility=\"{Binding AdvancedVisibility}\"\n            AutoGenerateColumns=\"False\">\n            <DataGrid.Columns>\n                <DataGridTextColumn Header=\"Name\" Binding=\"{Binding Name}\" Width=\"*\" />\n                <DataGridTextColumn Header=\"Debug\" Binding=\"{Binding Raw}\" Width=\"Auto\" />\n                <DataGridTemplateColumn Width=\"Auto\" Header=\"Unlocked\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <CheckBox IsChecked=\"{Binding Unlocked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n                <DataGridTemplateColumn Width=\"Auto\" Header=\"Active\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <CheckBox IsChecked=\"{Binding Active, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n                <DataGridTemplateColumn Width=\"Auto\" Header=\"Unseen\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <CheckBox IsChecked=\"{Binding Unseen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n                <DataGridTemplateColumn Width=\"Auto\" Header=\"Duplicate\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <CheckBox IsChecked=\"{Binding Duplicate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n            </DataGrid.Columns>\n        </DataGrid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PlayerAbilityView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayerAbilityView.xaml\n    /// </summary>\n    public partial class PlayerAbilityView : UserControl\n    {\n        public PlayerAbilityView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PlayerEquipmentView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.PlayerEquipmentView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"400\" d:DesignWidth=\"300\">\n    <StackPanel>\n        <TextBlock Text=\"Weapons\"/>\n        <local:EquipmentItemEntryView DataContext=\"{Binding Weapon1}\"/>\n        <local:EquipmentItemEntryView DataContext=\"{Binding Weapon2}\"/>\n        <local:EquipmentItemEntryView DataContext=\"{Binding Weapon3}\"/>\n\n        <TextBlock Text=\"Armors\"/>\n        <local:EquipmentItemsView Margin=\"0 0 0 5\"\n            DataContext=\"{Binding Armors}\"/>\n\n        <TextBlock Text=\"Accessories\"/>\n        <local:EquipmentItemsView Margin=\"0 0 0 5\"\n            DataContext=\"{Binding Accessories}\"/>\n\n        <TextBlock Text=\"Items\"/>\n        <local:EquipmentItemsView Margin=\"0 0 0 5\"\n            DataContext=\"{Binding Consumables}\"/>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PlayerEquipmentView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayerEquipmentView.xaml\n    /// </summary>\n    public partial class PlayerEquipmentView : UserControl\n    {\n        public PlayerEquipmentView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PlayerStatusView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.PlayerStatusView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             xmlns:controls=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"300\" d:DesignWidth=\"300\">\n    <StackPanel>\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"HP\"/>\n                <TextBox Grid.Column=\"0\" Margin=\"0 0 0 5\" Text=\"{Binding Hp, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"MP\"/>\n                <TextBox Grid.Column=\"0\" Margin=\"0 0 0 5\" Text=\"{Binding Mp, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Focus\"/>\n                <TextBox Grid.Column=\"0\" Margin=\"0 0 0 5\" Text=\"{Binding Focus, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n            </StackPanel>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Attack boost\"/>\n                <TextBox Grid.Column=\"0\" Margin=\"0 0 0 5\" Text=\"{Binding AtkBoost, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Magic boost\"/>\n                <TextBox Grid.Column=\"0\" Margin=\"0 0 0 5\" Text=\"{Binding MagBoost, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Defense boost\"/>\n                <TextBox Grid.Column=\"0\" Margin=\"0 0 0 5\" Text=\"{Binding DefBoost, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"AP boost\"/>\n                <TextBox Grid.Column=\"0\" Margin=\"0 0 0 5\" Text=\"{Binding ApBoost, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n        </Grid>\n\n\n        <Grid Margin=\"0 0 0 5\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Combat style\"/>\n                <controls:ItemComboBox\n                    DataContext=\"{Binding AiCombatStyle, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Ability usage\"/>\n                <controls:ItemComboBox\n                    DataContext=\"{Binding AiAbility, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"4\">\n                <TextBlock Text=\"Recovery\"/>\n                <controls:ItemComboBox\n                    DataContext=\"{Binding AiRecovery, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n        </Grid>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PlayerStatusView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayerStatus.xaml\n    /// </summary>\n    public partial class PlayerStatusView : UserControl\n    {\n        public PlayerStatusView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PlayerView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.PlayerView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"400\" d:DesignWidth=\"400\">\n    <Grid>\n        <TabControl>\n            <TabItem Header=\"Status\">\n                <ScrollViewer HorizontalScrollBarVisibility=\"Auto\">\n                    <local:PlayerStatusView/>\n                </ScrollViewer>\n            </TabItem>\n            <TabItem Header=\"Equipment\">\n                <ScrollViewer HorizontalScrollBarVisibility=\"Auto\">\n                    <local:PlayerEquipmentView/>\n                </ScrollViewer>\n            </TabItem>\n            <TabItem Header=\"Ability\">\n                <local:PlayerAbilityView/>\n            </TabItem>\n        </TabControl>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PlayerView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayerView.xaml\n    /// </summary>\n    public partial class PlayerView : UserControl\n    {\n        public PlayerView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PlayersView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.PlayersView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"\n            />\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding PlayerNotVisible}\">\n            <Label Content=\"Select a player to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding PlayerVisible}\">\n            <local:PlayerView DataContext=\"{Binding SelectedItem}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/PlayersView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for PlayersView.xaml\n    /// </summary>\n    public partial class PlayersView : UserControl\n    {\n        public PlayersView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/RecordMinigamesView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.RecordMinigamesView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"350\" d:DesignWidth=\"300\">\n    <Grid Margin=\"0 0 0 5\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"3\"/>\n            <ColumnDefinition Width=\"*\"/>\n            <ColumnDefinition Width=\"3\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"5\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"5\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"5\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"5\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"Verum Rex\" FontWeight=\"Bold\"/>\n        <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"High Score\"/>\n        <TextBlock Grid.Row=\"0\" Grid.Column=\"4\" Text=\"Timer\"/>\n        <TextBox Grid.Row=\"1\" Grid.Column=\"2\" Text=\"{Binding VerumRexHighScore, UpdateSourceTrigger=PropertyChanged}\"/>\n        <TextBox Grid.Row=\"1\" Grid.Column=\"4\" Text=\"{Binding VerumRexTimer, UpdateSourceTrigger=PropertyChanged}\"/>\n\n        <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"Festival Dance\" FontWeight=\"Bold\"/>\n        <TextBlock Grid.Row=\"3\" Grid.Column=\"2\" Text=\"High Score\"/>\n        <TextBlock Grid.Row=\"3\" Grid.Column=\"4\" Text=\"Longest Chain\"/>\n        <TextBox Grid.Row=\"4\" Grid.Column=\"2\" Text=\"{Binding FestivalDanceHighScore, UpdateSourceTrigger=PropertyChanged}\"/>\n        <TextBox Grid.Row=\"4\" Grid.Column=\"4\" Text=\"{Binding FestivalDanceLongestChain, UpdateSourceTrigger=PropertyChanged}\"/>\n\n        <TextBlock Grid.Row=\"6\" Grid.Column=\"0\" Text=\"Flash Tracer A\" FontWeight=\"Bold\"/>\n        <TextBlock Grid.Row=\"6\" Grid.Column=\"2\" Text=\"High Score\"/>\n        <TextBlock Grid.Row=\"6\" Grid.Column=\"4\" Text=\"Timer\"/>\n        <TextBox Grid.Row=\"7\" Grid.Column=\"2\" Text=\"{Binding FlashTracer1HighScore, UpdateSourceTrigger=PropertyChanged}\"/>\n        <TextBox Grid.Row=\"7\" Grid.Column=\"4\" Text=\"{Binding FlashTracer1Timer, UpdateSourceTrigger=PropertyChanged}\"/>\n\n        <TextBlock Grid.Row=\"9\" Grid.Column=\"0\" Text=\"Flash Tracer B\" FontWeight=\"Bold\"/>\n        <TextBlock Grid.Row=\"9\" Grid.Column=\"2\" Text=\"High Score\"/>\n        <TextBlock Grid.Row=\"9\" Grid.Column=\"4\" Text=\"Timer\"/>\n        <TextBox Grid.Row=\"10\" Grid.Column=\"2\" Text=\"{Binding FlashTracer2HighScore, UpdateSourceTrigger=PropertyChanged}\"/>\n        <TextBox Grid.Row=\"10\" Grid.Column=\"4\" Text=\"{Binding FlashTracer2Timer, UpdateSourceTrigger=PropertyChanged}\"/>\n\n        <TextBlock Grid.Row=\"12\" Grid.Column=\"0\" Text=\"Frozen Slider\" FontWeight=\"Bold\"/>\n        <TextBlock Grid.Row=\"12\" Grid.Column=\"2\" Text=\"High Score\"/>\n        <TextBlock Grid.Row=\"12\" Grid.Column=\"4\" Text=\"Timer\"/>\n        <TextBox Grid.Row=\"13\" Grid.Column=\"2\" Text=\"{Binding FrozenSliderHighScore, UpdateSourceTrigger=PropertyChanged}\"/>\n        <TextBox Grid.Row=\"13\" Grid.Column=\"4\" Text=\"{Binding FrozenSliderTimer, UpdateSourceTrigger=PropertyChanged}\"/>\n        <CheckBox Grid.Row=\"14\" Grid.Column=\"2\" Content=\"Medal I\" IsChecked=\"{Binding FrozenSliderMedal1}\"/>\n        <CheckBox Grid.Row=\"14\" Grid.Column=\"4\" Content=\"Medal II\" IsChecked=\"{Binding FrozenSliderMedal2}\"/>\n        <CheckBox Grid.Row=\"15\" Grid.Column=\"2\" Content=\"Medal III\" IsChecked=\"{Binding FrozenSliderMedal3}\"/>\n        <CheckBox Grid.Row=\"15\" Grid.Column=\"4\" Content=\"Medal IV\" IsChecked=\"{Binding FrozenSliderMedal4}\"/>\n        <CheckBox Grid.Row=\"16\" Grid.Column=\"2\" Content=\"Medal V\" IsChecked=\"{Binding FrozenSliderMedal5}\"/>\n        <CheckBox Grid.Row=\"16\" Grid.Column=\"4\" Content=\"Medal VI\" IsChecked=\"{Binding FrozenSliderMedal6}\"/>\n        <CheckBox Grid.Row=\"17\" Grid.Column=\"2\" Content=\"Medal VII\" IsChecked=\"{Binding FrozenSliderMedal7}\"/>\n        <CheckBox Grid.Row=\"17\" Grid.Column=\"4\" Content=\"Medal VIII\" IsChecked=\"{Binding FrozenSliderMedal8}\"/>\n        <CheckBox Grid.Row=\"18\" Grid.Column=\"2\" Content=\"Medal IX\" IsChecked=\"{Binding FrozenSliderMedal9}\"/>\n        <CheckBox Grid.Row=\"18\" Grid.Column=\"4\" Content=\"Medal X\" IsChecked=\"{Binding FrozenSliderMedal10}\"/>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/RecordMinigamesView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for RecordMinigamesView.xaml\n    /// </summary>\n    public partial class RecordMinigamesView : UserControl\n    {\n        public RecordMinigamesView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/RecordsView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.RecordsView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"350\" d:DesignWidth=\"400\">\n    <TabControl>\n        <TabItem Header=\"Shotlocks\">\n            <DataGrid\n                    ItemsSource=\"{Binding Shotlocks.Items}\"\n                    AutoGenerateColumns=\"False\">\n                <DataGrid.Columns>\n                    <DataGridTextColumn\n                            Header=\"Name\"\n                            Width=\"2*\"\n                            IsReadOnly=\"True\"\n                            Binding=\"{Binding Name}\"/>\n                    <DataGridTextColumn\n                            Header=\"High Score\"\n                            Width=\"1*\"\n                            Binding=\"{Binding HighScore}\"/>\n                    <DataGridTextColumn\n                            Header=\"Total Uses\"\n                            Width=\"1*\"\n                            Binding=\"{Binding TotalUses}\"/>\n                </DataGrid.Columns>\n            </DataGrid>\n        </TabItem>\n        <TabItem Header=\"Attractions\">\n            <DataGrid\n                    ItemsSource=\"{Binding Attractions.Items}\"\n                    AutoGenerateColumns=\"False\">\n                <DataGrid.Columns>\n                    <DataGridTextColumn\n                            Header=\"Name\"\n                            Width=\"2*\"\n                            IsReadOnly=\"True\"\n                            Binding=\"{Binding Name}\"/>\n                    <DataGridTextColumn\n                            Header=\"High Score\"\n                            Width=\"1*\"\n                            Binding=\"{Binding HighScore}\"/>\n                    <DataGridTextColumn\n                            Header=\"Total Uses\"\n                            Width=\"1*\"\n                            Binding=\"{Binding TotalUses}\"/>\n                </DataGrid.Columns>\n            </DataGrid>\n        </TabItem>\n        <TabItem Header=\"Flantastics\">\n            <DataGrid\n                    ItemsSource=\"{Binding Flantastics}\"\n                    AutoGenerateColumns=\"False\">\n                <DataGrid.Columns>\n                    <DataGridTextColumn\n                            Header=\"Name\"\n                            Width=\"*\"\n                            IsReadOnly=\"True\"\n                            Binding=\"{Binding Name}\"/>\n                    <DataGridTextColumn\n                            Header=\"High score\"\n                            Width=\"*\"\n                            Binding=\"{Binding HighScore}\"/>\n                    <DataGridTextColumn\n                            Header=\"Attempts\"\n                            Width=\"*\"\n                            Binding=\"{Binding AttemptCount}\"/>\n                </DataGrid.Columns>\n            </DataGrid>\n        </TabItem>\n        <TabItem Header=\"Minigames\">\n            <ScrollViewer>\n                <local:RecordMinigamesView/>\n            </ScrollViewer>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/RecordsView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for RecordsView.xaml\n    /// </summary>\n    public partial class RecordsView : UserControl\n    {\n        public RecordsView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/ShortcutsView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.ShortcutsView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"800\" d:DesignWidth=\"400\">\n    <UserControl.Resources>\n        <Style x:Key=\"{x:Type ComboBox}\"\n               TargetType=\"{x:Type ComboBox}\">\n            <Setter Property=\"ItemTemplate\">\n                <Setter.Value>\n                    <DataTemplate>\n                        <StackPanel Orientation=\"Horizontal\">\n                            <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\"\n                                   Source=\"{Binding Icon}\"/>\n                            <TextBlock Text=\"{Binding Name}\" />\n                        </StackPanel>\n                    </DataTemplate>\n                </Setter.Value>\n            </Setter>\n            <Setter Property=\"ItemsSource\" Value=\"{Binding ValueSet}\"/>\n            <Setter Property=\"SelectedValue\" Value=\"{Binding ValueSet.SelectedValue}\"/>\n            <Setter Property=\"SelectedValuePath\" Value=\"Value\"/>\n            <Setter Property=\"Margin\" Value=\"0 0 0 3\"/>\n        </Style>\n    </UserControl.Resources>\n    <ScrollViewer HorizontalScrollBarVisibility=\"Auto\">\n        <StackPanel>\n            <TextBlock Text=\"Shortcut group 1\"/>\n            <Grid Margin=\"5\" DataContext=\"{Binding Shortcut1}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"0\" Text=\"Circle\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"0\"\n                          DataContext=\"{Binding Circle}\"/>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"1\" Text=\"Triangle\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"1\"\n                          DataContext=\"{Binding Triangle}\"/>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"2\" Text=\"Square\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"2\"\n                          DataContext=\"{Binding Square}\"/>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"3\" Text=\"Cross\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"3\"\n                          DataContext=\"{Binding Cross}\"/>\n            </Grid>\n            <Separator/>\n\n            <TextBlock Text=\"Shortcut group 2\"/>\n            <Grid Margin=\"5\" DataContext=\"{Binding Shortcut2}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"0\" Text=\"Circle\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"0\"\n                          DataContext=\"{Binding Circle}\"/>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"1\" Text=\"Triangle\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"1\"\n                          DataContext=\"{Binding Triangle}\"/>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"2\" Text=\"Square\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"2\"\n                          DataContext=\"{Binding Square}\"/>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"3\" Text=\"Cross\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"3\"\n                          DataContext=\"{Binding Cross}\"/>\n            </Grid>\n            <Separator/>\n\n            <TextBlock Text=\"Shortcut group 3\"/>\n            <Grid Margin=\"5\" DataContext=\"{Binding Shortcut3}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"0\" Text=\"Circle\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"0\"\n                          DataContext=\"{Binding Circle}\"/>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"1\" Text=\"Triangle\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"1\"\n                          DataContext=\"{Binding Triangle}\"/>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"2\" Text=\"Square\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"2\"\n                          DataContext=\"{Binding Square}\"/>\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"3\" Text=\"Cross\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"3\"\n                          DataContext=\"{Binding Cross}\"/>\n            </Grid>\n            <Separator/>\n\n            <TextBlock Text=\"Magics\"/>\n            <StackPanel Margin=\"5\">\n                <ComboBox DataContext=\"{Binding Magic1}\"/>\n                <ComboBox DataContext=\"{Binding Magic2}\"/>\n                <ComboBox DataContext=\"{Binding Magic3}\"/>\n                <ComboBox DataContext=\"{Binding Magic4}\"/>\n                <ComboBox DataContext=\"{Binding Magic5}\"/>\n                <ComboBox DataContext=\"{Binding Magic6}\"/>\n            </StackPanel>\n            <Separator/>\n\n            <TextBlock Text=\"Links\"/>\n            <StackPanel Margin=\"5\">\n                <ComboBox DataContext=\"{Binding Link1}\"/>\n                <ComboBox DataContext=\"{Binding Link2}\"/>\n                <ComboBox DataContext=\"{Binding Link3}\"/>\n                <ComboBox DataContext=\"{Binding Link4}\"/>\n                <ComboBox DataContext=\"{Binding Link5}\"/>\n            </StackPanel>\n            <Separator/>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/ShortcutsView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for ShortcutsView.xaml\n    /// </summary>\n    public partial class ShortcutsView : UserControl\n    {\n        public ShortcutsView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/StoryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.StoryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"350\" d:DesignWidth=\"400\">\n    <Grid>\n        <DataGrid ItemsSource=\"{Binding Items}\" AutoGenerateColumns=\"False\">\n            <DataGrid.Columns>\n                <DataGridTextColumn\n                    Header=\"Name\"\n                    Width=\"Auto\"\n                    Binding=\"{Binding Name}\"\n                    IsReadOnly=\"True\" />\n                <DataGridTextColumn\n                    Header=\"Value\"\n                    Width=\"Auto\"\n                    Binding=\"{Binding Value, Mode=TwoWay}\" />\n                <DataGridTemplateColumn \n                    Header=\"Use\"\n                    Width=\"*\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <ComboBox\n                                ItemsSource=\"{Binding Preset.Items}\"\n                                SelectedValue=\"{Binding Value, UpdateSourceTrigger=PropertyChanged}\"\n                                DisplayMemberPath=\"Name\"\n                                SelectedValuePath=\"Value\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n            </DataGrid.Columns>\n        </DataGrid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/StoryView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for StoryView.xaml\n    /// </summary>\n    public partial class StoryView : UserControl\n    {\n        public StoryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/SystemView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Kh3.Views.SystemView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Kh3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"550\" d:DesignWidth=\"400\">\n    <StackPanel>\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Difficulty\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Difficulty}\"\n                    SelectedValue=\"{Binding Difficulty.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Character icon\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding CharacterIcon}\"\n                    SelectedValue=\"{Binding CharacterIcon.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"World logo\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding WorldIcon}\"\n                    SelectedValue=\"{Binding WorldIcon.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Location\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Location}\"\n                    SelectedValue=\"{Binding Location.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Game timer\"/>\n                <TextBox IsReadOnly=\"True\" IsEnabled=\"False\"\n                         Text=\"Disabled due to file corruption\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Display level\"/>\n                <TextBox Text=\"{Binding DisplayLevel, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Total exp\"/>\n                <TextBox Text=\"{Binding TotalExp, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Munny\"/>\n                <TextBox Text=\"{Binding Munny, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"\"/>\n                <CheckBox\n                    Content=\"Save clear\"\n                    IsChecked=\"{Binding SaveClear}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Save count\"/>\n                <TextBox Text=\"{Binding SavesCount, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Enemies defeated\"/>\n                <TextBox Text=\"{Binding EnemiesDefeated, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"Crabs collected\"/>\n                <TextBox Text=\"{Binding CrabsCollected, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"2*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <StackPanel Grid.Column=\"0\">\n                <TextBlock Text=\"Maximum selfie count\"/>\n                <TextBox Text=\"{Binding MaxSelfieCount, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"2\" Visibility=\"{Binding AdvancedVisibility}\">\n                <TextBlock Text=\"Major save ver. (?)\"/>\n                <TextBox Text=\"{Binding VersionMajor, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n\n            <StackPanel Grid.Column=\"4\" Visibility=\"{Binding AdvancedVisibility}\">\n                <TextBlock Text=\"Minor save ver. (?)\"/>\n                <TextBox Text=\"{Binding VersionMinor, UpdateSourceTrigger=PropertyChanged}\"/>\n            </StackPanel>\n        </Grid>\n\n        <GroupBox Header=\"Statistics bonus from food\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"1*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"1*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"1*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"1*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"1*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"0\" Text=\"HP\"/>\n                <TextBox Grid.Column=\"0\" Grid.Row=\"1\" Text=\"{Binding BonusHp, UpdateSourceTrigger=PropertyChanged}\" />\n                <TextBlock Grid.Column=\"2\" Grid.Row=\"0\" Text=\"MP\"/>\n                <TextBox Grid.Column=\"2\" Grid.Row=\"1\" Text=\"{Binding BonusMp, UpdateSourceTrigger=PropertyChanged}\" />\n                <TextBlock Grid.Column=\"4\" Grid.Row=\"0\" Text=\"Strength\"/>\n                <TextBox Grid.Column=\"4\" Grid.Row=\"1\" Text=\"{Binding BonusStrength, UpdateSourceTrigger=PropertyChanged}\" />\n                <TextBlock Grid.Column=\"6\" Grid.Row=\"0\" Text=\"Magic\"/>\n                <TextBox Grid.Column=\"6\" Grid.Row=\"1\" Text=\"{Binding BonusMagic, UpdateSourceTrigger=PropertyChanged}\" />\n                <TextBlock Grid.Column=\"8\" Grid.Row=\"0\" Text=\"Defense\"/>\n                <TextBox Grid.Column=\"8\" Grid.Row=\"1\" Text=\"{Binding BonusDefense, UpdateSourceTrigger=PropertyChanged}\" />\n            </Grid>\n        </GroupBox>\n\n        <GroupBox Header=\"Room mod\" Visibility=\"{Binding SimpleVisibility}\">\n            <StackPanel>\n                <TextBlock Grid.Column=\"2\" Grid.Row=\"0\"\n                    Text=\"Main game map\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"1\"\n                    ItemsSource=\"{Binding Maps}\"\n                    SelectedValue=\"{Binding MapPath}\"\n                    DisplayMemberPath=\"Description\"\n                    SelectedValuePath=\"Value\"/>\n\n                <TextBlock Grid.Column=\"2\" Grid.Row=\"0\"\n                    Text=\"DLC game map\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"1\"\n                    ItemsSource=\"{Binding Maps}\"\n                    SelectedValue=\"{Binding DlcMapPath}\"\n                    DisplayMemberPath=\"Description\"\n                    SelectedValuePath=\"Value\"/>\n\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"3\" Grid.ColumnSpan=\"3\" TextWrapping=\"Wrap\"\n                    Text=\"Playable character (works only on cutscene maps). Some characters have no input controls and others trigger battles.\"/>\n                <ComboBox Grid.Column=\"0\" Grid.Row=\"4\" Grid.ColumnSpan=\"3\"\n                    ItemsSource=\"{Binding PlayableCharacters}\"\n                    SelectedValue=\"{Binding PlayerCharacter}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </StackPanel>\n        </GroupBox>\n\n        <GroupBox Header=\"Room mod (advanced mode)\" Visibility=\"{Binding AdvancedVisibility}\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"5\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"5\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"0\" Text=\"Map path\"/>\n                <TextBox Grid.Column=\"0\" Grid.Row=\"1\" Text=\"{Binding MapPath, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Column=\"2\" Grid.Row=\"0\"  Text=\"Spawn point\"/>\n                <TextBox Grid.Column=\"2\" Grid.Row=\"1\" Text=\"{Binding MapSpawn, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"3\" Text=\"DLC Map path\"/>\n                <TextBox Grid.Column=\"0\" Grid.Row=\"4\" Text=\"{Binding DlcMapPath, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Column=\"2\" Grid.Row=\"3\" Text=\"DLC Spawn point\"/>\n                <TextBox Grid.Column=\"2\" Grid.Row=\"4\" Text=\"{Binding DlcMapSpawn, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Column=\"0\" Grid.Row=\"6\" Text=\"Player script\"/>\n                <TextBox Grid.Column=\"0\" Grid.Row=\"7\" Text=\"{Binding PlayerScript, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Column=\"2\" Grid.Row=\"6\" Text=\"Pawn path\"/>\n                <TextBox Grid.Column=\"2\" Grid.Row=\"7\" Text=\"{Binding PlayerCharacter, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </GroupBox>\n\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Kh3/Views/SystemView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Kh3.Views\n{\n    /// <summary>\n    /// Interaction logic for SystemView.xaml\n    /// </summary>\n    public partial class SystemView : UserControl\n    {\n        public SystemView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/KHSave.SaveEditor.KhBbs.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.LibBbs\\KHSave.LibBbs.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\" />\n  </ItemGroup>\n  \n</Project>"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/MainView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhBbs.MainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhBbs\"\n             xmlns:views=\"clr-namespace:KHSave.SaveEditor.KhBbs.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <TabControl>\n        <TabItem Header=\"System\">\n            <views:SystemView DataContext=\"{Binding System}\" />\n        </TabItem>\n        <TabItem Header=\"Character\">\n            <views:CharacterView DataContext=\"{Binding Character}\" />\n        </TabItem>\n        <TabItem Header=\"Command List\">\n            <views:CommandListView DataContext=\"{Binding CommandList}\" />\n        </TabItem>\n        <TabItem Header=\"Decks\">\n            <views:DecksView DataContext=\"{Binding Decks}\" />\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/MainView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhBbs\n{\n    /// <summary>\n    /// Interaction logic for MainView.xaml\n    /// </summary>\n    public partial class MainView : UserControl\n    {\n        public MainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Models/CommandListModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibBbs.Models;\nusing KHSave.LibBbs.Types;\nusing KHSave.SaveEditor.Common.Services;\nusing System.Windows.Media;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.KhBbs.Models\n{\n    public class CommandListModel : BaseNotifyPropertyChanged\n    {\n        private readonly int _index;\n        private readonly Command[] _commands;\n\n        public CommandListModel(int index, Command[] commands)\n        {\n            _index = index;\n            _commands = commands;\n        }\n\n        public string Name => InfoAttribute.GetInfo(_commands[_index].Id);\n        public ImageSource Icon => IconService.Icon(_commands[_index].Id);\n        //public CommandType CommandType => _commands[_index].Id;\n\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/ViewModels/CharacterViewModel.cs",
    "content": "using KHSave.LibBbs.Models;\nusing KHSave.LibBbs.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.KhBbs.ViewModels\n{\n    public class CharacterViewModel\n    {\n        private readonly Character character;\n\n        public CharacterViewModel(Character character)\n        {\n            this.character = character;\n            Weapon = new ItemComboBoxModel<WeaponType>(() => character.Weapon, x => character.Weapon = x);\n        }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public ItemComboBoxModel<WeaponType> Weapon { get; set; }\n\n        public uint Experience { get => character.Experience; set => character.Experience = value; }\n        public uint Money { get => character.Money; set => character.Money = value; }\n        public uint Medals { get => character.Medals; set => character.Medals = value; }\n        public ushort Level { get => character.Level; set => character.Level = value; }\n        public ushort Hp1 { get => character.Hp1; set => character.Hp1 = value; }\n        public ushort Hp2 { get => character.Hp2; set => character.Hp2 = value; }\n        public ushort Unk12 { get => character.Unk12; set => character.Unk12 = value; }\n        public ushort Unk14 { get => character.Unk14; set => character.Unk14 = value; }\n        public ushort Unk16 { get => character.Unk16; set => character.Unk16 = value; }\n        public ushort Magic { get => character.Magic; set => character.Magic = value; }\n        public ushort Defense { get => character.Defense; set => character.Defense = value; }\n        public ushort ArenaLevel { get => character.ArenaLevel; set => character.ArenaLevel = value; }\n        public ushort Strength { get => character.Strength; set => character.Strength = value; }\n        public ushort Unk20 { get => character.Unk20; set => character.Unk20 = value; }\n        public ushort Unk22 { get => character.Unk22; set => character.Unk22 = value; }\n        public ushort Unk24 { get => character.Unk24; set => character.Unk24 = value; }\n        public ushort Unk26 { get => character.Unk26; set => character.Unk26 = value; }\n        public ushort Unk28 { get => character.Unk28; set => character.Unk28 = value; }\n        public ushort Unk2C { get => character.Unk2C; set => character.Unk2C = value; }\n        public ushort Unk2E { get => character.Unk2E; set => character.Unk2E = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/ViewModels/CommandListViewModel.cs",
    "content": "using KHSave.LibBbs;\nusing KHSave.LibBbs.Models;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.KhBbs.ViewModels\n{\n    public class CommandListViewModel : GenericListModel<CommandViewModel>\n    {\n        private readonly SaveKhBbs.SaveFinalMix save;\n\n        public CommandListViewModel(SaveKhBbs.SaveFinalMix save) :\n            this(save.CommandList)\n        {\n            this.save = save;\n        }\n\n        public CommandListViewModel(IEnumerable<Command> list) :\n            this(list.Select(x => new CommandViewModel(x)))\n        {\n\n        }\n\n        public CommandListViewModel(IEnumerable<CommandViewModel> list) :\n            base(list)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/ViewModels/CommandViewModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibBbs.Models;\nusing KHSave.LibBbs.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Common.Services;\nusing System.Windows.Media;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.KhBbs.ViewModels\n{\n    public class CommandViewModel : BaseNotifyPropertyChanged\n    {\n        private Command command;\n\n        public CommandViewModel(Command command)\n        {\n            this.command = command;\n\n            Id = new ItemComboBoxModel<CommandType>(() => command.Id, x => { command.Id = x; OnPropertyChanged(nameof(Name)); OnPropertyChanged(nameof(Icon)); });\n            Ability = new ItemComboBoxModel<AbilityType>(() => command.Ability, x => command.Ability = x);\n        }\n\n        public ImageSource Icon => IconService.Icon(command.Id);\n\n        public string Name => InfoAttribute.GetInfo(command.Id);\n\n        public ItemComboBoxModel<CommandType> Id { get; set; }\n        public ItemComboBoxModel<AbilityType> Ability { get; set; }\n\n        public ushort Level { get => command.Level; set => command.Level = value; }\n        public ushort Experience { get => command.Experience; set => command.Experience = value; }\n        public ushort Flags { get => command.Flags; set => command.Flags = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/ViewModels/DeckViewModel.cs",
    "content": "using KHSave.LibBbs.Models;\nusing System.Text;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.KhBbs.ViewModels\n{\n    public class DeckViewModel : BaseNotifyPropertyChanged\n    {\n        private Deck deck;\n\n        public DeckViewModel(Deck deck, CommandListViewModel commandList)\n        {\n            this.deck = deck;\n            CommandList = commandList;\n        }\n\n        public CommandListViewModel CommandList { get; set; }\n\n        public string Name => Encoding.GetEncoding(932).GetString(deck.Name); //shift-jis, seems to work in european saves as well\n\n        public short BattleCommand1 { get => GetValue(deck.BattleCommands[0].Id); set => deck.BattleCommands[0].Id = (ushort)value; }\n        public short BattleCommand2 { get => GetValue(deck.BattleCommands[1].Id); set => deck.BattleCommands[1].Id = (ushort)value; }\n        public short BattleCommand3 { get => GetValue(deck.BattleCommands[2].Id); set => deck.BattleCommands[2].Id = (ushort)value; }\n        public short BattleCommand4 { get => GetValue(deck.BattleCommands[3].Id); set => deck.BattleCommands[3].Id = (ushort)value; }\n        public short BattleCommand5 { get => GetValue(deck.BattleCommands[4].Id); set => deck.BattleCommands[4].Id = (ushort)value; }\n        public short BattleCommand6 { get => GetValue(deck.BattleCommands[5].Id); set => deck.BattleCommands[5].Id = (ushort)value; }\n        public short BattleCommand7 { get => GetValue(deck.BattleCommands[6].Id); set => deck.BattleCommands[6].Id = (ushort)value; }\n        public short BattleCommand8 { get => GetValue(deck.BattleCommands[7].Id); set => deck.BattleCommands[7].Id = (ushort)value; }\n\n        public short ActionCommand1 { get => GetValue(deck.ActionCommands[0].Id); set => deck.ActionCommands[0].Id = (ushort)value; }\n        public short ActionCommand2 { get => GetValue(deck.ActionCommands[1].Id); set => deck.ActionCommands[1].Id = (ushort)value; }\n        public short ActionCommand3 { get => GetValue(deck.ActionCommands[2].Id); set => deck.ActionCommands[2].Id = (ushort)value; }\n        public short ActionCommand4 { get => GetValue(deck.ActionCommands[3].Id); set => deck.ActionCommands[3].Id = (ushort)value; }\n        public short ActionCommand5 { get => GetValue(deck.ActionCommands[4].Id); set => deck.ActionCommands[4].Id = (ushort)value; }\n        public short ActionCommand6 { get => GetValue(deck.ActionCommands[5].Id); set => deck.ActionCommands[5].Id = (ushort)value; }\n        public short ActionCommand7 { get => GetValue(deck.ActionCommands[6].Id); set => deck.ActionCommands[6].Id = (ushort)value; }\n        public short ActionCommand8 { get => GetValue(deck.ActionCommands[7].Id); set => deck.ActionCommands[7].Id = (ushort)value; }\n        public short ActionCommand9 { get => GetValue(deck.ActionCommands[8].Id); set => deck.ActionCommands[8].Id = (ushort)value; }\n        public short ActionCommand10 { get => GetValue(deck.ActionCommands[9].Id); set => deck.ActionCommands[9].Id = (ushort)value; }\n\n        public short Shotlock { get => GetValue(deck.Shotlock.Id); set => deck.Shotlock.Id = (ushort)value; }\n\n        private short GetValue(ushort value)\n        {\n            if (value == 0xffff)\n                return -1;\n            else\n                return (short)value;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/ViewModels/DecksViewModel.cs",
    "content": "using KHSave.LibBbs.Models;\nusing System.Linq;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.KhBbs.ViewModels\n{\n    public class DecksViewModel : GenericListModel<DeckViewModel>\n    {\n        public DecksViewModel(Deck[] decks, CommandListViewModel commandList) :\n            base(decks.Select(x => new DeckViewModel(x, commandList)))\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/ViewModels/KhBbsViewModel.cs",
    "content": "using KHSave.LibBbs;\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.SaveEditor.Common.Exceptions;\nusing System.IO;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.KhBbs.ViewModels\n{\n    public class KhBbsViewModel : BaseNotifyPropertyChanged, IRefreshUi, IOpenStream, IWriteToStream\n    {\n        private ISaveKhBbs save;\n\n        public SystemViewModel System { get; set; }\n        public CharacterViewModel Character { get; set; }\n        public CommandListViewModel CommandList { get; set; }\n        public DecksViewModel Decks { get; set; }\n\n        public void RefreshUi()\n        {\n            System = new SystemViewModel(save);\n            Character = new CharacterViewModel(save.Character);\n            CommandList = new CommandListViewModel(save.CommandList);\n            Decks = new DecksViewModel(save.Decks, CommandList);\n\n            OnPropertyChanged(nameof(System));\n            OnPropertyChanged(nameof(Character));\n            OnPropertyChanged(nameof(CommandList));\n            OnPropertyChanged(nameof(Decks));\n        }\n\n        public void OpenStream(Stream stream)\n        {\n            switch (SaveKhBbs.GetGameVersion(stream))\n            {\n                case GameVersion.FinalMix:\n                    save = SaveKhBbs.Read<SaveKhBbs.SaveFinalMix>(stream);\n                    break;\n                default:\n                    throw new SaveNotSupportedException(\"The version is not supported.\");\n            }\n            RefreshUi();\n        }\n\n        public void WriteToStream(Stream stream) => SaveKhBbs.Write(stream, save);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/ViewModels/SystemViewModel.cs",
    "content": "using KHSave.LibBbs;\nusing KHSave.LibBbs.Types;\nusing KHSave.SaveEditor.Common.Models;\n\nnamespace KHSave.SaveEditor.KhBbs.ViewModels\n{\n    public class SystemViewModel\n    {\n        private readonly ISaveKhBbs save;\n\n        public SystemViewModel(ISaveKhBbs save)\n        {\n            this.save = save;\n            Difficulty = new KhEnumListModel<DifficultyType>(() => save.Difficulty, x => save.Difficulty = x);\n            Character = new KhEnumListModel<CharacterType>(() => save.PlayableCharacter, x => save.PlayableCharacter = x);\n            Worlds = new KhEnumListModel<WorldType>();\n        }\n\n        public KhEnumListModel<DifficultyType> Difficulty { get; set; }\n        public KhEnumListModel<CharacterType> Character { get; set; }\n        public KhEnumListModel<WorldType> Worlds { get; set; }\n\n        public WorldType WorldId { get => save.World; set => save.World = value; }\n        public byte RoomId { get => save.Room; set => save.Room = value; }\n        public byte SpawnId { get => save.Location; set => save.Location = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/CharacterView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhBbs.Views.CharacterView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhBbs.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <ScrollViewer>\n        <StackPanel>\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Experience\" />\n                <TextBox Text=\"{Binding Experience, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Munnies\" />\n                <TextBox Text=\"{Binding Money, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Medals\" />\n                <TextBox Text=\"{Binding Medals, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Level\" />\n                <TextBox Text=\"{Binding Level, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"HP 1\" />\n                <TextBox Text=\"{Binding Hp1, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"HP 2\" />\n                <TextBox Text=\"{Binding Hp2, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Magic\" />\n                <TextBox Text=\"{Binding Magic, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Defense\" />\n                <TextBox Text=\"{Binding Defense, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Arena Level\" />\n                <TextBox Text=\"{Binding ArenaLevel, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Strength\" />\n                <TextBox Text=\"{Binding Strength, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Weapon\" />\n                <common:ItemComboBox DataContext=\"{Binding Weapon}\" />\n            </common:TwoEqualColumnsStackPanel>\n            <common:TwoEqualColumnsStackPanel Visibility=\"{Binding AdvancedVisibility}\">\n                <TextBlock Text=\"Unk12\" />\n                <TextBox Text=\"{Binding Unk12, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unk14\" />\n                <TextBox Text=\"{Binding Unk14, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unk16\" />\n                <TextBox Text=\"{Binding Unk16, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unk20\" />\n                <TextBox Text=\"{Binding Unk20, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unk22\" />\n                <TextBox Text=\"{Binding Unk22, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unk24\" />\n                <TextBox Text=\"{Binding Unk24, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unk26\" />\n                <TextBox Text=\"{Binding Unk26, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unk28\" />\n                <TextBox Text=\"{Binding Unk28, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unk2C\" />\n                <TextBox Text=\"{Binding Unk2C, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Unk2E\" />\n                <TextBox Text=\"{Binding Unk28, UpdateSourceTrigger=PropertyChanged}\"/>\n            </common:TwoEqualColumnsStackPanel>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/CharacterView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhBbs.Views\n{\n    /// <summary>\n    /// Interaction logic for CharacterView.xaml\n    /// </summary>\n    public partial class CharacterView : UserControl\n    {\n        public CharacterView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/CommandListView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhBbs.Views.CommandListView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhBbs.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"1*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\">\n            <ListBox.ItemTemplate>\n                <DataTemplate>\n                    <StackPanel Orientation=\"Horizontal\">\n                        <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                        <TextBlock Text=\"{Binding Name}\" />\n                    </StackPanel>\n                </DataTemplate>\n            </ListBox.ItemTemplate>\n        </ListBox>\n        <local:CommandView Grid.Column=\"2\" DataContext=\"{Binding SelectedItem}\" />\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/CommandListView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhBbs.Views\n{\n    /// <summary>\n    /// Interaction logic for CommandListView.xaml\n    /// </summary>\n    public partial class CommandListView : UserControl\n    {\n        public CommandListView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/CommandView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhBbs.Views.CommandView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:controls=\"clr-namespace:Xe.Tools.Wpf.Controls;assembly=Xe.Tools.Wpf\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhBbs.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <UserControl.Resources>\n        <Thickness x:Key=\"LabelMargin\" Left=\"0\" Top=\"0\" Right=\"5\" Bottom=\"0\" />\n    </UserControl.Resources>\n    <controls:TwoColumnsPanel RowSpacing=\"3\">\n\n        <TextBlock Text=\"Id\" Margin=\"{StaticResource LabelMargin}\" />\n        <common:ItemComboBox DataContext=\"{Binding Id}\"/>\n\n        <TextBlock Text=\"Level\" Margin=\"{StaticResource LabelMargin}\" />\n        <TextBox Text=\"{Binding Level, UpdateSourceTrigger=PropertyChanged}\" />\n\n        <TextBlock Text=\"Experience\" Margin=\"{StaticResource LabelMargin}\" />\n        <TextBox Text=\"{Binding Experience, UpdateSourceTrigger=PropertyChanged}\" />\n\n        <TextBlock Text=\"Ability\" Margin=\"{StaticResource LabelMargin}\" />\n        <common:ItemComboBox DataContext=\"{Binding Ability}\"/>\n\n        <TextBlock Text=\"Flags\" Margin=\"{StaticResource LabelMargin}\" />\n        <TextBox Text=\"{Binding Flags, UpdateSourceTrigger=PropertyChanged}\" />\n\n    </controls:TwoColumnsPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/CommandView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhBbs.Views\n{\n    /// <summary>\n    /// Interaction logic for CommandView.xaml\n    /// </summary>\n    public partial class CommandView : UserControl\n    {\n        public CommandView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/DeckView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhBbs.Views.DeckView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhBbs.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <UserControl.Resources>\n        <DataTemplate x:Key=\"DescWithIcon\">\n            <StackPanel Orientation=\"Horizontal\">\n                <Image Margin=\"0 0 3 0\" Width=\"16\" Height=\"16\" Source=\"{Binding Icon}\"/>\n                <TextBlock Text=\"{Binding Name}\" />\n            </StackPanel>\n        </DataTemplate>\n    </UserControl.Resources>\n    <ScrollViewer>\n        <StackPanel>\n            <GroupBox Header=\"Battle Commands\">\n                <common:TwoEqualColumnsStackPanel>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding BattleCommand1}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding BattleCommand2}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding BattleCommand3}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding BattleCommand4}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding BattleCommand5}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding BattleCommand6}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding BattleCommand7}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding BattleCommand8}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                </common:TwoEqualColumnsStackPanel>\n            </GroupBox>\n            <GroupBox Header=\"Action Commands\">\n                <common:TwoEqualColumnsStackPanel>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding ActionCommand1}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding ActionCommand2}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding ActionCommand3}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding ActionCommand4}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding ActionCommand5}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding ActionCommand6}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding ActionCommand7}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding ActionCommand8}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding ActionCommand9}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                    <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding ActionCommand10}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n                </common:TwoEqualColumnsStackPanel>\n            </GroupBox>\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Shotlock\" />\n                <ComboBox ItemsSource=\"{Binding CommandList}\" SelectedIndex=\"{Binding Shotlock}\" ItemTemplate=\"{StaticResource DescWithIcon}\"/>\n            </common:TwoEqualColumnsStackPanel>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/DeckView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhBbs.Views\n{\n    /// <summary>\n    /// Interaction logic for DeckView.xaml\n    /// </summary>\n    public partial class DeckView : UserControl\n    {\n        public DeckView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/DecksView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhBbs.Views.DecksView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhBbs.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"0.5*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"/>\n        <local:DeckView Grid.Column=\"2\" DataContext=\"{Binding SelectedItem}\" />\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/DecksView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhBbs.Views\n{\n    /// <summary>\n    /// Interaction logic for DecksView.xaml\n    /// </summary>\n    public partial class DecksView : UserControl\n    {\n        public DecksView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/SystemView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhBbs.Views.SystemView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhBbs.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <StackPanel>\n        <GroupBox Header=\"Misc\">\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Difficulty\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Difficulty}\"\n                    SelectedValue=\"{Binding Difficulty.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBlock Text=\"Playable character\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Character}\"\n                    SelectedValue=\"{Binding Character.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n            </common:TwoEqualColumnsStackPanel>\n        </GroupBox>\n        <GroupBox Header=\"Room modifier\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"World\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"Room\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"4\" Text=\"Spawn location\"/>\n\n                <ComboBox Grid.Row=\"1\" Grid.Column=\"0\"\n                    ItemsSource=\"{Binding Worlds}\"\n                    SelectedValue=\"{Binding WorldId}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBox Grid.Row=\"1\" Grid.Column=\"2\"\n                    Text=\"{Binding RoomId, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBox Grid.Row=\"1\" Grid.Column=\"4\"\n                    Text=\"{Binding SpawnId, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </GroupBox>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhBbs/Views/SystemView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhBbs.Views\n{\n    /// <summary>\n    /// Interaction logic for SystemView.xaml\n    /// </summary>\n    public partial class SystemView : UserControl\n    {\n        public SystemView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Interfaces/IResourceGetter.cs",
    "content": "using KHSave.LibDDD.Types;\nusing KHSave.SaveEditor.Common.Models;\n\nnamespace KHSave.SaveEditor.KhDDD.Interfaces\n{\n    public interface IResourceGetter\n    {\n        KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType> Equipments { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/KHSave.SaveEditor.KhDDD.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Remove=\"Models\\**\" />\n    <EmbeddedResource Remove=\"Models\\**\" />\n    <None Remove=\"Models\\**\" />\n    <Page Remove=\"Models\\**\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.LibDDD\\KHSave.LibDDD.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/MainView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.KhDDD.MainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhDDD\"\n             xmlns:views=\"clr-namespace:KHSave.SaveEditor.KhDDD.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <TabControl>\n        <TabItem Header=\"System\">\n            <views:SystemView DataContext=\"{Binding System}\"/>\n        </TabItem>\n        <TabItem Header=\"Character\">\n            <views:Character DataContext=\"{Binding Character}\"/>\n        </TabItem>\n        <TabItem Header=\"Commands\">\n            <views:CommandsView DataContext=\"{Binding Commands}\"/>\n        </TabItem>\n        <TabItem Header=\"Dream Eaters\">\n            <views:DreamEaters DataContext=\"{Binding DreamEaters}\"/>\n        </TabItem>\n        <TabItem Header=\"Sora Decks\">\n            <views:Decks DataContext=\"{Binding SoraDecks}\"/>\n        </TabItem>\n        <TabItem Header=\"Riku Decks\">\n            <views:Decks DataContext=\"{Binding RikuDecks}\"/>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/MainView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhDDD\n{\n    /// <summary>\n    /// Interaction logic for MainView.xaml\n    /// </summary>\n    public partial class MainView : UserControl\n    {\n        public MainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/ViewModels/CharacterViewModel.cs",
    "content": "using KHSave.LibDDD;\nusing KHSave.LibDDD.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.KhDDD.Interfaces;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.KhDDD.ViewModels\n{\n    public class CharacterViewModel : BaseNotifyPropertyChanged\n    {\n        public CharacterViewModel(ISaveKhDDD save, IResourceGetter resourceGetter)\n        {\n            _save = save;\n            SoraKeyblade = new ItemComboBoxModel<EquipmentType>(\n                () => save.SoraKeyblade, x => save.SoraKeyblade = x);\n            RikuKeyblade = new ItemComboBoxModel<EquipmentType>(\n                () => save.RikuKeyblade, x => save.RikuKeyblade = x);\n        }\n\n        private readonly ISaveKhDDD _save;\n\n        public ItemComboBoxModel<EquipmentType> SoraKeyblade { get; set; }\n        public ItemComboBoxModel<EquipmentType> RikuKeyblade { get; set; }\n        public byte SoraLv { get => _save.SoraLv; set => _save.SoraLv = value; }\n        public byte RikuLv { get => _save.RikuLv; set => _save.RikuLv = value; }\n        public uint SoraXp { get => _save.SoraXp; set => _save.SoraXp = value; }\n        public uint RikuXp { get => _save.RikuXp; set => _save.RikuXp = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/ViewModels/CommandsViewModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibDDD.Model;\nusing KHSave.LibDDD.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.KhDDD.Interfaces;\nusing System;\nusing System.Linq;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.KhDDD.ViewModels\n{\n    public class CommandsViewModel : GenericListModel<CommandEntryViewModel>\n    {\n        private string _searchTerm;\n\n        public CommandsViewModel(CommandEntry[] commands, IResourceGetter resourceGetter) :\n            base(commands.Select(x => new CommandEntryViewModel(x, resourceGetter)))\n        {\n\n        }\n\n        public string SearchTerm\n        {\n            get => _searchTerm;\n            set\n            {\n                _searchTerm = value;\n                Filter(items => SearchEngine.Filter(_searchTerm, items));\n                OnPropertyChanged(nameof(Items));\n            }\n        }\n    }\n\n    public class CommandEntryViewModel : BaseNotifyPropertyChanged, SearchEngine.IName, SearchEngine.ICount\n    {\n        private readonly CommandEntry _commandEntry;\n        private readonly IResourceGetter _resourceGetter;\n\n        public CommandEntryViewModel(CommandEntry commandEntry, IResourceGetter resourceGetter)\n        {\n            _commandEntry = commandEntry;\n            _resourceGetter = resourceGetter;\n        }\n\n        public string Name => InfoAttribute.GetInfo(Id);\n\n        public KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType> Commands => _resourceGetter.Equipments;\n\n        public EquipmentType Id\n        {\n            get => _commandEntry.Id;\n            set\n            {\n                _commandEntry.Id = value;\n                OnPropertyChanged(nameof(Name));\n            }\n        }\n\n        public bool IsSoraEquippedDeck1\n        {\n            get => (_commandEntry.SoraEquipFlags & 1) != 0;\n            set\n            {\n                if (value)\n                    _commandEntry.SoraEquipFlags |= 1;\n                else\n                    _commandEntry.SoraEquipFlags = (byte)(_commandEntry.SoraEquipFlags & ~1);\n            }\n        }\n\n        public bool IsSoraEquippedDeck2\n        {\n            get => (_commandEntry.SoraEquipFlags & 2) != 0;\n            set\n            {\n                if (value)\n                    _commandEntry.SoraEquipFlags |= 2;\n                else\n                    _commandEntry.SoraEquipFlags = (byte)(_commandEntry.SoraEquipFlags & ~2);\n            }\n        }\n\n        public bool IsSoraEquippedDeck3\n        {\n            get => (_commandEntry.SoraEquipFlags & 4) != 0;\n            set\n            {\n                if (value)\n                    _commandEntry.SoraEquipFlags |= 4;\n                else\n                    _commandEntry.SoraEquipFlags = (byte)(_commandEntry.SoraEquipFlags & ~4);\n            }\n        }\n\n        public bool IsRikuEquippedDeck1\n        {\n            get => (_commandEntry.RikuEquipFlags & 1) != 0;\n            set\n            {\n                if (value)\n                    _commandEntry.RikuEquipFlags |= 1;\n                else\n                    _commandEntry.RikuEquipFlags = (byte)(_commandEntry.RikuEquipFlags & ~1);\n            }\n        }\n\n        public bool IsRikuEquippedDeck2\n        {\n            get => (_commandEntry.RikuEquipFlags & 2) != 0;\n            set\n            {\n                if (value)\n                    _commandEntry.RikuEquipFlags |= 2;\n                else\n                    _commandEntry.RikuEquipFlags = (byte)(_commandEntry.RikuEquipFlags & ~2);\n            }\n        }\n\n        public bool IsRikuEquippedDeck3\n        {\n            get => (_commandEntry.RikuEquipFlags & 4) != 0;\n            set\n            {\n                if (value)\n                    _commandEntry.RikuEquipFlags |= 4;\n                else\n                    _commandEntry.RikuEquipFlags = (byte)(_commandEntry.RikuEquipFlags & ~4);\n            }\n        }\n\n        public int Count\n        {\n            get => _commandEntry.Amount;\n            set => _commandEntry.Amount = (byte)Math.Min(Math.Max(value, 0), 255);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/ViewModels/DeckViewModel.cs",
    "content": "using KHSave.LibDDD.Model;\nusing System.Text;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.KhDDD.ViewModels\n{\n    public class DeckViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly IDeck deck;\n\n        public DeckViewModel(IDeck deck)\n        {\n            this.deck = deck;\n        }\n\n        public string Name { get => Encoding.GetEncoding(932).GetString(deck.Name); set => deck.Name = Encoding.GetEncoding(932).GetBytes(value); }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/ViewModels/DecksViewModel.cs",
    "content": "using KHSave.LibDDD.Model;\nusing System.Linq;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.KhDDD.ViewModels\n{\n    public class DecksViewModel : GenericListModel<DeckViewModel>\n    {\n        public DecksViewModel(IDeck[] decks) :\n            base(decks.Select(x => new DeckViewModel(x)))\n        { }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/ViewModels/DreamEaterViewModel.cs",
    "content": "using KHSave.LibDDD.Model;\nusing KHSave.LibDDD.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing System.Text;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.KhDDD.ViewModels\n{\n    public class DreamEaterViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly DreamEater dreamEater;\n\n        public DreamEaterViewModel(DreamEater dreamEater)\n        {\n            this.dreamEater = dreamEater;\n            DreamEaterTypes = new KhEnumListModel<DreamEaterType>();\n        }\n        public DreamEaterType DreamEaterType { get => dreamEater.DreamEaterType; set => dreamEater.DreamEaterType = value; }\n        public KhEnumListModel<DreamEaterType> DreamEaterTypes { get; set; }\n        public string Name\n        {\n            get => Encoding.GetEncoding(932).GetString(dreamEater.Name);\n            set\n            {\n                dreamEater.Name = Encoding.GetEncoding(932).GetBytes(value);\n                OnPropertyChanged();\n            }\n        } //shift-jis, is the same for EU save\n\n        public byte Attack { get => dreamEater.Attack; set => dreamEater.Attack = value; }\n        public byte Magic { get => dreamEater.Magic; set => dreamEater.Magic = value; }\n        public byte Defence { get => dreamEater.Defence; set => dreamEater.Defence = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/ViewModels/DreamEatersViewModel.cs",
    "content": "using KHSave.LibDDD.Model;\nusing System.Linq;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.KhDDD.ViewModels\n{\n    public class DreamEatersViewModel : GenericListModel<DreamEaterViewModel>\n    {\n        public DreamEatersViewModel(DreamEater[] dreamEaters) :\n            base(dreamEaters.Select(x => new DreamEaterViewModel(x)))\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/ViewModels/KhDDDViewModel.cs",
    "content": "using KHSave.LibDDD;\nusing KHSave.LibDDD.Model;\nusing KHSave.LibDDD.Types;\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.KhDDD.Interfaces;\nusing System.IO;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.KhDDD.ViewModels\n{\n    public class KhDDDViewModel : BaseNotifyPropertyChanged,\n        IRefreshUi, IOpenStream, IWriteToStream, IResourceGetter\n    {\n        private ISaveKhDDD save;\n\n        public KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType> Equipments { get; private set; }\n\n        public SystemViewModel System { get; set; }\n        public CharacterViewModel Character { get; set; }\n        public CommandsViewModel Commands { get; set; }\n        public DreamEatersViewModel DreamEaters { get; set; }\n        public DecksViewModel SoraDecks { get; set; }\n        public DecksViewModel RikuDecks { get; set; }\n\n        public void RefreshUi()\n        {\n            Equipments = new KhEnumListModel<EnumIconTypeModel<EquipmentType>, EquipmentType>();\n\n            System = new SystemViewModel(save);\n            Character = new CharacterViewModel(save, this);\n            Commands = new CommandsViewModel(save.CommandInventory, this);\n            DreamEaters = new DreamEatersViewModel(save.DreamEaters);\n            SoraDecks = new DecksViewModel(save.SoraDecks);\n            RikuDecks = new DecksViewModel(save.RikuDecks);\n\n            OnPropertyChanged(nameof(System));\n            OnPropertyChanged(nameof(Character));\n            OnPropertyChanged(nameof(Commands));\n            OnPropertyChanged(nameof(DreamEater));\n            OnPropertyChanged(nameof(Deck));\n        }\n\n        public void OpenStream(Stream stream)\n        {\n\n            save = SaveKhDDD.Read(stream);\n\n            RefreshUi();\n        }\n\n        public void WriteToStream(Stream stream) => SaveKhDDD.Write(stream, save);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/ViewModels/SystemViewModel.cs",
    "content": "using KHSave.LibDDD;\nusing KHSave.LibDDD.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing System;\n\nnamespace KHSave.SaveEditor.KhDDD.ViewModels\n{\n    public class SystemViewModel\n    {\n        private readonly ISaveKhDDD save;\n\n        public SystemViewModel(ISaveKhDDD save)\n        {\n            this.save = save;\n            Difficulty = new KhEnumListModel<DifficultyType>(() => save.Difficulty, x => save.Difficulty = x);\n            Worlds = new KhEnumListModel<WorldType>();\n        }\n\n        public KhEnumListModel<DifficultyType> Difficulty { get; set; }\n        public UInt32 Munny { get => save.Munny; set => save.Munny = value; }\n        public KhEnumListModel<WorldType> Worlds { get; set; }\n\n        public WorldType WorldId { get => save.WorldId; set => save.WorldId = value; }\n        public byte RoomId { get => save.RoomId; set => save.RoomId = value; }\n        public byte SpawnId { get => save.SpawnId; set => save.SpawnId = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/Character.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhDDD.Views.Character\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhDDD.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <ScrollViewer>\n        <StackPanel>\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Sora keyblade\"/>\n                <common:ItemComboBox DataContext=\"{Binding SoraKeyblade}\"/>\n                <TextBlock Text=\"Riku keyblade\"/>\n                <common:ItemComboBox DataContext=\"{Binding RikuKeyblade}\"/>\n                <TextBlock Text=\"Sora Xp\"/>\n                <TextBox Text=\"{Binding SoraXp, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Riku Xp\"/>\n                <TextBox Text=\"{Binding RikuXp, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Sora Level\"/>\n                <TextBox Text=\"{Binding SoraLv, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Riku Level\"/>\n                <TextBox Text=\"{Binding RikuLv, UpdateSourceTrigger=PropertyChanged}\"/>\n                \n            </common:TwoEqualColumnsStackPanel>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/Character.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhDDD.Views\n{\n    /// <summary>\n    /// Interaction logic for Character.xaml\n    /// </summary>\n    public partial class Character : UserControl\n    {\n        public Character()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/CommandsView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.KhDDD.Views.CommandsView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhDDD.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"400\">\n    <Grid DataContext=\"{Binding}\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <DataGrid\n            ItemsSource=\"{Binding Items}\"\n            AutoGenerateColumns=\"False\"\n            IsReadOnly=\"False\"\n            GridLinesVisibility=\"None\">\n            <DataGrid.Columns>\n                <DataGridTemplateColumn Header=\"Command\" Width=\"9*\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <ComboBox\n                                ItemsSource=\"{Binding Commands}\"\n                                SelectedValue=\"{Binding Id}\"\n                                SelectedValuePath=\"Value\">\n                                <ComboBox.ItemTemplate>\n                                    <DataTemplate>\n                                        <StackPanel Orientation=\"Horizontal\">\n                                            <Image\n                                                Margin=\"0 0 3 0\"\n                                                Width=\"16\" Height=\"16\"\n                                                Source=\"{Binding Icon}\"/>\n                                            <TextBlock Text=\"{Binding Name}\" />\n                                        </StackPanel>\n                                    </DataTemplate>\n                                </ComboBox.ItemTemplate>\n                            </ComboBox>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n                \n                <DataGridTextColumn\n                    Header=\"Amount\" Width=\"3*\"\n                    Binding=\"{Binding Count, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <DataGridTemplateColumn Header=\"Sora decks equip\" Width=\"4*\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <CheckBox IsChecked=\"{Binding IsSoraEquippedDeck1}\" />\n                                <CheckBox IsChecked=\"{Binding IsSoraEquippedDeck2}\" />\n                                <CheckBox IsChecked=\"{Binding IsSoraEquippedDeck3}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n\n                <DataGridTemplateColumn Header=\"Riku decks equip\" Width=\"4*\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <CheckBox IsChecked=\"{Binding IsRikuEquippedDeck1}\" />\n                                <CheckBox IsChecked=\"{Binding IsRikuEquippedDeck2}\" />\n                                <CheckBox IsChecked=\"{Binding IsRikuEquippedDeck3}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n                \n            </DataGrid.Columns>\n        </DataGrid>\n        <Grid Grid.Row=\"1\" Margin=\"0 5 5 5\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Image Grid.Column=\"0\"\n                Source=\"{StaticResource Search_16x}\"/>\n            <TextBox Grid.Column=\"2\"\n                Text=\"{Binding SearchTerm, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/CommandsView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.KhDDD.Views\n{\n    /// <summary>\n    /// Interaction logic for CommandsView.xaml\n    /// </summary>\n    public partial class CommandsView : UserControl\n    {\n        public CommandsView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/Deck.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhDDD.Views.Deck\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhDDD.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <ScrollViewer>\n        <StackPanel>\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Name\" />\n                <TextBox Text=\"{Binding Name, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                \n            </common:TwoEqualColumnsStackPanel>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/Deck.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhDDD.Views\n{\n    /// <summary>\n    /// Interaction logic for Deck.xaml\n    /// </summary>\n    public partial class Deck : UserControl\n    {\n        public Deck()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/Decks.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhDDD.Views.Decks\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhDDD.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"0.5*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n        <StackPanel>\n            <!--<common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Dream Eater ID\"/>\n                <TextBox Grid.Row=\"0\" DataContext=\"{Binding DreamEaterID}\"/>\n            </common:TwoEqualColumnsStackPanel>-->\n        </StackPanel>\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"/>\n        <local:Deck DataContext=\"{Binding SelectedItem}\" Grid.Column=\"2\"/>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/Decks.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhDDD.Views\n{\n    /// <summary>\n    /// Interaction logic for Decks.xaml\n    /// </summary>\n    public partial class Decks : UserControl\n    {\n        public Decks()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/DreamEater.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhDDD.Views.DreamEater\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhDDD.Views\" \n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <ScrollViewer>\n        <StackPanel>\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Name\" />\n                <TextBox Text=\"{Binding Name, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Attack\" />\n                <TextBox Text=\"{Binding Attack, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Magic\" />\n                <TextBox Text=\"{Binding Magic, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Defence\" />\n                <TextBox Text=\"{Binding Defence, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Dream Eater Type\" />\n                <ComboBox ItemsSource=\"{Binding DreamEaterTypes}\"\n                          SelectedValue=\"{Binding DreamEaterType}\"\n                          DisplayMemberPath=\"Name\"\n                          SelectedValuePath=\"Value\"/>\n            </common:TwoEqualColumnsStackPanel>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/DreamEater.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhDDD.Views\n{\n    /// <summary>\n    /// Interaction logic for DreamEater.xaml\n    /// </summary>\n    public partial class DreamEater : UserControl\n    {\n        public DreamEater()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/DreamEaters.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhDDD.Views.DreamEaters\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhDDD.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"0.5*\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n        <StackPanel>\n            <!--<common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Dream Eater ID\"/>\n                <TextBox Grid.Row=\"0\" DataContext=\"{Binding DreamEaterID}\"/>\n            </common:TwoEqualColumnsStackPanel>-->\n        </StackPanel>\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"/>\n        <local:DreamEater DataContext=\"{Binding SelectedItem}\" Grid.Column=\"2\"/>\n\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/DreamEaters.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhDDD.Views\n{\n    /// <summary>\n    /// Interaction logic for DreamEaters.xaml\n    /// </summary>\n    public partial class DreamEaters : UserControl\n    {\n        public DreamEaters()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/SystemView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhDDD.Views.SystemView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhDDD.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <StackPanel>\n        <GroupBox Header=\"Misc\">\n            <common:TwoEqualColumnsStackPanel>\n                <TextBlock Text=\"Difficulty\"/>\n                <ComboBox\n                    ItemsSource=\"{Binding Difficulty}\"\n                    SelectedValue=\"{Binding Difficulty.SelectedValue}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBlock Text=\"Munny\"/>\n                <TextBox Text=\"{Binding Munny, UpdateSourceTrigger=PropertyChanged}\"/>\n                \n            </common:TwoEqualColumnsStackPanel>\n        </GroupBox>\n        <GroupBox Header=\"Room modifier\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"World\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"Room\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"4\" Text=\"Spawn location\"/>\n\n                <ComboBox Grid.Row=\"1\" Grid.Column=\"0\"\n                    ItemsSource=\"{Binding Worlds}\"\n                    SelectedValue=\"{Binding WorldId}\"\n                    DisplayMemberPath=\"Name\"\n                    SelectedValuePath=\"Value\"/>\n                <TextBox Grid.Row=\"1\" Grid.Column=\"2\"\n                    Text=\"{Binding RoomId, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBox Grid.Row=\"1\" Grid.Column=\"4\"\n                    Text=\"{Binding SpawnId, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </GroupBox>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhDDD/Views/SystemView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhDDD.Views\n{\n    /// <summary>\n    /// Interaction logic for SystemView.xaml\n    /// </summary>\n    public partial class SystemView : UserControl\n    {\n        public SystemView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Constants.cs",
    "content": "namespace KHSave.SaveEditor.KhRecom\n{\n    public class Constants\n    {\n        public const int MaxCardValue = 10;\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Interfaces/ICardCountService.cs",
    "content": "using KHSave.LibRecom.Types;\nusing KHSave.SaveEditor.KhRecom.Models;\n\nnamespace KHSave.SaveEditor.KhRecom.Interfaces\n{\n    public interface ICardCountService\n    {\n        byte GetCardCount(CardType card, CardIndex index, bool isSpecial);\n\n        void SetCardCount(CardType card, CardIndex index, bool isSpecial, byte count);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/KHSave.SaveEditor.KhRecom.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.LibRecom\\KHSave.LibRecom.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools.Wpf\\Xe.Tools.Wpf.csproj\" />\n    <ProjectReference Include=\"..\\XeEngine.Tools.Public\\Xe.Tools\\Xe.Tools.csproj\" />\n  </ItemGroup>\n  \n</Project>"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/MainView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhRecom.MainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:views=\"clr-namespace:KHSave.SaveEditor.KhRecom.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <TabControl>\n        <TabItem Header=\"System\">\n            <views:SystemView DataContext=\"{Binding KhSystem}\"/>\n        </TabItem>\n        <TabItem Header=\"Cards\">\n            <views:CardInventoryView DataContext=\"{Binding Inventory}\"/>\n        </TabItem>\n        <TabItem Header=\"Deck\" Visibility=\"Collapsed\"/>\n        <TabItem Header=\"Journal\" Visibility=\"Collapsed\"/>\n        <TabItem Header=\"Progress\">\n            <views:ProgressView DataContext=\"{Binding Progress}\"/>\n        </TabItem>\n        <TabItem Header=\"Settings\">\n            <views:SettingsView DataContext=\"{Binding Settings}\"/>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/MainView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.KhRecom\n{\n    /// <summary>\n    /// Interaction logic for MainView.xaml\n    /// </summary>\n    public partial class MainView : UserControl\n    {\n        public MainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Models/CardIndex.cs",
    "content": "using System;\n\nnamespace KHSave.SaveEditor.KhRecom.Models\n{\n    public struct CardIndex : IEquatable<CardIndex>, IEquatable<int>\n    {\n        private const int MaxValueCount = Constants.MaxCardValue - 1;\n        private const int MinValueCount = 0;\n\n        public CardIndex(int index)\n        {\n            if (index < MinValueCount || index > MaxValueCount)\n                throw new ArgumentOutOfRangeException(nameof(index), $\"Must be between {MinValueCount} and {MaxValueCount}\");\n\n            Index = (byte)index;\n        }\n\n        public byte Index { get; }\n\n        public bool Equals(CardIndex otherCardIndex) => Index == otherCardIndex.Index;\n        public bool Equals(int index) => Index == index;\n\n        public static implicit operator int(CardIndex cardIndex) => cardIndex.Index;\n\n        public static implicit operator CardIndex(int index) => new CardIndex(index);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/ViewModels/CardInventoryEntryViewModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibRecom.Models;\nusing KHSave.LibRecom.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.KhRecom.Interfaces;\nusing KHSave.SaveEditor.KhRecom.Models;\nusing System.Windows;\n\nnamespace KHSave.SaveEditor.KhRecom.ViewModels\n{\n    public class CardInventoryEntryViewModel : EnumIconTypeModel<CardType>\n    {\n        private readonly ICardCountService cardCountService;\n        private readonly Card _card;\n\n        public CardInventoryEntryViewModel(Card card, ICardCountService cardCountService)\n        {\n            this.cardCountService = cardCountService;\n\n            _card = card;\n            Name = IsPremium ? $\"{CardName} (P)\" : CardName;\n            Value = CardType;\n        }\n\n        public CardType CardType => _card.Type;\n        public bool CanHaveMultipleValues => _card.Value.HasValue;\n        public bool CanBePremium => _card.IsPremium.HasValue;\n        public bool IsPremium => _card.IsPremium ?? false;\n        public string CardName => InfoAttribute.GetInfo(CardType);\n\n        public byte CountValue0 { get => GetCount(0); set => SetCount(0, value); }\n        public byte CountValue1 { get => GetCount(1); set => SetCount(1, value); }\n        public byte CountValue2 { get => GetCount(2); set => SetCount(2, value); }\n        public byte CountValue3 { get => GetCount(3); set => SetCount(3, value); }\n        public byte CountValue4 { get => GetCount(4); set => SetCount(4, value); }\n        public byte CountValue5 { get => GetCount(5); set => SetCount(5, value); }\n        public byte CountValue6 { get => GetCount(6); set => SetCount(6, value); }\n        public byte CountValue7 { get => GetCount(7); set => SetCount(7, value); }\n        public byte CountValue8 { get => GetCount(8); set => SetCount(8, value); }\n        public byte CountValue9 { get => GetCount(9); set => SetCount(9, value); }\n\n        public string CountTotal => CanHaveMultipleValues ? GetTotalFromIndexed() : $\"{CountValue0}\";\n\n        public Visibility MultipleValueGroupVisibility =>\n            CanHaveMultipleValues ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility SingleValueVisibility =>\n            !CanHaveMultipleValues ? Visibility.Visible : Visibility.Collapsed;\n\n        private string GetTotalFromIndexed() =>\n            $\"{CountValue0} {CountValue1} {CountValue2} {CountValue3} {CountValue4} {CountValue5} {CountValue6} {CountValue7} {CountValue8} {CountValue9}\";\n\n\n        private byte GetCount(CardIndex index)\n        {\n            if (index > 0 && !CanHaveMultipleValues)\n                return 0;\n\n            return cardCountService.GetCardCount(Value, index, IsPremium);\n        }\n\n        private void SetCount(CardIndex index, byte value)\n        {\n            cardCountService.SetCardCount(Value, index, IsPremium, value);\n            OnPropertyChanged(nameof(CountTotal));\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/ViewModels/CardInventoryViewModel.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing KHSave.LibRecom;\nusing KHSave.LibRecom.Models;\nusing KHSave.LibRecom.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.KhRecom.Interfaces;\nusing KHSave.SaveEditor.KhRecom.Models;\n\nnamespace KHSave.SaveEditor.KhRecom.ViewModels\n{\n    public class CardInventoryViewModel : GenericListModel<CardInventoryEntryViewModel, CardType>\n    {\n        private CardInventoryEntryViewModel _selectedItem;\n\n        public CardInventoryViewModel(DataRecom save, ICardCountService cardCountService) :\n            this(GetEntries(save, cardCountService))\n        {\n\n        }\n\n        public CardInventoryViewModel(IEnumerable<CardInventoryEntryViewModel> cards) :\n            this(cards, () => CardType.Empty, _ => { })\n        {\n\n        }\n\n        public CardInventoryViewModel(\n            IEnumerable<CardInventoryEntryViewModel> items,\n            Func<CardType> valueGetter,\n            Action<CardType> valueSetter) :\n            base(items, valueGetter, valueSetter)\n        {\n        }\n\n        public CardInventoryEntryViewModel SelectedItem\n        {\n            get => _selectedItem;\n            set\n            {\n                _selectedItem = value;\n                OnPropertyChanged();\n                OnPropertyChanged(nameof(IsItemSelected));\n                OnPropertyChanged(nameof(CardEntryVisibility));\n                OnPropertyChanged(nameof(CardEntrySelectionMessageVisibility));\n            }\n        }\n\n        public bool IsItemSelected => SelectedItem != null;\n\n        public Visibility CardEntryVisibility => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility CardEntrySelectionMessageVisibility => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        private static IEnumerable<CardInventoryEntryViewModel> GetEntries(DataRecom save, ICardCountService cardCountService) =>\n            CardModel.CardInventory\n            .GroupBy(x => (int)x.Type | (x.IsPremium.HasValue ? (x.IsPremium.Value ? 0x40000000 : 0) : 0x20000000))\n            .Select(x => new CardInventoryEntryViewModel(x.First(), cardCountService));\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/ViewModels/KhRecomViewModel.cs",
    "content": "using KHSave.LibRecom;\nusing KHSave.LibRecom.Models;\nusing KHSave.LibRecom.Types;\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.SaveEditor.KhRecom.Interfaces;\nusing KHSave.SaveEditor.KhRecom.Models;\nusing System;\nusing System.IO;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.KhRecom.ViewModels\n{\n    public class KhRecomViewModel : BaseNotifyPropertyChanged, IRefreshUi, IOpenStream, IWriteToStream, ICardCountService\n    {\n        private const int MaxCardIndex = 10;\n        private SaveKhRecom _save;\n        private DataRecom SaveData => _save.Data;\n\n        public SystemViewModel KhSystem { get; private set; }\n        public CardInventoryViewModel Inventory { get; private set; }\n        public ProgressViewModel Progress { get; private set; }\n        public SettingsViewModel Settings { get; private set; }\n\n        public KhRecomViewModel()\n        {\n        }\n\n        public void RefreshUi()\n        {\n            KhSystem = new SystemViewModel(SaveData);\n            Inventory = new CardInventoryViewModel(SaveData, this);\n            Progress = new ProgressViewModel(SaveData);\n            Settings = new SettingsViewModel(SaveData);\n\n            OnPropertyChanged(nameof(SystemViewModel));\n            OnPropertyChanged(nameof(CardInventoryViewModel));\n            OnPropertyChanged(nameof(ProgressViewModel));\n            OnPropertyChanged(nameof(SettingsViewModel));\n        }\n\n        public void OpenStream(Stream stream)\n        {\n            _save = SaveKhRecom.Read(stream);\n            RefreshUi();\n        }\n\n        public void WriteToStream(Stream stream) => _save.Write(stream);\n\n        public byte GetCardCount(CardType card, CardIndex index, bool isPremium) =>\n            OnCard(card, isPremium, x => SaveData.McWork.CardInventoryCount[x + index]);\n\n        public void SetCardCount(CardType card, CardIndex index, bool isPremium, byte count) =>\n            OnCard(card, isPremium, x => SaveData.McWork.CardInventoryCount[x + index] = count);\n\n        private T OnCard<T>(CardType card, bool isPremium, Func<int, T> action)\n        {\n            var index = CardModel.GetCardInventoryIndex(card, isPremium);\n            return index >= 0 ? action(index) : default(T);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/ViewModels/ProgressViewModel.cs",
    "content": "using KHSave.LibRecom;\nusing KHSave.LibRecom.Models;\n\nnamespace KHSave.SaveEditor.KhRecom.ViewModels\n{\n    public class ProgressViewModel\n    {\n        private readonly DataRecomTable0 _save;\n        private StoryFlag Sora => _save.SoraStoryFlag;\n        private StoryFlag Riku => _save.RikuStoryFlag;\n        private PoohFlags Pooh => _save.PoohFlags;\n        private TutorialFlags Tuto => _save.Tutorial;\n        private CardFlags Card => _save.UnlockedCards;\n\n        public ProgressViewModel(DataRecom save)\n        {\n            _save = save.Table0;\n        }\n\n        public bool SoraTraverseTown { get => Sora.TraverseTown; set => Sora.TraverseTown = value; }\n        public bool SoraAgrabah { get => Sora.Agrabah; set => Sora.Agrabah = value; }\n        public bool SoraOlympusColiseum { get => Sora.OlympusColiseum; set => Sora.OlympusColiseum = value; }\n        public bool SoraWonderland { get => Sora.Wonderland; set => Sora.Wonderland = value; }\n        public bool SoraMonstro { get => Sora.Monstro; set => Sora.Monstro = value; }\n        public bool SoraHalloweenTown { get => Sora.HalloweenTown; set => Sora.HalloweenTown = value; }\n        public bool SoraAtlantica { get => Sora.Atlantica; set => Sora.Atlantica = value; }\n        public bool SoraNeverland { get => Sora.Neverland; set => Sora.Neverland = value; }\n        public bool SoraHollowBastion { get => Sora.HollowBastion; set => Sora.HollowBastion = value; }\n        public bool SoraHundredAcreWood { get => Sora.HundredAcreWood; set => Sora.HundredAcreWood = value; }\n        public bool SoraTwilightTown { get => Sora.TwilightTown; set => Sora.TwilightTown = value; }\n        public bool SoraDestinyIsland { get => Sora.DestinyIsland; set => Sora.DestinyIsland = value; }\n        public bool SoraCastleOblivion { get => Sora.CastleOblivion; set => Sora.CastleOblivion = value; }\n\n        public bool RikuTraverseTown { get => Riku.TraverseTown; set => Riku.TraverseTown = value; }\n        public bool RikuAgrabah { get => Riku.Agrabah; set => Riku.Agrabah = value; }\n        public bool RikuOlympusColiseum { get => Riku.OlympusColiseum; set => Riku.OlympusColiseum = value; }\n        public bool RikuWonderland { get => Riku.Wonderland; set => Riku.Wonderland = value; }\n        public bool RikuMonstro { get => Riku.Monstro; set => Riku.Monstro = value; }\n        public bool RikuHalloweenTown { get => Riku.HalloweenTown; set => Riku.HalloweenTown = value; }\n        public bool RikuAtlantica { get => Riku.Atlantica; set => Riku.Atlantica = value; }\n        public bool RikuNeverland { get => Riku.Neverland; set => Riku.Neverland = value; }\n        public bool RikuHollowBastion { get => Riku.HollowBastion; set => Riku.HollowBastion = value; }\n        public bool RikuHundredAcreWood { get => Riku.HundredAcreWood; set => Riku.HundredAcreWood = value; }\n        public bool RikuTwilightTown { get => Riku.TwilightTown; set => Riku.TwilightTown = value; }\n        public bool RikuDestinyIsland { get => Riku.DestinyIsland; set => Riku.DestinyIsland = value; }\n        public bool RikuCastleOblivion { get => Riku.CastleOblivion; set => Riku.CastleOblivion = value; }\n\n        public bool PoPiglet { get => Pooh.Piglet; set => Pooh.Piglet = value; }\n        public bool PoOwl { get => Pooh.Owl; set => Pooh.Owl = value; }\n        public bool PoRoo { get => Pooh.Roo; set => Pooh.Roo = value; }\n        public bool PoEeyore { get => Pooh.Eeyore; set => Pooh.Eeyore = value; }\n        public bool PoTigger { get => Pooh.Tigger; set => Pooh.Tigger = value; }\n        public bool PoRabbit { get => Pooh.Rabbit; set => Pooh.Rabbit = value; }\n        public bool PoGoal1 { get => Pooh.Goal1; set => Pooh.Goal1 = value; }\n        public bool PoGoal2 { get => Pooh.Goal2; set => Pooh.Goal2 = value; }\n\n        public bool TuKeyRoom { get => Tuto.KeyRoom; set => Tuto.KeyRoom = value; }\n        public bool TuMoogleShop { get => Tuto.MoogleShop; set => Tuto.MoogleShop = value; }\n        public bool TuFloorMove { get => Tuto.FloorMove; set => Tuto.FloorMove = value; }\n        public bool TuWarpPoint { get => Tuto.WarpPoint; set => Tuto.WarpPoint = value; }\n        public bool TuSavePoint { get => Tuto.SavePoint; set => Tuto.SavePoint = value; }\n        public bool TuField { get => Tuto.Field; set => Tuto.Field = value; }\n        public bool TuWorldSelect { get => Tuto.WorldSelect; set => Tuto.WorldSelect = value; }\n\n        public bool CaSpellbinder { get => Card.Spellbinder; set => Card.Spellbinder = value; }\n        public bool CaMetalChocobo { get => Card.MetalChocobo; set => Card.MetalChocobo = value; }\n        public bool CaLionheart { get => Card.Lionheart; set => Card.Lionheart = value; }\n        public bool CaOathkeeper { get => Card.Oathkeeper; set => Card.Oathkeeper = value; }\n        public bool CaOblivion { get => Card.Oblivion; set => Card.Oblivion = value; }\n        public bool CaUltimaWeapon { get => Card.UltimaWeapon; set => Card.UltimaWeapon = value; }\n        public bool CaDiamondDust { get => Card.DiamondDust; set => Card.DiamondDust = value; }\n        public bool CaOneWingedAngel { get => Card.OneWingedAngel; set => Card.OneWingedAngel = value; }\n        public bool CaFire { get => Card.Fire; set => Card.Fire = value; }\n        public bool CaThunder { get => Card.Thunder; set => Card.Thunder = value; }\n        public bool CaGravity { get => Card.Gravity; set => Card.Gravity = value; }\n        public bool CaStop { get => Card.Stop; set => Card.Stop = value; }\n        public bool CaAero { get => Card.Aero; set => Card.Aero = value; }\n        public bool CaSimba { get => Card.Simba; set => Card.Simba = value; }\n        public bool CaGenie { get => Card.Genie; set => Card.Genie = value; }\n        public bool CaBambi { get => Card.Bambi; set => Card.Bambi = value; }\n        public bool CaDumbo { get => Card.Dumbo; set => Card.Dumbo = value; }\n        public bool CaTinkerbell { get => Card.Tinkerbell; set => Card.Tinkerbell = value; }\n        public bool CaMushu { get => Card.Mushu; set => Card.Mushu = value; }\n        public bool CaCloud { get => Card.Cloud; set => Card.Cloud = value; }\n        public bool CaHiPotion { get => Card.HiPotion; set => Card.HiPotion = value; }\n        public bool CaMegaPotion { get => Card.MegaPotion; set => Card.MegaPotion = value; }\n        public bool CaEther { get => Card.Ether; set => Card.Ether = value; }\n        public bool CaMegaEther { get => Card.MegaEther; set => Card.MegaEther = value; }\n        public bool CaElixir { get => Card.Elixir; set => Card.Elixir = value; }\n        public bool CaMegalixir { get => Card.Megalixir; set => Card.Megalixir = value; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/ViewModels/SettingsViewModel.cs",
    "content": "using KHSave.LibRecom;\nusing KHSave.LibRecom.Types;\nusing Xe.Tools.Models;\n\nnamespace KHSave.SaveEditor.KhRecom.ViewModels\n{\n    public class SettingsViewModel\n    {\n        private readonly DataRecomTable1 _save;\n\n        public SettingsViewModel(DataRecom save)\n        {\n            _save = save.Table1;\n            SoundModeItems = new EnumModel<SoundMode>();\n        }\n\n        public EnumModel<SoundMode> SoundModeItems { get; }\n\n        public SoundMode SoundMode\n        {\n            get => _save.SoundMode;\n            set => _save.SoundMode = value;\n        }\n\n        public bool Vibration\n        {\n            get => !_save.NoVibration;\n            set => _save.NoVibration = !value;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/ViewModels/SystemViewModel.cs",
    "content": "using KHSave.LibRecom;\nusing KHSave.LibRecom.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing Xe.Tools.Models;\n\nnamespace KHSave.SaveEditor.KhRecom.ViewModels\n{\n    public class SystemViewModel\n    {\n        private readonly DataRecom _save;\n        private readonly DataRecomTable1 _saveSets;\n        private readonly DataRecomTable2 _saveFlags;\n\n        public SystemViewModel(DataRecom save)\n        {\n            _save = save;\n            _saveSets = save.Table1;\n            _saveFlags = save.Table2;\n            PlayModeItems = new EnumModel<PlayMode>();\n            DifficultyItems = new EnumModel<Difficulty>();\n        }\n\n        public EnumModel<PlayMode> PlayModeItems { get; }\n        public EnumModel<Difficulty> DifficultyItems { get; }\n\n        public PlayMode PlayMode\n        {\n            get => _saveSets.PlayMode;\n            set => _saveSets.PlayMode = value;\n        }\n\n        public Difficulty Difficulty\n        {\n            get => _saveSets.Difficulty;\n            set => _saveSets.Difficulty = value;\n        }\n\n        public bool SoraCleared\n        {\n            get => _saveFlags.SoraCleared;\n            set => _saveFlags.SoraCleared = value;\n        }\n\n        public bool RikuCleared\n        {\n            get => _saveFlags.RikuCleared;\n            set => _saveFlags.RikuCleared = value;\n        }\n\n        public bool MarluxiaKilled\n        {\n            get => _saveFlags.MarluxiaKilled;\n            set => _saveFlags.MarluxiaKilled = value;\n        }\n\n        public bool GameCleared\n        {\n            get => _saveFlags.GameCleared;\n            set => _saveFlags.GameCleared = value;\n        }\n\n        public bool Kh2Cleared\n        {\n            get => _saveFlags.Kh2Cleared;\n            set => _saveFlags.Kh2Cleared = value;\n        }\n\n        public int Experience\n        {\n            get => _save.McWork.Experience;\n            set => _save.McWork.Experience = value;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Views/CardInventoryEntryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhRecom.Views.CardInventoryEntryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhRecom.Views\"\n             xmlns:controls=\"clr-namespace:Xe.Tools.Wpf.Controls;assembly=Xe.Tools.Wpf\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"300\">\n    <UserControl.Resources>\n        <Thickness x:Key=\"LabelMargin\" Left=\"0\" Top=\"0\" Right=\"5\" Bottom=\"0\" />\n        <Thickness x:Key=\"ValueMargin\" Left=\"0\" Top=\"0\" Right=\"0\" Bottom=\"3\" />\n    </UserControl.Resources>\n    <StackPanel>\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"5\"/>\n            </Grid.ColumnDefinitions>\n            <Image Grid.Column=\"0\" Height=\"36\" Source=\"{Binding Icon}\"/>\n            <StackPanel Grid.Column=\"2\">\n                <TextBlock Text=\"{Binding Name}\"/>\n            </StackPanel>\n        </Grid>\n\n        <GroupBox Header=\"Card count\" Visibility=\"{Binding MultipleValueGroupVisibility}\">\n            <controls:TwoColumnsPanel>\n                <TextBlock Text=\"Value 0\" Margin=\"{StaticResource LabelMargin}\"/>\n                <TextBox Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue0, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Value 1\" Margin=\"{StaticResource LabelMargin}\"/>\n                <TextBox Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue1, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Value 2\" Margin=\"{StaticResource LabelMargin}\"/>\n                <TextBox Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue2, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Value 3\" Margin=\"{StaticResource LabelMargin}\"/>\n                <TextBox Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue3, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Value 4\" Margin=\"{StaticResource LabelMargin}\"/>\n                <TextBox Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue4, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Value 5\" Margin=\"{StaticResource LabelMargin}\"/>\n                <TextBox Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue5, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Value 6\" Margin=\"{StaticResource LabelMargin}\"/>\n                <TextBox Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue6, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Value 7\" Margin=\"{StaticResource LabelMargin}\"/>\n                <TextBox Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue7, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Value 8\" Margin=\"{StaticResource LabelMargin}\"/>\n                <TextBox Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue8, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"Value 9\" Margin=\"{StaticResource LabelMargin}\"/>\n                <TextBox Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue9, UpdateSourceTrigger=PropertyChanged}\"/>\n            </controls:TwoColumnsPanel>\n        </GroupBox>\n\n        <Grid Visibility=\"{Binding SingleValueVisibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <TextBlock Grid.Column=\"0\" Text=\"Card count\" Margin=\"{StaticResource LabelMargin}\"/>\n            <TextBox Grid.Column=\"1\" Margin=\"{StaticResource ValueMargin}\"\n                        Text=\"{Binding CountValue0, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Views/CardInventoryEntryView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhRecom.Views\n{\n    /// <summary>\n    /// Interaction logic for CardInventoryEntryView.xaml\n    /// </summary>\n    public partial class CardInventoryEntryView : UserControl\n    {\n        public CardInventoryEntryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Views/CardInventoryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhRecom.Views.CardInventoryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhRecom.Views\"\n             xmlns:controls=\"clr-namespace:Xe.Tools.Wpf.Controls;assembly=Xe.Tools.Wpf\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"400\" d:DesignWidth=\"450\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"*\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n\n        <Grid Grid.Column=\"0\">\n            <ListBox\n                Grid.Row=\"0\"\n                ItemsSource=\"{Binding}\"\n                SelectedItem=\"{Binding SelectedItem}\"\n                HorizontalContentAlignment=\"Stretch\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate>\n                        <Grid Margin=\"0 0 0 3\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"24\"/>\n                                <ColumnDefinition Width=\"3\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <Image Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\"\n                                Source=\"{Binding Icon}\"/>\n                            <TextBlock Grid.Row=\"0\" Grid.Column=\"2\"\n                                Text=\"{Binding Name}\" />\n                            <TextBlock Grid.Row=\"2\" Grid.Column=\"2\"\n                                Text=\"{Binding CountTotal}\" />\n                        </Grid>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n        </Grid>\n\n        <Grid Grid.Column=\"1\" Margin=\"5\">\n            <Grid\n                Visibility=\"{Binding CardEntryVisibility}\"\n                IsEnabled=\"{Binding IsItemSelected}\">\n                <local:CardInventoryEntryView DataContext=\"{Binding SelectedItem}\"/>\n            </Grid>\n\n            <StackPanel Visibility=\"{Binding CardEntrySelectionMessageVisibility}\">\n                <TextBlock Text=\"Please select a card to edit\"/>\n            </StackPanel>\n        </Grid>\n        \n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Views/CardInventoryView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.KhRecom.Views\n{\n    /// <summary>\n    /// Interaction logic for CardInventoryView.xaml\n    /// </summary>\n    public partial class CardInventoryView : UserControl\n    {\n        public CardInventoryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Views/ProgressView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhRecom.Views.ProgressView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhRecom.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             xmlns:wpf=\"clr-namespace:Xe.Tools.Wpf.Controls;assembly=Xe.Tools.Wpf\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"800\" d:DesignWidth=\"450\">\n    <ScrollViewer>\n        <StackPanel>\n            <TextBlock Text=\"Sora story flags\" Margin=\"10 0 0 0\" FontWeight=\"Bold\"/>\n            <Separator Margin=\"5\"/>\n            <GroupBox Header=\"Has been visited\">\n                <wpf:TwoEqualColumnsPanel Margin=\"5\">\n                    <CheckBox Content=\"Traverse Town\" IsChecked=\"{Binding SoraTraverseTown}\"/>\n                    <CheckBox Content=\"Agrabah\" IsChecked=\"{Binding SoraAgrabah}\"/>\n                    <CheckBox Content=\"Olympus Coliseum\" IsChecked=\"{Binding SoraOlympusColiseum}\"/>\n                    <CheckBox Content=\"Wonderland\" IsChecked=\"{Binding SoraWonderland}\"/>\n                    <CheckBox Content=\"Monstro\" IsChecked=\"{Binding SoraMonstro}\"/>\n                    <CheckBox Content=\"Halloween Town\" IsChecked=\"{Binding SoraHalloweenTown}\"/>\n                    <CheckBox Content=\"Atlantica\" IsChecked=\"{Binding SoraAtlantica}\"/>\n                    <CheckBox Content=\"Neverland\" IsChecked=\"{Binding SoraNeverland}\"/>\n                    <CheckBox Content=\"Hollow Bastion\" IsChecked=\"{Binding SoraHollowBastion}\"/>\n                    <CheckBox Content=\"100 Acre Wood\" IsChecked=\"{Binding SoraHundredAcreWood}\"/>\n                    <CheckBox Content=\"Twilight Town\" IsChecked=\"{Binding SoraTwilightTown}\"/>\n                    <CheckBox Content=\"Destiny Island\" IsChecked=\"{Binding SoraDestinyIsland}\"/>\n                    <CheckBox Content=\"Castle Oblivion\" IsChecked=\"{Binding SoraCastleOblivion}\"/>\n                </wpf:TwoEqualColumnsPanel>\n            </GroupBox>\n            <GroupBox Header=\"100 Acre Wood flags\">\n                <wpf:TwoEqualColumnsPanel Margin=\"5\">\n                    <CheckBox Content=\"Piglet\" IsChecked=\"{Binding PoPiglet}\"/>\n                    <CheckBox Content=\"Owl\" IsChecked=\"{Binding PoOwl}\"/>\n                    <CheckBox Content=\"Roo\" IsChecked=\"{Binding PoRoo}\"/>\n                    <CheckBox Content=\"Eeyore\" IsChecked=\"{Binding PoEeyore}\"/>\n                    <CheckBox Content=\"Tigger\" IsChecked=\"{Binding PoTigger}\"/>\n                    <CheckBox Content=\"Rabbit\" IsChecked=\"{Binding PoRabbit}\"/>\n                    <CheckBox Content=\"Goal 1\" IsChecked=\"{Binding PoGoal1}\"/>\n                    <CheckBox Content=\"Goal 2\" IsChecked=\"{Binding PoGoal2}\"/>\n                </wpf:TwoEqualColumnsPanel>\n            </GroupBox>\n            <GroupBox Header=\"Unlocked cards\">\n                <wpf:TwoEqualColumnsPanel>\n                    <CheckBox Content=\"Spellbinder\" IsChecked=\"{Binding CaSpellbinder}\"/>\n                    <CheckBox Content=\"Metal Chocobo\" IsChecked=\"{Binding CaMetalChocobo}\"/>\n                    <CheckBox Content=\"Lionheart\" IsChecked=\"{Binding CaLionheart}\"/>\n                    <CheckBox Content=\"Oathkeeper\" IsChecked=\"{Binding CaOathkeeper}\"/>\n                    <CheckBox Content=\"Oblivion\" IsChecked=\"{Binding CaOblivion}\"/>\n                    <CheckBox Content=\"Ultima Weapon\" IsChecked=\"{Binding CaUltimaWeapon}\"/>\n                    <CheckBox Content=\"DiamondDust\" IsChecked=\"{Binding CaDiamondDust}\"/>\n                    <CheckBox Content=\"One-Winged Angel\" IsChecked=\"{Binding CaOneWingedAngel}\"/>\n                    <CheckBox Content=\"Fire\" IsChecked=\"{Binding CaFire}\"/>\n                    <CheckBox Content=\"Thunder\" IsChecked=\"{Binding CaThunder}\"/>\n                    <CheckBox Content=\"Gravity\" IsChecked=\"{Binding CaGravity}\"/>\n                    <CheckBox Content=\"Stop\" IsChecked=\"{Binding CaStop}\"/>\n                    <CheckBox Content=\"Aero\" IsChecked=\"{Binding CaAero}\"/>\n                    <CheckBox Content=\"Simba\" IsChecked=\"{Binding CaSimba}\"/>\n                    <CheckBox Content=\"Genie\" IsChecked=\"{Binding CaGenie}\"/>\n                    <CheckBox Content=\"Bambi\" IsChecked=\"{Binding CaBambi}\"/>\n                    <CheckBox Content=\"Dumbo\" IsChecked=\"{Binding CaDumbo}\"/>\n                    <CheckBox Content=\"Tinkerbell\" IsChecked=\"{Binding CaTinkerbell}\"/>\n                    <CheckBox Content=\"Mushu\" IsChecked=\"{Binding CaMushu}\"/>\n                    <CheckBox Content=\"Cloud\" IsChecked=\"{Binding CaCloud}\"/>\n                    <CheckBox Content=\"Hi-Potion\" IsChecked=\"{Binding CaHiPotion}\"/>\n                    <CheckBox Content=\"Mega-Potion\" IsChecked=\"{Binding CaMegaPotion}\"/>\n                    <CheckBox Content=\"Ether\" IsChecked=\"{Binding CaEther}\"/>\n                    <CheckBox Content=\"Mega-Ether\" IsChecked=\"{Binding CaMegaEther}\"/>\n                    <CheckBox Content=\"Elixir\" IsChecked=\"{Binding CaElixir}\"/>\n                    <CheckBox Content=\"Megalixir\" IsChecked=\"{Binding CaMegalixir}\"/>\n                </wpf:TwoEqualColumnsPanel>\n            </GroupBox>\n            <Rectangle Margin=\"10\"/>\n\n            <TextBlock Text=\"Riku story flags\" Margin=\"10 0 0 0\" FontWeight=\"Bold\"/>\n            <Separator Margin=\"5\"/>\n            <GroupBox Header=\"Has been visited\">\n                <wpf:TwoEqualColumnsPanel Margin=\"5\">\n                    <CheckBox Content=\"Traverse Town\" IsChecked=\"{Binding RikuTraverseTown}\"/>\n                    <CheckBox Content=\"Agrabah\" IsChecked=\"{Binding RikuAgrabah}\"/>\n                    <CheckBox Content=\"Olympus Coliseum\" IsChecked=\"{Binding RikuOlympusColiseum}\"/>\n                    <CheckBox Content=\"Wonderland\" IsChecked=\"{Binding RikuWonderland}\"/>\n                    <CheckBox Content=\"Monstro\" IsChecked=\"{Binding RikuMonstro}\"/>\n                    <CheckBox Content=\"Halloween Town\" IsChecked=\"{Binding RikuHalloweenTown}\"/>\n                    <CheckBox Content=\"Atlantica\" IsChecked=\"{Binding RikuAtlantica}\"/>\n                    <CheckBox Content=\"Neverland\" IsChecked=\"{Binding RikuNeverland}\"/>\n                    <CheckBox Content=\"Hollow Bastion\" IsChecked=\"{Binding RikuHollowBastion}\"/>\n                    <CheckBox Content=\"100 Acre Wood\" IsChecked=\"{Binding RikuHundredAcreWood}\"/>\n                    <CheckBox Content=\"Twilight Town\" IsChecked=\"{Binding RikuTwilightTown}\"/>\n                    <CheckBox Content=\"Destiny Island\" IsChecked=\"{Binding RikuDestinyIsland}\"/>\n                    <CheckBox Content=\"Castle Oblivion\" IsChecked=\"{Binding RikuCastleOblivion}\"/>\n                </wpf:TwoEqualColumnsPanel>\n            </GroupBox>\n            <Rectangle Margin=\"10\"/>\n\n            <TextBlock Text=\"Tutorial already viewed\" Margin=\"10 0 0 0\" FontWeight=\"Bold\"/>\n            <Separator Margin=\"5\"/>\n            <wpf:TwoEqualColumnsPanel Margin=\"10 0 10 0\">\n                <CheckBox Content=\"Key room\" IsChecked=\"{Binding TuKeyRoom}\"/>\n                <CheckBox Content=\"Moogle shop\" IsChecked=\"{Binding TuMoogleShop}\"/>\n                <CheckBox Content=\"Floor move\" IsChecked=\"{Binding TuFloorMove}\"/>\n                <CheckBox Content=\"Warp point\" IsChecked=\"{Binding TuWarpPoint}\"/>\n                <CheckBox Content=\"Save point\" IsChecked=\"{Binding TuSavePoint}\"/>\n                <CheckBox Content=\"Field tutorial\" IsChecked=\"{Binding TuField}\"/>\n                <CheckBox Content=\"World select\" IsChecked=\"{Binding TuWorldSelect}\"/>\n            </wpf:TwoEqualColumnsPanel>\n            <Rectangle Margin=\"10\"/>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Views/ProgressView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.KhRecom.Views\n{\n    /// <summary>\n    /// Interaction logic for ProgressView.xaml\n    /// </summary>\n    public partial class ProgressView : UserControl\n    {\n        public ProgressView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Views/SettingsView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhRecom.Views.SettingsView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhRecom.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"800\">\n    <Grid>\n        <common:TwoEqualColumnsStackPanel>\n            <TextBlock Text=\"Sound mode\"/>\n            <ComboBox\n                ItemsSource=\"{Binding SoundModeItems}\"\n                SelectedValue=\"{Binding SoundMode}\"\n                DisplayMemberPath=\"Name\"\n                SelectedValuePath=\"Value\"/>\n\n            <TextBlock Visibility=\"Hidden\">IGNORE ME</TextBlock>\n            <CheckBox\n                Content=\"Vibration\"\n                IsChecked=\"{Binding Vibration}\"/>\n        </common:TwoEqualColumnsStackPanel>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Views/SettingsView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.KhRecom.Views\n{\n    /// <summary>\n    /// Interaction logic for SettingsView.xaml\n    /// </summary>\n    public partial class SettingsView : UserControl\n    {\n        public SettingsView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Views/SystemView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.KhRecom.Views.SystemView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.KhRecom.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"800\" d:DesignWidth=\"450\">\n    <Grid>\n        <common:TwoEqualColumnsStackPanel>\n            <TextBlock Text=\"Play mode\"/>\n            <ComboBox\n                ItemsSource=\"{Binding PlayModeItems}\"\n                SelectedValue=\"{Binding PlayMode}\"\n                DisplayMemberPath=\"Name\"\n                SelectedValuePath=\"Value\"/>\n\n            <TextBlock Text=\"Difficulty\"/>\n            <ComboBox\n                ItemsSource=\"{Binding DifficultyItems}\"\n                SelectedValue=\"{Binding Difficulty}\"\n                DisplayMemberPath=\"Name\"\n                SelectedValuePath=\"Value\"/>\n\n            <CheckBox\n                Content=\"Sora story clear\"\n                IsChecked=\"{Binding SoraCleared}\"/>\n            <CheckBox\n                Content=\"Riku story clear\"\n                IsChecked=\"{Binding RikuCleared}\"/>\n            <CheckBox\n                Content=\"Marluxia defeated\"\n                IsChecked=\"{Binding MarluxiaKilled}\"/>\n            <CheckBox\n                Content=\"Game clear\"\n                IsChecked=\"{Binding GameCleared}\"/>\n            <CheckBox\n                Content=\"KH2 clear\"\n                IsChecked=\"{Binding Kh2Cleared}\"/>\n\n            <TextBlock Visibility=\"Hidden\">IGNORE ME</TextBlock>\n            <TextBlock Visibility=\"Hidden\">IGNORE ME</TextBlock>\n            <TextBlock Visibility=\"Hidden\">IGNORE ME</TextBlock>\n            \n            <TextBlock Text=\"EXP amount\"/>\n            <TextBox Text=\"{Binding Experience, UpdateSourceTrigger=PropertyChanged}\"/>\n        </common:TwoEqualColumnsStackPanel>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.KhRecom/Views/SystemView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.KhRecom.Views\n{\n    /// <summary>\n    /// Interaction logic for SystemView.xaml\n    /// </summary>\n    public partial class SystemView : UserControl\n    {\n        public SystemView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/Interfaces/IPersonaList.cs",
    "content": "using KHSave.LibPersona3.Types;\nusing KHSave.SaveEditor.Persona3.Models;\nusing System.Collections.Generic;\n\nnamespace KHSave.SaveEditor.Persona3.Interfaces\n{\n    public interface IPersonaList\n    {\n        IEnumerable<PersonaModel> PersonaList { get; }\n        PersonaModel GetPersona(Demons id);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/Interfaces/ISkillList.cs",
    "content": "using KHSave.SaveEditor.Persona3.Models;\nusing System.Collections.Generic;\n\nnamespace KHSave.SaveEditor.Persona3.Interfaces\n{\n    public interface ISkillList\n    {\n        IEnumerable<SkillModel> SkillList { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/KHSave.SaveEditor.Persona3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.LibPersona3\\KHSave.LibPersona3.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/Models/PersonaModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibPersona3.Types;\nusing KHSave.SaveEditor.Common;\n\nnamespace KHSave.SaveEditor.Persona3.Models\n{\n    public class PersonaModel\n    {\n        public Demons Value { get; }\n        public string Name { get; }\n        public bool IsImplemented { get; }\n        public string Arcana { get; }\n\n        public PersonaModel(Demons demon)\n        {\n            Value = demon;\n            Name = InfoAttribute.GetInfo(demon);\n            IsImplemented = Global.CanDisplayInBasicMode(demon);\n            Arcana = DemonAttribute.GetArcana(demon);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/Models/SkillModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibPersona3.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Services;\nusing System.Windows.Media;\n\nnamespace KHSave.SaveEditor.Persona3.Models\n{\n    public class SkillModel\n    {\n        public SkillModel(Skill value)\n        {\n            Value = value;\n            Name = InfoAttribute.GetInfo(value);\n            Icon = IconService.Icon(value);\n            IsImplemented = Global.CanDisplayInBasicMode(value);\n        }\n\n        public string Name { get; }\n        public Skill Value { get; }\n        public ImageSource Icon { get; }\n        public bool IsImplemented { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/ViewModels/CompendiumViewModel.cs",
    "content": "using KHSave.LibPersona3;\nusing KHSave.SaveEditor.Persona3.Interfaces;\nusing KHSave.SaveEditor.Persona3.ViewModels;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Commands;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Persona3.ViewModels\n{\n    public class CompendiumViewModel : GenericListModel<PersonaViewModel>\n    {\n        private const string UnlockCompendiumMessage =\n            \"This will unlock the compendium by filling the Persona with their default parameters.\\n\" +\n            \"Do you wish to also overwrite the existing customized Persona too?\\n\\n\" +\n            \"Yes: Unlock compenium, reset your customized Persona.\\n\" +\n            \"No: Only unlock missing Persona, do not touch the existing Persona.\\n\" +\n            \"Cancel: Do not perform any operation.\";\n\n        private readonly SavePersona3 _save;\n\n        public CompendiumViewModel(\n            SavePersona3 save,\n            IPersonaList personaList,\n            ISkillList skillList) :\n            this(save.Compendium.Select((x, i) => new PersonaViewModel(i, x, personaList, skillList)))\n        {\n            _save = save;\n            UnlockAllCompendiumCommand = new RelayCommand(_ =>\n            {\n                var result = MessageBox.Show(UnlockCompendiumMessage,\n                    \"Reset Persona to default\", MessageBoxButton.YesNoCancel,\n                    MessageBoxImage.Warning);\n\n                System.Func<PersonaViewModel, bool> predicate;\n                switch (result)\n                {\n                    case MessageBoxResult.Yes:\n                        predicate = x => true;\n                        break;\n                    case MessageBoxResult.No:\n                        predicate = x => !x.IsEnabled;\n                        break;\n                    default:\n                        return;\n                }\n\n                foreach (var persona in Items.Where(predicate))\n                    persona.ResetPersonaToDefault();\n            });\n        }\n\n        private CompendiumViewModel(IEnumerable<PersonaViewModel> list) :\n            base(list)\n        { }\n\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        public RelayCommand UnlockAllCompendiumCommand { get; }\n\n        protected override void OnSelectedItem(PersonaViewModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(EntryVisible));\n            OnPropertyChanged(nameof(EntryNotVisible));\n        }\n\n        protected override PersonaViewModel OnNewItem() =>\n            throw new System.NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/ViewModels/Persona3MainViewModel.cs",
    "content": "using KHSave.LibPersona3;\nusing KHSave.LibPersona3.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.SaveEditor.Persona3.Interfaces;\nusing KHSave.SaveEditor.Persona3.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Persona3.ViewModels\n{\n    public class Persona3MainViewModel : BaseNotifyPropertyChanged,\n        IRefreshUi, IOpenStream, IWriteToStream,\n        IPersonaList, ISkillList\n    {\n        private const string DefaultTab = \"Characters\";\n        private static readonly List<PersonaModel> PersonaListAll;\n        private static readonly Dictionary<Demons, PersonaModel> PersonaDictionary;\n        private static readonly IList<SkillModel> SkillListAll;\n\n        static Persona3MainViewModel()\n        {\n            PersonaListAll = Enum\n                .GetValues<Demons>()\n                .Select(x => new PersonaModel(x))\n                .ToList();\n            PersonaDictionary = PersonaListAll\n                .ToDictionary(x => x.Value, x => x);\n            SkillListAll = Enum\n                .GetValues<Skill>()\n                .Select(x => new SkillModel(x))\n                .ToList();\n        }\n\n        public SavePersona3 Save { get; private set; }\n\n        public CompendiumViewModel Compendium { get; set; }\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n        public string CurrentTabId\n        {\n            get => Global.LastPersona3Tab ?? DefaultTab;\n            set => Global.LastPersona3Tab = value;\n        }\n\n        public IEnumerable<PersonaModel> PersonaList => PersonaListAll\n            .Where(x => x.IsImplemented || Global.IsAdvancedMode);\n        public IEnumerable<SkillModel> SkillList => SkillListAll\n            .Where(x => x.IsImplemented || Global.IsAdvancedMode);\n\n        public void RefreshUi()\n        {\n            Compendium = new CompendiumViewModel(Save, this, this);\n\n            OnPropertyChanged(nameof(SimpleVisibility));\n            OnPropertyChanged(nameof(AdvancedVisibility));\n            OnPropertyChanged(nameof(Compendium));\n        }\n\n        public void OpenStream(Stream stream)\n        {\n            Save = SavePersona3.Read(stream);\n            RefreshUi();\n        }\n\n        public void WriteToStream(Stream stream) => Save.Write(stream);\n\n        public PersonaModel GetPersona(Demons id)\n        {\n            if (PersonaDictionary.TryGetValue(id, out var persona))\n                return persona;\n            return new PersonaModel(id);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/ViewModels/PersonaViewModel.cs",
    "content": "using KHSave.LibPersona3.Models;\nusing KHSave.LibPersona3.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Persona3.Interfaces;\nusing KHSave.SaveEditor.Persona3.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Persona3.ViewModels\n{\n    public class PersonaViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly int _compendiumIndex;\n        private readonly Persona _persona;\n        private readonly IPersonaList _personaList;\n        private readonly ISkillList _skillList;\n\n        public Demons Value\n        {\n            get => _persona.Id;\n            set\n            {\n                _persona.Id = value;\n                OnPropertyChanged();\n                OnPropertyChanged(nameof(DemonName));\n                OnPropertyChanged(nameof(IsImplemented));\n                OnPropertyChanged(nameof(Name));\n                OnPropertyChanged(nameof(Arcana));\n            }\n        }\n\n        private PersonaModel Persona => _personaList.GetPersona(_persona.Id);\n\n        public Demons PersonaId\n        {\n            get => _persona.Id;\n            set\n            {\n                _persona.Id = value;\n                IsEnabled = value != Demons.Empty;\n\n                OnPropertyChanged(nameof(DemonName));\n                OnPropertyChanged(nameof(Arcana));\n                OnPropertyChanged(nameof(Name));\n                OnPropertyChanged(nameof(IsEnabled));\n                OnPropertyChanged(nameof(Flags));\n            }\n        }\n        public string Name => ToString();\n        public string DemonName => Persona?.Name ?? \"-\";\n        public string Arcana => Persona?.Arcana ?? string.Empty;\n        public bool IsImplemented => Persona?.IsImplemented ?? false;\n\n        public byte Level\n        {\n            get => _persona.Level;\n            set => _persona.Level = value;\n        }\n\n        public bool IsEnabled\n        {\n            get => (_persona.Flags & 1) == 1;\n            set\n            {\n                if (value)\n                    _persona.Flags |= 1;\n                else\n                    _persona.Flags &= ~1;\n                OnPropertyChanged(nameof(Flags));\n            }\n        }\n\n        internal void ResetPersonaToDefault()\n        {\n            var personaId = (Demons)_compendiumIndex;\n            var persona = _personaList.GetPersona(personaId);\n            if (persona == null || !persona.IsImplemented)\n                return;\n            PersonaId = (Demons)_compendiumIndex;\n        }\n\n        public short Flags\n        {\n            get => _persona.Flags;\n            set => _persona.Flags = value;\n        }\n\n        public byte Break\n        {\n            get => _persona.Break;\n            set => _persona.Break = value;\n        }\n\n        public short Unk\n        {\n            get => _persona.Unk;\n            set => _persona.Unk = value;\n        }\n\n        public int Experience\n        {\n            get => _persona.Experience;\n            set => _persona.Experience = value;\n        }\n\n        public byte Strength\n        {\n            get => _persona.Strength;\n            set => _persona.Strength = value;\n        }\n\n        public byte Magic\n        {\n            get => _persona.Magic;\n            set => _persona.Magic = value;\n        }\n\n        public byte Endurance\n        {\n            get => _persona.Endurance;\n            set => _persona.Endurance = value;\n        }\n\n        public byte Agility\n        {\n            get => _persona.Agility;\n            set => _persona.Agility = value;\n        }\n\n        public byte Luck\n        {\n            get => _persona.Luck;\n            set => _persona.Luck = value;\n        }\n\n        public bool OverThanatos\n        {\n            get => _persona.OverThanatos != 0;\n            set => _persona.OverThanatos = value ? 1 : 0;\n        }\n\n        public Skill Skill0\n        {\n            get => _persona.Skills[0];\n            set\n            {\n                _persona.Skills[0] = value;\n                OnPropertyChanged(nameof(Skill0));\n            }\n        }\n\n        public Skill Skill1\n        {\n            get => _persona.Skills[1];\n            set\n            {\n                _persona.Skills[1] = value;\n                OnPropertyChanged(nameof(Skill1));\n            }\n        }\n\n        public Skill Skill2\n        {\n            get => _persona.Skills[2];\n            set\n            {\n                _persona.Skills[2] = value;\n                OnPropertyChanged(nameof(Skill2));\n            }\n        }\n\n        public Skill Skill3\n        {\n            get => _persona.Skills[3];\n            set\n            {\n                _persona.Skills[3] = value;\n                OnPropertyChanged(nameof(Skill3));\n            }\n        }\n\n        public Skill Skill4\n        {\n            get => _persona.Skills[4];\n            set\n            {\n                _persona.Skills[4] = value;\n                OnPropertyChanged(nameof(Skill4));\n            }\n        }\n\n        public Skill Skill5\n        {\n            get => _persona.Skills[5];\n            set\n            {\n                _persona.Skills[5] = value;\n                OnPropertyChanged(nameof(Skill5));\n            }\n        }\n\n        public Skill Skill6\n        {\n            get => _persona.Skills[6];\n            set\n            {\n                _persona.Skills[6] = value;\n                OnPropertyChanged(nameof(Skill6));\n            }\n        }\n\n        public Skill Skill7\n        {\n            get => _persona.Skills[7];\n            set\n            {\n                _persona.Skills[7] = value;\n                OnPropertyChanged(nameof(Skill7));\n            }\n        }\n\n        public IEnumerable<PersonaModel> PersonaList => _personaList.PersonaList;\n        public IEnumerable<SkillModel> SkillList => _skillList.SkillList;\n\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n\n        public PersonaViewModel(int compendiumIndex, Persona persona, IPersonaList personaList, ISkillList skillList)\n        {\n            _compendiumIndex = compendiumIndex;\n            _persona = persona;\n            _personaList = personaList;\n            _skillList = skillList;\n        }\n\n        public override string ToString()\n        {\n            if (string.IsNullOrEmpty(Arcana))\n                return DemonName;\n            return $\"{Arcana} | {DemonName}\";\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/Views/CompendiumView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Persona3.Views.CompendiumView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Persona3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"600\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n\n        <Grid Grid.Column=\"0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <ListBox\n                Grid.Row=\"0\"\n                ItemsSource=\"{Binding Items}\"\n                SelectedIndex=\"{Binding SelectedIndex}\"\n                SelectedItem=\"{Binding SelectedItem}\"\n                DisplayMemberPath=\"Name\"\n                />\n            <Button\n                Grid.Row=\"1\"\n                Content=\"Unlock all\"\n                Command=\"{Binding UnlockAllCompendiumCommand}\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select a character to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryVisible}\">\n            <local:PersonaView DataContext=\"{Binding SelectedItem}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/Views/CompendiumView.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Persona3.Views\n{\n    /// <summary>\n    /// Interaction logic for CompendiumView.xaml\n    /// </summary>\n    public partial class CompendiumView : UserControl\n    {\n        public CompendiumView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/Views/Persona3MainView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Persona3.Views.Persona3MainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Persona3.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"250\" d:DesignWidth=\"300\">\n    <TabControl SelectedValue=\"{Binding CurrentTabId, Mode=TwoWay}\" SelectedValuePath=\"Header\">\n        <TabItem Header=\"Compendium\">\n            <local:CompendiumView DataContext=\"{Binding Compendium}\"/>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/Views/Persona3MainView.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Persona3.Views\n{\n    /// <summary>\n    /// Interaction logic for Persona3MainView.xaml\n    /// </summary>\n    public partial class Persona3MainView : UserControl\n    {\n        public Persona3MainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/Views/PersonaView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Persona3.Views.PersonaView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Persona3.Views\"\n             xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"800\" d:DesignWidth=\"450\">\n    <UserControl.Resources>\n        <DataTemplate x:Key=\"SkillTemplate\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n                <Image Grid.Column=\"0\" Margin=\"0 0 3 0\" Width=\"61\" Height=\"20\" Source=\"{Binding Icon}\"/>\n                <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" />\n            </Grid>\n        </DataTemplate>\n    </UserControl.Resources>\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n        <StackPanel>\n            <TextBlock Text=\"Persona\"/>\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n                <ComboBox\n                    Grid.Column=\"0\"\n                    ItemsSource=\"{Binding PersonaList}\"\n                    SelectedValue=\"{Binding PersonaId}\"\n                    SelectedValuePath=\"Value\"\n                    DisplayMemberPath=\"Name\"/>\n                <Button\n                    Grid.Column=\"1\"\n                    Margin=\"5 0 0 0\"\n                    Content=\"Reset to default\"\n                    Command=\"{Binding ResetPersonaCommand}\"/>\n            </Grid>\n\n            <common:TwoEqualColumnsStackPanel Margin=\"0 0 0 15\">\n                <TextBlock Text=\"Level\"/>\n                <TextBox Text=\"{Binding Level, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock/>\n                <TextBlock/>\n\n                <TextBlock Text=\"Experience\"/>\n                <TextBox Text=\"{Binding Experience, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Strength\"/>\n                <TextBox Text=\"{Binding Strength, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Magic\"/>\n                <TextBox Text=\"{Binding Magic, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Endurance\"/>\n                <TextBox Text=\"{Binding Endurance, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Agility\"/>\n                <TextBox Text=\"{Binding Agility, UpdateSourceTrigger=PropertyChanged}\"/>\n                <TextBlock Text=\"Luck\"/>\n                <TextBox Text=\"{Binding Luck, UpdateSourceTrigger=PropertyChanged}\"/>\n            </common:TwoEqualColumnsStackPanel>\n\n            <TextBlock>Skills</TextBlock>\n            <Separator/>\n            <Grid Margin=\"0 0 0 15\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"1*\"/>\n                    <ColumnDefinition Width=\"3\"/>\n                    <ColumnDefinition Width=\"1*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"3\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"3\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"3\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"3\"/>\n                </Grid.RowDefinitions>\n                <ComboBox Grid.Column=\"0\" Grid.Row=\"0\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill0}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\n                <ComboBox Grid.Column=\"0\" Grid.Row=\"2\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill1}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\n                <ComboBox Grid.Column=\"0\" Grid.Row=\"4\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill2}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\n                <ComboBox Grid.Column=\"0\" Grid.Row=\"6\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill3}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"0\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill4}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"2\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill5}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"4\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill6}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"6\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill7}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\n            </Grid>\n\n            <StackPanel Visibility=\"{Binding AdvancedVisibility}\">\n                <TextBlock Text=\"The following fields have an unknown effect:\"/>\n                <common:TwoEqualColumnsStackPanel>\n                    <TextBlock Text=\"Break\"/>\n                    <TextBox Text=\"{Binding Break, UpdateSourceTrigger=PropertyChanged}\"/>\n                    <TextBlock Text=\"Unk\"/>\n                    <TextBox Text=\"{Binding Unk, UpdateSourceTrigger=PropertyChanged}\"/>\n                    <TextBlock Text=\"Flags\"/>\n                    <TextBlock Text=\"{Binding Flags}\"/>\n                    <TextBlock/>\n                    <CheckBox\n                        Content=\"Over Thanatos\"\n                        IsChecked=\"{Binding OverThanatos, UpdateSourceTrigger=PropertyChanged}\"/>\n                </common:TwoEqualColumnsStackPanel>\n            </StackPanel>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona3/Views/PersonaView.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Persona3.Views\n{\n    /// <summary>\n    /// Interaction logic for PersonaView.xaml\n    /// </summary>\n    public partial class PersonaView : UserControl\n    {\n        public PersonaView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Interfaces/IConsumableList.cs",
    "content": "using KHSave.LibPersona5;\nusing System.Collections.Generic;\n\nnamespace KHSave.SaveEditor.Persona5.Interfaces\n{\n    public interface IConsumableList\n    {\n        IEnumerable<Presets.Consumable> ConsumableItems { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Interfaces/IEquipmentList.cs",
    "content": "using KHSave.LibPersona5.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Persona5.Models;\nusing System.Collections.Generic;\n\nnamespace KHSave.SaveEditor.Persona5.Interfaces\n{\n    public interface IEquipmentList\n    {\n        KhEnumListModel<EnumIconTypeModel<Equipment>, Equipment> EquipmentList { get; }\n\n        IEnumerable<EquipmentModel> Accessories { get; }\n        IEnumerable<EquipmentModel> Armors { get; }\n        IEnumerable<EquipmentModel> Outfits { get; }\n        IEnumerable<EquipmentModel> MeleeWeapons { get; }\n        IEnumerable<EquipmentModel> RangeWeapons { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Interfaces/IPersonaList.cs",
    "content": "using KHSave.SaveEditor.Persona5.ViewModels;\nusing System.Collections.Generic;\n\nnamespace KHSave.SaveEditor.Persona5.Interfaces\n{\n    public interface IPersonaList\n    {\n        IEnumerable<PersonaEntryViewModel> PersonaList { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Interfaces/ISkillList.cs",
    "content": "using KHSave.SaveEditor.Persona5.ViewModels;\nusing System.Collections.Generic;\n\nnamespace KHSave.SaveEditor.Persona5.Interfaces\n{\n    public interface ISkillList\n    {\n        IEnumerable<SkillViewModel> SkillList { get; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/KHSave.SaveEditor.Persona5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6-windows</TargetFramework>\n    <UseWPF>true</UseWPF>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.LibPersona5\\KHSave.LibPersona5.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.SaveEditor.Common\\KHSave.SaveEditor.Common.csproj\" />\n    <ProjectReference Include=\"..\\KHSave\\KHSave.csproj\" />\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Models/EquipmentModel.cs",
    "content": "using KHSave.LibPersona5;\nusing KHSave.SaveEditor.Common.Services;\nusing System.Windows.Media;\n\nnamespace KHSave.SaveEditor.Persona5.Models\n{\n    public class EquipmentModel\n    {\n        public string Name { get; }\n        public ushort Value { get; }\n        public ImageSource Icon { get; }\n\n        public EquipmentModel(\n            Presets.IItem item, int baseId, string iconType)\n        {\n            Value = (ushort)(item.Id | baseId);\n            Name = item.Name;\n            Icon = IconService.Icon(iconType);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/ViewModels/CharacterEntryViewModel.cs",
    "content": "using KHSave.Attributes;\nusing KHSave.LibPersona5;\nusing KHSave.LibPersona5.Models;\nusing KHSave.LibPersona5.Types;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Persona5.Interfaces;\nusing KHSave.SaveEditor.Persona5.Models;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Persona5.ViewModels\n{\n    public class CharacterEntryViewModel : GenericListModel<PersonaViewModel>\n    {\n        private readonly ISavePersona5 _save;\n        private readonly Characters _id;\n        private readonly Character _character;\n        private readonly IEquipmentList _equipmentList;\n\n        public CharacterEntryViewModel(\n            ISavePersona5 save,\n            Character character,\n            int index,\n            IPersonaList personaList,\n            ISkillList skillList,\n            IEquipmentList equipmentList,\n            ITraitList traitList) :\n            base(character.Persona.Select((x, i) => new PersonaViewModel(-1, x, personaList, skillList, traitList)))\n        {\n            _save = save;\n            _id = (Characters)index;\n            _character = character;\n            _equipmentList = equipmentList;\n        }\n\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        public string Name => InfoAttribute.GetInfo(_id);\n\n        public KhEnumListModel<EnumIconTypeModel<Equipment>, Equipment> EquipmentList =>\n            _equipmentList.EquipmentList;\n\n        public IEnumerable<EquipmentModel> Accessories => _equipmentList.Accessories;\n        public IEnumerable<EquipmentModel> Armors => _equipmentList.Armors;\n        public IEnumerable<EquipmentModel> Outfits => _equipmentList.Outfits;\n        public IEnumerable<EquipmentModel> MeleeWeapons => _equipmentList.MeleeWeapons;\n        public IEnumerable<EquipmentModel> RangeWeapons => _equipmentList.RangeWeapons;\n\n        public bool IsUnlocked\n        {\n            get\n            {\n                switch (_id)\n                {\n                    case Characters.Joker:\n                        return true;\n                    case Characters.Skull:\n                        return _save.PartyModifierRyuji;\n                    case Characters.Mona:\n                        return _save.PartyModifierMorgana;\n                    case Characters.Panther:\n                        return _save.PartyModifierAnn;\n                    case Characters.Fox:\n                        return _save.PartyModifierYusuke;\n                    case Characters.Queen:\n                        return _save.PartyModifierMakoto;\n                    case Characters.Noir:\n                        return _save.PartyModifierHaru;\n                    case Characters.Oracle:\n                        return _save.PartyModifierFutaba;\n                    case Characters.Crow:\n                        return _save.PartyModifierAkechi;\n                    case Characters.Violet:\n                        return _save.PartyModifierKasumi;\n                    default:\n                        return false;\n                }\n            }\n            set\n            {\n                switch (_id)\n                {\n                    case Characters.Skull:\n                        _save.PartyModifierRyuji = value;\n                        break;\n                    case Characters.Mona:\n                        _save.PartyModifierMorgana = value;\n                        break;\n                    case Characters.Panther:\n                        _save.PartyModifierAnn = value;\n                        break;\n                    case Characters.Fox:\n                        _save.PartyModifierYusuke = value;\n                        break;\n                    case Characters.Queen:\n                        _save.PartyModifierMakoto = value;\n                        break;\n                    case Characters.Noir:\n                        _save.PartyModifierHaru = value;\n                        break;\n                    case Characters.Oracle:\n                        _save.PartyModifierFutaba = value;\n                        break;\n                    case Characters.Crow:\n                        _save.PartyModifierAkechi = value;\n                        break;\n                }\n            }\n        }\n\n        public int Experience\n        {\n            get => _character.Experience;\n            set => _character.Experience = value;\n        }\n\n        public int CurrentHp\n        {\n            get => _character.CurrentHp;\n            set => _character.CurrentHp = value;\n        }\n\n        public int CurrentMp\n        {\n            get => _character.CurrentMp;\n            set => _character.CurrentMp = value;\n        }\n\n        public ushort MeleeWeaponId\n        {\n            get => (ushort)_character.MeleeWeapon;\n            set\n            {\n                _character.MeleeWeapon = (Equipment)value;\n                OnPropertyChanged();\n            }\n        }\n\n        public ushort RangeWeaponId\n        {\n            get => (ushort)_character.RangeWeapon;\n            set\n            {\n                _character.RangeWeapon = (Equipment)value;\n                OnPropertyChanged();\n            }\n        }\n\n        public ushort ProtectorId\n        {\n            get => (ushort)_character.Protector;\n            set\n            {\n                _character.Protector = (Equipment)value;\n                OnPropertyChanged();\n            }\n        }\n\n        public ushort AccessoryId\n        {\n            get => (ushort)_character.Accessory;\n            set\n            {\n                _character.Accessory = (Equipment)value;\n                OnPropertyChanged();\n            }\n        }\n\n        public ushort OutfitId\n        {\n            get => (ushort)_character.Outfit;\n            set\n            {\n                _character.Outfit = (Equipment)value;\n                OnPropertyChanged();\n            }\n        }\n\n        protected override void OnSelectedItem(PersonaViewModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(EntryVisible));\n            OnPropertyChanged(nameof(EntryNotVisible));\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/ViewModels/CharactersViewModel.cs",
    "content": "using KHSave.LibPersona5;\nusing KHSave.SaveEditor.Persona5.Interfaces;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Persona5.ViewModels\n{\n    public class CharactersViewModel : GenericListModel<CharacterEntryViewModel>\n    {\n        private readonly ISavePersona5 _save;\n\n        public CharactersViewModel(\n            ISavePersona5 save,\n            IPersonaList personaList,\n            ISkillList skillList,\n            IEquipmentList equipmentList,\n            ITraitList traitList) :\n            this(save.Characters.Select((_, i) => new CharacterEntryViewModel(save, save.Characters[i], i, personaList, skillList, equipmentList, traitList)))\n        {\n            _save = save;\n        }\n\n        private CharactersViewModel(IEnumerable<CharacterEntryViewModel> list) :\n            base(list)\n        { }\n\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        protected override void OnSelectedItem(CharacterEntryViewModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(EntryVisible));\n            OnPropertyChanged(nameof(EntryNotVisible));\n        }\n\n        protected override CharacterEntryViewModel OnNewItem() =>\n            throw new System.NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/ViewModels/CompendiumViewModel.cs",
    "content": "using KHSave.LibPersona5;\nusing KHSave.SaveEditor.Persona5.Interfaces;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools.Wpf.Commands;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Persona5.ViewModels\n{\n    public class CompendiumViewModel : GenericListModel<PersonaViewModel>\n    {\n        private const string UnlockCompendiumMessage =\n            \"This will unlock the compendium by filling the Persona with their default parameters.\\n\" +\n            \"Do you wish to also overwrite the existing customized Persona too?\\n\\n\" +\n            \"Yes: Unlock compenium, reset your customized Persona.\\n\" +\n            \"No: Only unlock missing Persona, do not touch the existing Persona.\\n\" +\n            \"Cancel: Do not perform any operation.\";\n\n        private readonly ISavePersona5 _save;\n\n        public CompendiumViewModel(\n            ISavePersona5 save,\n            IPersonaList personaList,\n            ISkillList skillList,\n            ITraitList traitList) :\n            this(save.Compendium.Select((x, i) => new PersonaViewModel(i, x, personaList, skillList, traitList)))\n        {\n            _save = save;\n            UnlockAllCompendiumCommand = new RelayCommand(_ =>\n            {\n                var result = MessageBox.Show(UnlockCompendiumMessage,\n                    \"Reset Persona to default\", MessageBoxButton.YesNoCancel,\n                    MessageBoxImage.Warning);\n\n                System.Func<PersonaViewModel, bool> predicate;\n                switch (result)\n                {\n                    case MessageBoxResult.Yes:\n                        predicate = x => true;\n                        break;\n                    case MessageBoxResult.No:\n                        predicate = x => !x.IsEnabled;\n                        break;\n                    default:\n                        return;\n                }\n\n                foreach (var persona in Items.Where(predicate))\n                    persona.ResetPersonaToDefault();\n            });\n        }\n\n        private CompendiumViewModel(IEnumerable<PersonaViewModel> list) :\n            base(list)\n        { }\n\n        public Visibility EntryVisible => IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n        public Visibility EntryNotVisible => !IsItemSelected ? Visibility.Visible : Visibility.Collapsed;\n\n        public RelayCommand UnlockAllCompendiumCommand { get; }\n\n        protected override void OnSelectedItem(PersonaViewModel item)\n        {\n            base.OnSelectedItem(item);\n            OnPropertyChanged(nameof(EntryVisible));\n            OnPropertyChanged(nameof(EntryNotVisible));\n        }\n\n        protected override PersonaViewModel OnNewItem() =>\n            throw new System.NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/ViewModels/InventoryViewModel.cs",
    "content": "using KHSave.LibPersona5;\nusing KHSave.SaveEditor.Common.Services;\nusing KHSave.SaveEditor.Persona5.Interfaces;\nusing System;\nusing System.Linq;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Models;\n\nnamespace KHSave.SaveEditor.Persona5.ViewModels\n{\n    public class InventoryEntry : BaseNotifyPropertyChanged, SearchEngine.IName, SearchEngine.ICount\n    {\n        private readonly byte[] _elementCount;\n        private readonly int _elementIndex;\n\n        public InventoryEntry(IConsumableList consumables, byte[] elementCount, int elementIndex)\n        {\n            _elementCount = elementCount;\n            _elementIndex = elementIndex;\n\n            Name = consumables.ConsumableItems.FirstOrDefault(x => x.Id == elementIndex)?.Name;\n        }\n\n        public string Name { get; }\n\n        public int Count\n        {\n            get => _elementCount[_elementIndex];\n            set => _elementCount[_elementIndex] = (byte)Math.Min(255, Math.Max(0, value));\n        }\n    }\n\n    public class InventoryViewModel : GenericListModel<InventoryEntry>\n    {\n        private ISavePersona5 _save;\n        private string _searchTerm;\n\n        public InventoryViewModel(ISavePersona5 save, IConsumableList consumables) :\n            base(save.InventoryCount.Select((_, i) => new InventoryEntry(consumables, save.InventoryCount, i)))\n        {\n            _save = save;\n        }\n\n        public string SearchTerm\n        {\n            get => _searchTerm;\n            set\n            {\n                _searchTerm = value;\n                Filter(items => SearchEngine.Filter(_searchTerm, items));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/ViewModels/Persona5MainViewModel.cs",
    "content": "using KHSave.LibPersona5;\nusing KHSave.LibPersona5.Types;\nusing KHSave.SaveEditor.Common.Contracts;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Persona5.Interfaces;\nusing KHSave.SaveEditor.Persona5.Models;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Persona5.ViewModels\n{\n    public class Persona5MainViewModel : BaseNotifyPropertyChanged,\n        IRefreshUi, IOpenStream, IWriteToStream,\n        IPersonaList, ISkillList, IEquipmentList,\n        IConsumableList, ITraitList\n    {\n        private static readonly string[] MeleeType = new string[]\n        {\n            \"Dagger\",\n            \"Dagger\",\n            \"Pole\",\n            \"MorganaMelee\",\n            \"AnnMelee\",\n            \"YusukeMelee\",\n            \"MakotoMelee\",\n            \"HaruMelee\",\n            \"FutabaMelee\",\n            \"GoroMelee\",\n            \"VioletMelee\",\n            \"VioletMelee\",\n            \"VioletMelee\",\n            \"VioletMelee\",\n            \"VioletMelee\",\n            \"VioletMelee\",\n        };\n        private static readonly string[] RangeType = new string[]\n        {\n            \"RangeJoker\",\n            \"RangeJoker\",\n            \"RyujiRange\",\n            \"MorganaRange\",\n            \"AnnRange\",\n            \"YusukeRange\",\n            \"MakotoRange\",\n            \"HaruRange\",\n            \"FutabaRange\",\n            \"RangeCrow\",\n            \"VioletRange\",\n            \"VioletRange\",\n            \"VioletRange\",\n            \"VioletRange\",\n            \"VioletRange\",\n            \"VioletRange\",\n        };\n\n        private const string DefaultTab = \"Characters\";\n        private static List<Presets.Persona> Demons;\n        private static List<Presets.Persona> DemonsRoyal;\n        private Presets.Items _itemsVanilla;\n        private Presets.Items _itemsRoyal;\n\n        public ISavePersona5 Save { get; private set; }\n\n        public CharactersViewModel Characters { get; set; }\n        public InventoryViewModel Inventory { get; set; }\n        public CompendiumViewModel Compendium { get; set; }\n        public SystemViewModel System { get; set; }\n\n        public Visibility SimpleVisibility => Common.Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Common.Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n        public string CurrentTabId\n        {\n            get => Common.Global.LastPersona5Tab ?? DefaultTab;\n            set => Common.Global.LastPersona5Tab = value;\n        }\n\n        public IEnumerable<PersonaEntryViewModel> PersonaList { get; private set; }\n        public IEnumerable<SkillViewModel> SkillList { get; private set; }\n        public KhEnumListModel<EnumIconTypeModel<Skill>, Skill> SkillVanillaList { get; } = new KhEnumListModel<EnumIconTypeModel<Skill>, Skill>();\n        public KhEnumListModel<EnumIconTypeModel<SkillRoyal>, SkillRoyal> SkillRoyalList { get; } =\n            new KhEnumListModel<EnumIconTypeModel<SkillRoyal>, SkillRoyal>();\n\n        public KhEnumListModel<EnumIconTypeModel<Equipment>, Equipment> EquipmentList { get; } = new KhEnumListModel<EnumIconTypeModel<Equipment>, Equipment>();\n        public IEnumerable<EquipmentModel> Accessories { get; private set; }\n        public IEnumerable<EquipmentModel> Armors { get; private set; }\n        public IEnumerable<EquipmentModel> Outfits { get; private set; }\n        public IEnumerable<EquipmentModel> MeleeWeapons { get; private set; }\n        public IEnumerable<EquipmentModel> RangeWeapons { get; private set; }\n        public IEnumerable<Presets.Consumable> ConsumableItems { get; private set; }\n        public KhEnumListModel<Trait> TraitList { get; } = new KhEnumListModel<Trait>();\n\n        public void RefreshUi()\n        {\n            Characters = new CharactersViewModel(Save, this, this, this, this);\n            Inventory = new InventoryViewModel(Save, this);\n            Compendium = new CompendiumViewModel(Save, this, this, this);\n            System = new SystemViewModel(Save);\n\n            OnPropertyChanged(nameof(SimpleVisibility));\n            OnPropertyChanged(nameof(AdvancedVisibility));\n            OnPropertyChanged(nameof(Characters));\n            OnPropertyChanged(nameof(Inventory));\n        }\n\n        public void OpenStream(Stream stream)\n        {\n            Save = SavePersona5.Read(stream);\n            SkillList = Save.IsRoyal\n                ? SkillRoyalList\n                    .Select(x => new SkillViewModel()\n                    {\n                        Name = x.Name,\n                        Value = (Skill)x.Value,\n                        Icon = x.Icon,\n                    })\n                    .ToList()\n                : SkillVanillaList\n                    .Select(x => new SkillViewModel()\n                    {\n                        Name = x.Name,\n                        Value = x.Value,\n                        Icon = x.Icon,\n                    })\n                    .ToList();\n\n            if (Save.IsRoyal)\n            {\n                if (DemonsRoyal == null)\n                    DemonsRoyal = Presets.GetPersona(true);\n                if (_itemsRoyal == null)\n                    _itemsRoyal = Presets.GetItems(true);\n\n                PersonaList = GetPersona(DemonsRoyal);\n                ProcessItems(_itemsRoyal);\n            }\n            else\n            {\n                if (Demons == null)\n                    Demons = Presets.GetPersona(false);\n                if (_itemsVanilla == null)\n                    _itemsVanilla = Presets.GetItems(false);\n\n                PersonaList = GetPersona(Demons);\n                ProcessItems(_itemsVanilla);\n            }\n\n            RefreshUi();\n        }\n\n        private List<PersonaEntryViewModel> GetPersona(List<Presets.Persona> persona) =>\n            persona.Select(x => new PersonaEntryViewModel(x))\n            .ToList();\n\n        private void ProcessItems(Presets.Items items)\n        {\n            Accessories = items.Accessories\n                .Select(x => new EquipmentModel(x, 0x2000, \"Accessory\"))\n                .ToList();\n            Armors = items.Armors\n                .Select(x =>\n                {\n                    var armorType = \"Protector\";\n                    if ((x.EquippableFlags & Presets.ArmorEquipAllMask) == Presets.ArmorEquipAllMask)\n                        armorType = \"Protector\";\n                    else if ((x.EquippableFlags & Presets.ArmorEquipUnisexMask) == Presets.ArmorEquipUnisexMask)\n                        armorType = \"ProtectorUnisex\";\n                    else if ((x.EquippableFlags & Presets.ArmorEquipMaleMask) != 0)\n                        armorType = \"ProtectorMale\";\n                    else if ((x.EquippableFlags & Presets.ArmorEquipFemaleMask) != 0)\n                        armorType = \"ProtectorMale\";\n                    else if ((x.EquippableFlags & Presets.ArmorEquipCatMask) != 0)\n                        armorType = \"ProtectorCat\";\n\n                    return new EquipmentModel(x, 0x1000, armorType);\n                }).ToList();\n            Outfits = items.Outfits\n                .Select(x => new EquipmentModel(x, 0x7000, \"Accessory\"))\n                .ToList();\n            MeleeWeapons = items.MeleeWeapons\n                .Select(x => new EquipmentModel(x, 0x0000, MeleeType[GetFlagIndex(x.EquippableFlags)]))\n                .ToList();\n            RangeWeapons = items.RangeWeapons\n                .Select(x => new EquipmentModel(x, 0x8000, RangeType[GetFlagIndex(x.EquippableFlags)]))\n                .ToList();\n            ConsumableItems = items.Consumables;\n        }\n\n        private int GetFlagIndex(int mask)\n        {\n            for (var i = 0; i < 16; i++)\n                if ((mask & (1 << i)) != 0)\n                    return i;\n            return default;\n        }\n\n        public void WriteToStream(Stream stream) =>\n            SavePersona5.Write(stream, Save);\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/ViewModels/PersonaEntryViewModel.cs",
    "content": "using KHSave.LibPersona5;\n\nnamespace KHSave.SaveEditor.Persona5.ViewModels\n{\n    public class PersonaEntryViewModel\n    {\n        public string Name => ToString();\n\n        public Presets.Persona Properties { get; }\n        public int Value { get; }\n\n        public string SimpleName { get; }\n        public string Arcana { get; }\n\n        public PersonaEntryViewModel(Presets.Persona persona)\n        {\n            Properties = persona;\n            Value = persona.Id;\n            SimpleName = persona.Name;\n            Arcana = persona.Arcana.ToString();\n        }\n\n        public override string ToString()\n        {\n            if (string.IsNullOrEmpty(Arcana))\n                return SimpleName;\n            return $\"{Arcana} | {SimpleName}\";\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/ViewModels/PersonaViewModel.cs",
    "content": "using KHSave.LibPersona5.Models;\nusing KHSave.LibPersona5.Types;\nusing KHSave.SaveEditor.Common;\nusing KHSave.SaveEditor.Common.Models;\nusing KHSave.SaveEditor.Persona5.Interfaces;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing Xe.Tools;\nusing Xe.Tools.Wpf.Commands;\n\nnamespace KHSave.SaveEditor.Persona5.ViewModels\n{\n    public class PersonaViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly int _compendiumIndex;\n        private readonly Persona _persona;\n        private readonly IPersonaList _personaList;\n        private readonly ISkillList _skillList;\n        private readonly ITraitList _traitList;\n        private PersonaEntryViewModel _vm;\n\n        public PersonaViewModel(int compendiumIndex, Persona persona, IPersonaList personaList, ISkillList skillList, ITraitList traitList)\n        {\n            _compendiumIndex = compendiumIndex;\n            _persona = persona;\n            _personaList = personaList;\n            _skillList = skillList;\n            _traitList = traitList;\n            _vm = PersonaList.FirstOrDefault(x => x.Value == PersonaId);\n            ResetPersonaCommand = new RelayCommand(_ =>\n            {\n                if (MessageBox.Show(\"This will reset stats and skills of your persona. Do you want to continue?\",\n                    \"Reset Persona to default\", MessageBoxButton.YesNo, MessageBoxImage.Warning) != MessageBoxResult.Yes)\n                    return;\n\n                ResetPersonaToDefault();\n            }, _ => _compendiumIndex >= 0);\n        }\n\n        public void ResetPersonaToDefault()\n        {\n            var defaulPersona = PersonaList.FirstOrDefault(x => x.Value == _compendiumIndex);\n            if (defaulPersona == null)\n                return;\n\n            IsEnabled = true;\n            PersonaId = _compendiumIndex;\n            _persona.Level = defaulPersona.Properties.Level;\n            _persona.Experience = 0;\n            _persona.Strength = defaulPersona.Properties.Strength;\n            _persona.Magic = defaulPersona.Properties.Magic;\n            _persona.Endurance = defaulPersona.Properties.Endurance;\n            _persona.Agility = defaulPersona.Properties.Agility;\n            _persona.Luck = defaulPersona.Properties.Luck;\n\n            for (int i = defaulPersona.Properties.Skills.Count; i < _persona.Skills.Length; i++)\n                _persona.Skills[i] = Skill.Empty;\n            for (int i = Math.Min(defaulPersona.Properties.Skills.Count, _persona.Skills.Length) - 1; i >= 0; i--)\n                _persona.Skills[i] = (Skill)defaulPersona.Properties.Skills[i];\n\n            OnAllPropertiesChanged();\n        }\n\n        public IEnumerable<PersonaEntryViewModel> PersonaList => _personaList.PersonaList;\n        public IEnumerable<SkillViewModel> SkillList => _skillList.SkillList;\n        public KhEnumListModel<Trait> Traits => _traitList.TraitList;\n        public Visibility SimpleVisibility => Global.IsAdvancedMode ? Visibility.Collapsed : Visibility.Visible;\n        public Visibility AdvancedVisibility => Global.IsAdvancedMode ? Visibility.Visible : Visibility.Collapsed;\n        public RelayCommand ResetPersonaCommand { get; }\n\n        public string Name => _vm?.Name ?? \"-\";\n        public string DemonName => _vm?.SimpleName;\n        public string Arcana => _vm?.Arcana;\n\n        public bool IsEnabled\n        {\n            get => _persona.Flags != 0;\n            set => _persona.Flags = (short)(value ? 1 : 0);\n        }\n\n        public int PersonaId\n        {\n            get => _persona.Id;\n            set\n            {\n                _persona.Id = (short)value;\n                _vm = PersonaList.FirstOrDefault(x => x.Value == PersonaId);\n                OnPropertyChanged(nameof(DemonName));\n                OnPropertyChanged(nameof(Arcana));\n                OnPropertyChanged(nameof(Name));\n            }\n        }\n\n        public byte Level\n        {\n            get => _persona.Level;\n            set => _persona.Level = value;\n        }\n\n        public Trait Trait\n        {\n            get => _persona.Trait;\n            set => _persona.Trait = value;\n        }\n\n        public int Experience\n        {\n            get => _persona.Experience;\n            set => _persona.Experience = value;\n        }\n\n        public byte Strength\n        {\n            get => _persona.Strength;\n            set => _persona.Strength = value;\n        }\n\n        public byte Magic\n        {\n            get => _persona.Magic;\n            set => _persona.Magic = value;\n        }\n\n        public byte Endurance\n        {\n            get => _persona.Endurance;\n            set => _persona.Endurance = value;\n        }\n\n        public byte Agility\n        {\n            get => _persona.Agility;\n            set => _persona.Agility = value;\n        }\n\n        public byte Luck\n        {\n            get => _persona.Luck;\n            set => _persona.Luck = value;\n        }\n\n        public Skill Skill0\n        {\n            get => _persona.Skills[0];\n            set\n            {\n                _persona.Skills[0] = value;\n                OnPropertyChanged(nameof(Skill0));\n                OnPropertyChanged(nameof(SkillData0));\n            }\n        }\n\n        public Skill Skill1\n        {\n            get => _persona.Skills[1];\n            set\n            {\n                _persona.Skills[1] = value;\n                OnPropertyChanged(nameof(Skill1));\n                OnPropertyChanged(nameof(SkillData1));\n            }\n        }\n\n        public Skill Skill2\n        {\n            get => _persona.Skills[2];\n            set\n            {\n                _persona.Skills[2] = value;\n                OnPropertyChanged(nameof(Skill2));\n                OnPropertyChanged(nameof(SkillData2));\n            }\n        }\n\n        public Skill Skill3\n        {\n            get => _persona.Skills[3];\n            set\n            {\n                _persona.Skills[3] = value;\n                OnPropertyChanged(nameof(Skill3));\n                OnPropertyChanged(nameof(SkillData3));\n            }\n        }\n\n        public Skill Skill4\n        {\n            get => _persona.Skills[4];\n            set\n            {\n                _persona.Skills[4] = value;\n                OnPropertyChanged(nameof(Skill4));\n                OnPropertyChanged(nameof(SkillData4));\n            }\n        }\n\n        public Skill Skill5\n        {\n            get => _persona.Skills[5];\n            set\n            {\n                _persona.Skills[5] = value;\n                OnPropertyChanged(nameof(Skill5));\n                OnPropertyChanged(nameof(SkillData5));\n            }\n        }\n\n        public Skill Skill6\n        {\n            get => _persona.Skills[6];\n            set\n            {\n                _persona.Skills[6] = value;\n                OnPropertyChanged(nameof(Skill6));\n                OnPropertyChanged(nameof(SkillData6));\n            }\n        }\n\n        public Skill Skill7\n        {\n            get => _persona.Skills[7];\n            set\n            {\n                _persona.Skills[7] = value;\n                OnPropertyChanged(nameof(Skill7));\n                OnPropertyChanged(nameof(SkillData7));\n            }\n        }\n\n        public int SkillData0\n        {\n            get => (int)_persona.Skills[0];\n            set\n            {\n                _persona.Skills[0] = (Skill)value;\n                OnPropertyChanged(nameof(Skill0));\n                OnPropertyChanged(nameof(SkillData0));\n            }\n        }\n\n        public int SkillData1\n        {\n            get => (int)_persona.Skills[1];\n            set\n            {\n                _persona.Skills[1] = (Skill)value;\n                OnPropertyChanged(nameof(Skill1));\n                OnPropertyChanged(nameof(SkillData1));\n            }\n        }\n\n        public int SkillData2\n        {\n            get => (int)_persona.Skills[2];\n            set\n            {\n                _persona.Skills[2] = (Skill)value;\n                OnPropertyChanged(nameof(Skill2));\n                OnPropertyChanged(nameof(SkillData2));\n            }\n        }\n\n        public int SkillData3\n        {\n            get => (int)_persona.Skills[3];\n            set\n            {\n                _persona.Skills[3] = (Skill)value;\n                OnPropertyChanged(nameof(Skill3));\n                OnPropertyChanged(nameof(SkillData3));\n            }\n        }\n\n        public int SkillData4\n        {\n            get => (int)_persona.Skills[4];\n            set\n            {\n                _persona.Skills[4] = (Skill)value;\n                OnPropertyChanged(nameof(Skill4));\n                OnPropertyChanged(nameof(SkillData4));\n            }\n        }\n\n        public int SkillData5\n        {\n            get => (int)_persona.Skills[5];\n            set\n            {\n                _persona.Skills[5] = (Skill)value;\n                OnPropertyChanged(nameof(Skill5));\n                OnPropertyChanged(nameof(SkillData5));\n            }\n        }\n\n        public int SkillData6\n        {\n            get => (int)_persona.Skills[6];\n            set\n            {\n                _persona.Skills[6] = (Skill)value;\n                OnPropertyChanged(nameof(Skill6));\n                OnPropertyChanged(nameof(SkillData6));\n            }\n        }\n\n        public int SkillData7\n        {\n            get => (int)_persona.Skills[7];\n            set\n            {\n                _persona.Skills[7] = (Skill)value;\n                OnPropertyChanged(nameof(Skill7));\n                OnPropertyChanged(nameof(SkillData7));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/ViewModels/RoomViewModel.cs",
    "content": "using KHSave.LibPersona5;\nusing Xe.Tools;\n\nnamespace KHSave.SaveEditor.Persona5.ViewModels\n{\n    public class RoomViewModel : BaseNotifyPropertyChanged\n    {\n        private readonly Presets.Field _field;\n\n        public string Id => $\"{_field.Category:D03}_{_field.Map:D03}\";\n        public string Description => $\"{Id} {_field.Description}\";\n        public bool IsVanilla => _field.Vanilla;\n        public bool IsRoyal => _field.Royal;\n\n        public RoomViewModel(Presets.Field field)\n        {\n            _field = field;\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/ViewModels/SkillViewModel.cs",
    "content": "using KHSave.LibPersona5.Types;\nusing System.Windows.Media;\n\nnamespace KHSave.SaveEditor.Persona5.ViewModels\n{\n    public class SkillViewModel\n    {\n        public string Name { get; set; }\n        public Skill Value { get; set; }\n        public ImageSource Icon { get; set; }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/ViewModels/SystemViewModel.cs",
    "content": "using KHSave.LibPersona5;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace KHSave.SaveEditor.Persona5.ViewModels\n{\n    public class SystemViewModel\n    {\n        private static readonly DateTime BaseDate = new DateTime(2011, 4, 1);\n        private readonly ISavePersona5 _save;\n\n        public List<RoomViewModel> Rooms { get; set; }\n\n        public string Room\n        {\n            get => $\"{_save.RoomCategory:D03}_{_save.RoomMap:D03}\";\n            set\n            {\n                if (string.IsNullOrEmpty(value))\n                    return;\n\n                var room = value.Split('_');\n                _save.RoomCategory = short.Parse(room[0]);\n                _save.RoomMap = short.Parse(room[1]);\n            }\n        }\n\n        public DateTime CalendarDate\n        {\n            get => BaseDate.AddDays(_save.CalendarDay1);\n            set\n            {\n                var calendarValue = (short)value.Subtract(BaseDate).TotalDays;\n                _save.CalendarDay1 = calendarValue;\n                _save.CalendarDay2 = calendarValue;\n                _save.CalendarDay3 = calendarValue;\n            }\n        }\n\n        public SystemViewModel(ISavePersona5 save)\n        {\n            _save = save;\n\n            Rooms = Presets.Fields\n                .Where(x => IsMapPresent(x, save.IsRoyal))\n                .Select(x => new RoomViewModel(x)).ToList();\n        }\n\n        private bool IsMapPresent(Presets.Field field, bool isRoyal) =>\n            isRoyal ? field.Royal : field.Vanilla;\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/CharacterView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Persona5.Views.CharacterView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Persona5.Views\" xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"800\" d:DesignWidth=\"450\">\n    <UserControl.Resources>\n        <CollectionViewSource x:Key=\"AbilityTypes\" Source=\"{Binding AbilityTypes}\"/>\n        <DataTemplate x:Key=\"EquipTemplate\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n                <Image Grid.Column=\"0\" Margin=\"0 0 3 0\" Width=\"61\" Height=\"20\" Source=\"{Binding Icon}\"/>\n                <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" />\n            </Grid>\n        </DataTemplate>\n    </UserControl.Resources>\n    <TabControl>\n        <TabItem Header=\"Stats\">\n            <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n                <StackPanel>\n                    <CheckBox Content=\"Unlocked\" IsChecked=\"{Binding IsUnlocked}\"/>\n                    <common:TwoEqualColumnsStackPanel>\n                        <TextBlock Text=\"Current HP\"/>\n                        <TextBox Text=\"{Binding CurrentHp, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"Current MP\"/>\n                        <TextBox Text=\"{Binding CurrentMp, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                        <TextBlock Text=\"Experience\"/>\n                        <TextBox Text=\"{Binding Experience, UpdateSourceTrigger=PropertyChanged}\"/>\n                    </common:TwoEqualColumnsStackPanel>\n                    <common:TwoEqualColumnsStackPanel>\n                        <TextBlock Text=\"Melee Weapon\"/>\n                        <ComboBox ItemsSource=\"{Binding MeleeWeapons}\" SelectedValue=\"{Binding MeleeWeaponId}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource EquipTemplate}\"/>\n                        <TextBlock Text=\"Range Weapon\"/>\n                        <ComboBox ItemsSource=\"{Binding RangeWeapons}\" SelectedValue=\"{Binding RangeWeaponId}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource EquipTemplate}\"/>\n                        <TextBlock Text=\"Protector\"/>\n                        <ComboBox ItemsSource=\"{Binding Armors}\" SelectedValue=\"{Binding ProtectorId}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource EquipTemplate}\"/>\n                        <TextBlock Text=\"Accessory\"/>\n                        <ComboBox ItemsSource=\"{Binding Accessories}\" SelectedValue=\"{Binding AccessoryId}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource EquipTemplate}\"/>\n                        <TextBlock Text=\"Outfit\"/>\n                        <ComboBox ItemsSource=\"{Binding Outfits}\" SelectedValue=\"{Binding OutfitId}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource EquipTemplate}\"/>\n                        \n                    </common:TwoEqualColumnsStackPanel>\n                </StackPanel>\n            </ScrollViewer>\n        </TabItem>\n        <TabItem Header=\"Persona\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"10\"/>\n                    <ColumnDefinition Width=\"2*\"/>\n                </Grid.ColumnDefinitions>\n\n                <ListBox\n                    Grid.Column=\"0\"\n                    ItemsSource=\"{Binding Items}\"\n                    SelectedIndex=\"{Binding SelectedIndex}\"\n                    SelectedItem=\"{Binding SelectedItem}\"\n                    DisplayMemberPath=\"Name\"\n                    />\n                <Grid Grid.Column=\"2\" Margin=\"0 0 10 0\" Visibility=\"{Binding EntryNotVisible}\">\n                    <Label Content=\"Select a persona to view or edit\"/>\n                </Grid>\n                <Grid Grid.Column=\"2\" Margin=\"0 0 10 0\" Visibility=\"{Binding EntryVisible}\">\n                    <local:PersonaView DataContext=\"{Binding SelectedItem}\"/>\n                </Grid>\n            </Grid>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/CharacterView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Persona5.Views\n{\n    /// <summary>\n    /// Interaction logic for CharacterView.xaml\n    /// </summary>\n    public partial class CharacterView : UserControl\n    {\n        public CharacterView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/CharactersView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Persona5.Views.CharactersView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Persona5.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"800\" d:DesignWidth=\"450\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"2*\"/>\n        </Grid.ColumnDefinitions>\n\n        <ListBox\n            Grid.Column=\"0\"\n            ItemsSource=\"{Binding Items}\"\n            SelectedIndex=\"{Binding SelectedIndex}\"\n            SelectedItem=\"{Binding SelectedItem}\"\n            DisplayMemberPath=\"Name\"\n            />\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select a character to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryVisible}\">\n            <local:CharacterView DataContext=\"{Binding SelectedItem}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/CharactersView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Persona5.Views\n{\n    /// <summary>\n    /// Interaction logic for CharactersView.xaml\n    /// </summary>\n    public partial class CharactersView : UserControl\n    {\n        public CharactersView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/CompendiumView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Persona5.Views.CompendiumView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Persona5.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"600\" d:DesignWidth=\"400\">\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"10\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n\n        <Grid Grid.Column=\"0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <ListBox\n                Grid.Row=\"0\"\n                ItemsSource=\"{Binding Items}\"\n                SelectedIndex=\"{Binding SelectedIndex}\"\n                SelectedItem=\"{Binding SelectedItem}\"\n                DisplayMemberPath=\"Name\"\n                />\n            <Button\n                Grid.Row=\"1\"\n                Content=\"Unlock all\"\n                Command=\"{Binding UnlockAllCompendiumCommand}\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryNotVisible}\">\n            <Label Content=\"Select a character to view or edit\"/>\n        </Grid>\n        <Grid\n            Grid.Column=\"2\" Margin=\"0 0 10 0\" \n            Visibility=\"{Binding EntryVisible}\">\n            <local:PersonaView DataContext=\"{Binding SelectedItem}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/CompendiumView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Persona5.Views\n{\n    /// <summary>\n    /// Interaction logic for CompendiumView.xaml\n    /// </summary>\n    public partial class CompendiumView : UserControl\n    {\n        public CompendiumView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/InventoryView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Persona5.Views.InventoryView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Persona5.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"400\" d:DesignWidth=\"450\">\n    <DataGrid ItemsSource=\"{Binding Items}\">\n    </DataGrid>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/InventoryView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Persona5.Views\n{\n    /// <summary>\n    /// Interaction logic for InventoryView.xaml\n    /// </summary>\n    public partial class InventoryView : UserControl\n    {\n        public InventoryView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/Persona5MainView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Persona5.Views.Persona5MainView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Persona5.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"250\" d:DesignWidth=\"300\">\n    <TabControl SelectedValue=\"{Binding CurrentTabId, Mode=TwoWay}\" SelectedValuePath=\"Header\">\n        <TabItem Header=\"Characters\">\n            <local:CharactersView DataContext=\"{Binding Characters}\"/>\n        </TabItem>\n        <TabItem Header=\"Inventory\" Visibility=\"Collapsed\">\n            <local:InventoryView DataContext=\"{Binding Inventory}\"/>\n        </TabItem>\n        <TabItem Header=\"Compendium\">\n            <local:CompendiumView DataContext=\"{Binding Compendium}\"/>\n        </TabItem>\n        <TabItem Header=\"System\">\n            <local:SystemView DataContext=\"{Binding System}\"/>\n        </TabItem>\n    </TabControl>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/Persona5MainView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Persona5.Views\n{\n    /// <summary>\n    /// Interaction logic for Persona5MainView.xaml\n    /// </summary>\n    public partial class Persona5MainView : UserControl\n    {\n        public Persona5MainView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/PersonaView.xaml",
    "content": "<UserControl x:Class=\"KHSave.SaveEditor.Persona5.Views.PersonaView\"\r\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Persona5.Views\" xmlns:common=\"clr-namespace:KHSave.SaveEditor.Common.Controls;assembly=KHSave.SaveEditor.Common\"\r\n             mc:Ignorable=\"d\" \r\n             d:DesignHeight=\"800\" d:DesignWidth=\"450\">\r\n    <UserControl.Resources>\r\n        <DataTemplate x:Key=\"SkillTemplate\">\r\n            <Grid>\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"Auto\"/>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                    <ColumnDefinition Width=\"Auto\"/>\r\n                </Grid.ColumnDefinitions>\r\n                <Image Grid.Column=\"0\" Margin=\"0 0 3 0\" Width=\"61\" Height=\"20\" Source=\"{Binding Icon}\"/>\r\n                <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" />\r\n            </Grid>\r\n        </DataTemplate>\r\n    </UserControl.Resources>\r\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\r\n        <StackPanel>\r\n            <TextBlock Text=\"Persona\"/>\r\n            <Grid>\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                    <ColumnDefinition Width=\"Auto\"/>\r\n                </Grid.ColumnDefinitions>\r\n                <ComboBox\r\n                    Grid.Column=\"0\"\r\n                    ItemsSource=\"{Binding PersonaList}\"\r\n                    SelectedValue=\"{Binding PersonaId}\"\r\n                    SelectedValuePath=\"Value\"\r\n                    DisplayMemberPath=\"Name\"/>\r\n                <Button\r\n                    Grid.Column=\"1\"\r\n                    Margin=\"5 0 0 0\"\r\n                    Content=\"Reset to default\"\r\n                    Command=\"{Binding ResetPersonaCommand}\"/>\r\n            </Grid>\r\n\r\n            <common:TwoEqualColumnsStackPanel Margin=\"0 0 0 15\">\r\n                <TextBlock Text=\"Level\"/>\r\n                <TextBox Text=\"{Binding Level, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                <TextBlock Text=\"Trait ID\"/>\n                <ComboBox ItemsSource=\"{Binding Traits}\" SelectedValue=\"{Binding Trait}\" DisplayMemberPath=\"Name\" SelectedValuePath=\"Value\"/>\r\n\r\n                <TextBlock Text=\"Experience\"/>\r\n                <TextBox Text=\"{Binding Experience, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                <TextBlock Text=\"Strength\"/>\r\n                <TextBox Text=\"{Binding Strength, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                <TextBlock Text=\"Magic\"/>\r\n                <TextBox Text=\"{Binding Magic, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                <TextBlock Text=\"Endurance\"/>\r\n                <TextBox Text=\"{Binding Endurance, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                <TextBlock Text=\"Agility\"/>\r\n                <TextBox Text=\"{Binding Agility, UpdateSourceTrigger=PropertyChanged}\"/>\r\n                <TextBlock Text=\"Luck\"/>\r\n                <TextBox Text=\"{Binding Luck, UpdateSourceTrigger=PropertyChanged}\"/>\r\n            </common:TwoEqualColumnsStackPanel>\r\n\r\n            <TextBlock>Skills</TextBlock>\r\n            <Separator/>\r\n            <Grid Margin=\"0 0 0 15\">\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"1*\"/>\r\n                    <ColumnDefinition Width=\"3\"/>\r\n                    <ColumnDefinition Width=\"1*\"/>\r\n                </Grid.ColumnDefinitions>\r\n                <Grid.RowDefinitions>\r\n                    <RowDefinition Height=\"Auto\"/>\r\n                    <RowDefinition Height=\"3\"/>\r\n                    <RowDefinition Height=\"Auto\"/>\r\n                    <RowDefinition Height=\"3\"/>\r\n                    <RowDefinition Height=\"Auto\"/>\r\n                    <RowDefinition Height=\"3\"/>\r\n                    <RowDefinition Height=\"Auto\"/>\r\n                    <RowDefinition Height=\"3\"/>\r\n                </Grid.RowDefinitions>\r\n                <ComboBox Grid.Column=\"0\" Grid.Row=\"0\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill0}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\r\n                <ComboBox Grid.Column=\"0\" Grid.Row=\"2\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill1}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\r\n                <ComboBox Grid.Column=\"0\" Grid.Row=\"4\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill2}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\r\n                <ComboBox Grid.Column=\"0\" Grid.Row=\"6\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill3}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\r\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"0\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill4}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\r\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"2\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill5}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\r\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"4\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill6}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\r\n                <ComboBox Grid.Column=\"2\" Grid.Row=\"6\" ItemsSource=\"{Binding SkillList}\" SelectedValue=\"{Binding Skill7}\" SelectedValuePath=\"Value\" ItemTemplate=\"{StaticResource SkillTemplate}\"/>\r\n            </Grid>\r\n\r\n            <TextBlock Visibility=\"{Binding AdvancedVisibility}\">Skills (raw representation)</TextBlock>\r\n            <Grid Margin=\"0 0 0 15\" Visibility=\"{Binding AdvancedVisibility}\">\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"1*\"/>\r\n                    <ColumnDefinition Width=\"3\"/>\r\n                    <ColumnDefinition Width=\"1*\"/>\r\n                </Grid.ColumnDefinitions>\r\n                <Grid.RowDefinitions>\r\n                    <RowDefinition Height=\"Auto\"/>\r\n                    <RowDefinition Height=\"3\"/>\r\n                    <RowDefinition Height=\"Auto\"/>\r\n                    <RowDefinition Height=\"3\"/>\r\n                    <RowDefinition Height=\"Auto\"/>\r\n                    <RowDefinition Height=\"3\"/>\r\n                    <RowDefinition Height=\"Auto\"/>\r\n                    <RowDefinition Height=\"3\"/>\r\n                </Grid.RowDefinitions>\r\n                <TextBox Grid.Column=\"0\" Grid.Row=\"0\" Text=\"{Binding SkillData0}\"/>\r\n                <TextBox Grid.Column=\"0\" Grid.Row=\"2\" Text=\"{Binding SkillData1}\"/>\r\n                <TextBox Grid.Column=\"0\" Grid.Row=\"4\" Text=\"{Binding SkillData2}\"/>\r\n                <TextBox Grid.Column=\"0\" Grid.Row=\"6\" Text=\"{Binding SkillData3}\"/>\r\n                <TextBox Grid.Column=\"2\" Grid.Row=\"0\" Text=\"{Binding SkillData4}\"/>\r\n                <TextBox Grid.Column=\"2\" Grid.Row=\"2\" Text=\"{Binding SkillData5}\"/>\r\n                <TextBox Grid.Column=\"2\" Grid.Row=\"4\" Text=\"{Binding SkillData6}\"/>\r\n                <TextBox Grid.Column=\"2\" Grid.Row=\"6\" Text=\"{Binding SkillData7}\"/>\r\n            </Grid>\r\n        </StackPanel>\r\n    </ScrollViewer>\r\n</UserControl>\r\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/PersonaView.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace KHSave.SaveEditor.Persona5.Views\n{\n    /// <summary>\n    /// Interaction logic for PersonaView.xaml\n    /// </summary>\n    public partial class PersonaView : UserControl\n    {\n        public PersonaView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/SystemView.xaml",
    "content": "﻿<UserControl x:Class=\"KHSave.SaveEditor.Persona5.Views.SystemView\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:KHSave.SaveEditor.Persona5.Views\"\n             mc:Ignorable=\"d\" \n             d:DesignHeight=\"450\" d:DesignWidth=\"300\">\n    <StackPanel>\n        <TextBlock Text=\"Room mod\"/>\n        <ComboBox\n            ItemsSource=\"{Binding Rooms}\"\n            SelectedValue=\"{Binding Room}\"\n            SelectedValuePath=\"Id\"\n            DisplayMemberPath=\"Description\"/>\n        \n        <TextBlock Text=\"Current day\"/>\n        <DatePicker\n            SelectedDate=\"{Binding CalendarDate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n            DisplayDateStart=\"2011/04/01\"\n            DisplayDateEnd=\"2012/04/01\"\n            IsTodayHighlighted=\"True\"\n            />\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "KHSave.SaveEditor.Persona5/Views/SystemView.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace KHSave.SaveEditor.Persona5.Views\n{\n    /// <summary>\n    /// Interaction logic for SystemView.xaml\n    /// </summary>\n    public partial class SystemView : UserControl\n    {\n        public SystemView()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/Ff7RemakeTests.cs",
    "content": "using KHSave.LibFf7Remake;\nusing KHSave.LibFf7Remake.Types;\nusing System.IO;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class Ff7RemakeTests\n    {\n        private const string FilePath = \"Saves/ff7remake007\";\n\n        [Fact]\n        public void TestIsValid()\n        {\n            using var stream = File.OpenRead(FilePath);\n            Assert.True(SaveFf7Remake.IsValid(stream));\n        }\n\n        [Fact]\n        public void ReadSaveTest() =>\n            File.OpenRead(FilePath).Using(stream =>\n                AssertSaveGame(SaveFf7Remake.Read(stream)));\n\n        [Theory]\n        [InlineData(\"Saves/ff7remake000\")]\n        [InlineData(\"Saves/ff7remake007\")]\n        public void TestWriteBackTheSameExactFile(string filePath) =>\n        File.OpenRead(filePath).Using(stream => Helpers.AssertStream(stream, inStream =>\n        {\n            var save = SaveFf7Remake.Read(inStream);\n\n            var outStream = new MemoryStream();\n            save.Write(outStream);\n\n            return outStream;\n        }));\n\n        private static void AssertSaveGame(SaveFf7Remake save)\n        {\n            Assert.Equal(36, save.Characters[SaveFf7Remake.Cloud].Level);\n            Assert.True(save.Characters[SaveFf7Remake.Cloud].IsUnlocked);\n            Assert.Equal(2, save.Characters[SaveFf7Remake.Cloud].AtbBarCount);\n            Assert.Equal(4078, save.Characters[SaveFf7Remake.Cloud].CurrentHp);\n            Assert.Equal(5882, save.Characters[SaveFf7Remake.Cloud].MaxHp);\n            Assert.Equal(112, save.Characters[SaveFf7Remake.Cloud].CurrentMp);\n            Assert.Equal(123, save.Characters[SaveFf7Remake.Cloud].MaxMp);\n\n            Assert.Equal(5436, save.Characters[SaveFf7Remake.Barret].MaxHp);\n            Assert.Equal(5230, save.Characters[SaveFf7Remake.Tifa].MaxHp);\n            Assert.Equal(3265, save.Characters[SaveFf7Remake.Aerith].MaxHp);\n            Assert.Equal(3770, save.Characters[SaveFf7Remake.Red13].MaxHp);\n\n            Assert.Equal(51, save.CharactersStats[SaveFf7Remake.Cloud].Vitality);\n            Assert.Equal(68, save.CharactersStats[SaveFf7Remake.Barret].Magic);\n\n            Assert.Equal(23, save.CharactersEquipment[SaveFf7Remake.Cloud].Weapon);\n            Assert.Equal(4, save.CharactersEquipment[SaveFf7Remake.Red13].Weapon);\n            Assert.Equal(0, save.CharactersEquipment[SaveFf7Remake.Red13].Armor);\n            Assert.Equal(-1, save.CharactersEquipment[SaveFf7Remake.Red13].Accessory);\n\n            Assert.Equal(1200, save.Materia[0].AbilityPoint);\n            Assert.Equal(3, save.Materia[0].Level);\n            Assert.Equal(1, save.Materia[0].Index);\n            Assert.Equal(CharacterType.Cloud, (CharacterType)save.Materia[0].Character);\n            Assert.Equal(InventoryType.Fire, (InventoryType)save.Materia[0].ItemId);\n\n            Assert.Equal(InventoryType.BronzeBangle, save.Inventory[0].Type);\n            Assert.Equal(3, save.Inventory[0].Count);\n\n            Assert.Equal(CharacterType.Cloud, (CharacterType)save.CharacterMateria[0].Character);\n            Assert.Equal(22, save.CharacterMateria[0].MateriaIndex[0]);\n\n            Assert.Equal(InventoryType.BusterSword, (InventoryType)save.WeaponMateria[0].ItemId);\n            Assert.Equal(-1, save.WeaponMateria[0].MateriaIndex[0]);\n            Assert.Equal(InventoryType.TwinStinger, (InventoryType)save.WeaponMateria[23].ItemId);\n            Assert.Equal(7, save.WeaponMateria[23].MateriaIndex[0]);\n\n            Assert.Equal(51, save.SummonMateria[SaveFf7Remake.Cloud]);\n\n            Assert.Equal(18, save.CurrentChapter);\n\n            for (var i = 0; i < save.ChunkCommon.WeaponMateria.Length; i++)\n            {\n                if (save.ChunkCommon.WeaponMateria[i].ItemId >= 0)\n                    Assert.Equal(save.ChunkCommon.WeaponMateria[i].ItemId, save.ChunkCommon.WeaponFound[i].ItemId);\n                else\n                {\n                    Assert.Equal(-1, save.ChunkCommon.WeaponMateria[i].ItemId);\n                    Assert.Equal(0, save.ChunkCommon.WeaponFound[i].ItemId);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/Helpers.cs",
    "content": "using System;\nusing System.IO;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public static class Helpers\n    {\n        public static void Using<T>(this T disposable, Action<T> action)\n            where T : IDisposable\n        {\n            using (disposable)\n                action(disposable);\n        }\n\n        public static TResult Using<T, TResult>(this T disposable, Func<T, TResult> func)\n            where T : IDisposable\n        {\n            using (disposable)\n                return func(disposable);\n        }\n\n        public static void Dump(this Stream stream, string path) =>\n            File.OpenWrite(path).Using(outStream =>\n            {\n                stream.Position = 0;\n                stream.CopyTo(outStream);\n            });\n\n        public static void AssertStream(Stream expectedStream, Func<Stream, Stream> funcGenerateNewStream)\n        {\n            var expectedData = expectedStream.ReadAllBytes();\n            var actualStream = funcGenerateNewStream(new MemoryStream(expectedData));\n            var actualData = actualStream.ReadAllBytes();\n\n            Assert.Equal(expectedData.Length, actualData.Length);\n\n            for (var i = 0; i < expectedData.Length; i++)\n            {\n                var ch1 = expectedData[i];\n                var ch2 = actualData[i];\n                Assert.True(ch1 == ch2, $\"Expected {ch1:X02} but found {ch2:X02} at {i:X}\");\n            }\n        }\n\n        public static byte[] ReadBytes(Stream stream)\n        {\n            var data = new byte[stream.Length];\n            stream.Position = 0;\n            stream.Read(data, 0, data.Length);\n            stream.Position = 0;\n\n            return data;\n        }\n\n        public static void UseAsset(string assetName, Action<Stream> action) =>\n            File.OpenRead(Path.Combine($\"_Assets\", assetName)).Using(x => action(x));\n\n        public static void Dump(this byte[] data, string path) =>\n            new MemoryStream(data).Using(x => x.Dump(path));\n\n        public static void FileOpenRead(string path, Action<Stream> action)\n        {\n            File.OpenRead(path).Using(x => action(x));\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/KHSave.Tests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6</TargetFramework>\n    <IsPackable>false</IsPackable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.0.0\" />\n    <PackageReference Include=\"xunit\" Version=\"2.4.1\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\" Version=\"2.4.3\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.Archives\\KHSave.Archives.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.Lib02\\KHSave.Lib02.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.Lib1\\KHSave.Lib1.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.Lib2\\KHSave.Lib2.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.Lib3\\KHSave.Lib3.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibBbs\\KHSave.LibBbs.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibDDD\\KHSave.LibDDD.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibFf7Remake\\KHSave.LibFf7Remake.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibPersona3\\KHSave.LibPersona3.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibPersona5\\KHSave.LibPersona5.csproj\" />\n    <ProjectReference Include=\"..\\KHSave.LibRecom\\KHSave.LibRecom.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"Saves\\**\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "KHSave.Tests/Kh1Tests.cs",
    "content": "using KHSave.Lib1;\nusing KHSave.Lib1.Types;\nusing System.IO;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class Kh1Tests\n    {\n        private static readonly string FilePath = \"Saves/BISLPS-25198-05\";\n        private SaveKh1.SaveFinalMix save;\n\n        public Kh1Tests()\n        {\n            using (var stream = File.OpenRead(FilePath))\n            {\n                save = Xe.BinaryMapper.BinaryMapping.ReadObject<SaveKh1.SaveFinalMix>(stream);\n            }\n        }\n\n        [Theory]\n        [InlineData(0x05, true)]\n        [InlineData(0x04, true)]\n        [InlineData(0x03, false)]\n        public void TestIsValid(uint header, bool expected)\n        {\n            var stream = new MemoryStream(4);\n            new BinaryWriter(stream).Write(header);\n            stream.Position = 0;\n\n            Assert.Equal(expected, SaveKh1.IsValid(stream));\n        }\n\n        [Fact]\n        public void TestRead()\n        {\n            var characterIndex = (int)PlayableCharacterType.Sora;\n\n            Assert.Equal(EquipmentType.KingdomKey, save.Characters[characterIndex].Weapon);\n            Assert.Equal(100, save.Characters[characterIndex].Level);\n\n            Assert.Equal(PlayableCharacterType.Empty, save.CompanionCharacter3);\n            Assert.Equal((uint)45359, save.Munny);\n\n            Assert.Equal(WorldType.Endoftheworld, save.World);\n            Assert.Equal((uint)0x1D, save.Room);\n            Assert.Equal((uint)0x48, save.SpawnLocation);\n        }\n\n        [Fact]\n        public void TestWriteBackTheSameExactFile() =>\n        File.OpenRead(FilePath).Using(stream => Helpers.AssertStream(stream, inStream =>\n        {\n            var outStream = new MemoryStream();\n            SaveKh1.Read(inStream).Write(outStream);\n\n            return outStream;\n        }));\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/Kh2Tests.cs",
    "content": "using KHSave.Lib2;\nusing KHSave.Lib2.Types;\nusing System.IO;\nusing System.Linq;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class Kh2Tests\n    {\n        private static readonly string FilePath = \"Saves/kh2fm.bin\";\n        private SaveKh2.SaveFinalMix save;\n\n        public Kh2Tests()\n        {\n            using (var stream = File.OpenRead(FilePath))\n            {\n                save = Xe.BinaryMapper.BinaryMapping.ReadObject<SaveKh2.SaveFinalMix>(stream);\n            }\n        }\n\n        [Theory]\n        [InlineData(0x4a32484b, true)]\n        [InlineData(0x5532484b, true)]\n        [InlineData(0x4532484b, true)]\n        [InlineData(0xcccccccc, false)]\n        public void TestIsValid(uint header, bool expected)\n        {\n            var stream = new MemoryStream(4);\n            new BinaryWriter(stream).Write(header);\n            stream.Position = 0;\n\n            Assert.Equal(expected, SaveKh2.IsValid(stream));\n        }\n\n        [Theory]\n        [InlineData(0x4a32484b, 0x2a, GameVersion.Japanese)]\n        [InlineData(0x5532484b, 0x2a, GameVersion.Japanese)]\n        [InlineData(0x4532484b, 0x2a, GameVersion.Japanese)]\n        [InlineData(0x4532484b, 0x2d, GameVersion.American)]\n        [InlineData(0x4532484b, 0x3a, GameVersion.FinalMix)]\n        [InlineData(0xcccccccc, 0x2a, null)]\n        public void TestVersion(uint header, int version, GameVersion? expected)\n        {\n            var stream = new MemoryStream(4);\n            var writer = new BinaryWriter(stream);\n            writer.Write(header);\n            writer.Write(version);\n            stream.Position = 0;\n\n            Assert.Equal(expected, SaveKh2.GetGameVersion(stream));\n        }\n\n        [Fact]\n        public void TestChecksum()\n        {\n            var rand = new System.Random(0);\n            var data = Enumerable.Range(0, 0x10000)\n                .Select(x => (byte)rand.Next())\n                .ToArray();\n            Assert.Equal(1527299405U, SaveKh2.CalculateChecksum(data, data.Length, uint.MaxValue));\n        }\n\n        [Fact]\n        public void TestRead()\n        {\n            Assert.Equal(EquipmentType.UltimaWeapon, save.Characters[(int)CharacterType.Sora].Weapon);\n            Assert.Equal(60, save.Characters[(int)CharacterType.Sora].HpCur);\n            Assert.Equal(60, save.Characters[(int)CharacterType.Sora].HpMax);\n            Assert.Equal(120, save.Characters[(int)CharacterType.Sora].MpMax);\n            Assert.Equal(120, save.Characters[(int)CharacterType.Sora].MpMax);\n            Assert.Equal(99, save.Characters[(int)CharacterType.Sora].Level);\n            Assert.Equal(4, save.Characters[(int)CharacterType.Sora].AccessoryCount);\n            Assert.Equal(4, save.Characters[(int)CharacterType.Sora].ArmorCount);\n            Assert.Equal(8, save.Characters[(int)CharacterType.Sora].ItemCount);\n            Assert.Equal(0, save.Characters[(int)CharacterType.Sora].UnknownCount);\n            Assert.Equal((int)EquipmentType.FinishingPlus | 0x8000, save.Characters[(int)CharacterType.Sora].Abilities[0]);\n\n            Assert.Equal(EquipmentType.SaveTheQueen, save.Characters[(int)CharacterType.Donald].Weapon);\n            Assert.Equal(BattleStyleType.SoraAttack, save.Characters[(int)CharacterType.Donald].BattleStyle);\n            Assert.Equal(EquipmentType.ChampionBelt, (EquipmentType)save.Characters[(int)CharacterType.Donald].Armors[0]);\n            Assert.Equal(AbilityStyleType.Free, save.Characters[(int)CharacterType.Donald].AbilityStyle1);\n            Assert.Equal(AbilityStyleType.Free, save.Characters[(int)CharacterType.Donald].AbilityStyle2);\n            Assert.Equal(AbilityStyleType.Free, save.Characters[(int)CharacterType.Donald].AbilityStyle3);\n            Assert.Equal(AbilityStyleType.Free, save.Characters[(int)CharacterType.Donald].AbilityStyle4);\n            Assert.Equal(EquipmentType.Empty, (EquipmentType)save.Characters[(int)CharacterType.Goofy].Armors[0]);\n            Assert.Equal(EquipmentType.ShadowArchive, (EquipmentType)save.Characters[(int)CharacterType.Goofy].Accessories[0]);\n            Assert.Equal(EquipmentType.Empty, (EquipmentType)save.Characters[(int)CharacterType.Riku].Armors[0]);\n\n            Assert.Equal(PlayableCharacterType.Sora, save.WorldPartyMembers[18].PlayableCharacter);\n            Assert.Equal(PlayableCharacterType.WorldCharacter, save.WorldPartyMembers[18].CompanionCharacter1);\n            Assert.Equal(PlayableCharacterType.Goofy, save.WorldPartyMembers[18].CompanionCharacter2);\n            Assert.Equal(PlayableCharacterType.Donald, save.WorldPartyMembers[18].CompanionCharacter3);\n\n            Assert.Equal(Difficulty.Critical, save.Difficulty);\n            Assert.Equal(2885291, save.Experience);\n            Assert.Equal(60, save.BonusLevel);\n        }\n\n        [Fact]\n        public void TestWriteBackTheSameExactFile() =>\n        File.OpenRead(FilePath).Using(stream => Helpers.AssertStream(stream, inStream =>\n        {\n            var save = SaveKh2.Read(inStream);\n\n            var outStream = new MemoryStream();\n            SaveKh2.Write(outStream, save);\n\n            return outStream;\n        }));\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/Kh3Test.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing System;\nusing System.IO;\nusing KHSave.Lib3;\nusing KHSave.Lib3.Types;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class Kh3Test\n    {\n        private const string FilePath = \"Saves/kh3.bin\";\n        private const string File109Path = \"Saves/kh3_109.bin\";\n\n        [Theory]\n        [InlineData(FilePath)]\n        [InlineData(File109Path)]\n        public void TestIsValid(string filePath)\n        {\n            using (var stream = File.OpenRead(filePath))\n            {\n                Assert.True(SaveKh3.IsValid(stream));\n            }\n        }\n\n        [Theory]\n        [InlineData(FilePath)]\n        [InlineData(File109Path)]\n        public void ReadSaveTest(string filePath) =>\n            File.OpenRead(filePath).Using(stream =>\n                AssertSaveGame(SaveKh3.Read(stream)));\n\n        [Theory]\n        [InlineData(FilePath)]\n        [InlineData(File109Path)]\n        public void TestWriteWithoutChanges(string filePath) => File.OpenRead(filePath).Using(stream =>\n        {\n            var mem = new MemoryStream((int)stream.Length);\n            SaveKh3.Read(stream).Write(mem);\n\n            AssertSaveGame(SaveKh3.Read(mem.SetPosition(0)));\n        });\n\n        [Theory]\n        [InlineData(FilePath)]\n        [InlineData(File109Path)]\n        public void TestWriteWithChanges(string filePath)\n        {\n            MemoryStream mem = null;\n            File.OpenRead(filePath).Using(stream =>\n            {\n                var tempSave = SaveKh3.Read(stream);\n                tempSave.TotalExp = 1234;\n                tempSave.Difficulty = DifficultyType.Normal;\n                tempSave.MapPath = \"TestPath\";\n                tempSave.Shortcuts[0].Triangle = CommandType.SeaBlizzard;\n                tempSave.Magics[0] = CommandType.SeaFire;\n\n                mem = new MemoryStream((int)stream.Length);\n                tempSave.Write(mem);\n\n            });\n\n            var save = SaveKh3.Read(mem.SetPosition(0));\n\n            Assert.Equal(1234, save.TotalExp);\n            Assert.Equal(DifficultyType.Normal, save.Difficulty);\n            Assert.Equal(\"TestPath\", save.MapPath);\n            Assert.Equal(CommandType.SeaBlizzard, save.Shortcuts[0].Triangle);\n            Assert.Equal(CommandType.SeaFire, save.Magics[0]);\n        }\n\n        [Fact]\n        public void IgnoreDlcFieldsFor100()\n        {\n            var save = File.OpenRead(FilePath).Using(stream => SaveKh3.Read(stream));\n            save.DlcMapPath = \"DlcMapPath\";\n            save.DlcSpawnPoint = \"DlcSpawnPoint\";\n\n            Assert.Equal(string.Empty, save.DlcMapPath);\n            Assert.Equal(string.Empty, save.DlcSpawnPoint);\n        }\n\n        [Fact]\n        public void ReadDlcFieldsFor109()\n        {\n            var save = File.OpenRead(File109Path).Using(stream => SaveKh3.Read(stream));\n\n            Assert.Equal(\"/Game/Levels/rg_DLC/rg_03/rg_03\", save.DlcMapPath);\n            Assert.Equal(\"rg_03_Lv_Start_01\", save.DlcSpawnPoint);\n        }\n\n        [Fact]\n        public void TestChecksum()\n        {\n            File.OpenRead(FilePath).Using(stream => Assert.Equal(0xE5783B63, SaveKh3.CalculateChecksum(stream)));\n        }\n\n        private static void AssertSaveGame(ISaveKh3 save)\n        {\n            Assert.Equal(0x45764053, save.MagicCode);\n            Assert.Equal(DifficultyType.Proud, save.Difficulty);\n            Assert.Equal(WorldType.ScalaAdCaelum, save.WorldLogo);\n            Assert.Equal(1413899, save.TotalExp);\n            Assert.Equal(223439, save.Munny);\n            Assert.Equal(94, save.Level);\n            Assert.Equal(DesireChoice.Vitality, save.DesireChoice);\n            Assert.Equal(PowerChoice.Warrior, save.PowerChoice);\n            Assert.Equal(PartyCharacter.Sora, save.Party[0]);\n            Assert.Equal(PartyCharacter.Donald, save.Party[1]);\n            Assert.Equal(PartyCharacter.Goofy, save.Party[2]);\n            Assert.Equal(PartyCharacter.Sora, save.Party[3]);\n            Assert.Equal(PartyCharacter.Sora, save.Party[4]);\n            Assert.True(save.SaveClear);\n            Assert.Equal(LocationType.Location57, save.LocationName);\n            Assert.Equal(CharacterIconType.Sora, save.BaseSaveIcon);\n            Assert.Equal(6485, save.EnemiesDefeated);\n            Assert.Equal(161, save.SavesCount);\n\n            Assert.Equal(41, save.RecordAttractionsUseCount[0]);\n            Assert.Equal(24, save.RecordAttractionsUseCount[1]);\n            Assert.Equal(32, save.RecordAttractionsUseCount[4]);\n            //Assert.Equal(3, save.RecordShotlocksUseCount[0]);\n            //Assert.Equal(3, save.RecordShotlocksUseCount[1]);\n            //Assert.Equal(10, save.RecordShotlocksUseCount[16]);\n            //Assert.Equal(1, save.RecordShotlocksUseCount[27]);\n            //Assert.Equal(0, save.RecordShotlocksUseCount[29]);\n\n            Assert.Equal(54, save.Inventory[(int)InventoryType.Potion].Count);\n            Assert.Equal(5, save.Inventory[(int)InventoryType.ApBoost].Count);\n\n            Assert.Equal(60, save.MaterialsCount[0]);\n            Assert.Equal(51, save.MaterialsCount[1]);\n            Assert.Equal(139, save.MaterialsCount[40]);\n\n            Assert.Equal(1723, save.CrabsCollected);\n\n            Assert.Equal(WeaponType.UltimaWeapon, save.Pc[0].Weapons[0].WeaponId);\n            Assert.Equal(WeaponType.GrandChef, save.Pc[0].Weapons[1].WeaponId);\n            Assert.Equal(WeaponType.HunnySpout, save.Pc[0].Weapons[2].WeaponId);\n            Assert.Equal(ArmorType.CosmicChain, save.Pc[1].Armors[0].ArmorId);\n            Assert.Equal(AccessoryType.FlanniversaryBadge, save.Pc[0].Accessories[1].AccessoryId);\n            Assert.Equal(0x444, save.Pc[0].Abilities[0].Data);\n            Assert.Equal(0x444, save.Pc[0].Abilities[save.Pc[0].Abilities.Count - 1].Data);\n            Assert.Equal(AiCombatStyleType.StickBySora, save.Pc[1].Ai.CombatStyle);\n            Assert.Equal(AiAbilityType.GoWild, save.Pc[1].Ai.Abilitiy);\n            Assert.Equal(AiRecoveryType.UseInEmergencies, save.Pc[1].Ai.Recovery);\n            Assert.Equal(0b11111, save.Pc[1].Ai.RecoveryTargets);\n            Assert.Equal(180, save.Pc[3].Hp);\n            Assert.Equal(100, save.Pc[3].Mp);\n            Assert.Equal(100, save.Pc[3].Focus);\n            Assert.Equal(175, save.Pc[4].Hp);\n\n            Assert.Equal(44, save.BonusHp);\n            Assert.Equal(33, save.BonusMp);\n            Assert.Equal(2, save.BonusStrength);\n            Assert.Equal(2, save.BonusMagic);\n            Assert.Equal(2, save.BonusDefense);\n\n            Assert.Equal(100, save.Storyflags[0]);\n            Assert.Equal(382, save.Storyflags[5]);\n            Assert.Equal(2120, save.Storyflags[21]);\n            Assert.Equal(6000, save.Storyflags[61]);\n            Assert.Equal(0, save.Storyflags[63]);\n\n            Assert.Equal(\"/Game/Levels/ex/ex_26/ex_26\", save.MapPath);\n            Assert.Equal(\"TresPlayerStart_Debug\", save.MapSpawn);\n            Assert.Equal(\"/Script/TresGame.TresPlayerControllerLowerBase\", save.PlayerScript);\n            Assert.Equal(\"Pawn path\", save.PlayerCharacter);\n\n            Assert.Equal(CommandType.Firaga, save.Magics[0]);\n\n            Assert.Equal(3, save.Shortcuts.Count);\n            Assert.Equal(CommandType.Curaga, save.Shortcuts[0].Circle);\n            Assert.Equal(CommandType.Thundaga, save.Shortcuts[0].Triangle);\n            Assert.Equal(CommandType.Waterga, save.Shortcuts[0].Square);\n            Assert.Equal(CommandType.Firaga, save.Shortcuts[0].Cross);\n            Assert.Equal(CommandType.UnionX, save.Shortcuts[2].Triangle);\n\n            Assert.Equal(CommandType.Firaga, save.Magics[0]);\n            Assert.Equal(CommandType.Aeroga, save.Magics[5]);\n            Assert.Equal(CommandType.MeowWowBaloon, save.Links[0]);\n            Assert.Equal(CommandType.PlasmaEncounter, save.Links[4]);\n\n            Assert.Equal(20722, save.Records.CherryFlan.HighScore);\n            Assert.Equal(20722, save.Records.CherryFlan.HighScore2);\n            Assert.Equal(11, save.Records.CherryFlan.AttemptCount);\n            Assert.Equal(24050, save.Records.StrawberryFlan.HighScore);\n            Assert.Equal(24050, save.Records.StrawberryFlan.HighScore2);\n            Assert.Equal(17, save.Records.ShotlocksHighScore[0]);\n            Assert.Equal(23, save.Records.ShotlocksHighScore[1]);\n\n            Assert.Equal(200, save.PhotoMaxCount);\n            Assert.Equal(84725, save.Photos[0].Length);\n            Assert.Equal(84065, save.Photos[89].Length);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/KhBbsTests.cs",
    "content": "using KHSave.LibBbs;\nusing KHSave.LibBbs.Types;\nusing System.IO;\nusing Xe.BinaryMapper;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class KhBbsTests\n    {\n        public class FmTests\n        {\n            private static readonly string FilePath = \"Saves/khbbs_ventus.DAT\";\n            private SaveKhBbs.SaveFinalMix save;\n\n            public FmTests()\n            {\n                using (FileStream stream = File.OpenRead(FilePath))\n                    save = BinaryMapping.ReadObject<SaveKhBbs.SaveFinalMix>(stream);\n            }\n\n            [Fact]\n            public void TestRead()\n            {\n                Assert.Equal(CharacterType.Ventus, save.PlayableCharacter);\n                Assert.Equal(999999U, save.Character.Money);\n                Assert.Equal(DifficultyType.Critical, save.Difficulty);\n                Assert.Equal(WeaponType.RoyalRadianceVentus, save.Character.Weapon);\n                Assert.Equal(1014U, save.Character.Medals);\n                Assert.Equal(16728670U, save.Character.Experience);\n\n                //Deck 1\n                Assert.Equal(CommandType.TimeSplicer, save.CommandList[save.Decks[0].BattleCommands[0].Id].Id);\n                Assert.Equal(CommandType.ArsArcanum, save.CommandList[save.Decks[0].BattleCommands[2].Id].Id);\n                Assert.Equal(CommandType.Curaga, save.CommandList[save.Decks[0].BattleCommands[6].Id].Id);\n\n                //Deck 2\n                Assert.Equal(CommandType.Blitz, save.CommandList[save.Decks[1].BattleCommands[0].Id].Id);\n                Assert.Equal(CommandType.SonicBlade, save.CommandList[save.Decks[1].BattleCommands[1].Id].Id);\n                Assert.Equal(CommandType.Curaga, save.CommandList[save.Decks[1].BattleCommands[6].Id].Id);\n                Assert.Equal(CommandType.Thundara, save.CommandList[save.Decks[1].BattleCommands[7].Id].Id);\n\n                Assert.Equal(CommandType.Jump, save.CommandList[save.Decks[1].ActionCommands[0].Id].Id);\n                Assert.Equal(CommandType.FlameSalvo, save.CommandList[save.Decks[1].Shotlock.Id].Id);\n\n                //Deck 3\n                Assert.Equal(CommandType.FireDash, save.CommandList[save.Decks[2].BattleCommands[7].Id].Id);\n            }\n\n            [Fact]\n            public void TestChecksum()\n            {\n                File.OpenRead(FilePath).Using(stream => Assert.Equal(0x1EF59183U, SaveKhBbs.CalculateChecksum(stream)));\n            }\n\n            [Fact]\n            public void TestWriteBackTheSameExactFile() =>\n            File.OpenRead(FilePath).Using(stream => Helpers.AssertStream(stream, inStream =>\n            {\n                var save = SaveKhBbs.Read<SaveKhBbs.SaveFinalMix>(inStream);\n\n                var outStream = new MemoryStream();\n                SaveKhBbs.Write(outStream, save);\n\n                return outStream;\n            }));\n        }\n\n        public class EuTests\n        {\n            private static readonly string FilePath = \"Saves/khbbs_ventus_eu.DAT\";\n            private SaveKhBbs.SaveEuropean save;\n\n            public EuTests()\n            {\n                using (FileStream stream = File.OpenRead(FilePath))\n                    save = BinaryMapping.ReadObject<SaveKhBbs.SaveEuropean>(stream);\n            }\n\n            [Fact]\n            public void TestChecksum()\n            {\n                File.OpenRead(FilePath).Using(stream => Assert.Equal(0x9D18AC6FU, SaveKhBbs.CalculateChecksum(stream)));\n            }\n\n            [Fact]\n            public void TestRead()\n            {\n                Assert.Equal(CharacterType.Ventus, save.PlayableCharacter);\n            }\n\n            [Fact]\n            public void TestWriteBackTheSameExactFile() =>\n            File.OpenRead(FilePath).Using(stream => Helpers.AssertStream(stream, inStream =>\n            {\n                var save = SaveKhBbs.Read<SaveKhBbs.SaveEuropean>(inStream);\n\n                var outStream = new MemoryStream();\n                SaveKhBbs.Write(outStream, save);\n\n                return outStream;\n            }));\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/KhDDDTests.cs",
    "content": "using KHSave.LibDDD;\nusing KHSave.LibDDD.Types;\nusing System.IO;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class KhDDDTests\n    {\n        private static readonly string FilePath = \"Saves/khddd3ds.bin\";\n        private SaveKhDDD.SaveKhDDD3DS save;\n\n        public KhDDDTests()\n        {\n            using (var stream = File.OpenRead(FilePath))\n            {\n                save = Xe.BinaryMapper.BinaryMapping.ReadObject<SaveKhDDD.SaveKhDDD3DS>(stream);\n            }\n        }\n\n        [Theory]\n        [InlineData(0x444d4f53, true)]\n        [InlineData(0x444d4f00, false)]\n        public void TestIsValid(uint header, bool expected)\n        {\n            var stream = new MemoryStream(4);\n            new BinaryWriter(stream).Write(header);\n            stream.Position = 0;\n\n            Assert.Equal(expected, SaveKhDDD.IsValid(stream));\n        }\n\n        [Fact]\n        public void TestRead()\n        {\n            Assert.Equal((uint)3133, save.Munny);\n\n            // World and room of current playable character\n            Assert.Equal(WorldType.TheWorldThatNeverWas, save.WorldId);\n            Assert.Equal(5, save.RoomId);\n            Assert.Equal(99, save.SpawnId);\n\n            // Sora equipment and stats\n            Assert.Equal(EquipmentType.CounterpointS, save.SoraKeyblade);\n            Assert.Equal((uint)68040, save.SoraXp);\n            Assert.Equal(31, save.SoraLv);\n\n            // Riku equipment and stats\n            Assert.Equal(EquipmentType.SkullNoiseR, save.RikuKeyblade);\n            Assert.Equal((uint)73953, save.RikuXp);\n            Assert.Equal(32, save.RikuLv);\n\n            // Dreameater tests\n            var dreameater = save.DreamEaters[0];\n            //Assert.Equal(\"WundermMieze\", dreameater.Name.ToString());\n            Assert.Equal(35, dreameater.Attack);\n            Assert.Equal(99, dreameater.Magic);\n            Assert.Equal(28, dreameater.Defence);\n            Assert.Equal(DreamEaterType.YoggyRam, dreameater.DreamEaterType);\n\n            // Decks\n            var deck = save.SoraDecks[0];\n            //Assert.Equal(\"Deck 1\", deck.Name.ToString());\n        }\n\n        [Fact]\n        public void TestWriteBackTheSameExactFile() =>\n            File.OpenRead(FilePath).Using(stream => Helpers.AssertStream(stream, inStream =>\n           {\n               var outStream = new MemoryStream();\n               SaveKhDDD.Read(inStream).Write(outStream);\n\n               return outStream;\n           }));\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/PcArchiveTests.cs",
    "content": "using KHSave.Archives;\nusing System.IO;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class PcArchiveTests\n    {\n        [Fact]\n        public void ReadKh2Archive() => File.OpenRead(\"Saves/KHIIFM.png\").Using(stream =>\n        {\n            var actual = new MemoryStream();\n            Assert.True(ArchiveFactories.TryGetFactory(stream, out var archiveFactory));\n\n            var archive = archiveFactory.Read(stream);\n            Assert.NotNull(archive);\n\n            Assert.Equal(\"BISLPM-66675FM-98\", archive.Entries[2].Name);\n            Assert.Equal(\"BISLPM-66675FM-00\", archive.Entries[1].Name);\n            Assert.Equal(\"BISLPM-66675FM-SYS\", archive.Entries[0].Name);\n        });\n\n        [Fact]\n        public void WriteBackKh2Archive() => File.OpenRead(\"Saves/KHIIFM.png\").Using(expected => Helpers.AssertStream(expected, stream =>\n        {\n            var actual = new MemoryStream();\n            Assert.True(ArchiveFactories.TryGetFactory(stream, out var archiveFactory));\n\n            archiveFactory.Read(stream).Write(actual);\n            return actual;\n        }));\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/Persona3Tests.cs",
    "content": "using KHSave.LibPersona3;\nusing KHSave.LibPersona3.Types;\nusing System.IO;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class Persona3Tests\n    {\n        [Theory]\n        [InlineData(\"Saves/BASLUS-21569Save2\")]\n        [InlineData(\"Saves/P3PSAVE.BIN\")]\n        public void IsValid(string fileName) => File.OpenRead(fileName)\n            .Using(stream => Assert.True(SavePersona3.IsValid(stream.SetPosition(1))));\n\n        [Theory]\n        [InlineData(\"Saves/BASLUS-21569Save2\")]\n        [InlineData(\"Saves/P3PSAVE.BIN\")]\n        public void WriteBackTheSameExactFile(string fileName) =>\n            File.OpenRead(fileName).Using(stream => Helpers.AssertStream(stream, inStream =>\n            {\n                var save = SavePersona3.Read(inStream);\n\n                var outStream = new MemoryStream();\n                save.Write(outStream);\n\n                return outStream;\n            }));\n\n        [Fact]\n        public void ReadPersona3Vanilla()\n        {\n            var save = File.OpenRead(\"Saves/BASLUS-21569Save2\").Using(SavePersona3.Read);\n            Assert.Equal(GameVersion.Vanilla, save.Version);\n\n            Assert.False(save.IsFemaleProtagonist);\n            Assert.Equal(Characters.Yukari, save.BattlePartyMember1);\n            Assert.Equal(Characters.Ken, save.BattlePartyMember2);\n            Assert.Equal(Characters.Mitsuru, save.BattlePartyMember3);\n            Assert.Equal(1766954, save.Money);\n\n            Assert.Equal(Demons.Dominion, save.Persona[0].Id);\n            Assert.Equal(Demons.Titania, save.Persona[1].Id);\n            Assert.Equal(Demons.Succubus, save.Persona[2].Id);\n            Assert.Equal(Demons.Koumokuten, save.Persona[9].Id);\n\n            Assert.Equal(55, save.Persona[0].Level);\n            Assert.Equal(33, save.Persona[0].Strength);\n            Assert.Equal(49, save.Persona[0].Magic);\n            Assert.Equal(29, save.Persona[0].Endurance);\n            Assert.Equal(34, save.Persona[0].Agility);\n            Assert.Equal(37, save.Persona[0].Luck);\n            Assert.Equal(Skill.Hamaon, save.Persona[0].Skills[0]);\n            Assert.Equal(Skill.ElecBoost, save.Persona[0].Skills[1]);\n            Assert.Equal(Skill.NullShock, save.Persona[0].Skills[2]);\n            Assert.Equal(Skill.Zionga, save.Persona[0].Skills[3]);\n            Assert.Equal(Skill.EndureDark, save.Persona[0].Skills[4]);\n            Assert.Equal(Skill.HamaBoost, save.Persona[0].Skills[5]);\n            Assert.Equal(Skill.Mazionga, save.Persona[0].Skills[6]);\n            Assert.Equal(Skill.ResistDark, save.Persona[0].Skills[7]);\n\n            Assert.Equal(0, save.ExpendableItems[(int)ExpendableItems.Dummy]);\n            Assert.Equal(99, save.ExpendableItems[(int)ExpendableItems.Medicine]);\n            Assert.Equal(99, save.ExpendableItems[(int)ExpendableItems.MedicalPowder]);\n            Assert.Equal(11, save.ExpendableItems[(int)ExpendableItems.Bead]);\n            Assert.Equal(5, save.ExpendableItems[(int)ExpendableItems.SnuffSoul]);\n            Assert.Equal(10, save.ExpendableItems[(int)ExpendableItems.MazioGem]);\n            Assert.Equal(3, save.ExpendableItems[(int)ExpendableItems.MegidoGem]);\n        }\n\n        [Fact]\n        public void ReadPersona3Portable()\n        {\n            var save = File.OpenRead(\"Saves/P3PSAVE.BIN\").Using(SavePersona3.Read);\n            Assert.Equal(GameVersion.Portable, save.Version);\n\n            Assert.True(save.IsFemaleProtagonist);\n            Assert.Equal(Characters.Aegis, save.BattlePartyMember1);\n            Assert.Equal(Characters.Yukari, save.BattlePartyMember2);\n            Assert.Equal(Characters.Akihiko, save.BattlePartyMember3);\n            Assert.Equal(9999999, save.Money);\n\n            Assert.Equal(Demons.Thanatos, save.Persona[0].Id);\n            Assert.Equal(99, save.Persona[0].Level);\n            Assert.Equal(74, save.Persona[0].Strength);\n            Assert.Equal(89, save.Persona[0].Magic);\n            Assert.Equal(71, save.Persona[0].Endurance);\n            Assert.Equal(74, save.Persona[0].Agility);\n            Assert.Equal(58, save.Persona[0].Luck);\n            Assert.Equal(Skill.GhastlyWail, save.Persona[0].Skills[0]);\n            Assert.Equal(Skill.Pralaya, save.Persona[0].Skills[1]);\n            Assert.Equal(Skill.Megidolaon, save.Persona[0].Skills[2]);\n            Assert.Equal(Skill.VorpalBlade, save.Persona[0].Skills[3]);\n            Assert.Equal(Skill.Maziodyne, save.Persona[0].Skills[4]);\n            Assert.Equal(Skill.WeaponsMaster, save.Persona[0].Skills[5]);\n            Assert.Equal(Skill.Maragidyne, save.Persona[0].Skills[6]);\n            Assert.Equal(Skill.RepelLight, save.Persona[0].Skills[7]);\n\n            Assert.Equal(Demons.Berith, save.Persona[5].Id);\n            Assert.Equal(18, save.Persona[5].Level);\n            Assert.Equal(13, save.Persona[5].Strength);\n            Assert.Equal(12, save.Persona[5].Magic);\n            Assert.Equal(14, save.Persona[5].Endurance);\n            Assert.Equal(10, save.Persona[5].Agility);\n            Assert.Equal(12, save.Persona[5].Luck);\n            Assert.Equal(Skill.Agi, save.Persona[5].Skills[0]);\n            Assert.Equal(Skill.Tarukaja, save.Persona[5].Skills[1]);\n            Assert.Equal(Skill.DoubleFangs, save.Persona[5].Skills[2]);\n            Assert.Equal(Skill.Maragi, save.Persona[5].Skills[3]);\n            Assert.Equal(Skill.Patra, save.Persona[5].Skills[4]);\n            Assert.Equal(Skill.Sukukaja, save.Persona[5].Skills[5]);\n            Assert.Equal(Skill.AutoTarukaja, save.Persona[5].Skills[6]);\n            Assert.Equal(Skill.Rebellion, save.Persona[5].Skills[7]);\n\n            Assert.Equal(0, save.ExpendableItems[(int)ExpendableItems.Dummy]);\n            Assert.Equal(96, save.ExpendableItems[(int)ExpendableItems.Medicine]);\n            Assert.Equal(96, save.ExpendableItems[(int)ExpendableItems.MedicalPowder]);\n            Assert.Equal(96, save.ExpendableItems[(int)ExpendableItems.Bead]);\n            Assert.Equal(96, save.ExpendableItems[(int)ExpendableItems.SnuffSoul]);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/Persona5Tests.cs",
    "content": "using KHSave.LibPersona5;\nusing KHSave.LibPersona5.Types;\nusing System.IO;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class Persona5Tests\n    {\n        [Theory]\n        [InlineData(0x0e000000, 192 * 1024, true)]\n        [InlineData(0x0e000000, 191 * 1024, false)]\n        [InlineData(0x0f000000, 192 * 1024, false)]\n        [InlineData(0x2d000000, 256 * 1024, true)]\n        [InlineData(0x2d000000, 257 * 1024, false)]\n        [InlineData(0x2c000000, 256 * 1024, false)]\n        public void TestIsValid(uint header, int fileSize, bool expected)\n        {\n            var stream = new MemoryStream(4);\n            new BinaryWriter(stream).Write(header);\n            stream.SetLength(fileSize);\n            stream.Position = 0;\n\n            Assert.Equal(expected, SavePersona5.IsValid(stream));\n        }\n\n        [Fact]\n        public void ReadPersona5FromPs3()\n        {\n            var save = File.OpenRead(\"Saves/p5_ps3.DAT\").Using(SavePersona5.Read);\n            //Assert.Equal(\"Pandan\", save.ProtagonistLastName);\n            //Assert.Equal(\"Xeeynamo\", save.ProtagonistFirstName);\n            Assert.Equal(10, save.CalendarDay1);\n            Assert.Equal(10, save.CalendarDay2);\n            Assert.Equal(10, save.CalendarDay3);\n\n            Assert.Equal(1002943, save.Money);\n            Assert.Equal(9, save.Characters.Length);\n            Assert.Equal(103, save.Characters[0].CurrentHp);\n            Assert.Equal(38, save.Characters[0].CurrentMp);\n            Assert.Equal(77, save.Characters[0].Experience);\n            Assert.Equal(0x0002, (ushort)save.Characters[0].MeleeWeapon);\n            Assert.Equal(0x1002, (ushort)save.Characters[0].Protector);\n            Assert.False(save.PartyModifierRyuji);\n            Assert.False(save.PartyModifierMorgana);\n            Assert.False(save.PartyModifierAnn);\n            Assert.False(save.PartyModifierYusuke);\n            Assert.False(save.PartyModifierMakoto);\n            Assert.False(save.PartyModifierHaru);\n            Assert.False(save.PartyModifierFutaba);\n            Assert.False(save.PartyModifierAkechi);\n            Assert.Equal(-1525, save.PositionX, 0);\n            Assert.Equal(360, save.PositionY, 0);\n            Assert.Equal(-2922, save.PositionZ, 0);\n            Assert.Equal(123, save.RoomCategory);\n            Assert.Equal(101, save.RoomMap);\n        }\n\n        [Fact]\n        public void ReadPersona5FromPs4()\n        {\n            var save = File.OpenRead(\"Saves/p5_ps4.DAT\").Using(SavePersona5.Read);\n            //Assert.Equal(\"Luciano\", save.ProtagonistLastName);\n            //Assert.Equal(\"Xeeynamo\", save.ProtagonistFirstName);\n            Assert.Equal(256, save.CalendarDay1);\n            Assert.Equal(256, save.CalendarDay2);\n            Assert.Equal(256, save.CalendarDay3);\n\n            Assert.Equal(505184, save.Money);\n            Assert.Equal(9, save.Characters.Length);\n            Assert.Equal(0x0016, (ushort)save.Characters[0].MeleeWeapon);\n            Assert.Equal(0x108c, (ushort)save.Characters[0].Protector);\n            Assert.True(save.PartyModifierRyuji);\n            Assert.True(save.PartyModifierMorgana);\n            Assert.True(save.PartyModifierAnn);\n            Assert.True(save.PartyModifierYusuke);\n            Assert.True(save.PartyModifierMakoto);\n            Assert.True(save.PartyModifierHaru);\n            Assert.True(save.PartyModifierFutaba);\n            Assert.False(save.PartyModifierAkechi);\n            Assert.Equal(-78, save.PositionX, 0);\n            Assert.Equal(0, save.PositionY, 0);\n            Assert.Equal(575, save.PositionZ, 0);\n            Assert.Equal(3, save.RoomCategory);\n            Assert.Equal(2, save.RoomMap);\n        }\n\n        [Fact]\n        public void ReadPersona5Royal()\n        {\n            var save = File.OpenRead(\"Saves/p5r.DAT\").Using(SavePersona5.Read);\n            //Assert.Equal(\"Retsu\", save.ProtagonistLastName);\n            //Assert.Equal(\"Xeeynamo\", save.ProtagonistFirstName);\n            Assert.Equal(20, save.CalendarDay1);\n            Assert.Equal(20, save.CalendarDay2);\n            Assert.Equal(20, save.CalendarDay3);\n\n            Assert.Equal(49735, save.Money);\n            Assert.Equal(10, save.Characters.Length);\n            Assert.Equal(136, save.Characters[0].CurrentHp);\n            Assert.Equal(2, save.Characters[0].CurrentMp);\n            Assert.Equal(566, save.Characters[0].Experience);\n            Assert.Equal(125, save.Characters[1].CurrentHp);\n            Assert.Equal(21, save.Characters[1].CurrentMp);\n            Assert.Equal(498, save.Characters[1].Persona[0].Experience);\n            Assert.Equal(117, save.Characters[2].CurrentHp);\n            Assert.Equal(18, save.Characters[2].CurrentMp);\n            Assert.Equal(543, save.Characters[2].Persona[0].Experience);\n            Assert.Equal(463, save.Characters[3].Persona[0].Experience);\n        }\n\n        [Theory]\n        [InlineData(\"Saves/p5_ps3.DAT\")]\n        [InlineData(\"Saves/p5_ps4.DAT\")]\n        [InlineData(\"Saves/p5r.DAT\")]\n        public void WriteBackTheSameExactFile(string fileName) =>\n            File.OpenRead(fileName).Using(stream => Helpers.AssertStream(stream, inStream =>\n            {\n                var save = SavePersona5.Read(inStream);\n\n                var outStream = new MemoryStream();\n                SavePersona5.Write(outStream, save);\n\n                return outStream;\n            }));\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/Ps4SaveArchiveTests.cs",
    "content": "using KHSave.Archives;\nusing System;\nusing System.IO;\nusing System.Text;\nusing Xe.BinaryMapper;\nusing Xunit;\n\nnamespace KHSave.Tests.Saves.Archives\n{\n    public class Ps4SaveArchiveTests\n    {\n        private static readonly string ExpectedStrForFile1 = \"Kingdom Save Editor, first file\";\n        private static readonly string ExpectedStrForFile2 = \"Second file\";\n        private static readonly string ExpectedStrForFile3 = \"Third one\";\n\n        [Fact]\n        public void ReadKh1Archive() => OpenKh1File().Using(stream =>\n        {\n            var archive = ArchiveFactories.Ps4Kh1.Read(stream);\n\n            Assert.Equal(200, archive.Entries.Count);\n\n            var entry1 = archive.Entries[0];\n            Assert.Equal(ExpectedStrForFile1, entry1.Name);\n            Assert.Equal(2002, entry1.DateCreated.Year);\n            Assert.Equal(2013, entry1.DateModified.Year);\n            Assert.Equal(0x111, entry1.Data.Length);\n            Assert.Equal(11, entry1.Data[0]);\n\n            var entry2 = archive.Entries[1];\n            Assert.Equal(ExpectedStrForFile2, entry2.Name);\n            Assert.Equal(2005, entry2.DateCreated.Year);\n            Assert.Equal(2014, entry2.DateModified.Year);\n            Assert.Equal(0x222, entry2.Data.Length);\n            Assert.Equal(22, entry2.Data[0]);\n\n            var entry3 = archive.Entries[2];\n            Assert.Equal(ExpectedStrForFile3, entry3.Name);\n            Assert.Equal(2019, entry3.DateCreated.Year);\n            Assert.Equal(2019, entry3.DateModified.Year);\n            Assert.Equal(0x333, entry3.Data.Length);\n            Assert.Equal(33, entry3.Data[0]);\n        });\n\n        [Fact]\n        public void ReadKh2Archive() => OpenKh2File().Using(stream =>\n        {\n            var archive = ArchiveFactories.Ps4Kh2.Read(stream);\n\n            Assert.Equal(100, archive.Entries.Count);\n\n            var entry1 = archive.Entries[0];\n            Assert.Equal(ExpectedStrForFile1, entry1.Name);\n            Assert.Equal(2002, entry1.DateCreated.Year);\n            Assert.Equal(2013, entry1.DateModified.Year);\n            Assert.Equal(0x111, entry1.Data.Length);\n            Assert.Equal(11, entry1.Data[0]);\n\n            var entry2 = archive.Entries[1];\n            Assert.Equal(ExpectedStrForFile2, entry2.Name);\n            Assert.Equal(2005, entry2.DateCreated.Year);\n            Assert.Equal(2014, entry2.DateModified.Year);\n            Assert.Equal(0x222, entry2.Data.Length);\n            Assert.Equal(22, entry2.Data[0]);\n\n            var entry3 = archive.Entries[2];\n            Assert.Equal(ExpectedStrForFile3, entry3.Name);\n            Assert.Equal(2019, entry3.DateCreated.Year);\n            Assert.Equal(2019, entry3.DateModified.Year);\n            Assert.Equal(0x333, entry3.Data.Length);\n            Assert.Equal(33, entry3.Data[0]);\n        });\n\n        [Fact]\n        public void WriteBackKh1Archive() => OpenKh2File().Using(expected => Helpers.AssertStream(expected, stream =>\n        {\n            var actual = new MemoryStream();\n            ArchiveFactories.Ps4Kh2.Read(stream).Write(actual);\n            return actual;\n        }));\n\n        [Fact]\n        public void CreateKh1Archive()\n        {\n            var archive = ArchiveFactories.Ps4Kh1.Create();\n\n            var entry = ArchiveFactories.Ps4Kh1.CreateEntry();\n            entry.Name = \"my test\";\n            entry.DateCreated = new DateTime(2019, 01, 01);\n            entry.DateModified = new DateTime(2020, 01, 01);\n            entry.Data = new byte[] { 9, 0 };\n\n            archive.Entries.Add(entry);\n\n            var stream = new MemoryStream();\n            archive.Write(stream);\n\n            stream.Position = 0;\n            archive = ArchiveFactories.Ps4Kh1.Read(stream);\n\n            Assert.Equal(0x11cd800, stream.Length);\n            Assert.Equal(200, archive.Entries.Count);\n\n            var actual = archive.Entries[0];\n            Assert.Equal(\"my test\", actual.Name);\n            Assert.Equal(2019, actual.DateCreated.Year);\n            Assert.Equal(2020, actual.DateModified.Year);\n            Assert.Equal(2, actual.Data.Length);\n            Assert.Equal(9, actual.Data[0]);\n        }\n\n        [Fact]\n        public void CreateKh2Archive()\n        {\n            var archive = ArchiveFactories.Ps4Kh2.Create();\n            var stream = new MemoryStream();\n            archive.Write(stream);\n\n            Assert.Equal(0x6a4c00, stream.Length);\n        }\n\n        private Stream OpenKh1File()\n        {\n            var stream = new MemoryStream();\n            var writer = new BinaryWriter(stream);\n\n            stream.Position = 0;\n            WriteString(stream, ExpectedStrForFile1);\n            stream.Position = 0x40;\n            writer.Write((long)1017273600);\n            writer.Write((long)1363219200);\n            writer.Write(0x111);\n            stream.Position = 0x44c0;\n            writer.Write(11);\n\n            stream.Position = 0x58;\n            WriteString(stream, ExpectedStrForFile2);\n            stream.Position = 0x98;\n            writer.Write((long)1135209600);\n            writer.Write((long)1412208000);\n            writer.Write(0x222);\n            stream.Position = 0x1b100;\n            writer.Write(22);\n\n            stream.Position = 0xb0;\n            WriteString(stream, ExpectedStrForFile3);\n            stream.Position = 0xf0;\n            writer.Write((long)1548374400);\n            writer.Write((long)1548374400);\n            writer.Write(0x333);\n            stream.Position = 0x31D40;\n            writer.Write(33);\n\n            writer.Flush();\n            stream.SetLength(0x11cd800);\n            stream.Position = 0;\n\n            return stream;\n        }\n\n        private Stream OpenKh2File()\n        {\n            var stream = new MemoryStream();\n            var writer = new BinaryWriter(stream);\n\n            stream.Position = 0;\n            WriteString(stream, ExpectedStrForFile1);\n            stream.Position = 0x40;\n            writer.Write((long)1017273600);\n            writer.Write((long)1363219200);\n            writer.Write(0x111);\n            stream.Position = 0x2260;\n            writer.Write(11);\n\n            stream.Position = 0x58;\n            WriteString(stream, ExpectedStrForFile2);\n            stream.Position = 0x98;\n            writer.Write((long)1135209600);\n            writer.Write((long)1412208000);\n            writer.Write(0x222);\n            stream.Position = 0x13220;\n            writer.Write(22);\n\n            stream.Position = 0xb0;\n            WriteString(stream, ExpectedStrForFile3);\n            stream.Position = 0xf0;\n            writer.Write((long)1548374400);\n            writer.Write((long)1548374400);\n            writer.Write(0x333);\n            stream.Position = 0x241e0;\n            writer.Write(33);\n\n            writer.Flush();\n            stream.SetLength(0x6a4c00);\n            stream.Position = 0;\n\n            return stream;\n        }\n\n        private void WriteString(Stream stream, string text)\n        {\n            var data = Encoding.UTF8.GetBytes(text);\n            stream.Write(data, 0, data.Length);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/RecomTests.cs",
    "content": "using Xunit;\nusing KHSave.LibRecom;\nusing System.IO;\nusing System;\nusing KHSave.LibRecom.Types;\n\nnamespace KHSave.Tests\n{\n    public class RecomTests\n    {\n        [Fact]\n        public void IsValidTest()\n        {\n            var data = new byte[0x10];\n            data[0] = 7;\n            using (var stream = new MemoryStream(data))\n                Assert.True(SaveKhRecom.IsValid(stream));\n        }\n\n        [Fact]\n        public void IsNotValidIfMagicCodeIsNotRecognizedTest()\n        {\n            var data = new byte[0x10];\n            data[0] = 6;\n            using (var stream = new MemoryStream(data))\n                Assert.False(SaveKhRecom.IsValid(stream));\n        }\n\n        [Fact]\n        public void IsNotValidIfLengthIsNotEnoughTest()\n        {\n            var data = new byte[0xf];\n            data[0] = 7;\n            using (var stream = new MemoryStream(data))\n                Assert.False(SaveKhRecom.IsValid(stream));\n        }\n\n        [Fact]\n        public void SaveCorrectHeader() => OnSave(save =>\n        {\n            using (var memStream = new MemoryStream())\n            {\n                save.MagicCode = 999;\n                save.Checksum = 888;\n                save.Length = 777;\n                save.Zeroed = 666;\n\n                save.Write(memStream);\n                memStream.Position = 0;\n                var reader = new BinaryReader(memStream);\n\n                Assert.Equal(7, reader.ReadInt32());\n                Assert.Equal(180124905, reader.ReadInt32());\n                Assert.Equal(13856, reader.ReadInt32());\n                Assert.Equal(0, reader.ReadInt32());\n            }\n        });\n\n        [Fact]\n        public void CheckStoryFlags() => OnSaveData(save =>\n        {\n            Assert.True(save.Table0.SoraStoryFlag.TraverseTown);\n            Assert.False(save.Table0.SoraStoryFlag.Agrabah);\n            Assert.False(save.Table0.RikuStoryFlag.TraverseTown);\n            Assert.False(save.Table0.RikuStoryFlag.Agrabah);\n        });\n\n        [Fact]\n        public void CheckTable2() => OnSaveData(save =>\n        {\n            Assert.Equal(2, save.Table2.Data[2]);\n        });\n\n        [Fact]\n        public void CheckCardInventory() => OnSaveData(save =>\n        {\n            Assert.Equal(1, save.McWork.CardInventoryCount[0]);\n            Assert.Equal(1, save.McWork.CardInventoryCount[1]);\n            Assert.Equal(2, save.McWork.CardInventoryCount[2]);\n            Assert.Equal(2, save.McWork.CardInventoryCount[3]);\n            Assert.Equal(2, save.McWork.CardInventoryCount[4]);\n            Assert.Equal(1, save.McWork.CardInventoryCount[5]);\n            Assert.Equal(1, save.McWork.CardInventoryCount[6]);\n        });\n\n        [Fact]\n        public void CheckTutorialsClearedFlags() => OnSaveData(save =>\n        {\n            Assert.False(save.Table0.Tutorial.KeyRoom);\n            Assert.False(save.Table0.Tutorial.MoogleShop);\n            Assert.False(save.Table0.Tutorial.FloorMove);\n            Assert.False(save.Table0.Tutorial.WarpPoint);\n            Assert.True(save.Table0.Tutorial.SavePoint);\n            Assert.True(save.Table0.Tutorial.Field);\n            Assert.True(save.Table0.Tutorial.WorldSelect);\n        });\n\n        [Fact]\n        public void CheckPlayMode() => OnSaveData(save =>\n        {\n            Assert.Equal(PlayMode.Sora, save.Table1.PlayMode);\n        });\n\n        [Fact]\n        public void CheckDifficulty() => OnSaveData(save =>\n        {\n            Assert.Equal(Difficulty.Standard, save.Table1.Difficulty);\n        });\n\n        [Fact]\n        public void CheckExpAmount() => OnSaveData(save =>\n        {\n            Assert.Equal(15, save.McWork.Experience);\n        });\n\n        [Fact]\n        public void CheckTables() => OnSave2(save =>\n        {\n            Assert.Equal(0xCCCCCC00, (uint)save.Data.Table0.Unknown00);\n\n            Assert.Equal(0x01, save.Data.Table1.Unknown00);\n            Assert.Equal(0xCC, save.Data.Table1.Unknown01);\n            Assert.Equal(0xCC, save.Data.Table1.Unknown02);\n            Assert.Equal(0xCC, save.Data.Table1.Unknown03);\n\n            Assert.Equal(0x02, save.Data.Table2.Data[0]);\n            Assert.Equal(0xCC, save.Data.Table2.Data[1]);\n            Assert.Equal(0xCC, save.Data.Table2.Data[2]);\n            Assert.Equal(0xCC, save.Data.Table2.Data[3]);\n\n            Assert.Equal(0x00, save.Data.McWork.Data[0]);\n            Assert.Equal(0x03, save.Data.McWork.Data[1]);\n            Assert.Equal(0x02, save.Data.McWork.Data[2]);\n            Assert.Equal(0x02, save.Data.McWork.Data[3]);\n        });\n\n        private static void OnSave(Action<SaveKhRecom> test)\n        {\n            const string FilePath = \"Saves/BISLPM-66676COM-01\";\n            using (var stream = File.OpenRead(FilePath))\n                test(SaveKhRecom.Read(stream));\n        }\n\n        private static void OnSave2(Action<SaveKhRecom> test)\n        {\n            const string FilePath = \"Saves/BASLUS-21799COM-02\";\n            using (var stream = File.OpenRead(FilePath))\n                test(SaveKhRecom.Read(stream));\n        }\n\n        private static void OnSaveData(Action<DataRecom> test) =>\n            OnSave(save => test(save.Data));\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/TransferTests.cs",
    "content": "using KHSave.Services;\nusing System.Linq;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class TransferTests\n    {\n        [Fact]\n        public void TransferFrom_KH2FM_to_KH2EU()\n        {\n            var dst = new Lib2.SaveKh2.SaveEuropean()\n            {\n                InventoryCount = new byte[0x04],\n                PlaceScripts = Enumerable.Range(0, 2).Select(x => new Lib2.Models.PlaceScriptVanilla()).ToArray(),\n                Characters = new Lib2.Models.CharacterVanilla[]\n                {\n                    new Lib2.Models.CharacterVanilla\n                    {\n                        Abilities = new ushort[1] { 123 }\n                    }\n                },\n                DriveForms = new Lib2.Models.DriveFormVanilla[]\n                {\n                    new Lib2.Models.DriveFormVanilla(), // Valor\n                    new Lib2.Models.DriveFormVanilla(), // Wisdom\n                    new Lib2.Models.DriveFormVanilla(), // Master\n                    new Lib2.Models.DriveFormVanilla(), // Final\n                    new Lib2.Models.DriveFormVanilla(),\n                    new Lib2.Models.DriveFormVanilla(),\n                    new Lib2.Models.DriveFormVanilla(),\n                    new Lib2.Models.DriveFormVanilla(),\n                    new Lib2.Models.DriveFormVanilla(),\n                },\n            };\n            var src = new Lib2.SaveKh2.SaveFinalMix()\n            {\n                Difficulty = Lib2.Types.Difficulty.Critical,\n                WorldId = Lib2.Types.WorldType.DisneyCastle,\n                MunnyAmount = 12345,\n                InventoryCount = new byte[6] { 0, 1, 2, 3, 4, 5 },\n                PlaceScripts = new Lib2.Models.PlaceScriptFinalMix[3]\n                {\n                    new Lib2.Models.PlaceScriptFinalMix { Map = 1, Battle = 2, Event = 3 },\n                    new Lib2.Models.PlaceScriptFinalMix { Map = 4, Battle = 5, Event = 6 },\n                    new Lib2.Models.PlaceScriptFinalMix { Map = 7, Battle = 8, Event = 7 },\n                },\n                Characters = new Lib2.Models.CharacterFinalMix[]\n                {\n                    new Lib2.Models.CharacterFinalMix\n                    {\n                        Abilities = new ushort[1] { 456 }\n                    }\n                },\n                DriveForms = new Lib2.Models.DriveFormFinalMix[]\n                {\n                    new Lib2.Models.DriveFormFinalMix // Valor\n                    {\n                        Experience = 1,\n                    },\n                    new Lib2.Models.DriveFormFinalMix // Wisdom\n                    {\n                        Experience = 2,\n                    },\n                    new Lib2.Models.DriveFormFinalMix // Limit\n                    {\n                        Experience = 3,\n                    },\n                    new Lib2.Models.DriveFormFinalMix // Master\n                    {\n                        Experience = 4,\n                    },\n                    new Lib2.Models.DriveFormFinalMix // Final\n                    {\n                        Experience = 5,\n                    },\n                    new Lib2.Models.DriveFormFinalMix(),\n                    new Lib2.Models.DriveFormFinalMix(),\n                    new Lib2.Models.DriveFormFinalMix(),\n                    new Lib2.Models.DriveFormFinalMix(),\n                    new Lib2.Models.DriveFormFinalMix(),\n                },\n            };\n\n            TransferServiceLL.CopySave<Lib2.ISaveKh2>(dst, src, Lib2.SaveKh2.TransferMappings);\n\n            Assert.Equal(12345, dst.MunnyAmount);\n            Assert.Equal(new byte[] { 0, 1, 2, 3 }, dst.InventoryCount);\n            Assert.Equal(Lib2.Types.Difficulty.Proud, dst.Difficulty);\n            Assert.Equal(Lib2.Types.WorldType.DisneyCastle, dst.WorldId);\n\n            Assert.Equal(2, dst.PlaceScripts.Length);\n            Assert.Equal(1, dst.PlaceScripts[0].Map);\n            Assert.Equal(2, dst.PlaceScripts[0].Battle);\n            Assert.Equal(3, dst.PlaceScripts[0].Event);\n            Assert.Equal(4, dst.PlaceScripts[1].Map);\n            Assert.Equal(5, dst.PlaceScripts[1].Battle);\n            Assert.Equal(6, dst.PlaceScripts[1].Event);\n            Assert.Equal(456, dst.Characters[0].Abilities[0]);\n\n            Assert.Equal(1, dst.DriveForms[0].Experience);\n            Assert.Equal(2, dst.DriveForms[1].Experience);\n            Assert.Equal(4, dst.DriveForms[2].Experience);\n            Assert.Equal(5, dst.DriveForms[3].Experience);\n        }\n    }\n}\n"
  },
  {
    "path": "KHSave.Tests/TrssvTest.cs",
    "content": "/*\n    Kingdom Save Editor\n    Copyright (C) 2020 Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\nusing KHSave.Trssv;\nusing KHSave.Trssv.Types;\nusing System.IO;\nusing Xunit;\n\nnamespace KHSave.Tests\n{\n    public class TrssvTest\n    {\n        private static readonly string FilePath = \"Saves/kh02.sav\";\n        private readonly SaveKh02 save;\n\n        public TrssvTest()\n        {\n            using (var stream = File.OpenRead(FilePath))\n            {\n                save = SaveKh02.Read(stream);\n            }\n        }\n\n        [Fact]\n        public void TestIsValid()\n        {\n            using (var stream = File.OpenRead(FilePath))\n            {\n                Assert.True(SaveKh02.IsValid(stream));\n            }\n        }\n\n        [Fact]\n        public void TestRead()\n        {\n            Assert.True(save.IsVibrationEnable);\n            Assert.False(save.InvertCameraVertical);\n            Assert.False(save.InvertCameraHorizontal);\n            Assert.True(save.IsMapVisible);\n            Assert.True(save.IsSubtitlesVisible);\n            Assert.True(save.Unk10_Bit5);\n            Assert.False(save.CanEarnExp);\n            Assert.Equal(2, save.CameraSpeed);\n            Assert.Equal(200, save.Brightness);\n            Assert.Equal(-1, save.TheaterModeWatched);\n            Assert.Equal(-1, save.TheaterMode);\n            Assert.Equal(100, save.Slots.Count);\n\n            var slot = save.Slots[1];\n            Assert.Equal(DifficultyType.Beginner, slot.Difficulty);\n            Assert.Equal(474344, slot.Experience);\n            Assert.Equal(53, slot.Level);\n            Assert.Equal(129, slot.EnemiesDefeated);\n            Assert.Equal(14, slot.StyleChangesPerformed);\n            Assert.Equal(48, slot.MagicFiragaUses);\n            Assert.Equal(10, slot.MagicBlizzardUses);\n            Assert.Equal(55, slot.MagicThundagaUses);\n            Assert.Equal(2, slot.MagicCuragaUses);\n            Assert.Equal(350, slot.StoryProgression);\n            Assert.Equal(115, slot.Pc[0].Hp);\n            Assert.Equal(80, slot.Pc[0].Mp);\n            Assert.Equal(100, slot.Pc[0].Focus);\n            Assert.Equal(140, slot.Pc[1].Hp);\n            Assert.Equal(130, slot.Pc[1].Mp);\n            Assert.Equal(100, slot.Pc[1].Focus);\n            Assert.Equal(\"/Game/Levels/dw/dw_08/dw_08\", slot.MapPath);\n            Assert.Equal(\"dw_08_Lv_Save_03\", slot.MapSpawn);\n            Assert.Equal(\"/Script/TresGame.TresPlayerControllerSora\", slot.PlayerScript);\n            Assert.Equal(\"/Game/Blueprints/Player/p_ex002/p_ex002_Pawn.p_ex002_Pawn_C\", slot.PlayerCharacter);\n            Assert.Equal(\"/Game/Blueprints/Npc/n_dw003/n_dw003_Pawn.n_dw003_Pawn_C\", slot.SupportCharacter);\n            Assert.Equal(CommandType.Firaga, slot.Shortcut1Circle);\n            Assert.Equal(CommandType.Blizzaga, slot.Shortcut1Triangle);\n            Assert.Equal(CommandType.Thundaga, slot.Shortcut1Square);\n            Assert.Equal(CommandType.Curaga, slot.Shortcut1Cross);\n            Assert.Equal(CommandType.Empty, slot.Shortcut2Circle);\n            Assert.Equal(CommandType.Empty, slot.Shortcut2Triangle);\n            Assert.Equal(CommandType.Ether, slot.Shortcut2Square);\n            Assert.Equal(CommandType.HiPotion, slot.Shortcut2Cross);\n        }\n    }\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    Kingdom Save Editor, a multi-game save editor\n    Copyright (C) 2020  Luciano Ciccariello\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    Kingdom Save Editor  Copyright (C) 2020  Luciano Ciccariello\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.md",
    "content": "![Kingdom Save Editor](docs/banner.png)\n\n---\n\n| Supported games                | Console         | Region |\n|--------------------------------| ----------------|--------|\n| Kingdom Hearts I               | PS2/PS3/PS4/PC  | All    |\n| Kingdom Hearts Re: CoM         | PS2/PS4/PC      | All    |\n| Kingdom Hearts II              | PS2/PS3/PS4/PC  | US/EU/FM |\n| Kingdom Hearts: Birth By Sleep | PSP/PS3/PS4/PC  | FM     |\n| Kingdom Hearts: Dream Drop Distance | 3DS/PC     | All    |\n| Kingdom Hearts 0.2             | PS4             | All    |\n| Kingdom Hearts III             | PS4 only        | All    |\n| Final Fantasy VII Remake       | PS4/PC          | All    |\n| Persona 5, Persona 5 Royal     | PS3/PS4         | US/EU  |\n\n[![Download](https://img.shields.io/github/downloads/xeeynamo/kh3saveeditor/total.svg?)](https://github.com/Xeeynamo/KH3SaveEditor/releases)*\n![Last commit](https://img.shields.io/github/last-commit/xeeynamo/kh3saveeditor.svg)\n![Tests status](https://github.com/xeeynamo/kh3saveeditor/workflows/Tests/badge.svg)\n\n<sub><sup>*download count does not include downloads from the Microsoft Store.</sup></sub>\n\n## Donations\n\nMy GitHub is open to a [sponsor program](https://github.com/sponsors/Xeeynamo). If you feel that the editor helped you in some way or you would like to support it, you can consider to [donate me](https://github.com/sponsors/Xeeynamo).\n\n## User guide\n\nYou need to decrypt your save before opening it with Kingdom Save Editor. Please refer to [this guide](docs/decryption.md) to know how to decrypt your save.\n\n## Contribution\n\n### Contribute to make it better\n\nThis software is **free and open-source**, and every contribution is more than welcome!\n\nIf you want to add missing names, improve it or add new offsets, just clone the repository, do your change, test if it does work and create a pull request: we will review your change (no needs to be scared here) and we will merge it to this repo! Do not be shy on contribute, even for the smallest thing 😃\n\n## Special thanks\n\n* Rikux3 for the incredible support of Kingdom Hearts 1 and Birth By Sleep Final Mix, the PC release of Kingdom Hearts games, the CBS PSU and PSV support\n* Keytotruth for additional coding and offset findings for Kingdom Hearts III\n* Delta-47 for the incredible support of Dream Drop Distance for 3DS, PS4 and PC and the European/Japanese support for Kingdom Hearts 1\n* Skiller for the multiple offsets and values for Persona 5 / Royal and the tips for fix a Kingdom Hearts III checksum and decrypt the 1.5+2.5 ReMIX PC encrypted header\n* Troopah to provide the icons used in the very first version of the editor\n* Sonicshadowsilver2 for the early findings of story flags and records offsets for Kingdom Hearts III\n* 13th Vessel to have found the complete story flags list for Kingdom Hearts III\n* TALESIOFIFREAK for the ability list and DLC inventory for Kingdom Hearts III\n* Silvercam for the list of gummiship inventory items for Kingdom Hearts III\n* Luseu to have provided the majority of Final Fantasy VII Remake offsets\n* All the sponsors / donators who contributed so far\n\n## License\n\nThe code itself, the interface and the codes inside it are protected by GPL 3.0 license, unless specified differently in the root of a specific folder. In short, that means that for every change you made or code that you take from here, you need to make it open source somewhere, adding the original copyright statement and specify where the original code has been taken.\n\nIf you have more doubts about the GPL license, have a read to the following links:\n\n[LICENSE info](https://tldrlegal.com/license/gnu-general-public-license-v3-(gpl-3))\n\n[LICENSE Wikipedia](https://simple.wikipedia.org/wiki/GNU_General_Public_License)\n\n## Privacy\n\nThe application will have full access to the file you will open by using \"File\\Open\" in order to be able to modify your save game data and it will send the version of the save editor to provide customized messages at the home page to suggest what changes you will find in an eventual new version of this tool.\n\nFew information such as name of the operating system, name of the game you choose to access to and crash reports will be send for diagnostic purpose and to improve the save editing functionalities. By knowing which games are modified the most, I can take knowledge of it and target them to add new editing features. You can also choose to send those reports anonymously. When not anonymous, a cookie will be send which represents a totally random number generated the very first time you open the Save Editor. The code is open source and there is absolute transparency on [which information are sent](KHSave.SaveEditor/Services/ReporterService.cs).\n"
  },
  {
    "path": "Tooling.MemoryWatcher/Configuration.cs",
    "content": "using System.Collections.Generic;\nusing System.IO;\nusing YamlDotNet.Serialization;\n\nnamespace Tooling.MemoryWatcher\n{\n    public class GameLabelConfiguration\n    {\n        [YamlMember(Alias = \"comment\")]\n        public string Comment { get; set; }\n\n        [YamlMember(Alias = \"offset\")]\n        public long Offset { get; set; }\n\n        [YamlMember(Alias = \"length\")]\n        public uint Length { get; set; }\n\n        [YamlMember(Alias = \"hidden\")]\n        public bool Hidden { get; set; }\n\n        public GameLabelConfiguration()\n        {\n            // Set default content\n            Comment = \"<no label?\";\n            Offset = -1;\n            Length = 1;\n            Hidden = false;\n        }\n    }\n\n    public class GameConfiguration\n    {\n        [YamlMember(Alias = \"name\")]\n        public string Name { get; set; }\n\n        [YamlMember(Alias = \"process\")]\n        public string Process { get; set; }\n\n        [YamlMember(Alias = \"offset\")]\n        public uint Offset { get; set; }\n\n        [YamlMember(Alias = \"length\")]\n        public uint Length { get; set; }\n\n        [YamlMember(Alias = \"labels\")]\n        public List<GameLabelConfiguration> Labels { get; set; }\n    }\n\n    public class Configuration\n    {\n        public List<GameConfiguration> Games;\n\n        private Configuration(string content)\n        {\n            Games = new DeserializerBuilder()\n                .Build()\n                .Deserialize<List<GameConfiguration>>(content);\n        }\n\n        public static Configuration ReadFromYaml(string fileName) =>\n            new Configuration(File.ReadAllText(fileName));\n    }\n}\n"
  },
  {
    "path": "Tooling.MemoryWatcher/ProcessStream.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Tooling.MemoryWatcher\n{\n    public class ProcessStream : Stream\n    {\n        [DllImport(\"kernel32.dll\")]\n        private static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);\n\n        [DllImport(\"kernel32.dll\")]\n        private static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int BytesRead);\n\n        [DllImport(\"kernel32.dll\")]\n        static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, int dwSize, out int lpNumberOfBytesWritten);\n\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        static extern bool OpenProcessToken(IntPtr ProcessHandle, UInt32 DesiredAccess, out IntPtr TokenHandle);\n\n\n        private Process _process;\n        private IntPtr _hProcess;\n        private long position;\n\n        public ProcessStream(Process process, long baseAddress, uint length)\n        {\n            BaseAddress = baseAddress;\n            Length = length;\n\n            OpenProcess(process);\n        }\n\n\n        public long BaseAddress { get; }\n        public override bool CanRead => true;\n\n        public override bool CanSeek => true;\n\n        public override bool CanWrite => true;\n\n        public override long Length { get; }\n\n        public override long Position\n        {\n            get => position;\n            set => position = value;\n        }\n\n        public override void Flush()\n        {\n        }\n\n        public override int Read(byte[] buffer, int offset, int count)\n        {\n            int read;\n            var actualCount = (int)Math.Min(count, Math.Max(0, Length - Position));\n            var pos = (IntPtr)(BaseAddress + Position);\n\n            if (offset == 0)\n            {\n                ReadProcessMemory(_hProcess, pos, buffer, actualCount, out read);\n            }\n            else\n            {\n                byte[] data = new byte[actualCount];\n                ReadProcessMemory(_hProcess, pos, buffer, actualCount, out read);\n                Array.Copy(data, 0, buffer, offset, read);\n            }\n\n            Position += read;\n\n            return read;\n        }\n\n        public override long Seek(long offset, SeekOrigin origin)\n        {\n            switch (origin)\n            {\n                case SeekOrigin.Begin:\n                    return Position = offset;\n                case SeekOrigin.Current:\n                    return Position += offset;\n                case SeekOrigin.End:\n                    return Position = Length + offset;\n                default:\n                    return Position;\n            }\n        }\n\n        public override void SetLength(long value)\n        {\n        }\n\n        public override void Write(byte[] buffer, int offset, int count)\n        {\n            var actualCount = (int)Math.Min(count, Math.Max(0, Length - Position));\n            var pos = (IntPtr)(BaseAddress + Position);\n\n            int written;\n            if (offset == 0)\n            {\n                WriteProcessMemory(_hProcess, pos, buffer, actualCount, out written);\n            }\n            else\n            {\n                var data = new byte[count];\n                Array.Copy(buffer, offset, data, 0, count);\n                WriteProcessMemory(_hProcess, pos, data, actualCount, out written);\n            }\n\n            Position += written;\n        }\n\n        private void OpenProcess(Process process)\n        {\n            const int TOKEN_QUERY = 8;\n            const int PROCESS_ALL_ACCESS = 0x000F0000 | 0x00100000 | 0xFFF;\n            _hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, process.Id);\n            _process = process;\n\n            var isSuccess = OpenProcessToken(_hProcess, TOKEN_QUERY, out var tokenHandle);\n        }\n\n        public static IEnumerable<Process> GetProcesses() =>\n            Process.GetProcesses();\n\n        public static Process TryGetProcess(Func<Process, bool> predicate, int timeout = 10000, int sleep = 100)\n        {\n            var stopwatch = new Stopwatch();\n            stopwatch.Start();\n\n            do\n            {\n                var process = GetProcesses().FirstOrDefault(predicate);\n                if (process != null)\n                    return process;\n\n                Thread.Sleep(sleep);\n            } while (stopwatch.ElapsedMilliseconds < timeout);\n\n            return null;\n        }\n\n        public static Task<Process> TryGetProcessAsync(Func<Process, bool> predicate, int timeout = 10000, int sleep = 100) =>\n            Task.Run(() => TryGetProcess(predicate, timeout, sleep));\n    }\n}\n"
  },
  {
    "path": "Tooling.MemoryWatcher/Program.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Tooling.MemoryWatcher\n{\n    public static class Program\n    {\n        async static Task Main(string[] args)\n        {\n            var configFileName = Path.GetFullPath(args.FirstOrDefault() ?? \"config.yml\");\n            var configuration = Configuration.ReadFromYaml(configFileName);\n\n            Console.WriteLine(\"List of supported games:\");\n            for (var i = 0; i < configuration.Games.Count; i++)\n            {\n                var game = configuration.Games[i];\n                Console.WriteLine($\" {i:D2}. [{game.Process}] {game.Name}\");\n            }\n\n            int selectedGame;\n            do\n            {\n                Console.Write(\"What game do you want to watch? (eg. 3): \");\n                if (!int.TryParse(Console.ReadLine(), out selectedGame))\n                {\n                    Console.WriteLine(\"ERROR: You did not typed a valid number?\");\n                    selectedGame = -1;\n                }\n\n                if (selectedGame >= configuration.Games.Count)\n                {\n                    Console.WriteLine(\"The game you selected does not exist.\");\n                    selectedGame = -1;\n                }\n            } while (selectedGame < 0);\n\n            try\n            {\n                await Run(configFileName, configuration.Games[selectedGame]);\n            }\n            catch (ExecutionException ex)\n            {\n                Console.WriteLine($\"Error: {ex.Message}\");\n            }\n        }\n\n        async static Task Run(string configFileName, GameConfiguration game)\n        {\n            var processName = game.Process;\n            Console.WriteLine($\"Now searching for the process {processName}...\");\n\n            var process = await ProcessStream\n                .TryGetProcessAsync(x => x.ProcessName.Contains(processName));\n            if (process == null)\n                throw new ExecutionException($\"Failed to attach to {game.Process} in the time limit.\");\n\n            Console.WriteLine($\"We suppose that {processName} has {game.Name} running.\\n\");\n            Console.WriteLine(\" [c] clear console\");\n            Console.WriteLine(\" [d] dump memory to file\");\n            Console.WriteLine(\" [p] pause/resume watch\");\n            Console.WriteLine(\" [x] exit\");\n            Console.WriteLine(\"Now watching to memory differences...\");\n\n            bool isWatchRunning = true;\n            bool isSupposedToExit = false;\n\n            using var stream = new ProcessStream(process, game.Offset, game.Length);\n            var taskInput = Task.Run(async () =>\n            {\n                while (!isSupposedToExit)\n                {\n                    switch (Console.ReadKey().KeyChar)\n                    {\n                        case 'c':\n                            Console.Clear();\n                            break;\n                        case 'd':\n                            lock (stream)\n                                Dump(stream);\n                            break;\n                        case 'p':\n                            isWatchRunning = !isWatchRunning;\n                            if (isWatchRunning)\n                                Console.WriteLine(\"Memory watcher is now scheduled to resume its watch!\");\n                            else\n                                Console.WriteLine(\"Memory watcher is now scheduled to take a rest.\");\n                            break;\n                        case 'x':\n                            isSupposedToExit = true;\n                            Console.WriteLine(\"Memory watcher is now scheduled to exit.\");\n                            break;\n                    }\n\n                    await Task.Delay(10);\n                }\n            });\n\n            var taskWatch = Task.Run(async () =>\n            {\n                var length = game.Length;\n                var buffer = new byte[length];\n                var current = new byte[length];\n                var sb = new StringBuilder(0x1000);\n\n                stream.Position = 0;\n                stream.Read(buffer, 0, (int)length);\n\n                while (!isSupposedToExit)\n                {\n                    await Task.Delay(1);\n\n                    lock (stream)\n                    {\n                        stream.Position = 0;\n                        stream.Read(current);\n                    }\n\n                    if (isWatchRunning)\n                    {\n                        for (var i = 0U; i < length; i++)\n                        {\n                            if (buffer[i] != current[i])\n                                sb.Append(LogDifference(i, buffer[i], current[i], game.Labels));\n                        }\n                    }\n\n                    if (sb.Length > 0)\n                    {\n                        Console.Write(sb);\n                        sb.Clear();\n                    }\n\n                    var tmp = buffer; // flip buffer for performance reasons\n                    buffer = current;\n                    current = tmp;\n\n                }\n            });\n\n            using var fsWatcher = new FileSystemWatcher()\n            {\n                Path = Path.GetDirectoryName(configFileName),\n                Filter = Path.GetFileName(configFileName),\n                NotifyFilter = NotifyFilters.LastWrite,\n                EnableRaisingEvents = true,\n            };\n            fsWatcher.Changed += (object sender, FileSystemEventArgs e) =>\n            {\n                //Console.WriteLine($\"The configuration file {e.Name} has been changed and it will be reloaded.\");\n                Thread.Sleep(50);\n\n                try\n                {\n                    var configuration = Configuration.ReadFromYaml(configFileName);\n                    var gameNew = configuration.Games\n                        .FirstOrDefault(x => x.Name == game.Name);\n\n                    if (gameNew == null)\n                        Console.WriteLine($\"The configuration for the running game can not be found, so it will not be reloaded.\");\n                    else\n                        game = gameNew;\n                }\n                catch (Exception ex)\n                {\n                    Console.WriteLine($\"An error occurred while reading the configuration: {ex.Message}.\");\n                }\n            };\n\n            await Task.WhenAll(taskInput, taskWatch);\n        }\n\n        private static void Dump(ProcessStream stream)\n        {\n            var fileName = $\"dump_{DateTime.Now.Ticks}.bin\";\n\n            using var outStream = File.Create(fileName);\n            stream.Position = 0;\n            stream.CopyTo(outStream);\n\n            Console.WriteLine($\"Dumped to {fileName}\");\n        }\n\n        private static string LogDifference(uint offset, byte previous, byte current, List<GameLabelConfiguration> labels)\n        {\n            var label = GetLabel(labels, offset);\n            if (!(label?.Hidden == true))\n                return $\"0x{offset:X06} {previous:X02} > {current:X02}  {label?.Comment}\\n\";\n\n            return string.Empty;\n        }\n\n        private static GameLabelConfiguration GetLabel(List<GameLabelConfiguration> labels, uint offset)\n        {\n            if (labels == null)\n                return null;\n\n            foreach (var label in labels)\n            {\n                if (offset >= label.Offset && offset < label.Offset + label.Length)\n                    return label;\n            }\n\n            return null;\n        }\n\n        static IEnumerable<int> IgnoreOffset(int offset)\n        {\n            yield return offset;\n        }\n\n        static IEnumerable<int> IgnoreOffset(int startOffset, int count) =>\n            Enumerable.Range(startOffset, count);\n    }\n\n    public class ExecutionException : Exception\n    {\n        public ExecutionException(string message) :\n            base(message)\n        { }\n    }\n}\n"
  },
  {
    "path": "Tooling.MemoryWatcher/Tooling.MemoryWatcher.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net6</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"YamlDotNet\" Version=\"11.2.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.Lib2\\KHSave.Lib2.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"config.yml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Tooling.MemoryWatcher/config.yml",
    "content": "﻿- name: \"Kingdom Hearts I (US, SLUS-20370)\"\n  process: pcsx2\n  offset: 0x203F1C90\n  length: 0x16c00\n  labels:\n    - comment: \"Sora accessory 1\"\n      offset: 0x1d\n    - comment: \"Sora accessory 2\"\n      offset: 0x1e\n    - comment: \"Sora equipped keyblade\"\n      offset: 0x36\n    - comment: \"Sora abilities\"\n      offset: 0x44\n      length: 0x30\n      hidden: true\n- name: \"Kingdom Hearts I (FM, SLPS-25198)\"\n  process: pcsx2\n  offset: 0x203f8380\n  length: 0x16C00\n  labels:\n  - comment: \"World ID\"\n    offset: 0x2040\n    length: 0x4\n  - comment: \"Room ID\"\n    offset: 0x2044\n    length: 0x4\n  - comment: \"Spawn ID\"\n    offset: 0x2048\n    length: 0x4\n- name: \"Kingdom Hearts II (FM, Crazycatz00 eng patch)\"\n  process: pcsx2\n  offset: 0x2032BB30\n  length: 0x10fc0\n  labels:\n    - comment: \"World ID\"\n      offset: 0xc\n      hidden: true\n    - comment: \"Room ID\"\n      offset: 0xd\n      hidden: true\n    - comment: \"Spawn ID\"\n      offset: 0xe\n      hidden: true\n    - comment: \"Story progression: Very beginning\"\n      offset: 0x1CD2\n      length: 1\n    - comment: \"Story progression: TT 1st Day\"\n      offset: 0x1CD3\n      length: 3\n    - comment: \"Story progression: TT 2st Day\"\n      offset: 0x1CD6\n      length: 2\n    - comment: \"Story progression: TT 3st Day\"\n      offset: 0x1CD8\n      length: 1\n    - comment: \"Story progression: Sora\"\n      offset: 0x1CEA\n      length: 1\n    - comment: \"Story progression chunk\"\n      offset: 0x1CE2\n      length: 0x206\n    - comment: \"MSG ID that blocks a side of the map #1\"\n      offset: 0x20dc\n      length: 0x2a\n      hidden: true\n    - comment: \"Map discovery\"\n      offset: 0x22f8\n      length: 0x98\n      hidden: true\n    - comment: \"Game timers\"\n      offset: 0x2444\n      length: 0x54\n      hidden: true\n    - comment: \"Game difficulty\"\n      offset: 0x2498\n      length: 4\n      hidden: true\n    - comment: \"Puzzle pieces\"\n      offset: 0x24a0\n      length: 0x30\n      hidden: true\n    - comment: \"Sora: Weapon\"\n      offset: 0x24F0\n      length: 2\n      hidden: true\n    - comment: \"Sora: HP\"\n      offset: 0x24F4\n      length: 2\n      hidden: true\n    - comment: \"Sora: MP\"\n      offset: 0x24F6\n      length: 2\n      hidden: true\n    - comment: \"Sora: Parameters boost\"\n      offset: 0x24F8\n      length: 4\n      hidden: true\n    - comment: \"Party members\"\n      offset: 0x357c\n      length: 0x4\n      hidden: true\n    - comment: \"Inventory section\"\n      offset: 0x3580\n      length: 0x140\n      hidden: true\n    - comment: \"Nobodies kill count: Dusk\"\n      offset: 0x38c8\n      length: 4\n      hidden: true\n    - comment: \"Nobodies kill count: Creeper\"\n      offset: 0x38dc\n      length: 4\n      length: 4\n      hidden: true\n    - comment: \"Nobodies kill count: Dragoon\"\n      offset: 0x38e0\n      length: 4\n      hidden: true\n    - comment: \"Game configuration\"\n      offset: 0x41A4\n      length: 2\n      hidden: true"
  },
  {
    "path": "WindowsStoreSubmission/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  xmlns:rescap=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities\"\n  IgnorableNamespaces=\"uap rescap\">\n\n  <Identity\n    Name=\"58821Xeeynamo.KingdomSaveEditor\"\n    Publisher=\"CN=2A5D56DD-5C5B-454C-9458-F4672BBA118C\"\n    Version=\"1.15.4.0\" />\n\n  <Properties>\n    <DisplayName>Kingdom Save Editor</DisplayName>\n    <PublisherDisplayName>Xeeynamo</PublisherDisplayName>\n    <Logo>Images\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n    <TargetDeviceFamily Name=\"Windows.Desktop\" MinVersion=\"10.0.14393.0\" MaxVersionTested=\"10.0.14393.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"$targetentrypoint$\">\n      <uap:VisualElements\n        DisplayName=\"Kingdom Save Editor\"\n        Description=\"General purpose videogame save editor\"\n        BackgroundColor=\"transparent\"\n        Square150x150Logo=\"Images\\Square150x150Logo.png\"\n        Square44x44Logo=\"Images\\Square44x44Logo.png\">\n        <uap:DefaultTile Wide310x150Logo=\"Images\\Wide310x150Logo.png\"  Square71x71Logo=\"Images\\SmallTile.png\" Square310x310Logo=\"Images\\LargeTile.png\" ShortName=\"Kingdom Save Editor\">\n          <uap:ShowNameOnTiles>\n            <uap:ShowOn Tile=\"wide310x150Logo\"/>\n            <uap:ShowOn Tile=\"square310x310Logo\"/>\n            <uap:ShowOn Tile=\"square150x150Logo\"/>\n          </uap:ShowNameOnTiles>\n        </uap:DefaultTile >\n        <uap:SplashScreen Image=\"Images\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <rescap:Capability Name=\"runFullTrust\" />\n  </Capabilities>\n</Package>\n"
  },
  {
    "path": "WindowsStoreSubmission/WindowsStoreSubmission.wapproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Condition=\"'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '15.0'\">\n    <VisualStudioVersion>15.0</VisualStudioVersion>\n  </PropertyGroup>\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|x86\">\n      <Configuration>Debug</Configuration>\n      <Platform>x86</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x86\">\n      <Configuration>Release</Configuration>\n      <Platform>x86</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|ARM\">\n      <Configuration>Debug</Configuration>\n      <Platform>ARM</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|ARM\">\n      <Configuration>Release</Configuration>\n      <Platform>ARM</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|ARM64\">\n      <Configuration>Debug</Configuration>\n      <Platform>ARM64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|ARM64\">\n      <Configuration>Release</Configuration>\n      <Platform>ARM64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|AnyCPU\">\n      <Configuration>Debug</Configuration>\n      <Platform>AnyCPU</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|AnyCPU\">\n      <Configuration>Release</Configuration>\n      <Platform>AnyCPU</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup>\n    <WapProjPath Condition=\"'$(WapProjPath)'==''\">$(MSBuildExtensionsPath)\\Microsoft\\DesktopBridge\\</WapProjPath>\n  </PropertyGroup>\n  <Import Project=\"$(WapProjPath)\\Microsoft.DesktopBridge.props\" />\n  <PropertyGroup>\n    <ProjectGuid>080a374c-d430-4fcb-96b8-889fdebf58f2</ProjectGuid>\n    <TargetPlatformVersion>10.0.22000.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.17134.0</TargetPlatformMinVersion>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>\n    <NoWarn>$(NoWarn);NU1702</NoWarn>\n    <EntryPointProjectUniqueName>..\\KHSave.SaveEditor\\KHSave.SaveEditor.csproj</EntryPointProjectUniqueName>\n    <GenerateAppInstallerFile>False</GenerateAppInstallerFile>\n    <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>\n    <AppxSymbolPackageEnabled>False</AppxSymbolPackageEnabled>\n    <GenerateTestArtifacts>True</GenerateTestArtifacts>\n    <AppxBundlePlatforms>x86|x64|arm|arm64</AppxBundlePlatforms>\n    <HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|ARM64'\">\n    <AppxBundle>Always</AppxBundle>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|AnyCPU'\">\n    <AppxBundle>Always</AppxBundle>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x86'\">\n    <AppxBundle>Always</AppxBundle>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|ARM'\">\n    <AppxBundle>Always</AppxBundle>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x86'\">\n    <AppxBundle>Always</AppxBundle>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|AnyCPU'\">\n    <AppxBundle>Always</AppxBundle>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <AppxBundle>Always</AppxBundle>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <AppxBundle>Always</AppxBundle>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|ARM'\">\n    <AppxBundle>Always</AppxBundle>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|ARM64'\">\n    <AppxBundle>Always</AppxBundle>\n  </PropertyGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Images\\LargeTile.scale-100.png\" />\n    <Content Include=\"Images\\LargeTile.scale-125.png\" />\n    <Content Include=\"Images\\LargeTile.scale-150.png\" />\n    <Content Include=\"Images\\LargeTile.scale-200.png\" />\n    <Content Include=\"Images\\LargeTile.scale-400.png\" />\n    <Content Include=\"Images\\SmallTile.scale-100.png\" />\n    <Content Include=\"Images\\SmallTile.scale-125.png\" />\n    <Content Include=\"Images\\SmallTile.scale-150.png\" />\n    <Content Include=\"Images\\SmallTile.scale-200.png\" />\n    <Content Include=\"Images\\SmallTile.scale-400.png\" />\n    <Content Include=\"Images\\SplashScreen.scale-100.png\" />\n    <Content Include=\"Images\\SplashScreen.scale-125.png\" />\n    <Content Include=\"Images\\SplashScreen.scale-150.png\" />\n    <Content Include=\"Images\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Images\\SplashScreen.scale-400.png\" />\n    <Content Include=\"Images\\Square150x150Logo.scale-100.png\" />\n    <Content Include=\"Images\\Square150x150Logo.scale-125.png\" />\n    <Content Include=\"Images\\Square150x150Logo.scale-150.png\" />\n    <Content Include=\"Images\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Images\\Square150x150Logo.scale-400.png\" />\n    <Content Include=\"Images\\Square44x44Logo.altform-lightunplated_targetsize-16.png\" />\n    <Content Include=\"Images\\Square44x44Logo.altform-lightunplated_targetsize-24.png\" />\n    <Content Include=\"Images\\Square44x44Logo.altform-lightunplated_targetsize-256.png\" />\n    <Content Include=\"Images\\Square44x44Logo.altform-lightunplated_targetsize-32.png\" />\n    <Content Include=\"Images\\Square44x44Logo.altform-lightunplated_targetsize-48.png\" />\n    <Content Include=\"Images\\Square44x44Logo.altform-unplated_targetsize-16.png\" />\n    <Content Include=\"Images\\Square44x44Logo.altform-unplated_targetsize-256.png\" />\n    <Content Include=\"Images\\Square44x44Logo.altform-unplated_targetsize-32.png\" />\n    <Content Include=\"Images\\Square44x44Logo.altform-unplated_targetsize-48.png\" />\n    <Content Include=\"Images\\Square44x44Logo.scale-100.png\" />\n    <Content Include=\"Images\\Square44x44Logo.scale-125.png\" />\n    <Content Include=\"Images\\Square44x44Logo.scale-150.png\" />\n    <Content Include=\"Images\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Images\\Square44x44Logo.scale-400.png\" />\n    <Content Include=\"Images\\Square44x44Logo.targetsize-16.png\" />\n    <Content Include=\"Images\\Square44x44Logo.targetsize-24.png\" />\n    <Content Include=\"Images\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Images\\Square44x44Logo.targetsize-256.png\" />\n    <Content Include=\"Images\\Square44x44Logo.targetsize-32.png\" />\n    <Content Include=\"Images\\Square44x44Logo.targetsize-48.png\" />\n    <Content Include=\"Images\\StoreLogo.scale-100.png\" />\n    <Content Include=\"Images\\StoreLogo.scale-125.png\" />\n    <Content Include=\"Images\\StoreLogo.scale-150.png\" />\n    <Content Include=\"Images\\StoreLogo.scale-200.png\" />\n    <Content Include=\"Images\\StoreLogo.scale-400.png\" />\n    <Content Include=\"Images\\Wide310x150Logo.scale-100.png\" />\n    <Content Include=\"Images\\Wide310x150Logo.scale-125.png\" />\n    <Content Include=\"Images\\Wide310x150Logo.scale-150.png\" />\n    <Content Include=\"Images\\Wide310x150Logo.scale-200.png\" />\n    <Content Include=\"Images\\Wide310x150Logo.scale-400.png\" />\n    <None Include=\"WindowsStoreSubmission_TemporaryKey.pfx\" />\n    <None Include=\"Package.StoreAssociation.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\KHSave.SaveEditor\\KHSave.SaveEditor.csproj\" />\n  </ItemGroup>\n  <Import Project=\"$(WapProjPath)\\Microsoft.DesktopBridge.targets\" />\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Windows.SDK.BuildTools\" Version=\"10.0.22000.194\" PrivateAssets=\"all\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "_config.yml",
    "content": "theme: jekyll-theme-minimal\ntitle: Kingdom Save Editor\ndescription: General purpose videogame save editor\nlogo: theme-logo.png\nshow_downloads: false\ngoogle_analytics: UA-56422469-2\n"
  },
  {
    "path": "docs/decryption.md",
    "content": "# Save game decryption\n\nBefore using a save with Kingdom Save Editor, you need to extract the save or decrypt it. Every console has their own different way of decrypting the saves.\n\n## PlayStation 2\n\nFor a real console, you might want to use uLaunchELF. Find the best way to launch homebrews to your console and then use uLaunchELF to copy the saves from the memory card to a USB Drive. Once you're happy with your changes, you can use the same homebrew to transfer the file back.\n\nFor PCSX2, you need to specify to the emulator you want to use the virtual memory card as a folder. Go to `Config\\Memory cards`. Select the memory card you want to use as a folder and then click the button `Convert`. Do not worry, your saves will continue to function as always as a folder converted memory card. Now locate the memory card's content from that MemoryCard Manager window and you will find a bunch of folders that will look like as `BASLES`, `BISLPS` etc. . One of them is the save of the game you wish to modify.\n\n## PlayStation 3\n\nFor a real PS3, copy the save to a USB drive and decrypt them using `BruteForce Savedata`. I realize it is a very complicated tool to use as it's not clear when saves are actually decrypted or not. If the save is supported but Kingdom Save Editor complains about the unsupported save, it means it is not decrypted. The fastest way might be searching a tutorial on YouTube.\n\nThe emulator RPCS3 loads and saves decrypted save games by default.\n\n## PlayStation 4\n\nThere are two known way to decrypt and encrypt back a save.\n\n1) [Playstation 4 Save Mounter](https://github.com/ChendoChap/Playstation-4-Save-Mounter): If you have a PS4 with a HEN or Custom Firmware, you may want to use [this fast and free tool](https://github.com/ChendoChap/Playstation-4-Save-Mounter)\n\n2) [Save Wizard](https://www.savewizard.net/): If you do not have a custom firmware, you can obtain a copy of a decrypted save and re-encrypt it using [the following paid software](https://www.savewizard.net/)\n\nOnce you modify the save, you need to encrypt it back with ideally the same tool you used for the decryption.\n\n## PlayStation 5\n\nYou can still decrypt PlayStation 4 titles running on PlayStation 5 by copying them on a USB drive and using Save Wizard. But there are currently no known ways to do it on PlayStation 5 titles.\n\n## PlayStation Portable\n\nIf you are using PPSSPP, save files are encrypted by default. To decrypt them, go to `File\\Open Memory Stick` then navigate to `PSP/SYSTEM`. You will find a file called `ppsspp.ini`. Open it and search for `EncryptSave`. You should see a line equal to `EncryptSave = True`. Change it to `EncryptSave = False`, save and restart the emulator.\n\nFor a real PSP, all saves prior to 6.xx firmware are decrypted. But for the next firmwares you need a tool to decrypt them. I recommend to still use PPSSPP to use your PSP files and decrypt them from there.\n\n## Nintendo 3DS\n\nIf you are using the emulator Citra, saves are already decrypted. Just go to `File\\Open Citra Folder` then navigate to `sdmc/Nintendo 3DS/00000000000000000000000000000000/00000000000000000000000000000000/title` to find and modify your save.\n\nWith a physical Nintendo 3DS, saves are encrypted by default. I recommend to follow [this guide](https://gbatemp.net/threads/extract-and-decrypt-games-nand-backups-and-sd-contents-with-ninfs.499994/) to do it.\n"
  },
  {
    "path": "manifests/x/Xeeynamo/KingdomSaveEditor/1.15.1/Xeeynamo.KingdomSaveEditor.yml",
    "content": "PackageIdentifier: \"Xeeynamo.KingdomSaveEditor\"\nPackageVersion: \"1.15.1\"\nPackageLocale: \"en-US\"\nPublisher: \"Xeeynamo\"\nPackageName: \"KingdomSaveEditor\"\nLicense: \"GPL-3.0\"\nShortDescription: \"General purpose videogame save editor.\"\nInstallers: \n - Architecture: \"x86\"\n   InstallerType: \"zip\"\n   InstallerUrl: \"https://github.com/Xeeynamo/KingdomSaveEditor/releases/download/v1.15.1/KingdomSaveEditor-15.1.zip\"\n   InstallerSha256: ce21fb501677b555cb3cd0e1e2f16de900eba4a5d03da48d64a721e2cff21e0b\nManifestType: \"singleton\"\nManifestVersion: \"1.0.0\"\n"
  },
  {
    "path": "resources/ff7r-meta-bgm.yml",
    "content": "name: Final Fantasy VII Remake\nbgm:\n- id: 51275\n  name: \"Mark of a Traitor (Barret Theme)\"\n- id: 25140\n  name: \"Unused (from Advent Children)\"\n- id: 36234\n  name: \"Unused (from Advent Children)\"\n- id: 45357\n  name: \"Unused (from Advent Children)\"\n- id: 26287\n  name: \"Unused (from Advent Children)\"\n- id: 50425\n  name: \"Unused (from Advent Children)\"\n- id: 22391\n  name: \"Unused (from Advent Children)\"\n- id: 38670\n  name: \"Unused (from Advent Children)\"\n- id: 6272\n  name: \"Bombing Mission\"\n- id: 15716\n  name: \"Bombing Mission?\"\n- id: 32287\n  name: \"Bombing Mission\"\n- id: 26218\n  name: \"Bombing Mission\"\n- id: 16387\n  name: \"Anxiety (just the opening)\"\n- id: 31677\n  name: \"Mako Reactor\"\n- id: 13159\n  name: \"Mako Reactor (Battle)\"\n- id: 56796\n  name: \"Cloud's headache scene during the first bombing\"\n- id: 55979\n  name: \"Scorpion Sentinel\"\n- id: 11196\n  name: \"Scorpion Sentinel\"\n- id: 5496\n  name: \"Getaway\"\n- id: 29180\n  name: \"Getaway (End Cutscene)\"\n- id: 54418\n  name: \"Electric Guitar version of the Shinra Theme?\"\n- id: 38114\n  name: \"Bombing Mission (Alternative Mix)\"\n- id: 36029\n  name: \"Bombing Mission\"\n- id: 3973\n  name: \"Mako Reactor (Battle)\"\n- id: 1091\n  name: \"Mako Reactor\"\n- id: 20620\n  name: \"Mako Reactor (Battle)\"\n- id: 44459\n  name: \"Mako Reactor (Battle)\"\n- id: 1512\n  name: \"Shinra's Theme\"\n- id: 32177\n  name: \"Mako Reactor (Alternative Mix)\"\n- id: 11360\n  name: \"*A somewhat somber, but eerie song.\"\n- id: 33887\n  name: \"*A somewhat somber, but eerie song. More Instrumentation\"\n- id: 63288\n  name: \"Meeting Aerith (Suddenly, Sephiroth)\"\n- id: 20893\n  name: \"Aerith's Theme\"\n- id: 24237\n  name: \"Suddenly, Harry Potter ghosts\"\n- id: 56626\n  name: \"Let the Battles Begin\"\n- id: 12749\n  name: \"Let the Battles Begin (Less Intrumentation)\"\n- id: 9507\n  name: \"Let the Battles Begin 3\"\n- id: 46470\n  name: \"Let the Battles Begin 4\"\n- id: 10627\n  name: \"Let the Battles Begin 5\"\n- id: 52467\n  name: \"Let the Battles Begin 6\"\n- id: 49580\n  name: \"Let the Battles Begin 7 (bit of Bombing Mission)\"\n- id: 63773\n  name: \"Let the Battles Begin 8\"\n- id: 35612\n  name: \"Let the Battles Begin 9\"\n- id: 41004\n  name: \"Let the Battles Begin 10 (With Bombing Mission & Shinra Theme)\"\n- id: 37161\n  name: \"Let the Battles Begin 11\"\n- id: 50339\n  name: \"Let the Battles Begin End?\"\n- id: 9627\n  name: \"Bombing Mission, but when Cloud jumps into the train\"\n- id: 53723\n  name: \"Anxiety\"\n- id: 61591\n  name: \"World Map (Sector 7 Slums)\"\n- id: 13272\n  name: \"*short sudden BWAM\"\n- id: 36551\n  name: \"Tifa's Theme (Piano)\"\n- id: 10120\n  name: \"Tifa's Theme\"\n- id: 9828\n  name: \"Trail of Blood\"\n- id: 14647\n  name: \"*Spooky, intimidating song,which goes onto a calmer section (Cutscene)\"\n- id: 31359\n  name: \"Main theme of FFVII - Sector 7\"\n- id: 18007\n  name: \"Avalanche's Theme\"\n- id: 55636\n  name: \"Scrap Boulevard Cleanup Crew\"\n- id: 13601\n  name: \"Steal the Tiny Bronco! (Placeholder FF7 Rip)\"\n- id: 45500\n  name: \"Let the Battles Begin 12 (doesn't loop properly)\"\n- id: 35045\n  name: \"Johnny's Theme\"\n- id: 58355\n  name: \"Let the Battles Begin 13 (A Merc's Job)\"\n- id: 61102\n  name: \"On Our Way (Tifa's Theme)\"\n- id: 37934\n  name: \"The Star of Seventh Heaven\"\n- id: 38929\n  name: \"Lurking in the Darkness - Suspicious Man\"\n- id: 14766\n  name: \"Let the Battles Begin 14\"\n- id: 27426\n  name: \"Just Another Job\"\n- id: 23161\n  name: \"Let the Battles Begin 15\"\n- id: 47085\n  name: \"Invisible Enemy - Sudden Attack\"\n- id: 60414\n  name: \"Invisible Enemy - Sudden Attack\"\n- id: 8287\n  name: \"Invisible Enemy - Sudden Attack\"\n- id: 15210\n  name: \"A New Operation\"\n- id: 11279\n  name: \"Let the Battles Begin 16\"\n- id: 27951\n  name: \"Main Theme of FFVII - Nightfall in the Undercity\"\n- id: 11689\n  name: \"Let the Battles Begin! - The Hideout\"\n- id: 39153\n  name: \"Let the Battles Begin 17\"\n- id: 13619\n  name: \"Avalanche's Theme\"\n- id: 17687\n  name: \"Lay Down Some Rubber - Let's Ride\"\n- id: 40117\n  name: \"Lay Down Some Rubber - Let's Ride\"\n- id: 9512\n  name: \"Lay Down Some Rubber - Let's Ride\"\n- id: 37750\n  name: \"Midnight Spiral\"\n- id: 61112\n  name: \"Speed Demon\"\n- id: 38110\n  name: \"The Red Zone\"\n- id: 38879\n  name: \"Jesse's Theme\"\n- id: 17813\n  name: \"Moonlight Thievery\"\n- id: 10008\n  name: \"Jesse's Theme\"\n- id: 17069\n  name: \"Jesse's Theme\"\n- id: 55341\n  name: \"Jesse's Theme (Alternative Mix?)\"\n- id: 35283\n  name: \"*I would guess used for a cutscene? Has a slow start up.\"\n- id: 6629\n  name: \"*Final Fantasy 7 Main Theme (Calm version)\"\n- id: 34567\n  name: \"S7-6 Annex Diversion\"\n- id: 7883\n  name: \"S7-6 Annex Diversion 2\"\n- id: 52021\n  name: \"S7-6 Annex Diversion 3\"\n- id: 24823\n  name: \"S7-6 Annex Diversion 4\"\n- id: 47700\n  name: \"Ignition Flame\"\n- id: 58915\n  name: \"Ignition Flame (Alt)\"\n- id: 17112\n  name: \"Flying High\"\n- id: 51448\n  name: \"*A high-tempo up-beat techno song with lyrics.\"\n- id: 56334\n  name: \"*A instrumental version of the song above\"\n- id: 9555\n  name: \"Target: Mako Reactor 5\"\n- id: 14449\n  name: \"Hurry!\"\n- id: 15908\n  name: \"Hurry! (Alt) or Dogged Pursuit\"\n- id: 9271\n  name: \"Born Survivors - Section C\"\n- id: 46421\n  name: \"Born Survivors - Section E\"\n- id: 23961\n  name: \"Born Survivors - Section E (?)\"\n- id: 4247\n  name: \"*Not entierly sure...\"\n- id: 50412\n  name: \"*Not entirely sure once again, could have missed or forgotten it)\"\n- id: 26683\n  name: \"Born Survivors - Section C\"\n- id: 35208\n  name: \"Born Survivors - Section E\"\n- id: 49982\n  name: \"Born Survivors - Section C\"\n- id: 4682\n  name: \"Born Survivors - Section C (?)\"\n- id: 64645\n  name: \"Crab Warden\"\n- id: 36010\n  name: \"Crab Warden 2\"\n- id: 32032\n  name: \"Crab Warden 3\"\n- id: 2582\n  name: \"Crab Warden (end?)\"\n- id: 35581\n  name: \"Crab Warden 4?\"\n- id: 28912\n  name: \"Crab Warden? (5)\"\n- id: 6501\n  name: \"Crab Warden? (6)\"\n- id: 2937\n  name: \"Undercity Suns\"\n- id: 22297\n  name: \"Undercity Suns (Battle)\"\n- id: 5422\n  name: \"Tightrope\"\n- id: 15553\n  name: \"Maze of Scrap Metal\"\n- id: 42116\n  name: \"Maze of Scrap Metal (Battle)\"\n- id: 19686\n  name: \"The Rendezvous Point\"\n- id: 7595\n  name: \"Mako Reactor\"\n- id: 33513\n  name: \"Mako Reactor\"\n- id: 60049\n  name: \"Mako Reactor\"\n- id: 53948\n  name: \"Mako Reactor (Battle)\"\n- id: 4130\n  name: \"Anxiety (alternative mix) (cutscene)\"\n- id: 31491\n  name: \"*Cutscene song which starts with strings, before building up to something.\"\n- id: 35043\n  name: \"Let the Battles Begin\"\n- id: 20099\n  name: \"Those who fight further (I think?)\"\n- id: 22498\n  name: \"Those who fight further? (I think?)\"\n- id: 45875\n  name: \"Cutscene Song of some kind. Starts off with a drum.\"\n- id: 24093\n  name: \"A very calm version of Let the Battles Begin\"\n- id: 29868\n  name: \"A slightly less calm version of et the Battles Begin\"\n- id: 57207\n  name: \"Let the Battles Begin\"\n- id: 41001\n  name: \"Let the Battles Begin?\"\n- id: 38319\n  name: \"The song that plays when dissambling the AirBuster.\"\n- id: 33704\n  name: \"AF 95 (Battle Theme)\"\n- id: 7401\n  name: \"AF 95 (Battle Theme)\"\n- id: 11712\n  name: \"The AirBuster\"\n- id: 23063\n  name: \"The AirBuster (Phase 2)\"\n- id: 61445\n  name: \"The AirBuster (Phase 3)\"\n- id: 59705\n  name: \"The AirBuster (4)\"\n- id: 16162\n  name: \"The AirBuster (End)\"\n- id: 56245\n  name: \"Cutscene (Cloud falls)\"\n- id: 54137\n  name: \"Who Am I?\"\n- id: 37164\n  name: \"Aerith's Theme\"\n- id: 47841\n  name: \"The Turks' Theme\"\n- id: 40148\n  name: \"The Turks: Reno\"\n- id: 60003\n  name: \"The Turks: Reno?\"\n- id: 62660\n  name: \"The Turks: Reno (4)\"\n- id: 15303\n  name: \"*Not entirely sure. My guess would be escaping the church\"\n- id: 54467\n  name: \"*Custcene. Very short Shinra Theme.\"\n- id: 56135\n  name: \"Flowers Blooming in the Church\"\n- id: 25427\n  name: \"Flowers Blooming in the Church? (2)\"\n- id: 2398\n  name: \"Flowers Blooming in the Church? (3)\"\n- id: 34119\n  name: \"*Cutscene. Slow, short version of Aerith's theme\"\n- id: 8929\n  name: \"Underneath the Rotting Pizza\"\n- id: 12959\n  name: \"Underneath the Rotting Pizza (Battle)\"\n- id: 3198\n  name: \"Underneath the Rotting Pizza (Less Instrumentation)\"\n- id: 36599\n  name: \"(SILENCE)\"\n- id: 8535\n  name: \"*Cutscene. Eerie version of the Shinra Theme\"\n- id: 3593\n  name: \"Underneath the Rotting Pizza\"\n- id: 31514\n  name: \"Underneath the Rotting Pizza (Battle)\"\n- id: 42532\n  name: \"Underneath the Rotting Pizza (Less Instrumentation)\"\n- id: 21164\n  name: \"Anxiety\"\n- id: 48026\n  name: \"Anxiety?\"\n- id: 4307\n  name: \"Aerith's Theme (Clarify ver.)\"\n- id: 59859\n  name: \"Aerith's Theme (Clarify ver.)\"\n- id: 61063\n  name: \"Aerith's Theme (Clarify ver.)\"\n- id: 39196\n  name: \"Aerith's Theme (Clarify ver.)\"\n- id: 38252\n  name: \"Hollow Skies\"\n- id: 28907\n  name: \"Let the Battles Begin (field version)\"\n- id: 23702\n  name: \"Aerith's Theme (Cutscene)\"\n- id: 42349\n  name: \"*A cutscene song that incorporates Those Chosen by the Planet\"\n- id: 33771\n  name: \"Hollow Skies\"\n- id: 47035\n  name: \"The Turks' Theme (Theme ver.)\"\n- id: 62198\n  name: \"A battle theme. If I had to guess, it's when you fight Rude\"\n- id: 35352\n  name: \"A calmer song that goes into the Turk' Theme before ending.\"\n- id: 35655\n  name: \"Aerith's Theme (Clarify ver.)\"\n- id: 42292\n  name: \"Aerith's Theme - Home Again (cutscene ver.)\"\n- id: 57616\n  name: \"*A piano piece that I think incorporates the FFVII main theme?\"\n- id: 52077\n  name: \"Opening Theme (but only the beginning part) (cutscene)\"\n- id: 34198\n  name: \"Midnight Rendezvous\"\n- id: 7054\n  name: \"Oppressed People\"\n- id: 49407\n  name: \"Oppressed People\"\n- id: 21456\n  name: \"*A continous single note string\"\n- id: 35829\n  name: \"*A very slow version of Aerith's Theme. Possibly the Park scene\"\n- id: 24078\n  name: \"*Aerith's Theme\"\n- id: 48868\n  name: \"*Cutscene where you see Tifa before Wall Market \"\n- id: 46121\n  name: \"The Oppressed - Beck's Badasses\"\n- id: 19354\n  name: \"Due Recompense\"\n- id: 29037\n  name: \"Cinco de Chocobo\"\n- id: 3561\n  name: \"Cinco de Chocobo?\"\n- id: 57980\n  name: \"Stand Up\"\n- id: 19280\n  name: \"Cloud Dance Training\"\n- id: 10489\n  name: \"Stand Up - Reprise\"\n- id: 9056\n  name: \"Funk with Me\"\n- id: 45368\n  name: \"Sync or Swim\"\n- id: 42026\n  name: \"Vibe Valentino\"\n- id: 24392\n  name: \"Wall Market - Chocobo Sam\"\n- id: 7432\n  name: \"Wall Market - Madam M\"\n- id: 53750\n  name: \"Honeybee Inn\"\n- id: 44384\n  name: \"Don Corneo 1 (Entrance)\""
  },
  {
    "path": "resources/ff7r-meta-items.yml",
    "content": "name: Final Fantasy VII Remake\nitems:\n- id: 1\n  name: Potion\n  icon: Consumable\n- id: 2\n  name: Hi-Potion\n  icon: Consumable\n- id: 3\n  name: Ether\n  icon: Consumable\n- id: 4\n  name: Turbo Ether\n  icon: Consumable\n- id: 5\n  name: Elixir\n  icon: Consumable\n- id: 6\n  name: Phoenix Down\n  icon: Consumable\n- id: 7\n  name: Antidote\n  icon: Consumable\n- id: 8\n  name: Echo Mist\n  icon: Consumable\n- id: 9\n  name: Adrenaline\n  icon: Consumable\n- id: 10\n  name: Sedative\n  icon: Consumable\n- id: 11\n  name: Remedy\n  icon: Consumable\n- id: 12\n  name: Celeris\n  icon: Consumable\n- id: 13\n  name: Grenade\n  icon: Consumable\n- id: 14\n  name: Spiderweb\n  icon: Consumable\n- id: 15\n  name: Hazardous Material\n  icon: Consumable\n- id: 16\n  name: Big Bomber\n  icon: Consumable\n- id: 17\n  name: Molotov Cocktail\n  icon: Consumable\n- id: 18\n  name: Orb of Gravity\n  icon: Consumable\n- id: 19\n  name: Smelling Salts\n  icon: Consumable\n- id: 20\n  name: Gil\n  icon: Money\n- id: 21\n  name: Maiden's Kiss\n  icon: Consumable\n- id: 22\n  name: Mega-Potion\n  icon: Consumable\n- id: 31\n  name: AI Programming Core\n  icon: Consumable\n- id: 32\n  name: Fuzzy Wuzzy\n  icon: Consumable\n- id: 33\n  name: Mr. Cuddlesworth\n  icon: Consumable\n- id: 34\n  name: Armor Core\n  icon: Consumable\n- id: 50\n  name: Fire damage (general)\n  icon: Consumable\n- id: 51\n  name: Ice damage (fixed)\n  icon: Consumable\n- id: 52\n  name: Lightning damage (STR)\n  icon: Consumable\n- id: 53\n  name: Wind damage (Owner max HP percentage)\n  icon: Consumable\n- id: 54\n  name: Earth damage (HP percentage)\n  icon: Consumable\n- id: 55\n  name: Holy damage\n  icon: Consumable\n- id: 56\n  name: Dark damage\n  icon: Consumable\n- id: 57\n  name: Non-elemental damage\n  icon: Consumable\n- id: 58\n  name: Fire damage (physical)\n  icon: Consumable\n- id: 59\n  name: Ice damage (physical)\n  icon: Consumable\n- id: 60\n  name: Lightning damage (physical)\n  icon: Consumable\n- id: 61\n  name: Wind damage (physical)\n  icon: Consumable\n- id: 62\n  name: Earth damage (physical)\n  icon: Consumable\n- id: 63\n  name: Holy damage (physical)\n  icon: Consumable\n- id: 64\n  name: Dark damage (physical)\n  icon: Consumable\n- id: 65\n  name: Non-elemental damage (physical)\n  icon: Consumable\n- id: 66\n  name: 0 damage spell (general)\n  icon: Consumable\n- id: 67\n  name: 0 damage physical attack (fixed)\n  icon: Consumable\n- id: 68\n  name: Reflect\n  icon: Consumable\n- id: 69\n  name: Shield\n  icon: Consumable\n- id: 70\n  name: Pierce Reflect\n  icon: Consumable\n- id: 71\n  name: Nullify Reflect\n  icon: Consumable\n- id: 72\n  name: Pierce Shield\n  icon: Consumable\n- id: 73\n  name: Nullify Shield\n  icon: Consumable\n- id: 74\n  name: Toad\n  icon: Consumable\n- id: 75\n  name: Toad (All)\n  icon: Consumable\n- id: 76\n  name: Maiden's Kiss (All)\n  icon: Consumable\n- id: 100\n  name: Sector 5 Reactor Keycard\n  icon: KeyItem\n- id: 102\n  name: Tournament Entry Form\n  icon: KeyItem\n- id: 103\n  name: Madam M's Endorsement\n  icon: KeyItem\n- id: 104\n  name: Andrea's Endorsement\n  icon: KeyItem\n- id: 111\n  name: Shinra ID Card\n  icon: KeyItem\n- id: 115\n  name: Grappling Gun\n  icon: KeyItem\n- id: 116\n  name: Grappling Gun\n  icon: KeyItem\n- id: 117\n  name: Key to the Sewers\n  icon: KeyItem\n- id: 118\n  name: Moogle Medal\n  icon: KeyItem\n- id: 119\n  name: Sam's Coin\n  icon: KeyItem\n- id: 120\n  name: Shinra Keycard\n  icon: KeyItem\n- id: 121\n  name: Hojo's Research Lab Keycard\n  icon: KeyItem\n- id: 122\n  name: Combat Analyzer\n  icon: KeyItem\n- id: 123\n  name: Watch Security Key\n  icon: KeyItem\n- id: 124\n  name: Handmade Necklace\n  icon: KeyItem\n- id: 126\n  name: Behemoth Horn\n  icon: KeyItem\n- id: 127\n  name: Medicinal Flowers\n  icon: KeyItem\n- id: 132\n  name: Sam's Delivery Lifetime Pass\n  icon: KeyItem\n- id: 139\n  name: Madam M's Requests\n  icon: KeyItem\n- id: 140\n  name: Sam's Requests\n  icon: KeyItem\n- id: 141\n  name: The Sauce\n  icon: KeyItem\n- id: 142\n  name: Medicine Voucher\n  icon: KeyItem\n- id: 143\n  name: VIP Card\n  icon: KeyItem\n- id: 144\n  name: Yellow Flower\n  icon: KeyItem\n- id: 148\n  name: Graveyard Key\n  icon: KeyItem\n- id: 149\n  name: Guardian Angel's Calling Cards\n  icon: KeyItem\n- id: 150\n  name: Vitalabrew\n  icon: KeyItem\n- id: 151\n  name: Crimson Spike\n  icon: KeyItem\n- id: 152\n  name: Bottle of Antiemetic\n  icon: KeyItem\n- id: 153\n  name: Deodorizing Tablets\n  icon: KeyItem\n- id: 154\n  name: Packets of Antacid\n  icon: KeyItem\n- id: 155\n  name: Moogle Membership Card\n  icon: KeyItem\n- id: 156\n  name: Gysahl Greens\n  icon: KeyItem\n- id: 157\n  name: Doctor's List\n  icon: KeyItem\n- id: 158\n  name: Moogle's Mortar\n  icon: KeyItem\n- id: 159\n  name: Map to the Hideout\n  icon: KeyItem\n- id: 160\n  name: Ruby Tiara\n  icon: KeyItem\n- id: 161\n  name: Diamond Tiara\n  icon: KeyItem\n- id: 162\n  name: Emerald Tiara\n  icon: KeyItem\n- id: 163\n  name: Johnny's Wallet\n  icon: KeyItem\n- id: 164\n  name: Corneo Vault Key\n  icon: KeyItem\n- id: 165\n  name: Shinra Keycard\n  icon: KeyItem\n- id: 166\n  name: Shinra Keycard\n  icon: KeyItem\n- id: 167\n  name: Shinra Keycard\n  icon: KeyItem\n- id: 168\n  name: Shinra Executive Keycard\n  icon: KeyItem\n- id: 169\n  name: Letter from the Guardian Angel\n  icon: KeyItem\n- id: 170\n  name: Andrea's Earrings\n  icon: KeyItem\n- id: 171\n  name: Real Calling Card\n  icon: KeyItem\n- id: 172\n  name: Fake Calling Card\n  icon: KeyItem\n- id: 173\n  name: Corneo Vault Note\n  icon: KeyItem\n- id: 174\n  name: Condor Coin\n  icon: KeyItem\n- id: 175\n  name: Da-chao Beans\n  icon: KeyItem\n- id: 176\n  name: Interplate ID Card\n  icon: KeyItem\n- id: 177\n  name: Shinra Employee ID Card\n  icon: KeyItem\n- id: 178\n  name: The Happy Turtle Newsletter 1\n  icon: KeyItem\n- id: 179\n  name: The Happy Turtle Newsletter 2\n  icon: KeyItem\n- id: 180\n  name: The Happy Turtle Newsletter 3\n  icon: KeyItem\n- id: 181\n  name: The Happy Turtle Newsletter 4\n  icon: KeyItem\n- id: 182\n  name: The Happy Turtle Newsletter 5\n  icon: KeyItem\n- id: 183\n  name: The Happy Turtle Newsletter 6\n  icon: KeyItem\n- id: 184\n  name: List of Flyer Clues\n  icon: KeyItem\n- id: 185\n  name: Note from Zhijie\n  icon: KeyItem\n- id: 256\n  name: 1. The Prelude (hidden)\n  icon: Track\n- id: 257\n  name: 1. The Prelude\n  icon: Track\n- id: 258\n  name: 4. Barret's Theme\n  icon: Track\n- id: 260\n  name: 27. Hip Hop de Chocobo\n  icon: Track\n- id: 261\n  name: 5. Lurking in the Darkness\n  icon: Track\n- id: 262\n  name: 28. Stamp\n  icon: Track\n- id: 264\n  name: 18. Electric de Chocobo\n  icon: Track\n- id: 265\n  name: 2. Bombing Mission\n  icon: Track\n- id: 266\n  name: 21. Cait Sith's Theme\n  icon: Track\n- id: 267\n  name: 23. Descendant of Shinobi\n  icon: Track\n- id: 268\n  name: 20. Gold Saucer\n  icon: Track\n- id: 270\n  name: 19. Costa del Sol\n  icon: Track\n- id: 272\n  name: 10. Honeybee Inn\n  icon: Track\n- id: 273\n  name: 17. Farm Boy\n  icon: Track\n- id: 274\n  name: 12. Fight On!\n  icon: Track\n- id: 275\n  name: 11. Don of the Slums\n  icon: Track\n- id: 276\n  name: 9. The Oppressed\n  icon: Track\n- id: 278\n  name: 6. Let the Battles Begin!\n  icon: Track\n- id: 282\n  name: 15. On Our Way\n  icon: Track\n- id: 283\n  name: 14. Main Theme of FFVII\n  icon: Track\n- id: 284\n  name: 30. Stand Up\n  icon: Track\n- id: 285\n  name: 16. Good Night, Until Tomorrow\n  icon: Track\n- id: 286\n  name: 24. Wutai\n  icon: Track\n- id: 287\n  name: 7. Turks' Theme\n  icon: Track\n- id: 288\n  name: 13. The Chase\n  icon: Track\n- id: 289\n  name: 22. Cosmo Canyon\n  icon: Track\n- id: 292\n  name: 29. The Midgar Blues\n  icon: Track\n- id: 295\n  name: 26. Let the Battles Begin! -REMAKE-\n  icon: Track\n- id: 300\n  name: 3. Tifa's Theme\n  icon: Track\n- id: 301\n  name: 25. Tango of Tears\n  icon: Track\n- id: 302\n  name: 8. Under the Rotting Pizza\n  icon: Track\n- id: 303\n  name: 31. Scarlet's Theme\n  icon: Track\n- id: 316\n  name: The Art of Swordplay Vol. I\n  icon: Recipe\n- id: 317\n  name: The Art of Swordplay Vol. II\n  icon: Recipe\n- id: 318\n  name: The Art of Swordplay Vol. III\n  icon: Recipe\n- id: 319\n  name: The Art of Swordplay Vol. IV\n  icon: Recipe\n- id: 320\n  name: The Art of Swordplay Vol. V\n  icon: Recipe\n- id: 321\n  name: The Art of Swordplay Vol. VI\n  icon: Recipe\n- id: 322\n  name: The Art of Swordplay Vol. VII\n  icon: Recipe\n- id: 323\n  name: The Art of Swordplay Vol. VIII\n  icon: Recipe\n- id: 324\n  name: The Art of Swordplay Vol. IX\n  icon: Recipe\n- id: 325\n  name: The Art of Swordplay Vol. X\n  icon: Recipe\n- id: 326\n  name: The Art of Swordplay Vol. XI\n  icon: Recipe\n- id: 327\n  name: The Art of Swordplay Vol. XII\n  icon: Recipe\n- id: 328\n  name: The Art of Swordplay Vol. XIII\n  icon: Recipe\n- id: 329\n  name: The Art of Swordplay Vol. XIV\n  icon: Recipe\n- id: 331\n  name: Sharpshooter's Companion Vol. I\n  icon: Recipe\n- id: 332\n  name: Sharpshooter's Companion Vol. II\n  icon: Recipe\n- id: 333\n  name: Sharpshooter's Companion Vol. III\n  icon: Recipe\n- id: 334\n  name: Sharpshooter's Companion Vol. IV\n  icon: Recipe\n- id: 335\n  name: Sharpshooter's Companion Vol. V\n  icon: Recipe\n- id: 336\n  name: Sharpshooter's Companion Vol. VI\n  icon: Recipe\n- id: 337\n  name: Sharpshooter's Companion Vol. VII\n  icon: Recipe\n- id: 338\n  name: Sharpshooter's Companion Vol. VIII\n  icon: Recipe\n- id: 339\n  name: Sharpshooter's Companion Vol. IX\n  icon: Recipe\n- id: 340\n  name: Sharpshooter's Companion Vol. X\n  icon: Recipe\n- id: 341\n  name: Sharpshooter's Companion Vol. XI\n  icon: Recipe\n- id: 342\n  name: Sharpshooter's Companion Vol. XII\n  icon: Recipe\n- id: 343\n  name: Sharpshooter's Companion Vol. XIII\n  icon: Recipe\n- id: 344\n  name: Sharpshooter's Companion Vol. XIV\n  icon: Recipe\n- id: 346\n  name: Way of the Fist Vol. I\n  icon: Recipe\n- id: 347\n  name: Way of the Fist Vol. II\n  icon: Recipe\n- id: 348\n  name: Way of the Fist Vol. III\n  icon: Recipe\n- id: 349\n  name: Way of the Fist Vol. IV\n  icon: Recipe\n- id: 350\n  name: Way of the Fist Vol. V\n  icon: Recipe\n- id: 351\n  name: Way of the Fist Vol. VI\n  icon: Recipe\n- id: 352\n  name: Way of the Fist Vol. VII\n  icon: Recipe\n- id: 353\n  name: Way of the Fist Vol. VIII\n  icon: Recipe\n- id: 354\n  name: Way of the Fist Vol. IX\n  icon: Recipe\n- id: 355\n  name: Way of the Fist Vol. X\n  icon: Recipe\n- id: 356\n  name: Way of the Fist Vol. XI\n  icon: Recipe\n- id: 357\n  name: Way of the Fist Vol. XII\n  icon: Recipe\n- id: 358\n  name: Way of the Fist Vol. XIII\n  icon: Recipe\n- id: 359\n  name: Way of the Fist Vol. XIV\n  icon: Recipe\n- id: 361\n  name: Telluric Scriptures Vol. I\n  icon: Recipe\n- id: 362\n  name: Telluric Scriptures Vol. II\n  icon: Recipe\n- id: 363\n  name: Telluric Scriptures Vol. III\n  icon: Recipe\n- id: 364\n  name: Telluric Scriptures Vol. IV\n  icon: Recipe\n- id: 365\n  name: Telluric Scriptures Vol. V\n  icon: Recipe\n- id: 366\n  name: Telluric Scriptures Vol. VI\n  icon: Recipe\n- id: 367\n  name: Telluric Scriptures Vol. VII\n  icon: Recipe\n- id: 368\n  name: Telluric Scriptures Vol. VIII\n  icon: Recipe\n- id: 369\n  name: Telluric Scriptures Vol. IX\n  icon: Recipe\n- id: 370\n  name: Telluric Scriptures Vol. X\n  icon: Recipe\n- id: 371\n  name: Telluric Scriptures Vol. XI\n  icon: Recipe\n- id: 372\n  name: Telluric Scriptures Vol. XII\n  icon: Recipe\n- id: 373\n  name: Telluric Scriptures Vol. XIII\n  icon: Recipe\n- id: 374\n  name: Telluric Scriptures Vol. XIV\n  icon: Recipe\n- id: 380\n  name: \"Legacy: Ascension\"\n  icon: Recipe\n- id: 381\n  name: \"Legacy: Catastrophe\"\n  icon: Recipe\n- id: 382\n  name: \"Legacy: Dolphin Flurry\"\n  icon: Recipe\n- id: 383\n  name: \"Legacy: Planet's Protection\"\n  icon: Recipe\n- id: 500\n  name: Secrets of the Ninja Vol. I\n  icon: Recipe\n- id: 501\n  name: Secrets of the Ninja Vol. II\n  icon: Recipe\n- id: 502\n  name: Secrets of the Ninja Vol. III\n  icon: Recipe\n- id: 503\n  name: Secrets of the Ninja Vol. IV\n  icon: Recipe\n- id: 504\n  name: Secrets of the Ninja Vol. V\n  icon: Recipe\n- id: 505\n  name: Secrets of the Ninja Vol. VI\n  icon: Recipe\n- id: 506\n  name: Secrets of the Ninja Vol. VII\n  icon: Recipe\n- id: 507\n  name: Secrets of the Ninja Vol. VIII\n  icon: Recipe\n- id: 508\n  name: Secrets of the Ninja Vol. IX\n  icon: Recipe\n- id: 509\n  name: Secrets of the Ninja Vol. X\n  icon: Recipe\n- id: 510\n  name: Secrets of the Ninja Vol. XI\n  icon: Recipe\n- id: 511\n  name: Secrets of the Ninja Vol. XII\n  icon: Recipe\n- id: 512\n  name: Secrets of the Ninja Vol. XIII\n  icon: Recipe\n- id: 513\n  name: Secrets of the Ninja Vol. XIV\n  icon: Recipe\n- id: 514\n  name: Secrets of the Staff Vol. I\n  icon: Recipe\n- id: 515\n  name: Secrets of the Staff Vol. II\n  icon: Recipe\n- id: 516\n  name: Secrets of the Staff Vol. III\n  icon: Recipe\n- id: 517\n  name: Secrets of the Staff Vol. IV\n  icon: Recipe\n- id: 518\n  name: Secrets of the Staff Vol. V\n  icon: Recipe\n- id: 519\n  name: Secrets of the Staff Vol. VI\n  icon: Recipe\n- id: 520\n  name: Secrets of the Staff Vol. VII\n  icon: Recipe\n- id: 521\n  name: Secrets of the Staff Vol. VIII\n  icon: Recipe\n- id: 522\n  name: Secrets of the Staff Vol. IX\n  icon: Recipe\n- id: 523\n  name: Secrets of the Staff Vol. X\n  icon: Recipe\n- id: 524\n  name: Secrets of the Staff Vol. XI\n  icon: Recipe\n- id: 525\n  name: Secrets of the Staff Vol. XII\n  icon: Recipe\n- id: 526\n  name: Secrets of the Staff Vol. XIII\n  icon: Recipe\n- id: 527\n  name: Secrets of the Staff Vol. XIV\n  icon: Recipe\n- id: 528\n  name: Starter Board\n  icon: Recipe\n- id: 529\n  name: Sorcerer Board I\n  icon: Recipe\n- id: 530\n  name: Battalion Board I\n  icon: Recipe\n- id: 531\n  name: Assassin Board I\n  icon: Recipe\n- id: 532\n  name: Sorcerer Board II\n  icon: Recipe\n- id: 533\n  name: Battalion Board II\n  icon: Recipe\n- id: 534\n  name: Assassin Board II\n  icon: Recipe\n- id: 535\n  name: Assassin Board III\n  icon: Recipe\n- id: 536\n  name: Battalion Board III\n  icon: Recipe\n- id: 537\n  name: Grandmaster Board\n  icon: Recipe\n- id: 538\n  name: Security Officer (Vanguard)\n  icon: Recipe\n- id: 539\n  name: Elite Security Officer (Vanguard)\n  icon: Recipe\n- id: 540\n  name: Helitrooper (Vanguard)\n  icon: Recipe\n- id: 541\n  name: Elite Helitrooper (Vanguard)\n  icon: Recipe\n- id: 542\n  name: Shock Trooper (Vanguard)\n  icon: Recipe\n- id: 543\n  name: Cutter (Vanguard)\n  icon: Recipe\n- id: 544\n  name: Guard Dog (Vanguard)\n  icon: Recipe\n- id: 545\n  name: Security Officer Barracks (Vanguard)\n  icon: Recipe\n- id: 546\n  name: Grenadier (Ranged)\n  icon: Recipe\n- id: 547\n  name: Elite Grenadier (Ranged)\n  icon: Recipe\n- id: 548\n  name: Elite Shock Trooper (Ranged)\n  icon: Recipe\n- id: 549\n  name: Sweeper (Ranged)\n  icon: Recipe\n- id: 550\n  name: Slug-Ray (Ranged)\n  icon: Recipe\n- id: 551\n  name: Monodrive (Ranged)\n  icon: Recipe\n- id: 552\n  name: Sentry Ray (Ranged)\n  icon: Recipe\n- id: 553\n  name: Missile Launcher (Ranged)\n  icon: Recipe\n- id: 554\n  name: Grenadier Barracks (Ranged)\n  icon: Recipe\n- id: 555\n  name: Slug-Ray Facility (Ranged)\n  icon: Recipe\n- id: 556\n  name: Riot Trooper (Defense)\n  icon: Recipe\n- id: 557\n  name: Elite Riot Trooper (Defense)\n  icon: Recipe\n- id: 558\n  name: Blast-Ray (Defense)\n  icon: Recipe\n- id: 559\n  name: Armored Shock Trooper (Defense)\n  icon: Recipe\n- id: 560\n  name: Helicopter (Defense)\n  icon: Recipe\n- id: 561\n  name: Sentry Gun Prototype (Defense)\n  icon: Recipe\n- id: 562\n  name: Sentry Gun (Defense)\n  icon: Recipe\n- id: 563\n  name: Sledgeworm (Defense)\n  icon: Recipe\n- id: 564\n  name: M.O.T.H. Unit (Defense)\n  icon: Recipe\n- id: 565\n  name: Riot Trooper Barracks (Defense)\n  icon: Recipe\n- id: 1001\n  name: Buster Sword\n  icon: WeaponCloud\n- id: 1002\n  name: Iron Blade\n  icon: WeaponCloud\n- id: 1003\n  name: Hardedge\n  icon: WeaponCloud\n- id: 1004\n  name: Mythril Saber\n  icon: WeaponCloud\n- id: 1005\n  name: Twin Stinger\n  icon: WeaponCloud\n- id: 1006\n  name: Nail Bat\n  icon: WeaponCloud\n- id: 1871\n  name: Steel Reaper\n  icon: WeaponYuffie\n- id: 2001\n  name: Gatling Gun\n  icon: WeaponBarret\n- id: 2002\n  name: Light Machine Gun\n  icon: WeaponBarret\n- id: 2003\n  name: Steel Pincers\n  icon: WeaponBarret\n- id: 2004\n  name: Big Bertha\n  icon: WeaponBarret\n- id: 2005\n  name: EKG Cannon\n  icon: WeaponBarret\n- id: 2006\n  name: Wrecking Ball\n  icon: WeaponBarret\n- id: 3001\n  name: Leather Gloves\n  icon: WeaponTifa\n- id: 3002\n  name: Metal Knuckles\n  icon: WeaponTifa\n- id: 3003\n  name: Feathered Gloves\n  icon: WeaponTifa\n- id: 3004\n  name: Mythril Claws\n  icon: WeaponTifa\n- id: 3005\n  name: Purple Pain\n  icon: WeaponTifa\n- id: 3006\n  name: Sonic Strikers\n  icon: WeaponTifa\n- id: 3423\n  name: 4-Point Shuriken\n  icon: WeaponYuffie\n- id: 3431\n  name: Indurate Staff\n  icon: WeaponSonos\n- id: 3686\n  name: $Item_E_ACC_7008\n  icon: Weapon\n- id: 3934\n  name: Cacstar\n  icon: WeaponYuffie\n- id: 4001\n  name: Guard Stick\n  icon: WeaponAerith\n- id: 4002\n  name: Silver Staff\n  icon: WeaponAerith\n- id: 4003\n  name: Bladed Staff\n  icon: WeaponAerith\n- id: 4004\n  name: Mythril Rod\n  icon: WeaponAerith\n- id: 4005\n  name: Reinforced Staff\n  icon: WeaponAerith\n- id: 4006\n  name: Arcane Scepter\n  icon: WeaponAerith\n- id: 5001\n  name: Mythril Collar\n  icon: Weapon\n- id: 6001\n  name: $Item_W_FLG_0001\n  icon: Weapon\n- id: 6608\n  name: Boomerang\n  icon: WeaponYuffie\n- id: 8181\n  name: Marshalist's Staff\n  icon: WeaponSonos\n- id: 9001\n  name: Bronze Bangle\n  icon: Armor\n- id: 9002\n  name: Iron Bangle\n  icon: Armor\n- id: 9003\n  name: Titanium Bangle\n  icon: Armor\n- id: 9004\n  name: Gothic Bangle\n  icon: Armor\n- id: 9005\n  name: Cog Bangle\n  icon: Armor\n- id: 9006\n  name: Chain Bangle\n  icon: Armor\n- id: 9007\n  name: Leather Bracer\n  icon: Armor\n- id: 9008\n  name: Studded Bracer\n  icon: Armor\n- id: 9009\n  name: Heavy-Duty Bracer\n  icon: Armor\n- id: 9010\n  name: Supreme Bracer\n  icon: Armor\n- id: 9011\n  name: Iron Maiden\n  icon: Armor\n- id: 9012\n  name: Mesmeric Armlet\n  icon: Armor\n- id: 9013\n  name: Mythril Armlet\n  icon: Armor\n- id: 9014\n  name: Sorcerer's Armlet\n  icon: Armor\n- id: 9015\n  name: Rune Armlet\n  icon: Armor\n- id: 9016\n  name: Astral Cuff\n  icon: Armor\n- id: 9017\n  name: Power Wristguards\n  icon: Accessory\n- id: 9018\n  name: Bulletproof Vest\n  icon: Accessory\n- id: 9019\n  name: Earrings\n  icon: Accessory\n- id: 9020\n  name: Talisman\n  icon: Accessory\n- id: 9021\n  name: Headband\n  icon: Accessory\n- id: 9022\n  name: Star Pendant\n  icon: Accessory\n- id: 9023\n  name: Fury Ring\n  icon: Accessory\n- id: 9024\n  name: Revival Earrings\n  icon: Accessory\n- id: 9025\n  name: Whistlewind Scarf\n  icon: Accessory\n- id: 9026\n  name: Mythical Amulet\n  icon: Accessory\n- id: 9027\n  name: Healing Carcanet\n  icon: Accessory\n- id: 9028\n  name: Clarity Pendant\n  icon: Accessory\n- id: 9029\n  name: Transference Module\n  icon: Accessory\n- id: 9030\n  name: Spectral Cogwheel\n  icon: Accessory\n- id: 9031\n  name: Moogle's Amulet\n  icon: Accessory\n- id: 9032\n  name: Enfeeblement Ring\n  icon: Accessory\n- id: 9033\n  name: Crescent Moon Charm\n  icon: Accessory\n- id: 9034\n  name: Champion Belt\n  icon: Accessory\n- id: 9035\n  name: Protective Boots\n  icon: Accessory\n- id: 9036\n  name: Circlet\n  icon: Accessory\n- id: 9037\n  name: Tarot Cards\n  icon: Accessory\n- id: 9038\n  name: Otherworldly Crystal\n  icon: Accessory\n- id: 9039\n  name: Salvation Badge\n  icon: Accessory\n- id: 9040\n  name: Star Bracelet\n  icon: Accessory\n- id: 9041\n  name: Caliginous Bracelet\n  icon: Accessory\n- id: 9042\n  name: Magician's Bracelet\n  icon: Accessory\n- id: 9043\n  name: Geometric Bracelet\n  icon: Accessory\n- id: 9044\n  name: Force Bracelet\n  icon: Accessory\n- id: 9045\n  name: Seraphic Earrings\n  icon: Accessory\n- id: 9050\n  name: Enchanted Ring\n  icon: Accessory\n- id: 9051\n  name: Supernatural Wristguards\n  icon: Accessory\n- id: 9052\n  name: Survival Vest\n  icon: Accessory\n- id: 9053\n  name: Platinum Earrings\n  icon: Accessory\n- id: 9054\n  name: Timeworn Talisman\n  icon: Accessory\n- id: 9055\n  name: Midgar Bangle\n  icon: Armor\n- id: 9056\n  name: Shinra Bangle\n  icon: Armor\n- id: 9057\n  name: Corneo Armlet\n  icon: Armor\n- id: 9058\n  name: Superstar Belt\n  icon: Accessory\n- id: 9059\n  name: Mako Crystal\n  icon: Accessory\n- id: 9060\n  name: Götterdämmerung\n  icon: Accessory\n- id: 9061\n  name: Ninja Armlet\n  icon: Accessory\n- id: 9062\n  name: Chthonian Armlet\n  icon: Accessory\n- id: 9063\n  name: Volant Armlet\n  icon: Accessory\n- id: 9064\n  name: Firebird Armlet\n  icon: Accessory\n- id: 9065\n  name: Kindred Cord\n  icon: Accessory\n- id: 9066\n  name: Ribbon\n  icon: Accessory\n- id: 9067\n  name: Gozu Drive\n  icon: Accessory\n- id: 9068\n  name: Mezu Drive\n  icon: Accessory\n- id: 9069\n  name: $Item_E_ACC_7001\n  icon: Accessory\n- id: 9070\n  name: $Item_E_ACC_7002\n  icon: Accessory\n- id: 9071\n  name: $Item_E_ACC_7003\n  icon: Accessory\n- id: 9072\n  name: $Item_E_ACC_7004\n  icon: Accessory\n- id: 9073\n  name: $Item_E_ACC_7005\n  icon: Accessory\n- id: 9074\n  name: $Item_E_ACC_7006\n  icon: Accessory\n- id: 9075\n  name: $Item_E_ACC_7007\n  icon: Accessory\n- id: 9076\n  name: $Item_E_ARM_7001\n  icon: Accessory\n- id: 9579\n  name: Djinn Staff\n  icon: WeaponSonos\n- id: 10001\n  name: Healing Materia\n  icon: MagicMateria\n- id: 10002\n  name: Cleansing Materia\n  icon: MagicMateria\n- id: 10003\n  name: Revival Materia\n  icon: MagicMateria\n- id: 10004\n  name: Fire Materia\n  icon: MagicMateria\n- id: 10005\n  name: Ice Materia\n  icon: MagicMateria\n- id: 10006\n  name: Lightning Materia\n  icon: MagicMateria\n- id: 10007\n  name: Wind Materia\n  icon: MagicMateria\n- id: 10008\n  name: Poison Materia\n  icon: MagicMateria\n- id: 10009\n  name: Binding Materia\n  icon: MagicMateria\n- id: 10010\n  name: Time Materia\n  icon: MagicMateria\n- id: 10011\n  name: Barrier Materia\n  icon: MagicMateria\n- id: 10012\n  name: Subversion Materia\n  icon: MagicMateria\n- id: 11001\n  name: Magnify Materia\n  icon: SupportMateria\n- id: 11002\n  name: Elemental Materia\n  icon: SupportMateria\n- id: 11003\n  name: Warding Materia\n  icon: SupportMateria\n- id: 11004\n  name: HP Absorption Materia\n  icon: SupportMateria\n- id: 11005\n  name: MP Absorption Materia\n  icon: SupportMateria\n- id: 11006\n  name: Synergy Materia\n  icon: SupportMateria\n- id: 11007\n  name: AP Up Materia\n  icon: SupportMateria\n- id: 11008\n  name: Ninja Cannonball Materia\n  icon: CommandMateria\n- id: 12001\n  name: Steal Materia\n  icon: CommandMateria\n- id: 12002\n  name: Assess Materia\n  icon: CommandMateria\n- id: 12003\n  name: Enemy Skill Materia\n  icon: CommandMateria\n- id: 12004\n  name: Chakra Materia\n  icon: CommandMateria\n- id: 12005\n  name: Prayer Materia\n  icon: CommandMateria\n- id: 12006\n  name: ATB Boost Materia\n  icon: CommandMateria\n- id: 13001\n  name: HP Up Materia\n  icon: CompleteMateria\n- id: 13002\n  name: MP Up Materia\n  icon: CompleteMateria\n- id: 13003\n  name: Magic Up Materia\n  icon: CompleteMateria\n- id: 13004\n  name: Luck Up Materia\n  icon: CompleteMateria\n- id: 13005\n  name: Gil Up Materia\n  icon: CompleteMateria\n- id: 13006\n  name: EXP Up Materia\n  icon: CompleteMateria\n- id: 13007\n  name: Item Master Materia\n  icon: CompleteMateria\n- id: 13008\n  name: ATB Stagger Materia\n  icon: CompleteMateria\n- id: 13009\n  name: First Strike Materia\n  icon: CompleteMateria\n- id: 13010\n  name: Steadfast Block Materia\n  icon: CompleteMateria\n- id: 13011\n  name: Skill Master Materia\n  icon: CompleteMateria\n- id: 13012\n  name: Deadly Dodge Materia\n  icon: CompleteMateria\n- id: 13013\n  name: Parry Materia\n  icon: CompleteMateria\n- id: 13014\n  name: ATB Assist Materia\n  icon: CompleteMateria\n- id: 13015\n  name: Auto-Cure Materia\n  icon: CompleteMateria\n- id: 13016\n  name: Provoke Materia\n  icon: CompleteMateria\n- id: 13017\n  name: Pedometer Materia\n  icon: CompleteMateria\n- id: 13018\n  name: Refocus Materia\n  icon: CompleteMateria\n- id: 14001\n  name: Chocobo & Moogle Materia\n  icon: SummonMateria\n- id: 14002\n  name: Shiva Materia\n  icon: SummonMateria\n- id: 14003\n  name: Ifrit Materia\n  icon: SummonMateria\n- id: 14004\n  name: Leviathan Materia\n  icon: SummonMateria\n- id: 14005\n  name: Bahamut Materia\n  icon: SummonMateria\n- id: 14006\n  name: Fat Chocobo Materia\n  icon: SummonMateria\n- id: 14007\n  name: Carbuncle Materia\n  icon: SummonMateria\n- id: 14008\n  name: Cactuar Materia\n  icon: SummonMateria\n- id: 14009\n  name: Chocobo Chick Materia\n  icon: SummonMateria\n- id: 14010\n  name: Ramuh Materia\n  icon: SummonMateria\n"
  },
  {
    "path": "resources/ff7r-meta-locations.yml",
    "content": "name: Final Fantasy VII Remake\nlocations:\n- chapter: 4\n  oob: false\n  description: \"Jessie's House (Cloud, you dumb)\"\n  x: 2388.093\n  y: 11517.67\n  z: -5.506325\n- chapter: 4\n  oob: true\n  description: \"Past invisible wall by Jessie's House\"\n  x: -58993.77\n  y: 14327.95\n  z: 4.136047\n- chapter: 4\n  oob: false\n  description: \"Inside Jessie's Mother House\"\n  x: -68213.29\n  y: 15510.76\n  z: -8.146446\n  z: 4.136047\n- chapter: 4\n  oob: true\n  description: \"Shinra's Warehouse\"\n  x: -68213.29\n  y: 15510.76\n  z: 308.146\n- chapter: 4\n  oob: true\n  description: \"Shinra's Warehouse (#2)\"\n  x: -38475.54\n  y: 19965.76\n  z: 554.642\n  z: 308.146\n- chapter: 7\n  oob: true\n  description: \"Television Set\"\n  x: 0\n  y: -10000\n  z: 0\n  z: 308.146\n- chapter: 9\n  oob: true\n  description: \"Colliseum Box & Steps\"\n  x: 44326.51\n  y: 4669.091\n  z: -4716.46\n- chapter: 9\n  oob: true\n  description: \"Colliseum Battle Doors\"\n  x: 44231.576\n  y: 1744.123\n  z: -6116\n- chapter: 14\n  oob: true\n  description: \"Human Experiments Room\"\n  x: 5277.522\n  y: 1469.409\n  z: -1733\n- chapter: 16\n  oob: true\n  description: \"Shinra Building Entrance\"\n  x: 27308.03\n  y: -114.6156\n  z: -29949.7"
  }
]