ReSharper 2020.Something modified the var style again so that arrays of built-in types also count as built-in types, meaning the type should always be explicit.
- Split `FileSystemProxyImpl` into ~8 different classes.
- Add `sf` IPC interfaces to `fssrv` and use them where appropriate
- Make `IFileSystemProxy` method signatures more accurate
- Implement LR client
- Flesh out and fully implement many `fssrv` methods
- In general, make new and previously-existing code in `fssrv` more accurate to FS 10.0.0
Update package1 reader and key set handlers
- Support all Erista and Mariko package1 formats
- Rewrite KeySet class to use less memory. Key members are now byte spans instead of arrays, and the entire key set is memcpy-able
- Allow putting prod and dev keys in the same file
- Allow embedding keys in LibHac at build time
- Rewrite the key parser to be faster and use less memory
- Update KEYS.md
Renames the IsEmpty() functions that check if an array is all zeros. This helps avoid confusion because Span has an IsEmpty property that returns true if the span's length is 0.
The change actually revealed a tiny bug in KeyDerivation where the property was accidentally used instead of the function.
Embedded keys are generated at build-time from the IncludedKeys.txt file under the build directory.
A separate codegen build project was created because generating the embedded keys requires the same LibHac that is being built.
_buildCodeGen.csproj is located under CodeGen because NUKE doesn't like having two build projects in the same directory.