<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Liam</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Liam"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Liam"/>
	<updated>2026-04-17T19:11:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Filesystem_services&amp;diff=12621</id>
		<title>Filesystem services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Filesystem_services&amp;diff=12621"/>
		<updated>2023-12-11T23:22:55Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= fsp-ldr =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IFileSystemProxyForLoader&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenCodeFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#IsArchivedProgram]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [4.0.0+] [[#SetCurrentProcess]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenCodeFileSystem ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] This now takes an additional type-0x1A output buffer.&lt;br /&gt;
&lt;br /&gt;
[16.0.0+] This now takes an additional input [[#ContentAttributes]].&lt;br /&gt;
&lt;br /&gt;
[17.0.0+] This now takes a type-0x6 output buffer instead of a type-0x1A output buffer.&lt;br /&gt;
&lt;br /&gt;
== IsArchivedProgram ==&lt;br /&gt;
Takes an input u64 ProcessId. Returns a bool (1 if the process id&#039;s [[#FspPath]] ends in &amp;quot;.nca&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== SetCurrentProcess ==&lt;br /&gt;
Takes an input u64 ProcessId. No output.&lt;br /&gt;
&lt;br /&gt;
= fsp-pr =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IProgramRegistry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#RegisterProgram]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#UnregisterProgram]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [4.0.0+] [[#SetCurrentProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 256 || [1.0.0-9.2.0] [[#SetEnabledProgramVerification]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RegisterProgram ==&lt;br /&gt;
Takes a [[NCM_services#StorageId|StorageId]], an u64 ProcessId, a [[NCM_services#ProgramId|ProgramId]], a 0x1C type-A buffer for the [[NPDM#FS_Access_Header| FS Access Header]], and a 0x2C type-A buffer for the [[NPDM#FS_Access_Control| FS Access Control]]&lt;br /&gt;
&lt;br /&gt;
Final FS permissions are stored as (ACI0_perms &amp;amp; ACID_perms). Will panic(svcBreak) when buffer sizes from ipc-rawdata are invalid.&lt;br /&gt;
&lt;br /&gt;
== UnregisterProgram ==&lt;br /&gt;
Takes a pid. Removes registered FS permissions for that PID.&lt;br /&gt;
&lt;br /&gt;
== SetEnabledProgramVerification ==&lt;br /&gt;
Seems to sets a global flag to inputval &amp;amp; 1.&lt;br /&gt;
&lt;br /&gt;
When the flag is zero, it will set ret=0 instead of ret={error} when verifying the fixed-key [[NPDM]] ACID signature fails. This also skips verifying the [[NCA_Format|NCA Header]] signature using the ACID key. Note that if verifying the fixed-key ACID signature is successful, and verifying the ACID-key NCA header signature fails, it will throw an error and abort.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] This was moved to [[Loader_services|Loader]].&lt;br /&gt;
&lt;br /&gt;
= fsp-srv =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IFileSystemProxy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [1.0.0] [[#OpenFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#SetCurrentProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || OpenDataFileSystemByCurrentProcess&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [2.0.0+] [[#OpenFileSystemWithPatch]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [16.0.0+] [[#OpenFileSystemWithIdObsolete]] ([2.0.0-15.0.1] OpenFileSystemWithId)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [3.0.0+] OpenDataFileSystemByProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [16.0.0+] [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || InvalidateBisCache&lt;br /&gt;
|-&lt;br /&gt;
| 17 || OpenHostFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 18 || OpenSdCardFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [2.0.0+] FormatSdCardFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#DeleteSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#CreateSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#CreateSaveDataFileSystemBySystemSaveDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || RegisterSaveDataFileSystemAtomicDeletion&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [2.0.0+] DeleteSaveDataFileSystemBySaveDataSpaceId&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [2.0.0+] FormatSdCardDryRun&lt;br /&gt;
|-&lt;br /&gt;
| 27 || [2.0.0+] IsExFatSupported&lt;br /&gt;
|-&lt;br /&gt;
| 28 || [4.0.0+] DeleteSaveDataFileSystemBySaveDataAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [[#OpenGameCardStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [[#OpenGameCardFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [3.0.0+] ExtendSaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 33 || [5.0.0+] DeleteCacheStorage&lt;br /&gt;
|-&lt;br /&gt;
| 34 || [5.0.0+] GetCacheStorageSize&lt;br /&gt;
|-&lt;br /&gt;
| 35 || [6.0.0+] [[#CreateSaveDataFileSystemWithHashSalt]]&lt;br /&gt;
|-&lt;br /&gt;
| 36 || [9.0.0+] OpenHostFileSystemWithOption&lt;br /&gt;
|-&lt;br /&gt;
| 37 || [14.0.0+] CreateSaveDataFileSystemWithCreationInfo2&lt;br /&gt;
|-&lt;br /&gt;
| 51 || [[#OpenSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 52 || [[#OpenSaveDataFileSystemBySystemSaveDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 53 || [2.0.0+] [[#OpenReadOnlySaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 57 || [3.0.0+] [[#ReadSaveDataFileSystemExtraDataBySaveDataSpaceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 58 || [[#ReadSaveDataFileSystemExtraData]]&lt;br /&gt;
|-&lt;br /&gt;
| 59 || [2.0.0+] WriteSaveDataFileSystemExtraData&lt;br /&gt;
|-&lt;br /&gt;
| 60 || [[#OpenSaveDataInfoReader]]&lt;br /&gt;
|-&lt;br /&gt;
| 61 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 62 || [5.0.0+] OpenSaveDataInfoReaderOnlyCacheStorage&lt;br /&gt;
|-&lt;br /&gt;
| 64 || [5.0.0+] OpenSaveDataInternalStorageFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 65 || [5.0.0+] UpdateSaveDataMacForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 66 || [5.0.0+] WriteSaveDataFileSystemExtraDataWithMask&lt;br /&gt;
|-&lt;br /&gt;
| 67 || [6.0.0+] [[#FindSaveDataWithFilter]]&lt;br /&gt;
|-&lt;br /&gt;
| 68 || [6.0.0+] [[#OpenSaveDataInfoReaderWithFilter]]&lt;br /&gt;
|-&lt;br /&gt;
| 69 || [8.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 70 || [8.0.0+] WriteSaveDataFileSystemExtraDataWithMaskBySaveDataAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 71 || [10.0.0+] ReadSaveDataFileSystemExtraDataWithMaskBySaveDataAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 80 || OpenSaveDataMetaFile&lt;br /&gt;
|-&lt;br /&gt;
| 81 || [4.0.0+] [[#OpenSaveDataTransferManager]]&lt;br /&gt;
|-&lt;br /&gt;
| 82 || [5.0.0+] [[#OpenSaveDataTransferManagerVersion2]]&lt;br /&gt;
|-&lt;br /&gt;
| 83 || [6.0.0+] [[#OpenSaveDataTransferProhibiter]]&lt;br /&gt;
|-&lt;br /&gt;
| 84 || [6.0.0+] [[#ListAccessibleSaveDataOwnerId]]&lt;br /&gt;
|-&lt;br /&gt;
| 85 || [9.0.0+] [[#OpenSaveDataTransferManagerForSaveDataRepair]]&lt;br /&gt;
|-&lt;br /&gt;
| 86 || [10.0.0+] [[#OpenSaveDataMover]]&lt;br /&gt;
|-&lt;br /&gt;
| 87 || [11.0.0+] [[#OpenSaveDataTransferManagerForRepair]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || OpenImageDirectoryFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [11.0.0+] OpenBaseFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [12.0.0+] FormatBaseFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 110 || [[#OpenContentStorageFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 120 || [6.0.0-9.2.0] [[#OpenCloudBackupWorkStorageFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 130 || [7.0.0+] [[#OpenCustomStorageFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || OpenDataStorageByCurrentProcess&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [3.0.0+] OpenDataStorageByProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#OpenDataStorageByDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || OpenPatchDataStorageByCurrentProcess&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [7.0.0+] [[#OpenDataFileSystemWithProgramIndex]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [7.0.0+] [[#OpenDataStorageWithProgramIndex]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [13.0.0+] OpenDataStorageByPath&lt;br /&gt;
|-&lt;br /&gt;
| 207 || [15.0.0+] OpenDataFileSystemByDataId&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [[#OpenDeviceOperator]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [[#OpenSdCardDetectionEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| 501 || [[#OpenGameCardDetectionEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [5.0.0+] OpenSystemDataUpdateEventNotifier&lt;br /&gt;
|-&lt;br /&gt;
| 511 || [5.0.0+] NotifySystemDataUpdateEvent&lt;br /&gt;
|-&lt;br /&gt;
| 520 || [6.0.0+] [[#SimulateDeviceDetectionEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 600 || [1.0.0-3.0.2] SetCurrentPosixTime&lt;br /&gt;
|-&lt;br /&gt;
| 601 || QuerySaveDataTotalSize&lt;br /&gt;
|-&lt;br /&gt;
| 602 || [[#VerifySaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 603 || CorruptSaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 604 || CreatePaddingFile&lt;br /&gt;
|-&lt;br /&gt;
| 605 || DeleteAllPaddingFiles&lt;br /&gt;
|-&lt;br /&gt;
| 606 || [2.0.0+] GetRightsId&lt;br /&gt;
|-&lt;br /&gt;
| 607 || [2.0.0+] RegisterExternalKey&lt;br /&gt;
|-&lt;br /&gt;
| 608 || [2.0.0+] UnregisterAllExternalKey&lt;br /&gt;
|-&lt;br /&gt;
| 609 || [2.0.0-15.0.1] GetRightsIdByPath&lt;br /&gt;
|-&lt;br /&gt;
| 610 || [3.0.0+] GetRightsIdAndKeyGenerationByPath&lt;br /&gt;
|-&lt;br /&gt;
| 611 || [4.0.0+] SetCurrentPosixTimeWithTimeDifference&lt;br /&gt;
|-&lt;br /&gt;
| 612 || [4.0.0+] GetFreeSpaceSizeForSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 613 || [4.0.0+] VerifySaveDataFileSystemBySaveDataSpaceId&lt;br /&gt;
|-&lt;br /&gt;
| 614 || [4.0.0+] CorruptSaveDataFileSystemBySaveDataSpaceId&lt;br /&gt;
|-&lt;br /&gt;
| 615 || [5.0.0+] QuerySaveDataInternalStorageTotalSize&lt;br /&gt;
|-&lt;br /&gt;
| 616 || [6.0.0+] [[#GetSaveDataCommitId]]&lt;br /&gt;
|-&lt;br /&gt;
| 617 || [7.0.0+] UnregisterExternalKey&lt;br /&gt;
|-&lt;br /&gt;
| 618 || [17.0.0+] GetProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 620 || [2.0.0+] [[#SetSdCardEncryptionSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 630 || [4.0.0+] SetSdCardAccessibility&lt;br /&gt;
|-&lt;br /&gt;
| 631 || [4.0.0+] IsSdCardAccessible&lt;br /&gt;
|-&lt;br /&gt;
| 640 || [4.0.0-7.0.1] IsSignedSystemPartitionOnSdCardValid&lt;br /&gt;
|-&lt;br /&gt;
| 700 || [5.0.0+] [[#OpenAccessFailureDetectionEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| 701 || [5.0.0+] GetAccessFailureDetectionEvent&lt;br /&gt;
|-&lt;br /&gt;
| 702 || [5.0.0+] IsAccessFailureDetected&lt;br /&gt;
|-&lt;br /&gt;
| 710 || [5.0.0+] ResolveAccessFailure&lt;br /&gt;
|-&lt;br /&gt;
| 720 || [5.0.0+] AbandonAccessFailure&lt;br /&gt;
|-&lt;br /&gt;
| 800 || [2.0.0+] GetAndClearErrorInfo&lt;br /&gt;
|-&lt;br /&gt;
| 810 || [7.0.0+] RegisterProgramIndexMapInfo&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [1.0.0-9.2.0] SetBisRootForHost&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [[#SetSaveDataSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1002 || [[#SetSaveDataRootPath]]&lt;br /&gt;
|-&lt;br /&gt;
| 1003 || DisableAutoSaveDataCreation&lt;br /&gt;
|-&lt;br /&gt;
| 1004 || [[#SetGlobalAccessLogMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 1005 || [[#GetGlobalAccessLogMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 1006 || [[#OutputAccessLogToSdCard]]&lt;br /&gt;
|-&lt;br /&gt;
| 1007 || [4.0.0+] RegisterUpdatePartition&lt;br /&gt;
|-&lt;br /&gt;
| 1008 || [4.0.0+] OpenRegisteredUpdatePartition&lt;br /&gt;
|-&lt;br /&gt;
| 1009 || [4.0.0+] GetAndClearMemoryReportInfo&lt;br /&gt;
|-&lt;br /&gt;
| 1010 || [5.1.0-6.2.0] SetDataStorageRedirectTarget&lt;br /&gt;
|-&lt;br /&gt;
| 1011 || [7.0.0+] [[#GetProgramIndexForAccessLog]]&lt;br /&gt;
|-&lt;br /&gt;
| 1012 || [9.0.0+] GetFsStackUsage&lt;br /&gt;
|-&lt;br /&gt;
| 1013 || [9.0.0+] UnsetSaveDataRootPath&lt;br /&gt;
|-&lt;br /&gt;
| 1014 || [10.0.0-10.2.0] OutputMultiProgramTagAccessLog&lt;br /&gt;
|-&lt;br /&gt;
| 1016 || [11.0.0+] FlushAccessLogOnSdCard&lt;br /&gt;
|-&lt;br /&gt;
| 1017 || [11.0.0+] OutputApplicationInfoAccessLog&lt;br /&gt;
|-&lt;br /&gt;
| 1018 || [13.0.0+] SetDebugOption&lt;br /&gt;
|-&lt;br /&gt;
| 1019 || [13.0.0+] UnsetDebugOption&lt;br /&gt;
|-&lt;br /&gt;
| 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey&lt;br /&gt;
|-&lt;br /&gt;
| 1110 || [6.0.0+] CorruptSaveDataFileSystemByOffset&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || [6.0.0+] [[#OpenMultiCommitManager]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [10.0.0+] [[#OpenBisWiper]]&lt;br /&gt;
|-&lt;br /&gt;
| 1400 || [15.0.0+] NotifyErrorContextServiceReady&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
Every time permissions are checked, the process registration [[#fsp-pr]] is loaded using the session processID. The permission data is populated with data from the [[NPDM]].&lt;br /&gt;
&lt;br /&gt;
If the processID is &amp;lt;= 6 (which happens only for built-in sysmodules), it will use a hardcoded registration data. The default mask in this case is 0x8000000000000000.&lt;br /&gt;
&lt;br /&gt;
Note that the functions check whether or not at least one bit is set in the mask. This means that, you don&#039;t need to set 0xFFFFFFFFFFFFFFFF to get all permissions: it suffices to set 0x8000000000000000.&lt;br /&gt;
&lt;br /&gt;
If the code were to request an invalid input type, panic. But this never happens.&lt;br /&gt;
&lt;br /&gt;
The output values for [[#ReadWrite]] CanMountRegisteredUpdatePartition and [[#Call]] CanRegisterUpdatePartition are masked with the cached value of [[SMC#IsDebugMode|DebugMode]].&lt;br /&gt;
&lt;br /&gt;
=== ReadWrite ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! AccessibilityType || Name || Mask || Permission || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || CanMountLogo || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || CanMountContentMeta || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || CanMountContentControl || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || CanMountContentManual || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || CanMountContentData || 0x8000000000000801 || R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || CanMountApplicationPackage || 0x8000000000000801 ||  R- || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || CanMountSaveDataStorage || 0x8000000000000000 || RW ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || CanMountContentStorage || 0x8000000000000800 || RW || [[#OpenContentStorageFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || CanMountImageAndVideoStorage ||0x8000000000001000 || RW || [[#OpenImageDirectoryFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || CanMountCustomStorage0 || 0x8000000000000000 || RW || OpenCustomStorageFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || CanMountBisCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || CanMountBisSafeMode || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || CanMountBisUser || 0x8000000000008080 || RW || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || CanMountBisSystem || 0x8000000000008080 || RW || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || CanMountBisSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || CanMountBisSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || CanMountSdCard || 0xC000000000200000 || RW || [[#OpenSdCardFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || CanMountGameCard || 0x8000000000000010 || R- || [[#OpenGameCardFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || CanMountDeviceSaveData || 0x8000000000040020 || RW || [[#OpenSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || CanMountSystemSaveData || 0x8000000000000028 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || CanMountOthersSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || CanMountOthersSystemSaveData || 0x8000000000000020 || RW || [[#OpenSaveDataFileSystemBySystemSaveDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || CanOpenBisPartitionBootPartition1Root || 0x8000000000010082 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || CanOpenBisPartitionBootPartition2Root || 0x8000000000010080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || CanOpenBisPartitionUserDataRoot || 0x8000000000000080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || CanOpenBisPartitionBootConfigAndPackage2Part1 || 0x8000000000010080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || CanOpenBisPartitionBootConfigAndPackage2Part2 || 0x8000000000010080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || CanOpenBisPartitionBootConfigAndPackage2Part3 || 0x8000000000010080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || CanOpenBisPartitionBootConfigAndPackage2Part4 || 0x8000000000010080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || CanOpenBisPartitionBootConfigAndPackage2Part5 || 0x8000000000010080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || CanOpenBisPartitionBootConfigAndPackage2Part6 || 0x8000000000010080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || CanOpenBisPartitionCalibrationBinary || 0x8000000000000084 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || CanOpenBisPartitionCalibrationFile || 0x8000000000000084 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || CanOpenBisPartitionSafeMode || 0x8000000000000080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || CanOpenBisPartitionUser || 0x8000000000000080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || CanOpenBisPartitionSystem || 0x8000000000000080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || CanOpenBisPartitionSystemProperEncryption || 0x8000000000000080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || CanOpenBisPartitionSystemProperPartition || 0x8000000000000080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || CanOpenBisPartitionDeviceTreeBlob || 0x8000002000000080 || RW || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x27 || CanOpenSdCardStorage || 0xC000000000200000 || RW || &lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x28 || CanOpenGameCardStorage || 0x8000000000000100 || RW || [[#OpenGameCardStorage]], [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1)&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x29 || CanMountSystemDataPrivate || 0x8000000000100008 || R- || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2A || CanMountHost || 0xC000000000400000 || RW || [[#OpenHostFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x2B || CanMountRegisteredUpdatePartition || 0x8000000000010000 || R- || [[#OpenRegisteredUpdatePartition]]&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] 0x2C || CanOpenSaveDataInternalStorage || 0x8000000000000000 || RW || [[#OpenSaveDataInternalStorageFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] 0x2D || CanMountTemporaryDirectory || 0xC000000000000000 || RW || &lt;br /&gt;
|-&lt;br /&gt;
| [11.0.0+] 0x2E || CanMountAllBaseFilesystem || 0x8000000000000000 || RW || OpenBaseFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| [15.0.0+] 0x2F || CanNotMount || 0x0000000000000000 || -- || OpenCustomStorageFileSystem&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Call ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OperationType || Name || Mask || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || CanInvalidateBisCache || 0x8000000000000080 || [[#InvalidateBisCache]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || CanEraseMmc || 0x8000000000000080 || EraseMmc&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || CanGetGameCardDeviceCertificate || 0x8000000000000010 || GetGameCardDeviceCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || CanGetGameCardIdSet || 0x8000000000000010 || GetGameCardIdSet&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || CanFinalizeGameCardDriver || 0x8000000000000200 || FinalizeGameCardDriver&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || CanGetGameCardAsicInfo || 0x8000000000000200 || GetGameCardAsicInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || CanGetGameCardAsicCertificate || 0x8000000000000200 || GetGameCardAsicCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || CanCreateSaveData || 0x8000000000002020 || [[#CreateSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || CanDeleteSaveData || 0x8000000000000060 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || CanCreateSystemSaveData || 0x8000000000000028 || CreateSaveDataFileSystemBySystemSaveDataId&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || CanCreateOthersSystemSaveData || 0x8000000000000020 || CreateSaveDataFileSystemBySystemSaveDataId&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || CanDeleteSystemSaveData || 0x8000000000004028 || [[#DeleteSaveDataFileSystem]], RegisterSaveDataFileSystemAtomicDeletion&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || CanOpenSaveDataInfoReader || 0x8000000000000060 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || CanOpenSaveDataInfoReaderForSystem || 0x8000000000004020 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || CanOpenSaveDataInfoReaderForInternal || 0x8000000000000040 || [[#OpenSaveDataInfoReaderWithFilter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || CanOpenSaveDataMetaFile || 0x8000000000020000 || OpenSaveDataMetaFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || CanSetCurrentPosixTime || 0x8000000000000400 || SetCurrentPosixTime, SetCurrentPosixTimeWithTimeDifference&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || CanReadSaveDataFileSystemExtraData || 0x8000000000004060 || [[#ReadSaveDataFileSystemExtraData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || CanSetGlobalAccessLogMode || 0x8000000000080000 || [[#SetGlobalAccessLogMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || CanSetSpeedEmulationMode || 0x8000000000080000 || SetSpeedEmulationMode&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || CanDebug || 0xC000000000000000 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || CanFillBis || 0xC000000000800000 || CreatePaddingFile, DeleteAllPaddingFiles&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x16 || CanCorruptSaveData || 0xC000000001000000 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x17 || CanCorruptSystemSaveData || 0x8000000001000060 || CorruptSaveDataFileSystem, CorruptSaveDataFileSystemBySaveDataSpaceId&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x18 || CanVerifySaveData || 0x8000000000000060 || [[#VerifySaveDataFileSystem]], VerifySaveDataFileSystemBySaveDataSpaceId&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x19 || CanDebugSaveData || 0xC000000002000000 || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]]&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x1A || CanFormatSdCard || 0x8000000004000000 || FormatSdCardFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x1B || CanGetRightsId || 0x8000000008000000 || GetRightsId, GetRightsIdAndKeyGenerationByPath, GetRightsIdByPath&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x1C || CanRegisterExternalKey || 0x8000000010000000 || RegisterExternalKey, UnregisterAllExternalKey&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x1D || CanSetEncryptionSeed || 0x8000000000000800 || [[#SetSdCardEncryptionSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x1E || CanWriteSaveDataFileSystemExtraDataTimeStamp || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x1F || CanWriteSaveDataFileSystemExtraDataFlags || 0x8000000000004020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x20 || CanWriteSaveDataFileSystemExtraDataCommitId || 0x8000000000000020 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x21 || CanWriteSaveDataFileSystemExtraDataAll || 0x8000000000000000 || WriteSaveDataFileSystemExtraData, WriteSaveDataFileSystemExtraDataWithMask&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x22 || CanExtendSaveData || 0x8000000000002020 || ExtendSaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x23 || CanExtendSystemSaveData || 0x8000000000000028 || ExtendSaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x24 || CanExtendOthersSystemSaveData || 0x8000000000000020 || ExtendSaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x25 || CanRegisterUpdatePartition || 0x8000000020000000 || RegisterUpdatePartition&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x26 || CanOpenSaveDataTransferManager || 0x8000000040000000 || [[#OpenSaveDataTransferManager]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x27 || CanOpenSaveDataTransferManagerVersion2 || 0x8000000200000000 || [[#OpenSaveDataTransferManagerVersion2]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x28 || CanOpenSaveDataTransferManagerForSaveDataRepair || 0x8000000200000000 || OpenSaveDataTransferManagerForSaveDataRepair&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x29 || CanOpenSaveDataTransferManagerForSaveDataRepairTool || 0x8000000000000000 || OpenSaveDataTransferManagerForSaveDataRepair&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2A || CanOpenOpenSaveDataTransferProhibiter || 0x8000000200002000 || [[#OpenSaveDataTransferProhibiter]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2B || CanOpenSaveDataMover || 0x8000001000000000 || [[#OpenSaveDataMover]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2C || CanOpenBisWiper || 0x8000000000000800 || [[#OpenBisWiper]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2D || CanListAccessibleSaveDataOwnerId || 0x8000000240002000 || [[#ListAccessibleSaveDataOwnerId]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2E || CanControlMmcPatrol || 0x8000000000000000 || SuspendMmcPatrol, ResumeMmcPatrol&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2F || CanOverrideSaveDataTransferTokenSignVerificationKey || 0x8000000000000000 || OverrideSaveDataTransferTokenSignVerificationKey&lt;br /&gt;
|-&lt;br /&gt;
| [5.1.0+] 0x30 || CanOpenSdCardDetectionEventNotifier || 0x8000000080200000 || [[#OpenSdCardDetectionEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x31 || CanOpenGameCardDetectionEventNotifier || 0x8000000080000110 || [[#OpenGameCardDetectionEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x32 || CanOpenSystemDataUpdateEventNotifier || 0x8000000000100008 || OpenSystemDataUpdateEventNotifier&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x33 || CanNotifySystemDataUpdateEvent || 0x8000000000010000 || NotifySystemDataUpdateEvent&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x34 || CanOpenAccessFailureDetectionEventNotifier || 0x8000000100000000 || [[#OpenAccessFailureDetectionEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x35 || CanGetAccessFailureDetectionEvent || 0x8000000100000000 || GetAccessFailureDetectionEvent&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x36 || CanIsAccessFailureDetected || 0x8000000100000000 || IsAccessFailureDetected&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x37 || CanResolveAccessFailure || 0x8000000100000000 || ResolveAccessFailure&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x38 || CanAbandonAccessFailure || 0x8000000100000000 || AbandonAccessFailure&lt;br /&gt;
|-&lt;br /&gt;
| [8.0.0+] 0x39 || CanQuerySaveDataInternalStorageTotalSize || 0x8000000040000000 || QuerySaveDataInternalStorageTotalSize&lt;br /&gt;
|-&lt;br /&gt;
| [9.0.0+] 0x3A || CanGetSaveDataCommitId || 0x8000000200000020 || [[#GetSaveDataCommitId]]&lt;br /&gt;
|-&lt;br /&gt;
| [9.0.0+] 0x3B || CanSetSdCardAccessibility || 0x8000000000200000 || SetSdCardAccessibility&lt;br /&gt;
|-&lt;br /&gt;
| [9.0.0+] 0x3C || CanSimulateDevice || 0x4000000000000000 || SimulateDeviceDetectionEvent, SetSimulationEvent, ClearSimulationEvent&lt;br /&gt;
|-&lt;br /&gt;
| [9.0.0+] 0x3D || CanCreateSaveDataWithHashSalt || 0x8000000000000000 || [[#CreateSaveDataFileSystem]], [[#CreateSaveDataFileSystemWithHashSalt]]&lt;br /&gt;
|-&lt;br /&gt;
| [9.0.0+] 0x3E || CanRegisterProgramIndexMapInfo || 0x8000000400000000 || RegisterProgramIndexMapInfo&lt;br /&gt;
|-&lt;br /&gt;
| [9.0.0+] 0x3F || CanChallengeCardExistence || 0x8000000000000010 || ChallengeCardExistence&lt;br /&gt;
|-&lt;br /&gt;
| [9.0.0+] 0x40 || CanCreateOwnSaveData || 0x8000000800000000 || [[#CreateSaveDataFileSystem]], CreateSaveDataFileSystemWithHashSalt&lt;br /&gt;
|-&lt;br /&gt;
| [9.0.0+] 0x41 || CanDeleteOwnSaveData || 0x8000000800000000 || [[#DeleteSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| [10.0.0+] 0x42 || CanReadOwnSaveDataFileSystemExtraData || 0x8000000800000000 || [[#ReadSaveDataFileSystemExtraData]]&lt;br /&gt;
|-&lt;br /&gt;
| [10.0.0+] 0x43 || CanExtendOwnSaveData || 0x8000000800000000 || ExtendSaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| [10.2.0+] 0x44 || CanOpenOwnSaveDataTransferProhibiter || 0x8000000800000000 || [[#OpenSaveDataTransferProhibiter]]&lt;br /&gt;
|-&lt;br /&gt;
| [11.0.0+] 0x45 || CanFindOwnSaveDataWithFilter || 0x8000000800000000 || [[#FindSaveDataWithFilter]]&lt;br /&gt;
|-&lt;br /&gt;
| [13.0.0+] 0x46 || CanOpenSaveDataTransferManagerForRepair || 0x8000000000000020 || [[#OpenSaveDataTransferManagerForRepair]]&lt;br /&gt;
|-&lt;br /&gt;
| [13.0.0+] 0x47 || CanSetDebugConfiguration || 0x8000000000000000 || SetDebugOption, UnsetDebugOption&lt;br /&gt;
|-&lt;br /&gt;
| [15.0.0+] 0x48 || CanOpenDataStorageByPath || 0x8000000000000000 || OpenDataStorageByPath&lt;br /&gt;
|-&lt;br /&gt;
| [17.0.0+] 0x49 || CanNotifyErrorContextServiceReady || 0x8000004000000000 || NotifyErrorContextServiceReady&lt;br /&gt;
|-&lt;br /&gt;
| [17.0.0+] 0x4A || CanGetProgramId || 0x8000000008000000 || GetProgramId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenFileSystem ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[#FileSystemProxyType]]. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This function was removed.&lt;br /&gt;
&lt;br /&gt;
== SetCurrentProcess ==&lt;br /&gt;
Takes an input u64 ProcessId. No output.&lt;br /&gt;
&lt;br /&gt;
== OpenFileSystemWithPatch ==&lt;br /&gt;
Takes an input [[#FileSystemProxyType]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Web-applet loads the [[#FileSystemProxyType]] (which must be &#039;&#039;&#039;Manual&#039;&#039;&#039;) from u32_table[inparam].&lt;br /&gt;
&lt;br /&gt;
Note: web-applet strings refer to both this cmd and [[#OpenFileSystemWithId]] as &amp;quot;MountContent&amp;quot;, but official nn_sf_sync symbols use &amp;quot;OpenXX&amp;quot; names.&lt;br /&gt;
&lt;br /&gt;
== OpenFileSystemWithIdObsolete ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#FspPath]], an input [[#FileSystemProxyType]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
The [[#IFileSystem]] must be &#039;&#039;&#039;Meta&#039;&#039;&#039; if the NCA type is 0.&lt;br /&gt;
&lt;br /&gt;
The input buffer is the output string path from [[NS_Services#GetApplicationContentPath|GetApplicationContentPath]].&lt;br /&gt;
&lt;br /&gt;
May return errors when attempting to access NCA-paths for an update-title with a gamecard, when the gamecard isn&#039;t inserted. May return error 0x7D402 in some cases with update-titles. Non-val2 in32 values with NCA-type1 are unusable, even for normal titles.&lt;br /&gt;
&lt;br /&gt;
The official &amp;quot;MountApplicationPackage&amp;quot; func uses this with in64=0 and [[#FileSystemProxyType]] &#039;&#039;&#039;Package&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After the [[#FileSystemProxyType]] specific permissions are checked, it then gets the func retval for permissions-type 0x25 and func0.&lt;br /&gt;
&lt;br /&gt;
When [[#FileSystemProxyType]] is &#039;&#039;&#039;Meta&#039;&#039;&#039;, it uses in64=0xffffffffffffffff internally, otherwise it checks if in64 is set to 0xffffffffffffffff then throws an error if so. When the in64 used internally is not 0xffffffffffffffff, it&#039;s compared with the NCA [[NCM_services#ProgramId|ProgramId]], then an error is thrown on mismatch.&lt;br /&gt;
&lt;br /&gt;
== OpenFileSystemWithId ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#FspPath]], an input [[#ContentAttributes]], an input [[#FileSystemProxyType]] and an input [[NCM_services#ProgramId|ProgramId]]. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
== OpenBisFileSystem ==&lt;br /&gt;
Takes a type-0x19 input buffer containing a [[#FspPath]] and an input [[#BisPartitionId]]. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Official user-process code sets instr[0] = 0 normally.&lt;br /&gt;
&lt;br /&gt;
Only partitionIDs for FAT partitions are usable with this, otherwise error 0x2EE202 is returned. Seems to be about the same as [[#OpenBisStorage]] except this mounts the partition filesystem instead of allowing direct access to the partition sectors.&lt;br /&gt;
&lt;br /&gt;
== OpenBisStorage ==&lt;br /&gt;
Takes a u32 partition ID, returns 0x2EE202 for partitions which do not exist, 0x320002 for partitions which cannot be opened and a valid [[#IStorage]] handle otherwise.&lt;br /&gt;
&lt;br /&gt;
== InvalidateBisCache ==&lt;br /&gt;
Seems to invalidate the Bis cache for MBR/GPT after overwriting that data via the OpenBisStorage IStorage. Used by [[SystemInitializer]].&lt;br /&gt;
&lt;br /&gt;
== DeleteSaveDataFileSystem ==&lt;br /&gt;
Takes an input u64.&lt;br /&gt;
&lt;br /&gt;
== CreateSaveDataFileSystem ==&lt;br /&gt;
Takes a 0x40-byte [[#SaveDataAttribute]], a 0x40-byte [[#SaveDataCreationInfo]], and a 0x10-byte input struct which governs creation of a saveMeta file.&lt;br /&gt;
&lt;br /&gt;
Only the first 0x5-bytes in the 0x10-byte struct are initialized: all-zero when automatically creating savedata during savecommon mount by official user-processes. In the dedicated save-creation code in official user-processes: +0 u32 = 0x40060 meta file size, +4 u8 = 1 meta index which dictates meta file name.&lt;br /&gt;
&lt;br /&gt;
Creates non-system savedata.&lt;br /&gt;
&lt;br /&gt;
== CreateSaveDataFileSystemBySystemSaveDataId ==&lt;br /&gt;
Takes a 0x40-byte [[#SaveDataAttribute]] and a 0x40-byte [[#SaveDataCreationInfo]].&lt;br /&gt;
&lt;br /&gt;
Creates savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition.&lt;br /&gt;
&lt;br /&gt;
== OpenGameCardStorage ==&lt;br /&gt;
Takes two input u32s (gamecard handle, partition ID), and returns an [[#IStorage]] for the [[Gamecard_Format|partition]].&lt;br /&gt;
&lt;br /&gt;
== OpenGameCardFileSystem ==&lt;br /&gt;
Takes two input u32s, with the second u32 located at +4 in rawdata after the first u32. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Mounts a [[Gamecard_Partition|gamecard partition]].&lt;br /&gt;
&lt;br /&gt;
== CreateSaveDataFileSystemWithHashSalt ==&lt;br /&gt;
Takes a total of 0xB0-bytes of input, no output.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataFileSystem ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]]. Official user-process code is only known to use value 1 for the u8.&lt;br /&gt;
&lt;br /&gt;
Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Permissions aren&#039;t checked until the specified save is successfully found.&lt;br /&gt;
&lt;br /&gt;
Only one process (specifically only one [[#IFileSystem]] session) can mount a given savedata at any given time (this includes SystemSaveData).&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataFileSystemBySystemSaveDataId ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]]. Web-applet only uses value0 for the input u8.&lt;br /&gt;
&lt;br /&gt;
Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Mounts savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition.&lt;br /&gt;
&lt;br /&gt;
== OpenReadOnlySaveDataFileSystem ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte [[#SaveDataAttribute]], and returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Mounts SaveData as ReadOnly.&lt;br /&gt;
&lt;br /&gt;
== ReadSaveDataFileSystemExtraDataBySaveDataSpaceId ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]], an input u64 saveID, and a type-0x6 output buffer containing the [[#SaveDataFileSystemExtraData]].&lt;br /&gt;
&lt;br /&gt;
== ReadSaveDataFileSystemExtraData ==&lt;br /&gt;
Takes an input u64 saveID and a type-0x6 output buffer containing the [[#SaveDataFileSystemExtraData]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataInfoReader ==&lt;br /&gt;
No input, returns an output [[#ISaveDataInfoReader]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataInfoReaderBySaveDataSpaceId ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]], returns an output [[#ISaveDataInfoReader]].&lt;br /&gt;
&lt;br /&gt;
== FindSaveDataWithFilter ==&lt;br /&gt;
Takes a total of 0x50-bytes of input, returns 8-bytes of output and a type-0x6 output buffer.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataInfoReaderWithFilter ==&lt;br /&gt;
Takes a total of 0x50-bytes of input, returns an [[#ISaveDataInfoReader]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataTransferManager ==&lt;br /&gt;
No input, returns an [[#ISaveDataTransferManager]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataTransferManagerVersion2 ==&lt;br /&gt;
No input, returns an [[#ISaveDataTransferManagerWithDivision]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataTransferProhibiter ==&lt;br /&gt;
Takes an input u64, returns an [[#ISaveDataTransferProhibiter]].&lt;br /&gt;
&lt;br /&gt;
== ListAccessibleSaveDataOwnerId ==&lt;br /&gt;
Takes a total of 0x10-bytes of input, returns 4-bytes of output and a type-0x6 output buffer.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataTransferManagerForSaveDataRepair ==&lt;br /&gt;
No input, returns an output [[#ISaveDataTransferManagerForSaveDataRepair]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataMover ==&lt;br /&gt;
Takes 2 input [[#SaveDataSpaceId]], an input u64 size and a TransferMemory handle. Returns an output [[#ISaveDataMover]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataTransferManagerForRepair ==&lt;br /&gt;
No input, returns an output [[#ISaveDataTransferManagerForRepair]].&lt;br /&gt;
&lt;br /&gt;
== OpenContentStorageFileSystem ==&lt;br /&gt;
Takes a [[#ContentStorageId]]. Invalid values return 0x2EE202.&lt;br /&gt;
&lt;br /&gt;
Returns an [[#IFileSystem]] with NCA files. The read data from these files is identical to the data read by [[NCM_services#ReadContentIdFile]].&lt;br /&gt;
&lt;br /&gt;
== OpenCloudBackupWorkStorageFileSystem ==&lt;br /&gt;
Takes 4-bytes of input, returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
== OpenCustomStorageFileSystem ==&lt;br /&gt;
Takes a [[#CustomStorageId]]. Invalid values return 0x2EE202.&lt;br /&gt;
&lt;br /&gt;
Returns an [[#IFileSystem]] from either User:/CustomStorage0 or Sdcard:/Nintendo/CustomStorage0. If on the SD card, an AesXtsFileSystem is created using a key source specifically for custom storage.&lt;br /&gt;
&lt;br /&gt;
== OpenDataStorageByDataId ==&lt;br /&gt;
Takes a [[NCM_services#StorageId|StorageID]] and a [[NCM_services#DataId|DataId]].&lt;br /&gt;
&lt;br /&gt;
Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives.&lt;br /&gt;
&lt;br /&gt;
== OpenDataFileSystemWithProgramIndex ==&lt;br /&gt;
Takes an input u8, returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
== OpenDataStorageWithProgramIndex ==&lt;br /&gt;
Takes an input u8, returns an [[#IStorage]].&lt;br /&gt;
&lt;br /&gt;
== OpenDeviceOperator ==&lt;br /&gt;
This command returns a session to a port implementing the [[#IDeviceOperator]] interface.&lt;br /&gt;
&lt;br /&gt;
== OpenSdCardDetectionEventNotifier ==&lt;br /&gt;
This command returns a session to a port implementing the [[#IEventNotifier]] interface.&lt;br /&gt;
&lt;br /&gt;
== OpenGameCardDetectionEventNotifier ==&lt;br /&gt;
This command returns a session to a port implementing the [[#IEventNotifier]] interface.&lt;br /&gt;
&lt;br /&gt;
== SimulateDeviceDetectionEvent ==&lt;br /&gt;
Takes a total of 0xC-bytes of input, no output.&lt;br /&gt;
&lt;br /&gt;
== VerifySaveDataFileSystem ==&lt;br /&gt;
Takes an unknown input u64 and a type-0x6 output buffer.&lt;br /&gt;
&lt;br /&gt;
The input u64 high-byte must be non-zero, otherwise an [[Error_codes|error]] is returned(0xE02).&lt;br /&gt;
&lt;br /&gt;
== GetSaveDataCommitId ==&lt;br /&gt;
Takes an input u8 and u64, returns an output u64.&lt;br /&gt;
&lt;br /&gt;
== SetSdCardEncryptionSeed ==&lt;br /&gt;
Takes in the 0x10 byte SD card encryption seed, and loads it into FS-module state.&lt;br /&gt;
&lt;br /&gt;
[[NS_Services|NS]]-module reads the 0x10 bytes from SdCard:/Nintendo/Contents/private, and compares them to the first 0x10 bytes of the ns_appman:/private (in [[Flash_Filesystem#System_Savegames|system savedata]] 0x8000000000000043). If they match, NS calls this command using bytes 0x10-0x20 from ns_appman:/private. The rest of this file (0x1F0 bytes total) is all-zero except for the byte at offset 0x20. This byte is set to 1 by NS if the SD card has been mounted successfully and is subsequently passed to SetSdCardAccessibility.&lt;br /&gt;
&lt;br /&gt;
== OpenAccessFailureDetectionEventNotifier ==&lt;br /&gt;
Takes 8-bytes of input and returns an [[#IEventNotifier]].&lt;br /&gt;
&lt;br /&gt;
[8.0.0+] Now takes an additional 8-bytes of input.&lt;br /&gt;
&lt;br /&gt;
== SetSaveDataSize ==&lt;br /&gt;
Takes two input u64s &amp;quot;size&amp;quot; and &amp;quot;journal_size&amp;quot;, and writes them to fsp-srv object member variables.&lt;br /&gt;
&lt;br /&gt;
These variables are normally initialized with 32 MiB (0x2000000) and 16 MiB (0x1000000), respectively.&lt;br /&gt;
&lt;br /&gt;
These variables don&#039;t seem to be actually used anywhere else (?)&lt;br /&gt;
&lt;br /&gt;
== SetSaveDataRootPath ==&lt;br /&gt;
Takes an input path, and does snprintf(&amp;lt;fsp-srv object&amp;gt;-&amp;gt;m_save_data_root_path, FS_MAX_PATH-1, &amp;quot;/%s&amp;quot;, input_path);&lt;br /&gt;
&lt;br /&gt;
This path is normally all-zero. When this path is non-zero, the internal OpenSaveDataFileSystem function will create a DirectorySaveDataFileSystem if the target save is a user-save + a directory exists, instead of the normal savedata filesystem object.&lt;br /&gt;
&lt;br /&gt;
== SetGlobalAccessLogMode ==&lt;br /&gt;
Takes an input u32.&lt;br /&gt;
&lt;br /&gt;
== SetGlobalAccessLogMode ==&lt;br /&gt;
Takes an input u32.&lt;br /&gt;
&lt;br /&gt;
== GetGlobalAccessLogMode ==&lt;br /&gt;
Returns an output u32.&lt;br /&gt;
&lt;br /&gt;
GlobalAccessLogMode is normally 0.&lt;br /&gt;
&lt;br /&gt;
== OutputAccessLogToSdCard ==&lt;br /&gt;
Takes a type-0x5 input buffer.&lt;br /&gt;
&lt;br /&gt;
The input buffer is the string to output to the log. User-processes normally include a newline at the end.&lt;br /&gt;
&lt;br /&gt;
User-processes only use this when the value previously loaded from [[#GetGlobalAccessLogMode]] has bit1 set.&lt;br /&gt;
&lt;br /&gt;
When bit1 in GlobalAccessLogMode is clear, FS-module will just return 0 for OutputAccessLogToSdCard. However even with that set the log doesn&#039;t show up SD, unknown why.&lt;br /&gt;
&lt;br /&gt;
The input buffer is written to the &amp;quot;$FsAccessLog:/FsAccessLog.txt&amp;quot; file, where &amp;quot;$FsAccessLog&amp;quot; is the SD-card mount-name. It&#039;s written to the current end of the file(appended).&lt;br /&gt;
&lt;br /&gt;
== GetProgramIndexForAccessLog ==&lt;br /&gt;
No input, returns two 32-bit values &amp;quot;version&amp;quot; and &amp;quot;program_index&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== OpenMultiCommitManager ==&lt;br /&gt;
No input, returns an output [[#IMultiCommitManager]].&lt;br /&gt;
&lt;br /&gt;
== OpenBisWiper ==&lt;br /&gt;
Takes an input u64 size and a TransferMemory handle. Returns an output [[#IWiper]].&lt;br /&gt;
&lt;br /&gt;
= IStorage =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IStorage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is the interface for a raw device, usually a block device.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#SetSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GetSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [4.0.0+] OperateRange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Read ==&lt;br /&gt;
Takes a type-0x46 buffer, an offset and length.&lt;br /&gt;
&lt;br /&gt;
== Write ==&lt;br /&gt;
Takes a type-0x45 buffer, an offset and length.&lt;br /&gt;
&lt;br /&gt;
== Flush ==&lt;br /&gt;
No input.&lt;br /&gt;
&lt;br /&gt;
== SetSize ==&lt;br /&gt;
Takes a size.&lt;br /&gt;
&lt;br /&gt;
== GetSize ==&lt;br /&gt;
Returns a size.&lt;br /&gt;
&lt;br /&gt;
= IFileSystem =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IFileSystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are two main implementations of this interface:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;nn::fs::fsa::IFileSystem&#039;&#039;&#039;: The main IFileSystem implementation. Filesystem classes implement this interface, and FS code usually operates on this interface.&lt;br /&gt;
* &#039;&#039;&#039;nn::fssrv::sf::IFileSystem&#039;&#039;&#039;: Used for sending an IFileSystem over IPC. Not used outside of IPC code.&lt;br /&gt;
&lt;br /&gt;
There are two adapter classes to convert between these interfaces:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;nn::fssrv::detail::FileSystemInterfaceAdapter&#039;&#039;&#039;: Allows access to an nn::fs::fsa::IFileSystem via the nn::fssrv::sf::IFileSystem interface.&lt;br /&gt;
* &#039;&#039;&#039;nn::fs::detail::FileSystemServiceObjectAdapter&#039;&#039;&#039;: Allows access to an nn::fssrv::sf::IFileSystem via the nn::fs::fsa::IFileSystem interface.&lt;br /&gt;
&lt;br /&gt;
When the FS process returns a filesystem, it will wrap the filesystem object in a FileSystemInterfaceAdapter to return it over IPC.&lt;br /&gt;
Then when FS application code receives that filesystem, it will wrap the nn::fssrv::sf::IFileSystem object in a FileSystemServiceObjectAdapter before using it.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateFile&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeleteFile&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CreateDirectory&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeleteDirectory&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeleteDirectoryRecursively&lt;br /&gt;
|-&lt;br /&gt;
| 5 || RenameFile&lt;br /&gt;
|-&lt;br /&gt;
| 6 || RenameDirectory&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetEntryType]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#OpenFile]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#OpenDirectory]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Commit]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetFreeSpaceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetTotalSpaceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#CleanDirectoryRecursively]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [3.0.0+] [[#GetFileTimeStampRaw]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [4.0.0+] QueryEntry&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [15.0.0+] GetFileSystemAttribute&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetEntryType ==&lt;br /&gt;
Takes a type-0x9 input buffer for the path and returns [[#DirectoryEntryType]] as an output u32.&lt;br /&gt;
&lt;br /&gt;
== OpenFile ==&lt;br /&gt;
Takes a type-0x19 input buffer for the path, and an u32 &#039;&#039;&#039;mode&#039;&#039;&#039;. &#039;&#039;&#039;mode&#039;&#039;&#039; controls how the file is opened, based on which bits are set:&lt;br /&gt;
&lt;br /&gt;
* When bit 0 is set, the file is Readable: you can use the Read operation.&lt;br /&gt;
* When bit 1 is set, the file is Writable: you can use the Write operation.&lt;br /&gt;
* When bit 2 is set, the file is Appendable: unless this bit is set, you will not be able to write beyond the end of a file (such writes will result in an error 0x307202)&lt;br /&gt;
&lt;br /&gt;
== OpenDirectory ==&lt;br /&gt;
Takes a type-0x9 input buffer for the path and an u64 &#039;&#039;&#039;filter_flags&#039;&#039;&#039;. &#039;&#039;&#039;filter_flags&#039;&#039;&#039; controls what type of entries are read by the [[#IDirectory]]: bitmask 0x1 = directories, bitmask 0x2 = files.&lt;br /&gt;
&lt;br /&gt;
== Commit ==&lt;br /&gt;
Like [https://3dbrew.org/wiki/FS:ControlArchive 3DS], this has to be used after writing to savedata for the changes to take affect.&lt;br /&gt;
&lt;br /&gt;
== GetFreeSpaceSize ==&lt;br /&gt;
Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total free space with this FS.&lt;br /&gt;
&lt;br /&gt;
== GetTotalSpaceSize ==&lt;br /&gt;
Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total space available with this FS(free+used).&lt;br /&gt;
&lt;br /&gt;
== CleanDirectoryRecursively ==&lt;br /&gt;
Takes a type-0x9 input buffer for the path and clears the contents of the directory specified in the path.&lt;br /&gt;
&lt;br /&gt;
== GetFileTimeStampRaw ==&lt;br /&gt;
Takes a type-0x19 input buffer for the path and returns a 0x20-byte struct. This contains 3 u64s and an u8.&lt;br /&gt;
&lt;br /&gt;
= IDirectory =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IDirectory&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetEntryCount]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Read ==&lt;br /&gt;
Takes a type-0x6 output buffer. Returns an output u64(?) for the total number of read entries, this is 0 when no more entries are available.&lt;br /&gt;
&lt;br /&gt;
The output buffer contains the read array of [[#DirectoryEntry]]. This doesn&#039;t include entries for &amp;quot;.&amp;quot; and &amp;quot;..&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== GetEntryCount ==&lt;br /&gt;
Returns an u64 for the total number of readable entries.&lt;br /&gt;
&lt;br /&gt;
= DirectoryEntry =&lt;br /&gt;
This is &amp;quot;nn::fs::DirectoryEntry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x301 || Path&lt;br /&gt;
|-&lt;br /&gt;
| 0x301 || 0x1 || File attributes (bit 0 = is directory; bit 1 = archive bit)&lt;br /&gt;
|-&lt;br /&gt;
| 0x302 || 0x2 || Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x304 || 0x1 || [[#DirectoryEntryType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x305 || 0x3 || Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x308 || 0x8 || Filesize, 0 for directories.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DirectoryEntryType =&lt;br /&gt;
This is &amp;quot;nn::fs::DirectoryEntryType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
An s8 value indicating a directory entry type. The current values are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Directory&lt;br /&gt;
|-&lt;br /&gt;
| 1 || File&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IFile =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IFile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Read&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Write&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Flush&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetSize&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetSize&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [4.0.0+] OperateRange&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [12.0.0+] OperateRangeWithBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ISaveDataInfoReader =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataInfoReader&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ReadSaveDataInfo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ReadSaveDataInfo ==&lt;br /&gt;
Takes a type-0x6 output buffer. Returns an output u64 for total output entries. This buffer contains an array of [[#SaveDataInfo]].&lt;br /&gt;
&lt;br /&gt;
This is used to get [[#SaveDataInfo]] for all savedata on the system (or all savedata for the current [[#SaveDataSpaceId]]). When used multiple times, it will resume reading where it left off, until no more entries are available (in that case the out u64 is value 0).&lt;br /&gt;
&lt;br /&gt;
= IDeviceOperator =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IDeviceOperator&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#IsSdCardInserted]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetSdCardSpeedMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [2.0.0+] [[#GetSdCardCid]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] [[#GetSdCardUserAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [2.0.0+] [[#GetSdCardProtectedAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [2.0.0+] [[#GetAndClearSdCardErrorInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [17.0.0+] GetSdCardHostControllerStatus&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#GetMmcCid]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetMmcSpeedMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 110 || [[#EraseMmc]]&lt;br /&gt;
|-&lt;br /&gt;
| 111 || [[#GetMmcPartitionSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 112 || [2.0.0+] [[#GetMmcPatrolCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 113 || [2.0.0+] [[#GetAndClearMmcErrorInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 114 || [2.0.0+] [[#GetMmcExtendedCsd]]&lt;br /&gt;
|-&lt;br /&gt;
| 115 || [4.0.0+] [[#SuspendMmcPatrol]]&lt;br /&gt;
|-&lt;br /&gt;
| 116 || [4.0.0+] [[#ResumeMmcPatrol]]&lt;br /&gt;
|-&lt;br /&gt;
| 117 || [17.0.0+] EraseMmcWithRange&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[#IsGameCardInserted]]&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#EraseGameCard]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#GetGameCardHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#GetGameCardUpdatePartitionInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [[#FinalizeGameCardDriver]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#GetGameCardAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#GetGameCardDeviceCertificate]]&lt;br /&gt;
|-&lt;br /&gt;
| 207 || [[#GetGameCardAsicInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 208 || [[#GetGameCardIdSet]]&lt;br /&gt;
|-&lt;br /&gt;
| 209 || [[#WriteToGameCardDirectly]]&lt;br /&gt;
|-&lt;br /&gt;
| 210 || [[#SetVerifyWriteEnalbleFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 211 || [[#GetGameCardImageHash]]&lt;br /&gt;
|-&lt;br /&gt;
| 212 || [2.0.0+] [[#GetGameCardDeviceIdForProdCard]]&lt;br /&gt;
|-&lt;br /&gt;
| 213 || [2.0.0+] [[#EraseAndWriteParamDirectly]]&lt;br /&gt;
|-&lt;br /&gt;
| 214 || [2.0.0+] [[#ReadParamDirectly]]&lt;br /&gt;
|-&lt;br /&gt;
| 215 || [2.0.0+] [[#ForceEraseGameCard]]&lt;br /&gt;
|-&lt;br /&gt;
| 216 || [2.0.0+] [[#GetGameCardErrorInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 217 || [2.1.0+] [[#GetGameCardErrorReportInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 218 || [3.0.0+] [[#GetGameCardDeviceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 219 || [8.0.0+] [[#ChallengeCardExistence]]&lt;br /&gt;
|-&lt;br /&gt;
| 220 || [9.0.0+] [[#GetGameCardCompatibilityType]]&lt;br /&gt;
|-&lt;br /&gt;
| 221 || [17.0.0+] GetGameCardAsicCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [[#SetSpeedEmulationMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [[#GetSpeedEmulationMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [5.0.0+] [[#SuspendSdmmcControl]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [5.0.0+] [[#ResumeSdmmcControl]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [6.0.0+] [[#GetSdmmcConnectionStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [6.0.0+] [[#SetDeviceSimulationEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 501 || [6.0.0+] [[#ClearDeviceSimulationEvent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IsSdCardInserted ==&lt;br /&gt;
No input. Returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== GetSdCardSpeedMode ==&lt;br /&gt;
No input. Returns an output [[#SdCardSpeedMode]].&lt;br /&gt;
&lt;br /&gt;
== GetSdCardCid ==&lt;br /&gt;
Takes a type-0x6 output buffer and an input s64 &#039;&#039;&#039;BufferSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== GetSdCardUserAreaSize ==&lt;br /&gt;
No input. Returns an output s64 &#039;&#039;&#039;SdCardUserAreaSize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== GetSdCardProtectedAreaSize ==&lt;br /&gt;
No input. Returns an output s64 &#039;&#039;&#039;SdCardProtectedAreaSize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== GetAndClearSdCardErrorInfo ==&lt;br /&gt;
Takes a type-0x6 output buffer &#039;&#039;&#039;LogBuffer&#039;&#039;&#039; and an input s64 &#039;&#039;&#039;LogBufferSize&#039;&#039;&#039;. Returns an output [[#StorageErrorInfo]] and an output s64 &#039;&#039;&#039;LogSize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== GetMmcCid ==&lt;br /&gt;
Takes a type-0x6 output buffer and an input s64 &#039;&#039;&#039;BufferSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== GetMmcSpeedMode ==&lt;br /&gt;
No input. Returns an output [[#MmcSpeedMode]].&lt;br /&gt;
&lt;br /&gt;
== EraseMmc ==&lt;br /&gt;
Takes an input [[#MmcPartition]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetMmcPartitionSize ==&lt;br /&gt;
Takes an input [[#MmcPartition]]. Returns an output s64 &#039;&#039;&#039;MmcPartitionSize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== GetMmcPatrolCount ==&lt;br /&gt;
No input. Returns an output u32 &#039;&#039;&#039;MmcPatrolCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== GetAndClearMmcErrorInfo ==&lt;br /&gt;
Takes a type-0x6 output buffer &#039;&#039;&#039;LogBuffer&#039;&#039;&#039; and an input s64 &#039;&#039;&#039;LogBufferSize&#039;&#039;&#039;. Returns an output [[#StorageErrorInfo]] and an output s64 &#039;&#039;&#039;LogSize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== GetMmcExtendedCsd ==&lt;br /&gt;
Takes a type-0x6 output buffer and an input s64 &#039;&#039;&#039;BufferSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== SuspendMmcPatrol ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== ResumeMmcPatrol ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== IsGameCardInserted ==&lt;br /&gt;
No input. Returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== EraseGameCard ==&lt;br /&gt;
Takes an input [[#GameCardSize]] and an input u64 &#039;&#039;&#039;NormalAreaSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== GetGameCardHandle ==&lt;br /&gt;
No input. Returns an output [[#GameCardHandle]].&lt;br /&gt;
&lt;br /&gt;
== GetGameCardUpdatePartitionInfo ==&lt;br /&gt;
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardUpdatePartitionInfo]].&lt;br /&gt;
&lt;br /&gt;
== FinalizeGameCardDriver ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== GetGameCardAttribute ==&lt;br /&gt;
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardAttribute]].&lt;br /&gt;
&lt;br /&gt;
== GetGameCardDeviceCertificate ==&lt;br /&gt;
Takes a type-0x6 output buffer, an input s64 &#039;&#039;&#039;BufferSize&#039;&#039;&#039; and an input [[#GameCardHandle]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetGameCardAsicInfo ==&lt;br /&gt;
Takes a type-0x5 input buffer &#039;&#039;&#039;FwBuffer&#039;&#039;&#039;, a type-0x6 output buffer containing [[#RmaInformation]] and two input s64s &#039;&#039;&#039;FwBufferSize&#039;&#039;&#039; and &#039;&#039;&#039;RmaInformationSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== GetGameCardIdSet ==&lt;br /&gt;
Takes a type-0x6 output buffer containing a [[#GameCardIdSet]] and an input s64 &#039;&#039;&#039;BufferSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== WriteToGameCardDirectly ==&lt;br /&gt;
Takes a type-0x6 output buffer and two input s64s &#039;&#039;&#039;Offset&#039;&#039;&#039; and &#039;&#039;&#039;BufferSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== SetVerifyWriteEnalbleFlag ==&lt;br /&gt;
Takes an input bool. No output.&lt;br /&gt;
&lt;br /&gt;
== GetGameCardImageHash ==&lt;br /&gt;
Takes a type-0x6 output buffer, an input s64 &#039;&#039;&#039;BufferSize&#039;&#039;&#039; and an input [[#GameCardHandle]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetGameCardDeviceIdForProdCard ==&lt;br /&gt;
Takes a type-0x5 input buffer &#039;&#039;&#039;CardHeaderForDev&#039;&#039;&#039;, a type-0x6 output buffer and two input s64s &#039;&#039;&#039;CardHeaderForDevSize&#039;&#039;&#039; and &#039;&#039;&#039;BufferSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== EraseAndWriteParamDirectly ==&lt;br /&gt;
Takes a type-0x5 input buffer and an input s64 &#039;&#039;&#039;BufferSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== ReadParamDirectly ==&lt;br /&gt;
Takes a type-0x6 output buffer and an input s64 &#039;&#039;&#039;BufferSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== ForceEraseGameCard ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== GetGameCardErrorInfo ==&lt;br /&gt;
No input. Returns an output [[#GameCardErrorInfo]].&lt;br /&gt;
&lt;br /&gt;
== GetGameCardErrorReportInfo ==&lt;br /&gt;
No input. Returns an output [[#GameCardErrorReportInfo]].&lt;br /&gt;
&lt;br /&gt;
== GetGameCardDeviceId ==&lt;br /&gt;
Takes a type-0x6 output buffer and an input s64 &#039;&#039;&#039;BufferSize&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== ChallengeCardExistence ==&lt;br /&gt;
Takes a type-0x6 output buffer, two type-0x5 input buffers and an input [[#GameCardHandle]]. No output.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] The [[Account_services|account]] system module uses this as part of a new challenge-response mechanism for [[Network#aauth|application authentication]].&lt;br /&gt;
&lt;br /&gt;
== GetGameCardCompatibilityType ==&lt;br /&gt;
Takes an input [[#GameCardHandle]]. Returns an output [[#GameCardCompatibilityType]].&lt;br /&gt;
&lt;br /&gt;
== SetSpeedEmulationMode ==&lt;br /&gt;
Takes an input [[#SpeedEmulationMode]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetSpeedEmulationMode ==&lt;br /&gt;
No input. Returns an output [[#SpeedEmulationMode]].&lt;br /&gt;
&lt;br /&gt;
== SuspendSdmmcControl ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== ResumeSdmmcControl ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== GetSdmmcConnectionStatus ==&lt;br /&gt;
Takes a total of 4-bytes of input. Returns a total of 8-bytes of output.&lt;br /&gt;
&lt;br /&gt;
== SetDeviceSimulationEvent == &lt;br /&gt;
Takes a total of 0x14-bytes of input. No output.&lt;br /&gt;
&lt;br /&gt;
== ClearDeviceSimulationEvent ==&lt;br /&gt;
Takes a total of 4-bytes of input. No output.&lt;br /&gt;
&lt;br /&gt;
= IEventNotifier =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IEventNotifier&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetEventHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetEventHandle ==&lt;br /&gt;
No input, returns an output Event handle. With official sw the EventClearMode is user-specified.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataTransferManager =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataTransferManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[4.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetChallenge]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#SetToken]]&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [[#OpenSaveDataExporter]]&lt;br /&gt;
|-&lt;br /&gt;
| 64 || [[#OpenSaveDataImporter]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetChallenge ==&lt;br /&gt;
No input/output, takes a type-0x6 output buffer.&lt;br /&gt;
&lt;br /&gt;
== SetToken ==&lt;br /&gt;
No input/output, takes a type-0x5 input buffer.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataExporter ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]] and u64, returns an [[#ISaveDataExporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataImporter ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]] and a 0x10-byte userID, and a type-0x5 input buffer. Returns an output u64 and an [[#ISaveDataImporter]].&lt;br /&gt;
&lt;br /&gt;
= ISaveDataTransferManagerForSaveDataRepair =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[9.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetChallenge]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#SetKeyPackage]]&lt;br /&gt;
|-&lt;br /&gt;
| 80 || [[#OpenSaveDataExporterAndGetEncryptedKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 81 || [[#PrepareOpenSaveDataImporter]]&lt;br /&gt;
|-&lt;br /&gt;
| 90 || [[#OpenSaveDataImporter]]&lt;br /&gt;
|-&lt;br /&gt;
| 91 || [[#OpenSaveDataImporter2]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#OpenSaveDataExporterWithKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 110 || [[#OpenSaveDataImporterWithKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetKeyPackage ==&lt;br /&gt;
No input/output, takes a type-0x5 input buffer.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataExporterAndGetEncryptedKey ==&lt;br /&gt;
Takes a total of 0x10-bytes of input and a type-0x1A output buffer to receive a RsaEncryptedKey. Returns an [[#ISaveDataDivisionExporter]].&lt;br /&gt;
&lt;br /&gt;
== PrepareOpenSaveDataImporter ==&lt;br /&gt;
Takes a type-0x1A output buffer to receive a RsaEncryptedKey.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataImporter ==&lt;br /&gt;
Takes a total of 0x18-bytes of input and two type-0x5 input buffers, returns an [[#ISaveDataDivisionImporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataImporter2 ==&lt;br /&gt;
Takes a total of 0x18-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataExporterWithKey ==&lt;br /&gt;
Takes a total of 0x20-bytes of input, returns an [[#ISaveDataDivisionExporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataImporterWithKey ==&lt;br /&gt;
Takes a total of 0x28-bytes of input and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].&lt;br /&gt;
&lt;br /&gt;
[17.0.0+] Now only takes 0x18-bytes of input and an additional type-0x5 input buffer.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataMover =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataMover&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[10.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#Register]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#Process]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#Cancel]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Register ==&lt;br /&gt;
Takes an input u64, no output.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
Takes an input u64, returns an output u64.&lt;br /&gt;
&lt;br /&gt;
== Cancel ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataTransferManagerForRepair =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataTransferManagerForRepair&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[11.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 80 || [[#OpenSaveDataExporter]]&lt;br /&gt;
|-&lt;br /&gt;
| 90 || [[#OpenSaveDataImporter]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataExporter ==&lt;br /&gt;
Takes a total of 0x10-bytes of input, returns an [[#ISaveDataDivisionExporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataImporter ==&lt;br /&gt;
Takes 1-byte of input, a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].&lt;br /&gt;
&lt;br /&gt;
= ISaveDataExporter =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataExporter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[4.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetSaveDataInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetRestSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#Pull]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#PullInitialData]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetSaveDataInfo ==&lt;br /&gt;
No input/output, takes a type-0x1A [[#SaveDataInfo]] output buffer.&lt;br /&gt;
&lt;br /&gt;
The actual name for this is the SaveDataExporter constructor. This is used automatically after [[#OpenSaveDataExporter]] by official sw.&lt;br /&gt;
&lt;br /&gt;
== GetRestSize ==&lt;br /&gt;
No input, returns an output u64.&lt;br /&gt;
&lt;br /&gt;
== Pull ==&lt;br /&gt;
Takes a type-0x6 output buffer, returns an output u64.&lt;br /&gt;
&lt;br /&gt;
== PullInitialData ==&lt;br /&gt;
No input/output, takes a type-0x6 output buffer.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataImporter =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataImporter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[4.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetSaveDataInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetRestSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#Push]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#Finalize]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetSaveDataInfo ==&lt;br /&gt;
No input/output, takes a type-0x1A [[#GetSaveDataInfo]] output buffer.&lt;br /&gt;
&lt;br /&gt;
The actual name for this is the SaveDataImporter constructor. This is used automatically after [[#OpenSaveDataImporter]] by official sw.&lt;br /&gt;
&lt;br /&gt;
== GetRestSize ==&lt;br /&gt;
No input, returns an output u64.&lt;br /&gt;
&lt;br /&gt;
== Push ==&lt;br /&gt;
No input/output, takes a type-0x5 input buffer.&lt;br /&gt;
&lt;br /&gt;
== Finalize ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataTransferManagerWithDivision =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataTransferManagerWithDivision&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetChallenge]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#SetKeySeedPackage]]&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [[#OpenSaveDataExporter]]&lt;br /&gt;
|-&lt;br /&gt;
| 33 || [[#OpenSaveDataExporterForDiffExport]]&lt;br /&gt;
|-&lt;br /&gt;
| 34 || [6.0.0+] [[#OpenSaveDataExporterByContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 63 || [17.0.0+] OpenSaveDataImporter&lt;br /&gt;
|-&lt;br /&gt;
| 64 || [6.0.0+] [[#OpenSaveDataImporterDeprecated]] ([5.0.0-5.1.0] OpenSaveDataImporter)&lt;br /&gt;
|-&lt;br /&gt;
| 65 || [[#OpenSaveDataImporterForDiffImport]]&lt;br /&gt;
|-&lt;br /&gt;
| 66 || [6.0.0+] [[#OpenSaveDataImporterForDuplicateDiffImport]]&lt;br /&gt;
|-&lt;br /&gt;
| 67 || [6.0.0-16.1.0] [[#OpenSaveDataImporter]]&lt;br /&gt;
|-&lt;br /&gt;
| 68 || [6.0.0+] [[#OpenSaveDataImporterByContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 69 || [6.0.0+] [[#CancelSuspendingImport]]&lt;br /&gt;
|-&lt;br /&gt;
| 70 || [10.0.0+] DecryptAndVerifyInitialData&lt;br /&gt;
|-&lt;br /&gt;
| 80 || [11.0.0+] DecryptoAndVerifyPortContext&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetChallenge ==&lt;br /&gt;
No input/output, takes a type-0x6 output buffer containing the &#039;&#039;&#039;Challenge&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== SetKeySeedPackage ==&lt;br /&gt;
No input/output, takes a type-0x5 input buffer containing the &#039;&#039;&#039;KeySeedPackage&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataExporter ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]] and u64. Returns an [[#ISaveDataDivisionExporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataExporterForDiffExport ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionExporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataExporterByContext ==&lt;br /&gt;
No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionExporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataImporterDeprecated ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]], a 0x10-byte userID, and a type-0x5 input buffer [[#InitialDataVersion2]]. Returns an [[#ISaveDataDivisionImporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataImporterForDiffImport ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]], an u64, and a type-0x5 input buffer [[#InitialDataVersion2]], returns an [[#ISaveDataDivisionImporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataImporterForDuplicateDiffImport ==&lt;br /&gt;
Takes an input u8 and an u64, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataImporter ==&lt;br /&gt;
Takes an input u8, an u8(bool), a 0x10-byte struct, and a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataImporterByContext ==&lt;br /&gt;
No input/output, takes a type-0x5 input buffer, returns an [[#ISaveDataDivisionImporter]].&lt;br /&gt;
&lt;br /&gt;
== CancelSuspendingImport ==&lt;br /&gt;
Takes an input u64 and a 0x10-byte struct, no output.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataDivisionExporter =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataDivisionExporter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#SetDivisionCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [6.0.0+] [[#GetSaveDataInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#OpenSaveDataDiffChunkIterator]]&lt;br /&gt;
|-&lt;br /&gt;
| 48 || [[#OpenSaveDataChunkExporter]]&lt;br /&gt;
|-&lt;br /&gt;
| 64 || [6.0.0-8.1.0] [[#FinalizeFullExport]]&lt;br /&gt;
|-&lt;br /&gt;
| 65 || [6.0.0-8.1.0] [[#FinalizeDiffExport]]&lt;br /&gt;
|-&lt;br /&gt;
| 66 || [6.0.0+] [[#CancelExport]]&lt;br /&gt;
|-&lt;br /&gt;
| 67 || [6.0.0+] [[#SuspendExport]]&lt;br /&gt;
|-&lt;br /&gt;
| 70 || [6.0.0+] [[#GetKeySeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 71 || [6.0.0+] [[#GetInitialDataMac]]&lt;br /&gt;
|-&lt;br /&gt;
| 72 || [6.0.0+] [[#FinalizeExport]]&lt;br /&gt;
|-&lt;br /&gt;
| 73 || [9.0.0+] [[#GetInitialDataMacKeyGeneration]]&lt;br /&gt;
|-&lt;br /&gt;
| 80 || [6.0.0+] [[#GetImportInitialDataAad]]&lt;br /&gt;
|-&lt;br /&gt;
| 81 || [6.0.0+] [[#SetExportInitialDataAad]]&lt;br /&gt;
|-&lt;br /&gt;
| 96 || [6.0.0+] [[#GetReportInfo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetDivisionCount ==&lt;br /&gt;
Takes an input u32, no output.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataChunkExporter ==&lt;br /&gt;
Takes an input u32, returns an [[#ISaveDataChunkExporter]].&lt;br /&gt;
&lt;br /&gt;
== FinalizeFullExport ==&lt;br /&gt;
No input, returns two 0x10-byte output structs.&lt;br /&gt;
&lt;br /&gt;
== FinalizeDiffExport ==&lt;br /&gt;
No input, returns an output 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
== CancelExport ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SuspendExport ==&lt;br /&gt;
No input/output, takes a type-0x6 output buffer.&lt;br /&gt;
&lt;br /&gt;
== GetKeySeed ==&lt;br /&gt;
No input, returns an output 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
== GetInitialDataMac ==&lt;br /&gt;
No input, returns an output 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
== FinalizeExport ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetExportInitialDataAad ==&lt;br /&gt;
Takes an input 0x20-byte struct, no output.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataDivisionImporter =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataDivisionImporter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [6.0.0+] [[#GetSaveDataInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#OpenSaveDataDiffChunkIterator]]&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [[#InitializeImport]]&lt;br /&gt;
|-&lt;br /&gt;
| 33 || [[#FinalizeImport]]&lt;br /&gt;
|-&lt;br /&gt;
| 34 || [6.0.0+] [[#CancelImport]]&lt;br /&gt;
|-&lt;br /&gt;
| 35 || [6.0.0+] [[#GetImportContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 36 || [6.0.0+] [[#SuspendImport]]&lt;br /&gt;
|-&lt;br /&gt;
| 37 || [11.0.0+] FinalizeImportWithoutSwap&lt;br /&gt;
|-&lt;br /&gt;
| 48 || [[#OpenSaveDataChunkImporter]]&lt;br /&gt;
|-&lt;br /&gt;
| 64 || [6.0.0+] [[#GetImportInitialDataAad]]&lt;br /&gt;
|-&lt;br /&gt;
| 80 || [6.0.0+] [[#GetReportInfo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetSaveDataInfo ==&lt;br /&gt;
No input/output, takes a type-0x6 output buffer.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataDiffChunkIterator ==&lt;br /&gt;
No input, returns an [[#ISaveDataChunkIterator]].&lt;br /&gt;
&lt;br /&gt;
== InitializeImport ==&lt;br /&gt;
No input, returns an output u64.&lt;br /&gt;
&lt;br /&gt;
== FinalizeImport ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== CancelImport ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== GetImportContext ==&lt;br /&gt;
No input/output, takes a type-0x6 output buffer.&lt;br /&gt;
&lt;br /&gt;
== SuspendImport ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataChunkImporter ==&lt;br /&gt;
Takes an input u32, returns an [[#ISaveDataChunkImporter]].&lt;br /&gt;
&lt;br /&gt;
== GetImportInitialDataAad == &lt;br /&gt;
No input, returns an output 0x20-byte struct.&lt;br /&gt;
&lt;br /&gt;
== GetReportInfo ==&lt;br /&gt;
No input, returns an output 0x20-byte struct.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataChunkIterator =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataChunkIterator&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Next]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#IsEnd]] &lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetId]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Next ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== IsEnd ==&lt;br /&gt;
No input, returns an output u8.&lt;br /&gt;
&lt;br /&gt;
== GetId ==&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataChunkExporter =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataChunkExporter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Pull]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [6.0.0+] [[#GetRestRawDataSize]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pull ==&lt;br /&gt;
Takes an input u64 and a type-0x6 output buffer, returns an output u64.&lt;br /&gt;
&lt;br /&gt;
== GetRestRawDataSize ==&lt;br /&gt;
No input, returns an output u64.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataChunkImporter =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataChunkImporter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[5.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Push]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Push ==&lt;br /&gt;
Takes an input u64 and a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
= ISaveDataTransferProhibiter =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataTransferProhibiter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [6.0.0+].&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t seem to handle any commands (?).&lt;br /&gt;
&lt;br /&gt;
= IMultiCommitManager =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IMultiCommitManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [6.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Add]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Commit]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Add ==&lt;br /&gt;
Takes an input [[#IFilesystem]], no output.&lt;br /&gt;
&lt;br /&gt;
== Commit ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
= IWiper =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IWiper&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [[10.0.0]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Startup|Startup]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#Process_2|Process]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Startup ==&lt;br /&gt;
No input. Returns an u64.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
No input. Returns an u64.&lt;br /&gt;
&lt;br /&gt;
= IStorageDeviceManager =&lt;br /&gt;
This is &amp;quot;nn::fssrv::storage::sf::IStorageDeviceManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| N/A || IsInserted&lt;br /&gt;
|-&lt;br /&gt;
| N/A || IsHandleValid&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OpenDetectionEvent&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OpenOperator&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OpenDevice&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OpenStorage&lt;br /&gt;
|-&lt;br /&gt;
| N/A || Invalidate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IStorageDeviceOperator =&lt;br /&gt;
This is &amp;quot;nn::fssrv::storage::sf::IStorageDeviceOperator&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| N/A || Operate&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OperateIn&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OperateOut&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OperateOut2&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OperateInOut&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OperateIn2Out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IStorageDevice =&lt;br /&gt;
This is &amp;quot;nn::fssrv::storage::sf::IStorageDevice&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| N/A || GetHandle&lt;br /&gt;
|-&lt;br /&gt;
| N/A || IsHandleValid&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OpenOperator&lt;br /&gt;
|-&lt;br /&gt;
| N/A || Read&lt;br /&gt;
|-&lt;br /&gt;
| N/A || Write&lt;br /&gt;
|-&lt;br /&gt;
| N/A || Flush&lt;br /&gt;
|-&lt;br /&gt;
| N/A || SetSize&lt;br /&gt;
|-&lt;br /&gt;
| N/A || GetSize&lt;br /&gt;
|-&lt;br /&gt;
| N/A || OperateRange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FileSystemProxyType =&lt;br /&gt;
This is &amp;quot;nn::fs::FileSystemProxyType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Code&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Rom&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Logo&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Control&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Manual&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Meta&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Package&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [4.0.0+] RegisteredUpdate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ContentType =&lt;br /&gt;
This is &amp;quot;nn::fs::ContentType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Meta&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Control&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Manual&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Logo&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ContentAttributes =&lt;br /&gt;
This is &amp;quot;nn::fs::ContentAttributes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 15 || All&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ContentStorageId =&lt;br /&gt;
This is &amp;quot;nn::fs::ContentStorageId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || System&lt;br /&gt;
|-&lt;br /&gt;
| 1 || User&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SdCard&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [16.0.0+] System0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SaveDataSpaceId =&lt;br /&gt;
This is &amp;quot;nn::fs::SaveDataSpaceId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || System&lt;br /&gt;
|-&lt;br /&gt;
| 1 || User&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SdSystem&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] Temporary&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [4.0.0+] SdUser&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [3.0.0+] ProperSystem&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [3.0.0+] SafeMode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Determines the storage where the savedata is stored.&lt;br /&gt;
&lt;br /&gt;
= SaveDataType =&lt;br /&gt;
This is &amp;quot;nn::fs::SaveDataType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || System&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Account&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Bcat&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Device&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [3.0.0+] Temporary&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [3.0.0+] Cache&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [4.0.0+] SystemBcat&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SaveDataRank =&lt;br /&gt;
This is &amp;quot;nn::fs::SaveDataRank&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Primary&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secondary&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SaveDataEnumerateOption =&lt;br /&gt;
This is &amp;quot;nn::fs::SaveDataEnumerateOption&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AllRank&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SaveDataFlags =&lt;br /&gt;
This is &amp;quot;nn::fs::SaveDataFlags&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || KeepAfterResettingSystemSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 2 || KeepAfterRefurbishment&lt;br /&gt;
|-&lt;br /&gt;
| 4 || KeepAfterResettingSystemSaveDataWithoutUserSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 8 || NeedsSecureDelete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SaveDataMetaType =&lt;br /&gt;
This is &amp;quot;nn::fs::SaveDataMetaType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Thumbnail&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExtensionContext&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ImageDirectoryId =&lt;br /&gt;
This is &amp;quot;nn::fs::ImageDirectoryId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Nand&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SdCard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CloudBackupWorkStorageId =&lt;br /&gt;
This is &amp;quot;nn::fs::CloudBackupWorkStorageId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Nand&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SdCard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CustomStorageId =&lt;br /&gt;
This is &amp;quot;nn::fs::CustomStorageId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || System&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SdCard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Priority =&lt;br /&gt;
This is &amp;quot;nn::fs::Priority&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Realtime&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Low&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PriorityRaw =&lt;br /&gt;
This is &amp;quot;nn::fs::PriorityRaw&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Realtime&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Low&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Background&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AbortSpecifier =&lt;br /&gt;
This is &amp;quot;nn::fs::AbortSpecifier&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Default&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Abort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ReturnResult&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= OperationId =&lt;br /&gt;
This is &amp;quot;nn::fs::OperationId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Clear&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ClearSignature&lt;br /&gt;
|-&lt;br /&gt;
| 2 || InvalidateCache&lt;br /&gt;
|-&lt;br /&gt;
| 3 || QueryRange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MountHostOption =&lt;br /&gt;
This is &amp;quot;nn::fs::MountHostOption&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PseudoCaseSensitive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BisPartitionId =&lt;br /&gt;
This is &amp;quot;nn::fs::BisPartitionId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || BootPartition1Root&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BootPartition2Root&lt;br /&gt;
|-&lt;br /&gt;
| 20 || UserDataRoot&lt;br /&gt;
|-&lt;br /&gt;
| 21 || BootConfigAndPackage2Part1&lt;br /&gt;
|-&lt;br /&gt;
| 22 || BootConfigAndPackage2Part2&lt;br /&gt;
|-&lt;br /&gt;
| 23 || BootConfigAndPackage2Part3&lt;br /&gt;
|-&lt;br /&gt;
| 24 || BootConfigAndPackage2Part4&lt;br /&gt;
|-&lt;br /&gt;
| 25 || BootConfigAndPackage2Part5&lt;br /&gt;
|-&lt;br /&gt;
| 26 || BootConfigAndPackage2Part6&lt;br /&gt;
|-&lt;br /&gt;
| 27 || CalibrationBinary&lt;br /&gt;
|-&lt;br /&gt;
| 28 || CalibrationFile&lt;br /&gt;
|-&lt;br /&gt;
| 29 || SafeMode&lt;br /&gt;
|-&lt;br /&gt;
| 30 || User&lt;br /&gt;
|-&lt;br /&gt;
| 31 || System&lt;br /&gt;
|-&lt;br /&gt;
| 32 || SystemProperEncryption&lt;br /&gt;
|-&lt;br /&gt;
| 33 || SystemProperPartition&lt;br /&gt;
|-&lt;br /&gt;
| 34 || SignedSystemPartitionOnSafeMode&lt;br /&gt;
|-&lt;br /&gt;
| 35 || [16.0.0+] DeviceTreeBlob&lt;br /&gt;
|-&lt;br /&gt;
| 36 || [16.0.0+] System0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SdCardSpeedMode =&lt;br /&gt;
This is &amp;quot;nn::fs::SdCardSpeedMode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Identification&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DefaultSpeed&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HighSpeed&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Sdr12&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Sdr25&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Sdr50&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Sdr104&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Ddr50&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MmcSpeedMode =&lt;br /&gt;
This is &amp;quot;nn::fs::MmcSpeedMode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Identification&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LegacySpeed&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HighSpeed&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Hs200&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Hs400&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MmcPartition =&lt;br /&gt;
This is &amp;quot;nn::fs::MmcPartition&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || UserData&lt;br /&gt;
|-&lt;br /&gt;
| 1 || BootPartition1&lt;br /&gt;
|-&lt;br /&gt;
| 2 || BootPartition2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MemoryReportInfo =&lt;br /&gt;
This is &amp;quot;nn::fs::MemoryReportInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| PooledBufferFreeSizePeak&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| PooledBufferRetriedCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| PooledBufferReduceAllocationCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferManagerFreeSizePeak&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferManagerRetriedCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| ExpHeapFreeSizePeak&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferPoolFreeSizePeak&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| PatrolReadAllocateBufferSuccessCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x8&lt;br /&gt;
| PatrolReadAllocateBufferFailureCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferManagerTotalAllocatableSizePeak&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferPoolAllocateSizeMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x8&lt;br /&gt;
| PooledBufferFailedIdealAllocationCountOnAsyncAccess&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x20&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= StorageErrorInfo =&lt;br /&gt;
This is &amp;quot;nn::fs::StorageErrorInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| NumActivationFailures&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| NumActivationErrorCorrections&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| NumReadWriteFailures&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| NumReadWriteErrorCorrections&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GameCardErrorInfo =&lt;br /&gt;
This is &amp;quot;nn::fs::GameCardErrorInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| GameCardCrcErrorCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| AsicCrcErrorCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x2&lt;br /&gt;
| RefreshCount&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x2&lt;br /&gt;
| ReadRetryCount&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| TimeoutRetryErrorCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GameCardErrorReportInfo =&lt;br /&gt;
This is &amp;quot;nn::fs::GameCardErrorReportInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[#GameCardErrorInfo|ErrorInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| AsicReinitializeFailureDetail&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| InsertionCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x2&lt;br /&gt;
| RemovalCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x2&lt;br /&gt;
| AsicReinitializeCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| AsicInitializeCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| AsicReinitializeFailureCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x2&lt;br /&gt;
| AwakenFailureCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x2&lt;br /&gt;
| RefreshCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| LastReadErrorPageAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| LastReadErrorPageCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| AwakenCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| ReadCountFromInsert&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| ReadCountFromAwaken&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GameCardHandle =&lt;br /&gt;
This is &amp;quot;nn::fs::GameCardHandle&amp;quot;. This is an u32. &lt;br /&gt;
&lt;br /&gt;
= GameCardPartition =&lt;br /&gt;
This is &amp;quot;nn::fs::GameCardPartition&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Update&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Secure&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [4.0.0+] Logo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GameCardPartitionRaw =&lt;br /&gt;
This is &amp;quot;nn::fs::GameCardPartitionRaw&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NormalReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SecureReadOnly&lt;br /&gt;
|-&lt;br /&gt;
| 2 || RootWriteOnly&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GameCardAttribute =&lt;br /&gt;
This is &amp;quot;nn::fs::GameCardAttribute&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AutoBootFlag&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HistoryEraseFlag&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [4.0.0+] RepairToolFlag&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [9.0.0+] DifferentRegionCupToTerraDeviceFlag&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [9.0.0+] DifferentRegionCupToGlobalDeviceFlag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GameCardSize =&lt;br /&gt;
This is &amp;quot;nn::fs::GameCardSize&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Size1GB&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Size2GB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Size4GB&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Size8GB&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Size16GB&lt;br /&gt;
|-&lt;br /&gt;
| 32 || Size32GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GameCardClockRate =&lt;br /&gt;
This is &amp;quot;nn::fs::GameCardClockRate&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 25 || ClockRate25MHz&lt;br /&gt;
|-&lt;br /&gt;
| 50 || ClockRate50MHz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GameCardCompatibilityType =&lt;br /&gt;
This is &amp;quot;nn::fs::GameCardCompatibilityType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Global&lt;br /&gt;
|-&lt;br /&gt;
| 1 || China&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GameCardUpdatePartitionInfo =&lt;br /&gt;
This is &amp;quot;nn::fs::GameCardUpdatePartitionInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GameCardIdSet =&lt;br /&gt;
This is &amp;quot;nn::gc::GameCardIdSet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#CardId1|Id1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#CardId2|Id2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#CardId3|Id3]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CardId1 =&lt;br /&gt;
This is &amp;quot;nn::gc::detail::CardId1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#MakerCodeForCardId1|MakerCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#MemoryCapacity|MemoryCapacity]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| MemoryType&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CardId2 =&lt;br /&gt;
This is &amp;quot;nn::gc::detail::CardId2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| CardSecurityNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| CardType&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CardId3 =&lt;br /&gt;
This is &amp;quot;nn::gc::detail::CardId3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MakerCodeForCardId1 =&lt;br /&gt;
This is &amp;quot;nn::gc::detail::MakerCodeForCardId1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xC2 || MegaChips&lt;br /&gt;
|-&lt;br /&gt;
| 0xAE || Lapis&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MemoryCapacity =&lt;br /&gt;
This is &amp;quot;nn::gc::detail::MemoryCapacity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0xFA || 1GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8 || 2GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || 4GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 8GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xE1 || 16GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xE2 || 32GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RmaInformation =&lt;br /&gt;
This is &amp;quot;nn::gc::RmaInformation&amp;quot;. This is a 0x200-byte struct.&lt;br /&gt;
&lt;br /&gt;
= SimulatingDeviceType =&lt;br /&gt;
This is &amp;quot;nn::fs::SimulatingDeviceType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || eMMC&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SdCard&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GameCard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SimulatingDeviceDetectionMode =&lt;br /&gt;
This is &amp;quot;nn::fs::SimulatingDeviceDetectionMode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NoSimulation&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeviceAttached&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceRemoved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SimulatingDeviceAccessFailureEventType =&lt;br /&gt;
This is &amp;quot;nn::fs::SimulatingDeviceAccessFailureEventType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AccessTimeoutFailure&lt;br /&gt;
|-&lt;br /&gt;
| 2 || AccessFailure&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DataCorruption&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SimulatingDeviceTargetOperation =&lt;br /&gt;
This is &amp;quot;nn::fs::SimulatingDeviceTargetOperation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Read&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SpeedEmulationMode =&lt;br /&gt;
This is &amp;quot;nn::fs::SpeedEmulationMode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Faster&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Slower&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Random&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FspPath =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::FspPath&amp;quot;. This is a 0x301-byte string.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Path || Notes&lt;br /&gt;
|-&lt;br /&gt;
| @SystemContent ||&lt;br /&gt;
|- &lt;br /&gt;
| @UserContent ||&lt;br /&gt;
|-&lt;br /&gt;
| @SdCardContent ||&lt;br /&gt;
|-&lt;br /&gt;
| @CalibFile ||&lt;br /&gt;
|-&lt;br /&gt;
| @Safe ||&lt;br /&gt;
|-&lt;br /&gt;
| @User ||&lt;br /&gt;
|-&lt;br /&gt;
| @System ||&lt;br /&gt;
|-&lt;br /&gt;
| @Sdcard ||&lt;br /&gt;
|-&lt;br /&gt;
| @Host ||&lt;br /&gt;
|-&lt;br /&gt;
| @GcApp || Gamecard App partition (Partition 2)&lt;br /&gt;
|-&lt;br /&gt;
| @GcXYYYYYYYY || Gamecard Contents. X is the partition type (U - Update, N - Normal, S - Secure). Y is the gamecard handle as a 32-bit hex value &lt;br /&gt;
|-&lt;br /&gt;
| @upp || Gamecard update partition (Partition 0)&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] @RegUpdate || Registered update partition&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SaveDataAttribute =&lt;br /&gt;
This is &amp;quot;nn::fs::SaveDataAttribute&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[NCM_services#ApplicationId|ApplicationId]] (0 for SystemSaveData)&amp;lt;/br&amp;gt;SaveData: 0 can be used for accessing the savedata associated with the current FS session [[NCM_services#ApplicationId|ApplicationId]], otherwise when set this is the [[NCM_services#ApplicationId|ApplicationId]] associated with the savedata to access.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x10&lt;br /&gt;
| UserId&amp;lt;/br&amp;gt;For user-specific savedata(saveuser) when set, otherwise when zero this indicates the common savedata(savecommon). This is loaded from [[Account_services]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[Flash_Filesystem|SystemSaveDataId]] (0 for SaveData)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#SaveDataType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#SaveDataRank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x2&lt;br /&gt;
| SaveDataIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0 for SystemSaveData/SaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0 for SystemSaveData/SaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0 for SystemSaveData/SaveData.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Total size is 0x40-bytes.&lt;br /&gt;
&lt;br /&gt;
For DeviceSaveData, this struct is all-zero except for the [[#SaveDataType]] field (and optionally the ApplicationId if specified).&lt;br /&gt;
&lt;br /&gt;
= SaveDataCreationInfo =&lt;br /&gt;
This is &amp;quot;nn::fs::SaveDataCreationInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| JournalSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| AvailableSize&amp;lt;/br&amp;gt;0x4000 for SystemSaveData/SaveData/DeviceSaveData/BcatSaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| OwnerId&amp;lt;/br&amp;gt;Official user-processes only uses 0 here for SystemSaveData/SaveData. For the dedicated save-creation code with SaveData/DeviceSaveData, this value comes from an input param with official user-processes. For BcatSaveData, this is the hard-coded [[NCM_services#ProgramId|ProgramId]] of the bcat-sysmodule.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SaveDataFlags]]&amp;lt;/br&amp;gt;Written using an input param for official user-processes. Hard-coded 0 for BcatSaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#SaveDataSpaceId]]&amp;lt;/br&amp;gt;Official user-processes only uses 0 here for SystemSaveData, 1 for SaveData/DeviceSaveData/BcatSaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown. 0 for SystemSaveData/SaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x1A&lt;br /&gt;
| Not initialized for SystemSaveData/SaveData.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Total size is 0x40-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceSaveData =&lt;br /&gt;
This is accessed using the same commands for SaveData with the same input u8, the only difference compared to SaveData is the [[#SaveDataAttribute]].&lt;br /&gt;
&lt;br /&gt;
= BcatSaveData =&lt;br /&gt;
This is accessed using the same commands for SaveData with the same input u8. The [[#SaveDataAttribute]] is the same as DeviceSaveData (besides the SaveDataType), except that the [[NCM_services#ApplicationId|ApplicationId]] field is always set to &amp;lt;input ApplicationId&amp;gt; (unlike DeviceSaveData where it&#039;s optional). See above regarding [[#SaveDataCreationInfo]].&lt;br /&gt;
&lt;br /&gt;
The 0x10-byte struct passed to [[#CreateSaveDataFileSystem]] has the first 0x5-bytes set to all-zero.&lt;br /&gt;
&lt;br /&gt;
MountSystemBcatSaveData uses [[#OpenSaveDataFileSystemBySystemSaveDataId]] with [[#SaveDataSpaceId]] System. The [[#SaveDataAttribute]] is all-zero, except for the SaveDataType, and SystemSaveDataId is set to the input param.&lt;br /&gt;
&lt;br /&gt;
= SaveDataInfo =&lt;br /&gt;
This is &amp;quot;nn::fs::SaveDataInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataId&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#SaveDataSpaceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#SaveDataType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x6&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| UserId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| SystemSaveDataId (0 for regular SaveData)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[NCM_services#ApplicationId|ApplicationId]] (for regular SaveData)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| Raw saveimage size&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x2&lt;br /&gt;
| SaveDataIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#SaveDataRank]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 0x25&lt;br /&gt;
| Unknown. Usually zeros?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a 0x60-byte struct.&lt;br /&gt;
&lt;br /&gt;
= SaveDataFileSystemExtraData =&lt;br /&gt;
This is a 0x200-byte struct. Appears to match [[Savegames#Extra_data]].&lt;br /&gt;
&lt;br /&gt;
= InitialDataVersion2 =&lt;br /&gt;
This is a 0x8210-byte struct used by [[#ISaveDataTransferManagerWithDivision]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NPDM&amp;diff=11669</id>
		<title>NPDM</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NPDM&amp;diff=11669"/>
		<updated>2022-04-18T20:10:31Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Switch equivalent of 3DS [https://www.3dbrew.org/wiki/NCCH/Extended_Header exheader]. This is the file with extension &amp;quot;.npdm&amp;quot; in {Switch ExeFS}. The size of this file varies.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| [[#META|META]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;Varies&amp;gt;&lt;br /&gt;
| [[#ACID|ACID]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| [[#ACI0|ACI0]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= META =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;META&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| [9.0.0+] SignatureKeyGeneration&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Flags|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#MainThreadPriority|MainThreadPriority]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| MainThreadCoreNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [3.0.0+] [[#SystemResourceSize|SystemResourceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Version|Version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#MainThreadStackSize|MainThreadStackSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Name (usually/always &amp;quot;Application&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| ProductCode (usually/always all zeroes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0|AciOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0|AciSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID|AcidOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID|AcidSize]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Is64BitInstruction&lt;br /&gt;
|-&lt;br /&gt;
| 1-3&lt;br /&gt;
| ProcessAddressSpace (0x00 = AddressSpace32Bit, 0x01 = AddressSpace64BitOld, 0x02 = AddressSpace32BitNoReserved, 0x03 = AddressSpace64Bit)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [7.0.0+] OptimizeMemoryAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [11.0.0+] DisableDeviceAddressSpaceMerge&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MainThreadPriority ==&lt;br /&gt;
Ranges from 0 to 0x3F.&lt;br /&gt;
&lt;br /&gt;
== SystemResourceSize ==&lt;br /&gt;
This is the size of PersonalMmHeap. Maximum size as of 5.0.0 is 0x1FE00000.&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
0 for all titles.&lt;br /&gt;
&lt;br /&gt;
[8.1.0+] Now set to 1 for certain titles.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now set to a proper version field for all titles.&lt;br /&gt;
&lt;br /&gt;
== MainThreadStackSize ==&lt;br /&gt;
Must be aligned to 0x1000.&lt;br /&gt;
&lt;br /&gt;
In non-nspwn scenarios, values of 0 can also rarely break in Horizon. This might be something auto-adapting or a security feature of some sort?&lt;br /&gt;
&lt;br /&gt;
= ACID =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the data starting at 0x100 with the size field from 0x204&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 public key for the second [[NCA_Format|NCA]] signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;ACID&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| 0x1&lt;br /&gt;
| [14.0.0+] &lt;br /&gt;
|-&lt;br /&gt;
| 0x20A&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Flags_2|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x224&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x228&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x234&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x238&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ProductionFlag&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| UnqualifiedApproval&lt;br /&gt;
|-&lt;br /&gt;
| 2-5&lt;br /&gt;
| [5.0.0+] MemoryRegion (0 = Application, 1 = Applet, 2 = SecureSystem, 3 = NonSecureSystem)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MemoryRegion is set to Application for &amp;quot;starter&amp;quot; and NonSecureSystem for &amp;quot;nvservices&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= ACI0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;ACI0&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsAccessControl =&lt;br /&gt;
For [[#ACID|ACID]] this is a simple descriptor as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [5.0.0+] ContentOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| [5.0.0+] SaveDataOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#FsAccessFlag|FsAccessFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentOwnerIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentOwnerIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x8 * ContentOwnerIdCount&lt;br /&gt;
| [5.0.0+] ContentOwnerIds&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x8 * SaveDataOwnerIdCount&lt;br /&gt;
| [5.0.0+] SaveDataOwnerIds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For [[#ACI0|ACI0]] this embeds data as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#FsAccessFlag|FsAccessFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentOwnerInfoOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentOwnerInfoSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerInfoOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerInfoSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| (Optional) ContentOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8 * ContentOwnerIdCount&lt;br /&gt;
| ContentOwnerIds&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x1 * SaveDataOwnerIdCount&lt;br /&gt;
| Accessibilities (1=Read, 2=Write, 3=ReadWrite)&lt;br /&gt;
|-&lt;br /&gt;
| Variable (padded to nearest 4 bytes)&lt;br /&gt;
| 0x8 * SaveDataOwnerIdCount&lt;br /&gt;
| SaveDataOwnerIds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FsAccessFlag ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ApplicationInfo&lt;br /&gt;
| MountContent* is accessible when set.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| BootModeControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Calibration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| GameCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| SaveDataBackUp&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| SaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| BisAllRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| GameCardRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| GameCardPrivate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| SetTime&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| ContentManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| ImageManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| CreateSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| SystemSaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| BisFileSystem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| SystemUpdate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| SaveDataMeta&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| DeviceSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| SettingsControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| SystemData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| SdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Host&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FillBis&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| CorruptSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SaveDataForDebug&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| FormatSdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| GetRightsId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| RegisterExternalKey&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| RegisterUpdatePartition&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| SaveDataTransfer&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| DeviceDetection&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| AccessFailureResolution&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| SaveDataTransferVersion2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| RegisterProgramIndexMapInfo&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 35&lt;br /&gt;
| CreateOwnSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 36&lt;br /&gt;
| MoveCacheStorage&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 37-61&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 62&lt;br /&gt;
| Debug&lt;br /&gt;
| See [[SPL_services#GetConfig|here]].&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| FullPermission&lt;br /&gt;
| Enables access to everything: all [[Filesystem_services#Permissions|permission types]] which check a bitmask have this bit set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls the [[Filesystem_services#Permissions|filesystem permissions]].&lt;br /&gt;
&lt;br /&gt;
Web-applets permissions:&lt;br /&gt;
* &amp;quot;LibAppletWeb&amp;quot; and &amp;quot;LibAppletOff&amp;quot; have same access control: bit0 and bit3 set, and bit62 set.&lt;br /&gt;
* Rest of the web-applets: Same as above except bit0 isn&#039;t set.&lt;br /&gt;
&lt;br /&gt;
= Service Access Control =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Size (length of the service-name without null-terminator minus 1)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| IsServer (service is allowed to be registered)&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a list of [[Services_API|service]]-name strings which the title has access to.&lt;br /&gt;
&lt;br /&gt;
The service name string starts after the first byte and supports the wildcard &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
= KernelCapability =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pattern of lower bits&lt;br /&gt;
! Lowest clear bitmask/bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxxx0111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit3&lt;br /&gt;
| [[#ThreadInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxx01111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit4&lt;br /&gt;
| [[#EnableSystemCalls]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxx0111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit6&lt;br /&gt;
| [[#MemoryMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxx01111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit7&lt;br /&gt;
| [[#IoMemoryMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxx01111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit10&lt;br /&gt;
| [8.0.0+] [[#MemoryRegionMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxx011111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit11&lt;br /&gt;
| [[#EnableInterrupts]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxx01111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit13&lt;br /&gt;
| [[#MiscParams]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bx011111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit14&lt;br /&gt;
| [[#KernelVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b0111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit15&lt;br /&gt;
| [[#HandleTableSize]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b1111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit16&lt;br /&gt;
| [[#MiscFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| All ones&lt;br /&gt;
| &lt;br /&gt;
| Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These descriptors are identified by pattern 01..11 in low bits.&lt;br /&gt;
&lt;br /&gt;
== ThreadInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 4-9&lt;br /&gt;
| LowestPriority&lt;br /&gt;
|-&lt;br /&gt;
| 10-15&lt;br /&gt;
| HighestPriority&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| MinCoreNumber&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| MaxCoreNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EnableSystemCalls ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 5-28&lt;br /&gt;
| SystemCallId&lt;br /&gt;
|-&lt;br /&gt;
| 29-31&lt;br /&gt;
| Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryMap ==&lt;br /&gt;
MemoryMap entries are stored in pairs. The first pair will contain BeginAddress and PermissionType, while the second pair will contain Size and MappingType.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-30&lt;br /&gt;
| BeginAddress&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| PermissionType (0=RW, 1=RO)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-26&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 27-30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| MappingType (0=Io, 1=Static)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Restrictions ===&lt;br /&gt;
The physaddr range 0x80060000-0x2000000000 is not allowed to be mapped as IO.&lt;br /&gt;
The physaddr range 0x80000000-0x2000000000 is not allowed to be mapped as Normal.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] The range for IO was changed into 0x80060000-0x81D3FFFF.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] A blacklist was added for IO and Normal mappings:&lt;br /&gt;
* 0x50040000-0x50060000 (ARM, Interrupt Controller)&lt;br /&gt;
* 0x6000F000 (Exception Vectors)&lt;br /&gt;
* 0x6001DC00-0x6001E000 (IPATCH)&lt;br /&gt;
* 0x7000E000 (RTC/PMC)&lt;br /&gt;
* 0x70019000 (MC)&lt;br /&gt;
* 0x7001C000 (MC0)&lt;br /&gt;
* 0x7001D000 (MC1)&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] For IO, this blacklist was abandoned and instead two range checks were added. For Normal mappings it is still applied&lt;br /&gt;
&lt;br /&gt;
== IoMemoryMap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 8-31&lt;br /&gt;
| BeginAddress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryRegionMap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 11-16&lt;br /&gt;
| RegionType0 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| RegionIsReadOnly0&lt;br /&gt;
|-&lt;br /&gt;
| 18-23&lt;br /&gt;
| RegionType1 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| RegionIsReadOnly1&lt;br /&gt;
|-&lt;br /&gt;
| 25-30&lt;br /&gt;
| RegionType2 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| RegionIsReadOnly2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MemoryRegionMap is supported by the kernel but not by [[Loader_services|Loader]]. Thus, only initial processes may possess this capability.&lt;br /&gt;
&lt;br /&gt;
== EnableInterrupts ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 12-21&lt;br /&gt;
| InterruptNumber0&lt;br /&gt;
|-&lt;br /&gt;
| 22-31&lt;br /&gt;
| InterruptNumber1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
0x3FF means empty.&lt;br /&gt;
&lt;br /&gt;
== MiscParams ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 14-16&lt;br /&gt;
| ProgramType (0 = System, 1 = Application, 2 = Applet)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ProgramType is parsed by [[Process Manager services]]. Defaults to 0 if descriptor doesn&#039;t exist. Can only run 1 application at a time.&lt;br /&gt;
&lt;br /&gt;
== KernelVersion ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 15-18&lt;br /&gt;
| MinorVersion&lt;br /&gt;
|-&lt;br /&gt;
| 19-31&lt;br /&gt;
| MajorVersion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This encodes the intended kernel version for the program.&lt;br /&gt;
&lt;br /&gt;
The kernel requires that the intended version is &amp;gt;= the minimum supported version (3.0 for all released kernels), and &amp;lt;= the current version.&lt;br /&gt;
&lt;br /&gt;
Kernel version is derived from/equivalent to SDK version:&lt;br /&gt;
* Kernel Major = SDK Major + 4&lt;br /&gt;
* Kernel Minor = SDK Minor&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firmware || Kernel Version || Corresponding SDK Version&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 5.0 || 1.0.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0 || 6.1 || 2.1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0 || 7.4 || 3.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2 || 7.4 || 3.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0 || 9.3 || 5.3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0 || 14.4 || 10.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0 || 15.4 || 11.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.1 || 15.4 || 11.4.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HandleTableSize ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 16-25&lt;br /&gt;
| HandleTableSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MiscFlags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| ForceDebug&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=XCI&amp;diff=10815</id>
		<title>XCI</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=XCI&amp;diff=10815"/>
		<updated>2021-04-07T07:11:55Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the format used for storing the contents of a Nintendo Switch Gamecard.&lt;br /&gt;
&lt;br /&gt;
= Structure =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[#CardKeyArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1000&lt;br /&gt;
| 0x200&lt;br /&gt;
| [[#CardHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1200&lt;br /&gt;
| 0x6E00&lt;br /&gt;
| ReservedArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x8000&lt;br /&gt;
| [[#CertArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10000&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#NormalArea]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#RomArea]]&lt;br /&gt;
|-&lt;br /&gt;
| Invalid&lt;br /&gt;
| Invalid&lt;br /&gt;
| BackupArea&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CardKeyArea ==&lt;br /&gt;
This region cannot be read directly once written to the Gamecard. Therefore, it is hidden away during read/write operations on the raw Gamecard data.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x200&lt;br /&gt;
| [[#InitialData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0xD00&lt;br /&gt;
| [[#TitleKeyArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF00&lt;br /&gt;
| 0x100&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== InitialData ===&lt;br /&gt;
This region is used for challenge–response authentication when changing to the Gamecard&#039;s secure mode.&lt;br /&gt;
&lt;br /&gt;
[[Filesystem_services|FS]] calculates a SHA-256 hash over the whole 0x200 bytes and compares it with the hash stored at offset 0x160 in the [[#CardHeader]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Package ID from [[#CardHeader]] at offset 0x110&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Challenge–response authentication data&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Challenge–response authentication MAC&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0xC&lt;br /&gt;
| Challenge–response authentication Nonce&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x1C4&lt;br /&gt;
| Reserved (must be empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TitleKeyArea ===&lt;br /&gt;
This region is stored encrypted and contains the title keys used by the [[#InitialData]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleKey1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleKey2&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xCF0&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CardHeader ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 PKCS #1 signature over the header (data from 0x100 to 0x200)&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x4&lt;br /&gt;
| MagicCode (&amp;quot;HEAD&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| RomAreaStartPageAddress (in Gamecard page units, which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| BackupAreaStartPageAddress (always 0xFFFFFFFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x1&lt;br /&gt;
| TitleKeyDecIndex (high nibble) and KekIndex (low nibble)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10D&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#RomSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10E&lt;br /&gt;
| 0x1&lt;br /&gt;
| CardHeaderVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x10F&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x8&lt;br /&gt;
| PackageId (used for challenge–response authentication)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x4&lt;br /&gt;
| ValidDataEndAddress (in Gamecard page units, which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x11C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x120&lt;br /&gt;
| 0x10&lt;br /&gt;
| Iv (reversed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x130&lt;br /&gt;
| 0x8&lt;br /&gt;
| PartitionFsHeaderAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x138&lt;br /&gt;
| 0x8&lt;br /&gt;
| PartitionFsHeaderSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x140&lt;br /&gt;
| 0x20&lt;br /&gt;
| PartitionFsHeaderHash (SHA-256 hash of the [[#PartitionFsHeader]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x160&lt;br /&gt;
| 0x20&lt;br /&gt;
| InitialDataHash (SHA-256 hash of the [[#InitialData]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x180&lt;br /&gt;
| 0x4&lt;br /&gt;
| SelSec (0x01 = T1, 0x02 = T2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x184&lt;br /&gt;
| 0x4&lt;br /&gt;
| SelT1Key (always 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188&lt;br /&gt;
| 0x4&lt;br /&gt;
| SelKey (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18C&lt;br /&gt;
| 0x4&lt;br /&gt;
| LimArea (in Gamecard page units, which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190&lt;br /&gt;
| 0x70&lt;br /&gt;
| [[#CardInfo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CardInfo ===&lt;br /&gt;
This region is stored encrypted (AES-128-CBC).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| FwVersion (0x00 = Development, 0x01 = Retail, [4.0.0+] 0x02 = Retail, [11.0.0+] 0x04 = Retail)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| AccCtrl1 (0x00A10011 = 25MHz access, 0x00A10010 = 50MHz access)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Wait1TimeRead (always 0x1388)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Wait2TimeRead (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Wait1TimeWrite (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Wait2TimeWrite (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| FwMode (the current SdkAddonVersion)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| UppVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] CompatibilityType (0x00 = Normal, 0x01 = Terra)&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 0x3&lt;br /&gt;
| Empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| UppHash (SHA-256 hash of the [[#UpdatePartition]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| UppId (always 0x0100000000000816)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x38&lt;br /&gt;
| Empty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RomSize ===&lt;br /&gt;
[[Filesystem_services|FS]] retrieves this data as [[Filesystem_services#GameCardSize|GameCardSize]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xFA&lt;br /&gt;
| 1GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8&lt;br /&gt;
| 2GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0&lt;br /&gt;
| 4GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0&lt;br /&gt;
| 8GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xE1&lt;br /&gt;
| 16GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xE2&lt;br /&gt;
| 32GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flags ===&lt;br /&gt;
[[Filesystem_services|FS]] retrieves this data as [[Filesystem_services#GameCardAttribute|GameCardAttribute]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| AutoBoot&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| HistoryErase&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [4.0.0+] RepairTool&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [9.0.0+] DifferentRegionCupToTerraDevice&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [9.0.0+] DifferentRegionCupToGlobalDevice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CertArea ==&lt;br /&gt;
This is the Gamecard&#039;s unique certificate.&lt;br /&gt;
&lt;br /&gt;
[[Filesystem_services|FS]] retrieves this data with [[Filesystem_services#GetGameCardDeviceCertificate|GetGameCardDeviceCertificate]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 PKCS #1 signature over the data from 0x100 to 0x200&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x4&lt;br /&gt;
| MagicCode (&amp;quot;CERT&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x1&lt;br /&gt;
| KekIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x109&lt;br /&gt;
| 0x7&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x10&lt;br /&gt;
| DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| 0x120&lt;br /&gt;
| 0x10&lt;br /&gt;
| Iv&lt;br /&gt;
|-&lt;br /&gt;
| 0x130&lt;br /&gt;
| 0xD0&lt;br /&gt;
| Data (encrypted)&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x7E00&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NormalArea ==&lt;br /&gt;
This region contains all non-secure partitions of the Gamecard file system.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#PartitionFsHeader|RootPartitionHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#PartitionFsHeader|UpdatePartitionHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#UpdatePartition|UpdatePartition]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [4.0.0+] [[#PartitionFsHeader|LogoPartitionHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [4.0.0+] [[#LogoPartition|LogoPartition]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#PartitionFsHeader|NormalPartitionHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#NormalPartition|NormalPartition]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== UpdatePartition ===&lt;br /&gt;
This partition contains .cnmt.nca + .nca files for the entire system update required to play the game. Launch day carts contain a full copy of 1.0 ncas, newer carts contain newer sysupdate NCAs etc.&lt;br /&gt;
&lt;br /&gt;
=== NormalPartition ===&lt;br /&gt;
This partition contains the .cnmt.nca and the game icondata nca. This is presumably for future compatibility so that if a future update changes the cryptographic protocol for the secure partition. Game icon data can still be shown in the home menu on old firmwares.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] This partition is now empty.&lt;br /&gt;
&lt;br /&gt;
=== LogoPartition ===&lt;br /&gt;
[4.0.0+] This partition now contains the contents of the [[#NormalPartition]].&lt;br /&gt;
&lt;br /&gt;
== RomArea ==&lt;br /&gt;
This region contains all secure partitions of the Gamecard file system.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#PartitionFsHeader|SecurePartitionHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#SecurePartition|SecurePartition]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SecurePartition ===&lt;br /&gt;
This partition contains an identical copy of the .cnmt.nca and game icondata nca, as well as all other ncas required for the game.&lt;br /&gt;
&lt;br /&gt;
== PartitionFs ==&lt;br /&gt;
This is the Gamecard file system which starts with magicnum &amp;quot;HFS0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== PartitionFsHeader ===&lt;br /&gt;
The &amp;quot;SHA-256 File System&amp;quot; or &amp;quot;HFS0&amp;quot; starts at offset 0x10000 in the Gamecard. The first 0x200 bytes act as a global header and represent the root partition which points to the other partitions (&amp;quot;normal&amp;quot;, &amp;quot;logo&amp;quot;, &amp;quot;update&amp;quot; and &amp;quot;secure&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
A hash for this header is stored at offset 0x140 in the [[#CardHeader]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| MagicCode (&amp;quot;HFS0&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| FileCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| StringTableSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| X&lt;br /&gt;
| [[#FileEntryTable]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X&lt;br /&gt;
| Y&lt;br /&gt;
| StringTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X + Y&lt;br /&gt;
| Z&lt;br /&gt;
| RawFileData&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FileEntryTable ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of file in Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of file in Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Offset of filename in String Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of Hashed region of file (for HFS0s, this is the size of the pre-filedata portion, for NCAs this is usually 0x200)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| Zero/Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash of the first (size of hashed region) bytes of filedata&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The string table is 00-padded to align the start of raw filedata with a sector/media unit boundary (usually?).&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=XCI&amp;diff=10814</id>
		<title>XCI</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=XCI&amp;diff=10814"/>
		<updated>2021-04-07T06:29:02Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the format used for storing the contents of a Nintendo Switch Gamecard.&lt;br /&gt;
&lt;br /&gt;
= Structure =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[#CardKeyArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1000&lt;br /&gt;
| 0x200&lt;br /&gt;
| [[#CardHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1200&lt;br /&gt;
| 0x6E00&lt;br /&gt;
| ReservedArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x8000&lt;br /&gt;
| 0x8000&lt;br /&gt;
| [[#CertArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10000&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#NormalArea]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#RomArea]]&lt;br /&gt;
|-&lt;br /&gt;
| Invalid&lt;br /&gt;
| Invalid&lt;br /&gt;
| BackupArea&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CardKeyArea ==&lt;br /&gt;
This region cannot be read directly once written to the Gamecard. Therefore, it is hidden away during read/write operations on the raw Gamecard data.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x200&lt;br /&gt;
| [[#InitialData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0xD00&lt;br /&gt;
| [[#TitleKeyArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF00&lt;br /&gt;
| 0x100&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== InitialData ===&lt;br /&gt;
This region is used for challenge–response authentication when changing to the Gamecard&#039;s secure mode.&lt;br /&gt;
&lt;br /&gt;
[[Filesystem_services|FS]] calculates a SHA-256 hash over the whole 0x200 bytes and compares it with the hash stored at offset 0x160 in the [[#CardHeader]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Package ID from [[#CardHeader]] at offset 0x110&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Challenge–response authentication data&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Challenge–response authentication MAC&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0xC&lt;br /&gt;
| Challenge–response authentication Nonce&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x1C4&lt;br /&gt;
| Reserved (must be empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TitleKeyArea ===&lt;br /&gt;
This region is stored encrypted and contains the title keys used by the [[#InitialData]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleKey1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleKey2&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xCF0&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CardHeader ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 PKCS #1 signature over the header (data from 0x100 to 0x200)&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x4&lt;br /&gt;
| MagicCode (&amp;quot;HEAD&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| RomAreaStartPageAddress (in Gamecard page units, which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| BackupAreaStartPageAddress (always 0xFFFFFFFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x1&lt;br /&gt;
| TitleKeyDecIndex (high nibble) and KekIndex (low nibble)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10D&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#RomSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10E&lt;br /&gt;
| 0x1&lt;br /&gt;
| CardHeaderVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x10F&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x8&lt;br /&gt;
| PackageId (used for challenge–response authentication)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x8&lt;br /&gt;
| ValidDataEndAddress (in Gamecard page units, which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x120&lt;br /&gt;
| 0x10&lt;br /&gt;
| Iv (reversed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x130&lt;br /&gt;
| 0x8&lt;br /&gt;
| PartitionFsHeaderAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x138&lt;br /&gt;
| 0x8&lt;br /&gt;
| PartitionFsHeaderSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x140&lt;br /&gt;
| 0x20&lt;br /&gt;
| PartitionFsHeaderHash (SHA-256 hash of the [[#PartitionFsHeader]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x160&lt;br /&gt;
| 0x20&lt;br /&gt;
| InitialDataHash (SHA-256 hash of the [[#InitialData]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x180&lt;br /&gt;
| 0x4&lt;br /&gt;
| SelSec (0x01 = T1, 0x02 = T2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x184&lt;br /&gt;
| 0x4&lt;br /&gt;
| SelT1Key (always 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188&lt;br /&gt;
| 0x4&lt;br /&gt;
| SelKey (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18C&lt;br /&gt;
| 0x4&lt;br /&gt;
| LimArea (in Gamecard page units, which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190&lt;br /&gt;
| 0x70&lt;br /&gt;
| [[#CardInfo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CardInfo ===&lt;br /&gt;
This region is stored encrypted (AES-128-CBC).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| FwVersion (0x00 = Development, 0x01 = Retail, [4.0.0+] 0x02 = Retail, [11.0.0+] 0x04 = Retail)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| AccCtrl1 (0x00A10011 = 25MHz access, 0x00A10010 = 50MHz access)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Wait1TimeRead (always 0x1388)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Wait2TimeRead (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Wait1TimeWrite (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Wait2TimeWrite (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| FwMode (the current SdkAddonVersion)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| UppVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] CompatibilityType (0x00 = Normal, 0x01 = Terra)&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 0x3&lt;br /&gt;
| Empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| UppHash (SHA-256 hash of the [[#UpdatePartition]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| UppId (always 0x0100000000000816)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x38&lt;br /&gt;
| Empty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RomSize ===&lt;br /&gt;
[[Filesystem_services|FS]] retrieves this data as [[Filesystem_services#GameCardSize|GameCardSize]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xFA&lt;br /&gt;
| 1GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8&lt;br /&gt;
| 2GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0&lt;br /&gt;
| 4GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0&lt;br /&gt;
| 8GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xE1&lt;br /&gt;
| 16GB&lt;br /&gt;
|-&lt;br /&gt;
| 0xE2&lt;br /&gt;
| 32GB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flags ===&lt;br /&gt;
[[Filesystem_services|FS]] retrieves this data as [[Filesystem_services#GameCardAttribute|GameCardAttribute]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| AutoBoot&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| HistoryErase&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [4.0.0+] RepairTool&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [9.0.0+] DifferentRegionCupToTerraDevice&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [9.0.0+] DifferentRegionCupToGlobalDevice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CertArea ==&lt;br /&gt;
This is the Gamecard&#039;s unique certificate.&lt;br /&gt;
&lt;br /&gt;
[[Filesystem_services|FS]] retrieves this data with [[Filesystem_services#GetGameCardDeviceCertificate|GetGameCardDeviceCertificate]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 PKCS #1 signature over the data from 0x100 to 0x200&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x4&lt;br /&gt;
| MagicCode (&amp;quot;CERT&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x1&lt;br /&gt;
| KekIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x109&lt;br /&gt;
| 0x7&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x10&lt;br /&gt;
| DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| 0x120&lt;br /&gt;
| 0x10&lt;br /&gt;
| Iv&lt;br /&gt;
|-&lt;br /&gt;
| 0x130&lt;br /&gt;
| 0xD0&lt;br /&gt;
| Data (encrypted)&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x7E00&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NormalArea ==&lt;br /&gt;
This region contains all non-secure partitions of the Gamecard file system.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#PartitionFsHeader|RootPartitionHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#PartitionFsHeader|UpdatePartitionHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#UpdatePartition|UpdatePartition]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [4.0.0+] [[#PartitionFsHeader|LogoPartitionHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [4.0.0+] [[#LogoPartition|LogoPartition]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#PartitionFsHeader|NormalPartitionHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#NormalPartition|NormalPartition]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== UpdatePartition ===&lt;br /&gt;
This partition contains .cnmt.nca + .nca files for the entire system update required to play the game. Launch day carts contain a full copy of 1.0 ncas, newer carts contain newer sysupdate NCAs etc.&lt;br /&gt;
&lt;br /&gt;
=== NormalPartition ===&lt;br /&gt;
This partition contains the .cnmt.nca and the game icondata nca. This is presumably for future compatibility so that if a future update changes the cryptographic protocol for the secure partition. Game icon data can still be shown in the home menu on old firmwares.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] This partition is now empty.&lt;br /&gt;
&lt;br /&gt;
=== LogoPartition ===&lt;br /&gt;
[4.0.0+] This partition now contains the contents of the [[#NormalPartition]].&lt;br /&gt;
&lt;br /&gt;
== RomArea ==&lt;br /&gt;
This region contains all secure partitions of the Gamecard file system.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#PartitionFsHeader|SecurePartitionHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Variable&lt;br /&gt;
| [[#SecurePartition|SecurePartition]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SecurePartition ===&lt;br /&gt;
This partition contains an identical copy of the .cnmt.nca and game icondata nca, as well as all other ncas required for the game.&lt;br /&gt;
&lt;br /&gt;
== PartitionFs ==&lt;br /&gt;
This is the Gamecard file system which starts with magicnum &amp;quot;HFS0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== PartitionFsHeader ===&lt;br /&gt;
The &amp;quot;SHA-256 File System&amp;quot; or &amp;quot;HFS0&amp;quot; starts at offset 0x10000 in the Gamecard. The first 0x200 bytes act as a global header and represent the root partition which points to the other partitions (&amp;quot;normal&amp;quot;, &amp;quot;logo&amp;quot;, &amp;quot;update&amp;quot; and &amp;quot;secure&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
A hash for this header is stored at offset 0x140 in the [[#CardHeader]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| MagicCode (&amp;quot;HFS0&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| FileCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| StringTableSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| X&lt;br /&gt;
| [[#FileEntryTable]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X&lt;br /&gt;
| Y&lt;br /&gt;
| StringTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X + Y&lt;br /&gt;
| Z&lt;br /&gt;
| RawFileData&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FileEntryTable ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Offset of file in Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Size of file in Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Offset of filename in String Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of Hashed region of file (for HFS0s, this is the size of the pre-filedata portion, for NCAs this is usually 0x200)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| Zero/Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash of the first (size of hashed region) bytes of filedata&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The string table is 00-padded to align the start of raw filedata with a sector/media unit boundary (usually?).&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=CNMT&amp;diff=9785</id>
		<title>CNMT</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=CNMT&amp;diff=9785"/>
		<updated>2020-07-17T23:18:39Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the metadata file that ends in &amp;lt;code&amp;gt;&amp;quot;.cnmt{.nca}&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;meta0.ncd&amp;quot;&amp;lt;/code&amp;gt;. This seems to replace the TMD format.&lt;br /&gt;
&lt;br /&gt;
The official name for CNMT is &amp;quot;PackagedContentMeta&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#ContentMetaType|Content Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Extended Header Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| Content Meta Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Download System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AddOnContent Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Packaged Content Info ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x6&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| 0x1&lt;br /&gt;
| Content Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 0x1&lt;br /&gt;
| ID Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Meta Info ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Content Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Content Meta Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]].&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Data ==&lt;br /&gt;
&lt;br /&gt;
If the Version field is 1, the format is:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Variation Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x20 * Variation Count&lt;br /&gt;
| [[CNMT#Firmware_Variation_Info_(Version_1)|Firmware Variation Info (Version 1)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the Version field is 2, the format is:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Variation Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4 * Variation Count&lt;br /&gt;
| Firmware Variation ID&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x20 * Variation Count&lt;br /&gt;
| [[CNMT#Firmware_Variation_Info_(Version_2)|Firmware Variation Info (Version 2)]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x10 * Meta Count (From [[CNMT#Firmware_Variation_Info_(Version_2)|Firmware Variation Info (Version 2)]])&lt;br /&gt;
| [[CNMT#Content_Meta_Info|Content Meta Info]] (If Refer To Base is False)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Firmware Variation Info (Version 1) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Firmware Variation ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Firmware Variation Info (Version 2) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Refer To Base (0=False, 1=True)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x18&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x38 * History Count&lt;br /&gt;
| [[CNMT#History_Header|History Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta History Count&lt;br /&gt;
| [[CNMT#Delta_History|Delta Histories]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta Count&lt;br /&gt;
| [[CNMT#Delta_Header|Delta Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x18 * History Content Count&lt;br /&gt;
| [[CNMT#Packaged_Content_Info|History Content Info]] (Packaged Content Info without the Hash entry)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x38 * Delta Content Count&lt;br /&gt;
| [[CNMT#Packaged_Content_Info|Delta Packaged Content Info]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (From [[CNMT#Fragment_Set|Fragment Sets]])&lt;br /&gt;
| [[CNMT#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== History Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content Meta Key (Slightly different Content Meta Info)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 0x6&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta History ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Download Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Set ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Source Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Destination Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x6&lt;br /&gt;
| Source Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x6&lt;br /&gt;
| Destination Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Indicator Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 0x1&lt;br /&gt;
| Fragment Target Content Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Indicator ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (From [[CNMT#Fragment_Set|Fragment Sets]])&lt;br /&gt;
| [[CNMT#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digest ==&lt;br /&gt;
&lt;br /&gt;
Always found at the end of the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=BCT&amp;diff=9784</id>
		<title>BCT</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=BCT&amp;diff=9784"/>
		<updated>2020-07-17T22:57:03Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BCT (Boot Configuration Table) is a data structure present on Tegra based devices that supplies boot time configuration parameters.&lt;br /&gt;
&lt;br /&gt;
The Switch&#039;s BCT is included in the firmware package titles (0100000000000819 and 010000000000081A) and is installed into eMMC storage&#039;s [[Flash_Filesystem#Boot_Partitions|boot partition 0]]. A total of four BCT copies can be installed into the system: normal, normal backup, safe mode and safe mode backup.&lt;br /&gt;
&lt;br /&gt;
The Erista BCT&#039;s data is only signed after offset 0x0510. Therefore, regions like [[#CustomerData|CustomerData]] can be freely modified without resigning. This is done by [[NS_Services|NS]] when injecting a new [[Flash_Filesystem#Keyblob|keyblob]] during a system update, for example.&lt;br /&gt;
&lt;br /&gt;
The Mariko BCT&#039;s data is signed and encrypted after offset 0x0480, so the [[Flash_Filesystem#Keyblob|keyblob]] system is no longer used.&lt;br /&gt;
&lt;br /&gt;
During boot, the boot ROM parses the appropriate BCT from eMMC storage and stores a copy of it in IRAM at address 0x40000000.&lt;br /&gt;
&lt;br /&gt;
= Format =&lt;br /&gt;
== Erista ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Field&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0000&lt;br /&gt;
|  0x210&lt;br /&gt;
|  BadBlockTable&lt;br /&gt;
|  Table containing information on bad blocks&lt;br /&gt;
 0x0000: EntriesUsed (0x200)&lt;br /&gt;
 0x0004: VirtualBlockSizeLog2 (0x0F)&lt;br /&gt;
 0x0005: BlockSizeLog2 (0x0E)&lt;br /&gt;
 0x0006: BadBlocks&lt;br /&gt;
 0x0206: Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  0x0210&lt;br /&gt;
|  0x100&lt;br /&gt;
|  Key&lt;br /&gt;
|  BCT RSA public key&#039;s modulus&lt;br /&gt;
|-&lt;br /&gt;
|  0x0310&lt;br /&gt;
|  0x110&lt;br /&gt;
|  Signature&lt;br /&gt;
|  BCT cryptographic signature&lt;br /&gt;
 0x0310: CryptoHash (empty)&lt;br /&gt;
 0x0320: RsaPssSig&lt;br /&gt;
|-&lt;br /&gt;
|  0x0420&lt;br /&gt;
|  0x04&lt;br /&gt;
|  SecProvisioningKeyNumInsecure&lt;br /&gt;
|  Used for Factory Secure Provisioning (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|  0x0424&lt;br /&gt;
|  0x20&lt;br /&gt;
|  SecProvisioningKey&lt;br /&gt;
|  Used for Factory Secure Provisioning (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|  0x0444&lt;br /&gt;
|  0xC4&lt;br /&gt;
|  [[#CustomerData|CustomerData]]&lt;br /&gt;
|  Data block available for the customer (used in key generation)&lt;br /&gt;
 0x0444: Reserved (0x0C bytes)&lt;br /&gt;
 0x0450: [[Flash_Filesystem#Keyblob|Keyblob]] (0xB0 bytes)&lt;br /&gt;
 0x0500: Reserved (0x08 bytes)&lt;br /&gt;
|-&lt;br /&gt;
|  0x0508&lt;br /&gt;
|  0x04&lt;br /&gt;
|  OdmData&lt;br /&gt;
|  Legacy field (unused)&lt;br /&gt;
|-&lt;br /&gt;
|  0x050C&lt;br /&gt;
|  0x04&lt;br /&gt;
|  Reserved&lt;br /&gt;
|  Legacy field (unused)&lt;br /&gt;
|-&lt;br /&gt;
|  0x0510&lt;br /&gt;
|  0x10&lt;br /&gt;
|  RandomAesBlock&lt;br /&gt;
|  Always empty&lt;br /&gt;
|-&lt;br /&gt;
|  0x0520&lt;br /&gt;
|  0x10&lt;br /&gt;
|  UniqueChipId&lt;br /&gt;
|  Always empty&lt;br /&gt;
|-&lt;br /&gt;
|  0x0530&lt;br /&gt;
|  0x04&lt;br /&gt;
|  BootDataVersion&lt;br /&gt;
|  Set to 0x00210001 (BOOTDATA_VERSION_T210)&lt;br /&gt;
|-&lt;br /&gt;
|  0x0534&lt;br /&gt;
|  0x04&lt;br /&gt;
|  BlockSizeLog2&lt;br /&gt;
|  Always 0x0E&lt;br /&gt;
|-&lt;br /&gt;
|  0x0538&lt;br /&gt;
|  0x04&lt;br /&gt;
|  PageSizeLog2&lt;br /&gt;
|  Always 0x09&lt;br /&gt;
|-&lt;br /&gt;
|  0x053C&lt;br /&gt;
|  0x04&lt;br /&gt;
|  PartitionSize&lt;br /&gt;
|  Always 0x01000000&lt;br /&gt;
|-&lt;br /&gt;
|  0x0540&lt;br /&gt;
|  0x04&lt;br /&gt;
|  NumParamSets&lt;br /&gt;
|  Number of device parameter sets (always 0x01)&lt;br /&gt;
|-&lt;br /&gt;
|  0x0544&lt;br /&gt;
|  0x04&lt;br /&gt;
|  DevType&lt;br /&gt;
|  Device type (0x04 == Sdmmc)&lt;br /&gt;
|-&lt;br /&gt;
|  0x0548&lt;br /&gt;
|  0x40&lt;br /&gt;
|  DevParams&lt;br /&gt;
|  Device parameters&lt;br /&gt;
  0x0548: ClockDivider (0x09 == 24MHz)&lt;br /&gt;
  0x054C: DataWidth (0x02 == 8Bit)&lt;br /&gt;
|-&lt;br /&gt;
|  0x0588&lt;br /&gt;
|  0x04&lt;br /&gt;
|  NumSdramSets&lt;br /&gt;
|  Number of SDRAM parameter sets (always set to 0, but parameters are used despite this)&lt;br /&gt;
|-&lt;br /&gt;
|  0x058C&lt;br /&gt;
|  0x768&lt;br /&gt;
|  SdramParams0&lt;br /&gt;
|  Default values filled in&lt;br /&gt;
|-&lt;br /&gt;
|  0x0CF4&lt;br /&gt;
|  0x768&lt;br /&gt;
|  SdramParams1&lt;br /&gt;
|  Default values filled in&lt;br /&gt;
|-&lt;br /&gt;
|  0x145C&lt;br /&gt;
|  0x768&lt;br /&gt;
|  SdramParams2&lt;br /&gt;
|  Default values filled in&lt;br /&gt;
|-&lt;br /&gt;
|  0x1BC4&lt;br /&gt;
|  0x768&lt;br /&gt;
|  SdramParams3&lt;br /&gt;
|  Default values filled in&lt;br /&gt;
|-&lt;br /&gt;
|  0x232C&lt;br /&gt;
|  0x04&lt;br /&gt;
|  BootLoadersUsed&lt;br /&gt;
|  Number of bootloaders installed (always 0x02, maximum is 0x04)&lt;br /&gt;
|-&lt;br /&gt;
|  0x2330&lt;br /&gt;
|  0x12C&lt;br /&gt;
|  [[#BootLoader0|BootLoader0]]&lt;br /&gt;
|  Configuration parameters for bootloader 0 (main)&lt;br /&gt;
 0x2330: Version (variable)&lt;br /&gt;
 0x2334: StartBlock (0x00000040 (BootImagePackage), 0x00000100 (BootImagePackageSafe))&lt;br /&gt;
 0x2338: StartPage (0x00000000)&lt;br /&gt;
 0x233C: Length (variable)&lt;br /&gt;
 0x2340: LoadAddress (0x40010000)&lt;br /&gt;
 0x2344: EntryPoint (0x40010020 for 1.0.0-3.0.2, 0x40010040 for 4.0.0+)&lt;br /&gt;
 0x2348: Attribute (0x00000000 (BootImagePackage), 0x00000001 (BootImagePackageSafe))&lt;br /&gt;
 0x234C: CryptoHash (empty)&lt;br /&gt;
 0x235C: RsaPssSig&lt;br /&gt;
|-&lt;br /&gt;
|  0x245C&lt;br /&gt;
|  0x12C&lt;br /&gt;
|  BootLoader1&lt;br /&gt;
|  Configuration parameters for bootloader 1 (backup)&lt;br /&gt;
 0x245C: Version (variable)&lt;br /&gt;
 0x2460: StartBlock (0x00000050 (BootImagePackage), 0x00000110 (BootImagePackageSafe))&lt;br /&gt;
 0x2464: StartPage (0x00000000)&lt;br /&gt;
 0x2468: Length (variable)&lt;br /&gt;
 0x246C: LoadAddress (0x40010000)&lt;br /&gt;
 0x2470: EntryPoint (0x40010020 for 1.0.0-3.0.2, 0x40010040 for 4.0.0+)&lt;br /&gt;
 0x2474: Attribute (0x00000000 (BootImagePackage), 0x00000001 (BootImagePackageSafe))&lt;br /&gt;
 0x2478: CryptoHash (empty)&lt;br /&gt;
 0x2488: RsaPssSig&lt;br /&gt;
|-&lt;br /&gt;
|  0x2588&lt;br /&gt;
|  0x12C&lt;br /&gt;
|  BootLoader2&lt;br /&gt;
|  Reserved space for bootloader 2 (unused)&lt;br /&gt;
|-&lt;br /&gt;
|  0x26B4&lt;br /&gt;
|  0x12C&lt;br /&gt;
|  BootLoader3&lt;br /&gt;
|  Reserved space for bootloader 3 (unused)&lt;br /&gt;
|-&lt;br /&gt;
|  0x27E0&lt;br /&gt;
|  0x01&lt;br /&gt;
|  EnableFailBack&lt;br /&gt;
|  Always 0&lt;br /&gt;
|-&lt;br /&gt;
|  0x27E1&lt;br /&gt;
|  0x04&lt;br /&gt;
|  SecureJtagControl&lt;br /&gt;
|  Always 0&lt;br /&gt;
|-&lt;br /&gt;
|  0x27E5&lt;br /&gt;
|  0x04&lt;br /&gt;
|  SecProvisioningKeyNumSecure&lt;br /&gt;
|  Used for Factory Secure Provisioning (always 0)&lt;br /&gt;
|-&lt;br /&gt;
|  0x27E9&lt;br /&gt;
|  0x12&lt;br /&gt;
|  Reserved&lt;br /&gt;
|  Always starts with 0x80000000 (NVBOOT padding pattern)&lt;br /&gt;
|-&lt;br /&gt;
|  0x27FB&lt;br /&gt;
|  0x05&lt;br /&gt;
|  Padding&lt;br /&gt;
|  Empty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CustomerData ===&lt;br /&gt;
This data block is ignored by the boot ROM, therefore is available for the programmer to use freely.&lt;br /&gt;
The Switch uses 0xB0 bytes of this area, at offset 0x0450, to store the active [[Flash_Filesystem#Keyblob|keyblob]]. All remaining bytes are zero.&lt;br /&gt;
&lt;br /&gt;
The first bootloader validates and decrypts this block for further key generation.&lt;br /&gt;
The decrypted keyblob payload is as follows.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| Array of master static key encryption keys&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x10 &lt;br /&gt;
| [[Package1#PK11_Blob|PK11]] key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BootLoader0 ===&lt;br /&gt;
The version field controls which keyblob is used, where 0x01 is the first one. See [[Cryptosystem]] for the keyblobs used by each system-version.&lt;br /&gt;
&lt;br /&gt;
== Mariko ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Field&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0000&lt;br /&gt;
|  0x210&lt;br /&gt;
|  Pcp&lt;br /&gt;
|  BCT public cryptographic parameters&lt;br /&gt;
 0x0000: KeySize&lt;br /&gt;
 0x0004: Reserved&lt;br /&gt;
 0x0010: PublicKeyModulus&lt;br /&gt;
 0x0110: PublicKeyExponent&lt;br /&gt;
|-&lt;br /&gt;
|  0x0210&lt;br /&gt;
|  0x110&lt;br /&gt;
|  Signature&lt;br /&gt;
|  BCT cryptographic signature&lt;br /&gt;
 0x0210: CryptoHash (empty)&lt;br /&gt;
 0x0220: RsaPssSig&lt;br /&gt;
|-&lt;br /&gt;
|  0x0320&lt;br /&gt;
|  0x160&lt;br /&gt;
|  &lt;br /&gt;
|  Empty&lt;br /&gt;
|-&lt;br /&gt;
|  0x0480&lt;br /&gt;
|  0x10&lt;br /&gt;
|  RandomAesBlock&lt;br /&gt;
|  Not empty&lt;br /&gt;
|-&lt;br /&gt;
|  0x0490&lt;br /&gt;
|  0x10&lt;br /&gt;
|  UniqueChipId&lt;br /&gt;
|  Always empty&lt;br /&gt;
|-&lt;br /&gt;
|  0x04A0&lt;br /&gt;
|  0x04&lt;br /&gt;
|  BootDataVersion&lt;br /&gt;
|  Set to 0x00210001 (BOOTDATA_VERSION_T210)&lt;br /&gt;
|-&lt;br /&gt;
|  0x04A4&lt;br /&gt;
|  0x04&lt;br /&gt;
|  BlockSizeLog2&lt;br /&gt;
|  Always 0x0E&lt;br /&gt;
|-&lt;br /&gt;
|  0x04A8&lt;br /&gt;
|  0x04&lt;br /&gt;
|  PageSizeLog2&lt;br /&gt;
|  Always 0x09&lt;br /&gt;
|-&lt;br /&gt;
|  0x04AC&lt;br /&gt;
|  0x04&lt;br /&gt;
|  PartitionSize&lt;br /&gt;
|  Always 0x01000000&lt;br /&gt;
|-&lt;br /&gt;
|  0x04B0&lt;br /&gt;
|  0x04&lt;br /&gt;
|  NumParamSets&lt;br /&gt;
|  Number of device parameter sets (always 0x01)&lt;br /&gt;
|-&lt;br /&gt;
|  0x04B4&lt;br /&gt;
|  0x04&lt;br /&gt;
|  DevType&lt;br /&gt;
|  Device type (0x04 == Sdmmc)&lt;br /&gt;
|-&lt;br /&gt;
|  0x04B8&lt;br /&gt;
|  0x40&lt;br /&gt;
|  DevParams&lt;br /&gt;
|  Device parameters&lt;br /&gt;
|-&lt;br /&gt;
|  0x04F8&lt;br /&gt;
|  0x04&lt;br /&gt;
|  NumSdramSets&lt;br /&gt;
|  Number of SDRAM parameter sets (always set to 0, but parameters are used despite this)&lt;br /&gt;
|-&lt;br /&gt;
|  0x04FC&lt;br /&gt;
|  0x838&lt;br /&gt;
|  SdramParams0&lt;br /&gt;
|  Default values filled in&lt;br /&gt;
|-&lt;br /&gt;
|  0x0D34&lt;br /&gt;
|  0x838&lt;br /&gt;
|  SdramParams1&lt;br /&gt;
|  Default values filled in&lt;br /&gt;
|-&lt;br /&gt;
|  0x156C&lt;br /&gt;
|  0x838&lt;br /&gt;
|  SdramParams2&lt;br /&gt;
|  Default values filled in&lt;br /&gt;
|-&lt;br /&gt;
|  0x1DA4&lt;br /&gt;
|  0x838&lt;br /&gt;
|  SdramParams3&lt;br /&gt;
|  Default values filled in&lt;br /&gt;
|-&lt;br /&gt;
|  0x25DC&lt;br /&gt;
|  0x04&lt;br /&gt;
|  BootLoadersUsed&lt;br /&gt;
|  Number of bootloaders installed (always 0x02, maximum is 0x04)&lt;br /&gt;
|-&lt;br /&gt;
|  0x25E0&lt;br /&gt;
|  0x10&lt;br /&gt;
|  BootLoader0&lt;br /&gt;
|  Configuration parameters for bootloader 0 (main)&lt;br /&gt;
 0x25E0: StartBlock (0x00000040 (BootImagePackage), 0x00000100 (BootImagePackageSafe))&lt;br /&gt;
 0x25E4: StartPage (0x00000000)&lt;br /&gt;
 0x25E8: Version (variable)&lt;br /&gt;
 0x25EC: Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  0x25F0&lt;br /&gt;
|  0x10&lt;br /&gt;
|  BootLoader1&lt;br /&gt;
|  Configuration parameters for bootloader 1 (backup)&lt;br /&gt;
 0x25F0: StartBlock (0x00000050 (BootImagePackage), 0x00000110 (BootImagePackageSafe))&lt;br /&gt;
 0x25F4: StartPage (0x00000000)&lt;br /&gt;
 0x25F8: Version (variable)&lt;br /&gt;
 0x25FC: Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  0x2600&lt;br /&gt;
|  0x10&lt;br /&gt;
|  BootLoader2&lt;br /&gt;
|  Reserved space for bootloader 2 (unused)&lt;br /&gt;
|-&lt;br /&gt;
|  0x2610&lt;br /&gt;
|  0x10&lt;br /&gt;
|  BootLoader3&lt;br /&gt;
|  Reserved space for bootloader 3 (unused)&lt;br /&gt;
|-&lt;br /&gt;
|  0x2620&lt;br /&gt;
|  0x5C&lt;br /&gt;
|  &lt;br /&gt;
|  Empty&lt;br /&gt;
|-&lt;br /&gt;
|  0x267C&lt;br /&gt;
|  0x184&lt;br /&gt;
|  Reserved&lt;br /&gt;
|  Always starts with 0x80000000 (NVBOOT padding pattern)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Package1&amp;diff=9683</id>
		<title>Package1</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Package1&amp;diff=9683"/>
		<updated>2020-06-28T20:04:30Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Present in the firmware package titles (0100000000000819, 010000000000081A, 010000000000081B and 010000000000081C) and installed into eMMC storage&#039;s [[Flash_Filesystem#Boot_Partitions|boot partitions 0 and 1]], &amp;quot;package1&amp;quot; contains the first Switch bootloader (&amp;quot;Package1ldr&amp;quot;) to run under the NVIDIA boot processor (an ARM7TDMI called &amp;quot;BPMP&amp;quot;, &amp;quot;BPMP-Lite&amp;quot;, &amp;quot;AVP&amp;quot; or &amp;quot;COP&amp;quot;), as well as the actual encrypted package1 (&amp;quot;PK11&amp;quot;) blob containing the second Switch Bootloader and TrustZone code.&lt;br /&gt;
&lt;br /&gt;
The boot ROM validates, copies to IRAM and executes this package by parsing it&#039;s information block from the [[BCT|BCT]].&lt;br /&gt;
&lt;br /&gt;
= Format =&lt;br /&gt;
== Erista ==&lt;br /&gt;
This package is distributed as a plaintext initial bootloader (package1ldr) and a secondary encrypted blob (&amp;quot;PK11&amp;quot;). Execution starts at plaintext package1ldr which will set up hardware, generate keys and decrypt the next stage.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Package1ldr hash (first four bytes of SHA256(package1ldr))&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Secure Monitor hash (first four bytes of SHA256(secure_monitor))&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| NX Bootloader hash (first four bytes of SHA256(nx_bootloader))&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Build ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xE&lt;br /&gt;
| Build Timestamp (yyyyMMddHHmmss)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| [7.0.0+] Key Generation&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Package1ldr ===&lt;br /&gt;
The code for this stage is stored in plaintext inside the package. By looking into the BCT&#039;s bootloader0_info (normal) or bootloader1_info (safe mode), the boot ROM starts executing this stage at address 0x40010020 in IRAM (0x40010040 for 4.0.0+).&lt;br /&gt;
&lt;br /&gt;
==== Initialization ====&lt;br /&gt;
The stack pointer is set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // Set the stack pointer&lt;br /&gt;
 *(u32 *)sp = 0x40008000;&lt;br /&gt;
 &lt;br /&gt;
 // Jump to main&lt;br /&gt;
 bootloader_main();&lt;br /&gt;
 &lt;br /&gt;
 // Infinite loop&lt;br /&gt;
 deadlock();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Main ====&lt;br /&gt;
The bootloader poisons the exception vectors, cleans up memory (.bss and init_array), sets up hardware devices (including the security engine and fuses), does all the necessary checks, generates keys and finally decrypts and executes the next stage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // Poison all exception vectors&lt;br /&gt;
 *(u32 *)0x6000F200 = panic();&lt;br /&gt;
 *(u32 *)0x6000F204 = panic();&lt;br /&gt;
 *(u32 *)0x6000F208 = panic();&lt;br /&gt;
 *(u32 *)0x6000F20C = panic();&lt;br /&gt;
 *(u32 *)0x6000F210 = panic();&lt;br /&gt;
 *(u32 *)0x6000F214 = panic();&lt;br /&gt;
 *(u32 *)0x6000F218 = panic();&lt;br /&gt;
 *(u32 *)0x6000F21C = panic();&lt;br /&gt;
 &lt;br /&gt;
 u32 bss_addr_end = bss_addr_start;&lt;br /&gt;
 u32 bss_offset = 0;&lt;br /&gt;
 u32 bss_size = bss_addr_end - bss_addr_start;&lt;br /&gt;
 &lt;br /&gt;
 // Clear .bss region&lt;br /&gt;
 // Never happens due to bss_size being set to 0&lt;br /&gt;
 while (bss_offset &amp;lt; bss_size)&lt;br /&gt;
 {&lt;br /&gt;
    *(u32 *)bss_addr_start + bss_offset = 0;&lt;br /&gt;
    bss_offset += 0x04;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 u32 init_array_addr_end = init_array_addr_start;&lt;br /&gt;
 u32 init_array_offset = init_array_addr_start;&lt;br /&gt;
 &lt;br /&gt;
 // Call init methods&lt;br /&gt;
 // Never happens due to init_array_addr_end being set to init_array_addr_start&lt;br /&gt;
 while (init_array_offset &amp;lt; init_array_addr_end)&lt;br /&gt;
 {&lt;br /&gt;
    u32 init_method_offset = *(u32 *)init_array_offset;&lt;br /&gt;
 &lt;br /&gt;
    call_init_method(init_method_offset + init_array_offset);&lt;br /&gt;
    init_array_offset += 0x04;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Setup I2S1, I2S2, I2S3, I2S4, DISPLAY and VIC&lt;br /&gt;
 mbist_workaround();&lt;br /&gt;
 &lt;br /&gt;
 // Program the SE clock and resets&lt;br /&gt;
 // Uses RST_DEVICES_V, CLK_OUT_ENB_V, CLK_SOURCE_SE and CLK_V_SE&lt;br /&gt;
 enable_se_clkrst();&lt;br /&gt;
 &lt;br /&gt;
 // Set MISC_CLK_ENB&lt;br /&gt;
 // This makes fuse registers visible&lt;br /&gt;
 enable_misc_clk(0x01);&lt;br /&gt;
 &lt;br /&gt;
 // Read FUSE_SKU_INFO and compare with 0x83&lt;br /&gt;
 check_sku();&lt;br /&gt;
 &lt;br /&gt;
 // Check configuration fuses&lt;br /&gt;
 check_config_fuses();&lt;br /&gt;
 &lt;br /&gt;
 u32 bct_iram_addr = 0x40000000;&lt;br /&gt;
 &lt;br /&gt;
 // Check bootloader version from BCT&lt;br /&gt;
 check_bootloader_ver(bct_iram_addr);&lt;br /&gt;
 &lt;br /&gt;
 // Check anti-downgrade fuses&lt;br /&gt;
 check_downgrade();&lt;br /&gt;
 &lt;br /&gt;
 // Set FUSE_DIS_PGM&lt;br /&gt;
 // Disables fuse programming until next reboot&lt;br /&gt;
 disable_fuse_pgm();&lt;br /&gt;
 &lt;br /&gt;
 // Setup memory controllers&lt;br /&gt;
 enable_mem_ctl();&lt;br /&gt;
 &lt;br /&gt;
 // Setup the security engine&#039;s address&lt;br /&gt;
 set_se_addr(0x70012000);&lt;br /&gt;
 &lt;br /&gt;
 // Check SE global config&lt;br /&gt;
 check_se_status();&lt;br /&gt;
 &lt;br /&gt;
 // Generate keys&lt;br /&gt;
 keygen(bct_iram_addr);&lt;br /&gt;
 &lt;br /&gt;
 u32 pk11_blob_addr = 0x40013FE0;&lt;br /&gt;
 &lt;br /&gt;
 // Decrypt the PK11 blob and get the next stage&#039;s entrypoint&lt;br /&gt;
 nx_boot_addr = decrypt_pk11_blob(pk11_blob_addr);&lt;br /&gt;
 &lt;br /&gt;
 u32 nx_boot_sp = 0x40007000;&lt;br /&gt;
 &lt;br /&gt;
 // Set the stack pointer and jump to a stub responsible&lt;br /&gt;
 // for cleaning up and branching into the next stage&lt;br /&gt;
 exec_nx_boot_stub(nx_boot_addr, nx_boot_stub_addr, nx_boot_sp);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6.2.0+] The bootloader maintains most of its design, but passes execution to a [[TSEC]] payload and is left in an infinite loop.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // Poison all exception vectors&lt;br /&gt;
 *(u32 *)0x6000F200 = panic();&lt;br /&gt;
 *(u32 *)0x6000F204 = panic();&lt;br /&gt;
 *(u32 *)0x6000F208 = panic();&lt;br /&gt;
 *(u32 *)0x6000F20C = panic();&lt;br /&gt;
 *(u32 *)0x6000F210 = panic();&lt;br /&gt;
 *(u32 *)0x6000F214 = panic();&lt;br /&gt;
 *(u32 *)0x6000F218 = panic();&lt;br /&gt;
 *(u32 *)0x6000F21C = panic();&lt;br /&gt;
 &lt;br /&gt;
 u32 bss_addr_end = bss_addr_start;&lt;br /&gt;
 u32 bss_offset = 0;&lt;br /&gt;
 u32 bss_size = bss_addr_end - bss_addr_start;&lt;br /&gt;
 &lt;br /&gt;
 // Clear .bss region&lt;br /&gt;
 // Never happens due to bss_size being set to 0&lt;br /&gt;
 while (bss_offset &amp;lt; bss_size)&lt;br /&gt;
 {&lt;br /&gt;
    *(u32 *)bss_addr_start + bss_offset = 0;&lt;br /&gt;
    bss_offset += 0x04;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 u32 init_array_addr_end = init_array_addr_start;&lt;br /&gt;
 u32 init_array_offset = init_array_addr_start;&lt;br /&gt;
 &lt;br /&gt;
 // Call init methods&lt;br /&gt;
 // Never happens due to init_array_addr_end being set to init_array_addr_start&lt;br /&gt;
 while (init_array_offset &amp;lt; init_array_addr_end)&lt;br /&gt;
 {&lt;br /&gt;
    u32 init_method_offset = *(u32 *)init_array_offset;&lt;br /&gt;
 &lt;br /&gt;
    call_init_method(init_method_offset + init_array_offset);&lt;br /&gt;
    init_array_offset += 0x04;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Setup I2S1, I2S2, I2S3, I2S4, DISPLAY and VIC&lt;br /&gt;
 mbist_workaround();&lt;br /&gt;
 &lt;br /&gt;
 // Program the SE clock and resets&lt;br /&gt;
 // Uses RST_DEVICES_V, CLK_OUT_ENB_V, CLK_SOURCE_SE and CLK_V_SE&lt;br /&gt;
 enable_se_clkrst();&lt;br /&gt;
 &lt;br /&gt;
 // Set MISC_CLK_ENB&lt;br /&gt;
 // This makes fuse registers visible&lt;br /&gt;
 enable_misc_clk(0x01);&lt;br /&gt;
 &lt;br /&gt;
 // Setup the security engine&#039;s address&lt;br /&gt;
 set_se_addr(0x70012000);&lt;br /&gt;
 &lt;br /&gt;
 // Check SE global config&lt;br /&gt;
 check_se_status();&lt;br /&gt;
 &lt;br /&gt;
 // Read FUSE_SKU_INFO and compare with 0x83&lt;br /&gt;
 check_sku();&lt;br /&gt;
 &lt;br /&gt;
 // Check configuration fuses&lt;br /&gt;
 check_config_fuses();&lt;br /&gt;
 &lt;br /&gt;
 u32 bct_iram_addr = 0x40000000;&lt;br /&gt;
 &lt;br /&gt;
 // Check bootloader version from BCT&lt;br /&gt;
 check_bootloader_ver(bct_iram_addr);&lt;br /&gt;
 &lt;br /&gt;
 // Check anti-downgrade fuses&lt;br /&gt;
 check_downgrade();&lt;br /&gt;
 &lt;br /&gt;
 // Setup memory controllers&lt;br /&gt;
 enable_mem_ctl();&lt;br /&gt;
  &lt;br /&gt;
 // Clear SYS_CLK_DIVISOR&lt;br /&gt;
 *(u32 *)CLK_SOURCE_SYS = 0;&lt;br /&gt;
 &lt;br /&gt;
 // Place I2C5 in reset&lt;br /&gt;
 u32 rst_dev_h_val = *(u32 *)RST_DEVICES_H;&lt;br /&gt;
 rst_dev_h_val &amp;amp;= ~(0x8000);&lt;br /&gt;
 rst_dev_h_val |= 0x8000;&lt;br /&gt;
 *(u32 *)RST_DEVICES_H = rst_dev_h_val;&lt;br /&gt;
 &lt;br /&gt;
 // Program the HOST1X clock and resets&lt;br /&gt;
 // Uses RST_DEVICES_L, CLK_OUT_ENB_L, CLK_SOURCE_HOST1X and CLK_L_HOST1X&lt;br /&gt;
 enable_host1x_clkrst();&lt;br /&gt;
 &lt;br /&gt;
 // Program the TSEC clock and resets&lt;br /&gt;
 // Uses RST_DEVICES_U, CLK_OUT_ENB_U, CLK_SOURCE_TSEC and CLK_U_TSEC&lt;br /&gt;
 enable_tsec_clkrst();&lt;br /&gt;
 &lt;br /&gt;
 // Program the SOR_SAFE clock and resets&lt;br /&gt;
 // Uses RST_DEVICES_Y, CLK_OUT_ENB_Y and CLK_Y_SOR_SAFE&lt;br /&gt;
 enable_sor_safe_clkrst();&lt;br /&gt;
 &lt;br /&gt;
 // Program the SOR0 clock and resets&lt;br /&gt;
 // Uses RST_DEVICES_X, CLK_OUT_ENB_X and CLK_X_SOR0&lt;br /&gt;
 enable_sor0_clkrst();&lt;br /&gt;
 &lt;br /&gt;
 // Program the SOR1 clock and resets&lt;br /&gt;
 // Uses RST_DEVICES_X, CLK_OUT_ENB_X, CLK_SOURCE_SOR1 and CLK_X_SOR1&lt;br /&gt;
 enable_sor1_clkrst();&lt;br /&gt;
 &lt;br /&gt;
 // Program the KFUSE clock resets&lt;br /&gt;
 // Uses RST_DEVICES_H, CLK_OUT_ENB_H and CLK_H_KFUSE&lt;br /&gt;
 enable_kfuse_clkrst();&lt;br /&gt;
 &lt;br /&gt;
 // Clear the Falcon DMA control register&lt;br /&gt;
 *(u32 *)FALCON_DMACTL = 0;&lt;br /&gt;
 &lt;br /&gt;
 // Enable Falcon IRQs&lt;br /&gt;
 *(u32 *)FALCON_IRQMSET = 0xFFF2;&lt;br /&gt;
 &lt;br /&gt;
 // Enable Falcon IRQs&lt;br /&gt;
 *(u32 *)FALCON_IRQDEST = 0xFFF0;&lt;br /&gt;
 &lt;br /&gt;
 // Enable Falcon interfaces&lt;br /&gt;
 *(u32 *)FALCON_ITFEN = 0x03;&lt;br /&gt;
 &lt;br /&gt;
 // Wait for Falcon&#039;s DMA engine to be idle&lt;br /&gt;
 wait_flcn_dma_idle();&lt;br /&gt;
 &lt;br /&gt;
 // Set DMA transfer base address to 0x40010E00&amp;gt;&amp;gt; 0x08&lt;br /&gt;
 *(u32 *)FALCON_DMATRFBASE = 0x40010E;&lt;br /&gt;
 &lt;br /&gt;
 u32 trf_mode = 0;     // A value of 0 sets FALCON_DMATRFCMD_IMEM&lt;br /&gt;
 u32 dst_offset = 0;&lt;br /&gt;
 u32 src_offset = 0;&lt;br /&gt;
 &lt;br /&gt;
 // Load code into Falcon (0x100 bytes at a time)&lt;br /&gt;
 while (src_offset &amp;lt; 0x2900)&lt;br /&gt;
 {&lt;br /&gt;
    flcn_load_firm(trf_mode, src_offset, dst_offset);&lt;br /&gt;
    src_offset += 0x100;&lt;br /&gt;
    dst_offset += 0x100;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Set magic value in host1x scratch space&lt;br /&gt;
 *(u32 *)0x50003300 = 0x34C2E1DA;&lt;br /&gt;
 &lt;br /&gt;
 // Clear Falcon scratch1 MMIO&lt;br /&gt;
 *(u32 *)FALCON_SCRATCH1 = 0;&lt;br /&gt;
 &lt;br /&gt;
 // Set Falcon boot key version in scratch0 MMIO&lt;br /&gt;
 *(u32 *)FALCON_SCRATCH0 = 0x01;&lt;br /&gt;
 &lt;br /&gt;
 // Set Falcon&#039;s boot vector address&lt;br /&gt;
 *(u32 *)FALCON_BOOTVEC = 0;&lt;br /&gt;
 &lt;br /&gt;
 // Signal Falcon&#039;s CPU&lt;br /&gt;
 *(u32 *)FALCON_CPUCTL = 0x02;&lt;br /&gt;
 &lt;br /&gt;
 // Infinite loop&lt;br /&gt;
 deadlock();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Panic =====&lt;br /&gt;
If a panic occurs, all sensitive memory contents are cleared, the security engine and fuse programming are disabled and the boot processor is left in a halted state.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // Clear all stack contents&lt;br /&gt;
 clear_stack();&lt;br /&gt;
 &lt;br /&gt;
 // Terminate the security engine&lt;br /&gt;
 disable_se();&lt;br /&gt;
 &lt;br /&gt;
 // Set FUSE_DIS_PGM&lt;br /&gt;
 // Disables fuse programming until next reboot&lt;br /&gt;
 disable_fuse_pgm();&lt;br /&gt;
 &lt;br /&gt;
 // Clear temporary key storage memory&lt;br /&gt;
 clear_mem();&lt;br /&gt;
 &lt;br /&gt;
 // Clear the PK11 blob from memory&lt;br /&gt;
 clear_pk11_blob();&lt;br /&gt;
 &lt;br /&gt;
 // Halt the boot processor&lt;br /&gt;
 while (true)&lt;br /&gt;
    *(u32 *)FLOW_CTLR_HALT_COP_EVENTS = (FLOW_MODE_STOP | HALT_COP_EVENT_JTAG);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Anti-downgrade =====&lt;br /&gt;
See [[Fuses#Anti-downgrade|Anti-downgrade]].&lt;br /&gt;
&lt;br /&gt;
===== Memory controllers =====&lt;br /&gt;
After disabling fuse programming, the bootloader configures the EMC and MEM/MC. It additionally disables QSPI resets and programs a special aperture designed for AHB redirected access to IRAM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt; &lt;br /&gt;
 // Initialize EMC&#039;s clock source&lt;br /&gt;
 u32 emc_clk_src_val = *(u32 *)PERIPH_CLK_SOURCE_EMC;&lt;br /&gt;
 *(u32 *)PERIPH_CLK_SOURCE_EMC = (emc_clk_src_val | 0x40000000);&lt;br /&gt;
 &lt;br /&gt;
 // Enable CLK_H_EMC&lt;br /&gt;
 u32 clk_out_enb_h_val = *(u32 *)CLK_OUT_ENB_SET_H;&lt;br /&gt;
 clk_out_enb_h_val &amp;amp;= ~(0x2000000);&lt;br /&gt;
 clk_out_enb_h_val |= 0x2000000;&lt;br /&gt;
 *(u32 *)CLK_OUT_ENB_SET_H = clk_out_enb_h_val;&lt;br /&gt;
 &lt;br /&gt;
 // Enable CLK_H_MEM&lt;br /&gt;
 clk_out_enb_h_val = *(u32 *)CLK_OUT_ENB_SET_H;&lt;br /&gt;
 clk_out_enb_h_val &amp;amp;= ~(0x01);&lt;br /&gt;
 clk_out_enb_h_val |= 0x01;&lt;br /&gt;
 *(u32 *)CLK_OUT_ENB_SET_H = clk_out_enb_h_val;&lt;br /&gt;
 &lt;br /&gt;
 // Enable CLK_X_EMC_DLL&lt;br /&gt;
 u32 clk_out_enb_x_val = *(u32 *)CLK_OUT_ENB_SET_X;&lt;br /&gt;
 clk_out_enb_x_val &amp;amp;= ~(0x4000);&lt;br /&gt;
 clk_out_enb_x_val |= 0x4000;&lt;br /&gt;
 *(u32 *)CLK_OUT_ENB_SET_X = clk_out_enb_x_val;&lt;br /&gt;
 &lt;br /&gt;
 // Enable RST_H_EMC and RST_H_MEM&lt;br /&gt;
 *(u32 *)RST_DEVICES_SET_H = 0x2000001;&lt;br /&gt;
 &lt;br /&gt;
 // Wait a while&lt;br /&gt;
 mdelay(0x05);&lt;br /&gt;
 &lt;br /&gt;
 // Disable RST_Y_QSPI&lt;br /&gt;
 u32 rst_clr_y_val = *(u32 *)RST_DEVICES_CLR_Y;&lt;br /&gt;
 rst_clr_y_val &amp;amp;= ~(0x80000);&lt;br /&gt;
 rst_clr_y_val |= 0x80000;&lt;br /&gt;
 *(u32 *)RST_DEVICES_CLR_Y = rst_clr_y_val;&lt;br /&gt;
 &lt;br /&gt;
 // Refresh MC_IRAM_REG_CTRL&lt;br /&gt;
 // Should be set to 0 (MC_ENABLE_IRAM_CFG_WRITES)&lt;br /&gt;
 u32 mc_iram_reg_ctrl_val = *(u32 *)MC_IRAM_REG_CTRL;&lt;br /&gt;
 *(u32 *)MC_IRAM_REG_CTRL = mc_iram_reg_ctrl_val;&lt;br /&gt;
 &lt;br /&gt;
 // Set base and top addresses for AHB redirected IRAM path&lt;br /&gt;
 // This allows devices like the GPU to access this range&lt;br /&gt;
 *(u32 *)MC_IRAM_BOM = 0x40000000;&lt;br /&gt;
 *(u32 *)MC_IRAM_TOM = 0x4003F000;&lt;br /&gt;
 &lt;br /&gt;
 // Read back MC_IRAM_REG_CTRL&lt;br /&gt;
 mc_iram_reg_ctrl_val = *(u32 *)MC_IRAM_REG_CTRL;&lt;br /&gt;
 	&lt;br /&gt;
 return mc_iram_reg_ctrl_val;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6.2.0+] MC_IRAM_TOM is now set to 0x80000000 to allow TSEC to access IRAM and all MMIO.&lt;br /&gt;
&lt;br /&gt;
===== Key generation =====&lt;br /&gt;
After the security engine is ready and before decrypting the next stage, the bootloader initializes and generates several keys into hardware keyslots.&lt;br /&gt;
For more details on the Switch&#039;s cryptosystem, please see [[Cryptosystem|this page]].&lt;br /&gt;
&lt;br /&gt;
[6.2.0+] The key generation process was moved into an encrypted [[TSEC]] payload.&lt;br /&gt;
&lt;br /&gt;
====== Selection ======&lt;br /&gt;
Depending on [[Fuses#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]] and [[Fuses#FUSE_SPARE_BIT_5|FUSE_SPARE_BIT_5]] different static seeds are selected for key generation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // Initialize keyslots 0x0C and 0x0D as readable&lt;br /&gt;
 init_keyslot(0x0C, 0x15);&lt;br /&gt;
 init_keyslot(0x0D, 0x15);&lt;br /&gt;
 &lt;br /&gt;
 // Find the BCT&#039;s data address from IRAM header&lt;br /&gt;
 u32 bct_data_addr = *(u32 *)bct_imem_addr + 0x4C;&lt;br /&gt;
 u32 bct_customer_data_addr = *(u32 *)bct_data_addr + 0x450;&lt;br /&gt;
 &lt;br /&gt;
 // Wrapper to get unit type from FUSE_RESERVED_ODM4&lt;br /&gt;
 // This tells if the device is retail or debug&lt;br /&gt;
 bool is_retail = is_unit_retail();&lt;br /&gt;
 &lt;br /&gt;
 u32 master_static_seed_addr = 0;&lt;br /&gt;
 u32 master_static_seed_size = 0;&lt;br /&gt;
 &lt;br /&gt;
 if (is_retail)&lt;br /&gt;
 {&lt;br /&gt;
    // Read FUSE_SPARE_BIT_5&lt;br /&gt;
    // This tells which master key to use&lt;br /&gt;
    u32 master_key_ver = read_fuse_spare_bit_5();&lt;br /&gt;
 &lt;br /&gt;
    // Invalid for retail&lt;br /&gt;
    if (!master_key_ver)&lt;br /&gt;
       panic();&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
       master_static_seed_addr = static_seed1_addr;&lt;br /&gt;
       master_static_seed_size = 0x10;&lt;br /&gt;
 &lt;br /&gt;
       // Generate retail keys&lt;br /&gt;
       generate_retail_keys(bct_customer_data_addr, static_seed_addr, static_seed_size);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
    // Read FUSE_SPARE_BIT_5&lt;br /&gt;
    // This tells which master key to use&lt;br /&gt;
    u32 master_key_ver = read_fuse_spare_bit_5();&lt;br /&gt;
 &lt;br /&gt;
    // Use debug key set&lt;br /&gt;
    if (!master_key_ver)&lt;br /&gt;
    {&lt;br /&gt;
       // Read the first byte of the BCT RSA PSS signature&lt;br /&gt;
       u8 rsa_pss_1_byte = *(u8 *)bct_data_addr + 0x210;&lt;br /&gt;
 &lt;br /&gt;
       if (rsa_pss_1_byte == 0x11)&lt;br /&gt;
       {&lt;br /&gt;
          master_static_seed_addr = static_seed6_addr;&lt;br /&gt;
          master_static_seed_size = 0x10;&lt;br /&gt;
       }&lt;br /&gt;
       else	                          &lt;br /&gt;
       {&lt;br /&gt;
          master_static_seed_addr = static_seed7_addr;&lt;br /&gt;
          master_static_seed_size = 0x10;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       // Generate debug keys&lt;br /&gt;
       generate_debug_keys(static_seed_addr, static_seed_size);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
       // Read the first byte of the BCT RSA PSS signature&lt;br /&gt;
       u8 rsa_pss_1_byte = *(u8 *)bct_data_addr + 0x210;&lt;br /&gt;
 &lt;br /&gt;
       if (rsa_pss_1_byte == 0x4F)		// Different key as in retail mode&lt;br /&gt;
       {&lt;br /&gt;
          master_static_seed_addr = static_seed0_addr;&lt;br /&gt;
          master_static_seed_size = 0x10;&lt;br /&gt;
       }&lt;br /&gt;
       else	                                // Same key as in retail mode&lt;br /&gt;
       {&lt;br /&gt;
          master_static_seed_addr = static_seed1_addr;&lt;br /&gt;
          master_static_seed_size = 0x10;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       // Generate retail keys&lt;br /&gt;
       generate_retail_keys(bct_customer_data_addr, master_static_seed_addr, master_static_seed_size);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Initialize keyslots 0x0C and 0x0D as unreadable&lt;br /&gt;
 init_keyslot(0x0C, 0xFF);&lt;br /&gt;
 init_keyslot(0x0D, 0xFF);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== generate_retail_keys ======&lt;br /&gt;
In order to generate retail keys, the bootloader starts by initializing TSEC and grabbing it&#039;s [[TSEC#TSEC_key_generation|device key]]. Using static seeds and the SBK, the keyblob injected into the BCT&#039;s [[BCT#customer_data|customer_data]] is validated and decrypted. The resulting keys will then be used to generate the master static key and the master device key.&lt;br /&gt;
&lt;br /&gt;
See the pseudocode bellow for the detailed process.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 in_addr = 0;&lt;br /&gt;
 u32 in_size = 0;&lt;br /&gt;
 u32 out_addr = 0;&lt;br /&gt;
 u32 out_size = 0;&lt;br /&gt;
 u32 keyslot = 0;&lt;br /&gt;
 u32 keyslot_dst = 0;&lt;br /&gt;
 &lt;br /&gt;
 // Get the TSEC device key&lt;br /&gt;
 tsec_get_device_key(tsec_device_key_addr, 0x10);&lt;br /&gt;
 &lt;br /&gt;
 // Install the TSEC device key into keyslot 0x0D&lt;br /&gt;
 set_keyslot_data(0x0D, tsec_device_key_addr, 0x10);&lt;br /&gt;
 &lt;br /&gt;
 in_addr = static_seed2_addr;&lt;br /&gt;
 in_size = 0x10;&lt;br /&gt;
 out_addr = keyblob_device_key_addr;&lt;br /&gt;
 out_size = 0x10;&lt;br /&gt;
 keyslot = 0x0D;&lt;br /&gt;
 &lt;br /&gt;
 // Use the tsec_device_key (keyslot 0x0D) to decrypt the static_seed2&lt;br /&gt;
 // This generates the keyblob_device_key&lt;br /&gt;
 aes_ecb_decrypt(out_addr, out_size, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 in_addr = keyblob_device_key_addr;&lt;br /&gt;
 in_size = 0x10;&lt;br /&gt;
 keyslot = 0x0E;&lt;br /&gt;
 keyslot_dst = 0x0D;&lt;br /&gt;
 &lt;br /&gt;
 // Use SBK (keyslot 0x0E) to further decrypt the&lt;br /&gt;
 // keyblob_device_key and install it into keyslot 0x0D&lt;br /&gt;
 // This will generate the keyblob_key&lt;br /&gt;
 decrypt_keyslot(keyslot_dst, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 // Clear SBK and SSK keyslots&lt;br /&gt;
 clear_keyslot(0x0E);&lt;br /&gt;
 clear_keyslot(0x0F);&lt;br /&gt;
 &lt;br /&gt;
 in_addr = static_seed4_addr;&lt;br /&gt;
 in_size = 0x10;&lt;br /&gt;
 keyslot = 0x0D;&lt;br /&gt;
 keyslot_dst = 0x0B;&lt;br /&gt;
 &lt;br /&gt;
 // Use keyblob_key (keyslot 0x0D) to decrypt the&lt;br /&gt;
 // static_seed4_addr and install it to keyslot 0x0B&lt;br /&gt;
 // This will generate the bct_mac_key&lt;br /&gt;
 decrypt_keyslot(keyslot_dst, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 in_addr = bct_customer_data_addr + 0x10;&lt;br /&gt;
 in_size = 0xA0;&lt;br /&gt;
 out_addr = mac_addr;&lt;br /&gt;
 out_size = 0x10;&lt;br /&gt;
 keyslot = 0x0B;&lt;br /&gt;
 &lt;br /&gt;
 // Use the bct_mac_key (keyslot 0x0B) to generate&lt;br /&gt;
 // CMAC over bct_customer_data_addr + 0x10&lt;br /&gt;
 aes_cmac(out_addr, out_size, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 // Compare the generated hash with the first&lt;br /&gt;
 // 0x10 bytes of bct_customer_data&lt;br /&gt;
 bool match = safe_memcmp(mac_addr, bct_customer_data_addr, 0x10);&lt;br /&gt;
 &lt;br /&gt;
 // Hashes don&#039;t match&lt;br /&gt;
 if (!match)&lt;br /&gt;
    panic();&lt;br /&gt;
 &lt;br /&gt;
 in_addr = bct_customer_data_addr + 0x20;&lt;br /&gt;
 in_size = 0x90;&lt;br /&gt;
 ctr_addr = bct_customer_data_addr + 0x10;&lt;br /&gt;
 ctr_size = 0x10;&lt;br /&gt;
 out_addr = dec_payload_addr;&lt;br /&gt;
 out_size = 0x90;&lt;br /&gt;
 keyslot = 0x0D;&lt;br /&gt;
 &lt;br /&gt;
 // AES-CTR decrypt&lt;br /&gt;
 // Use the keyblob_key (keyslot 0x0D) to decrypt bct_customer_data_addr + 0x20&lt;br /&gt;
 // using bct_customer_data_addr + 0x10 as CTR&lt;br /&gt;
 aes_ctr_decrypt(out_addr, out_size, keyslot, in_addr, in_size, ctr_addr, ctr_size);&lt;br /&gt;
 &lt;br /&gt;
 // Install the last decrypted keyblob key into keyslot 0x0B&lt;br /&gt;
 // This is the pk11_key&lt;br /&gt;
 set_keyslot_data(0x0B, dec_payload_addr + 0x80, 0x10);&lt;br /&gt;
 &lt;br /&gt;
 // Install the first decrypted keyblob key into keyslot 0x0C&lt;br /&gt;
 // This is the master_static_kek&lt;br /&gt;
 set_keyslot_data(0x0C, dec_payload_addr, 0x10);&lt;br /&gt;
 &lt;br /&gt;
 // Clear out the decrypted data&lt;br /&gt;
 memclear(dec_payload_addr, 0x90);&lt;br /&gt;
 &lt;br /&gt;
 in_addr = master_static_seed_addr;&lt;br /&gt;
 in_size = master_static_seed_size;&lt;br /&gt;
 keyslot = 0x0C;&lt;br /&gt;
 keyslot_dst = 0x0C;&lt;br /&gt;
 &lt;br /&gt;
 // Use the master_static_kek (keyslot 0x0C) to decrypt&lt;br /&gt;
 // master_static_seed and install it into keyslot 0x0C&lt;br /&gt;
 // This will generate the master_static_key&lt;br /&gt;
 decrypt_keyslot(keyslot_dst, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 in_addr = static_seed3_addr;&lt;br /&gt;
 in_size = 0x10;&lt;br /&gt;
 keyslot = 0x0D;&lt;br /&gt;
 keyslot_dst = 0x0D;&lt;br /&gt;
 &lt;br /&gt;
 // Use keyblob_key (keyslot 0x0D) to decrypt&lt;br /&gt;
 // static_seed3_addr and install it into keyslot 0x0D&lt;br /&gt;
 // This will generate the master_device_key&lt;br /&gt;
 decrypt_keyslot(keyslot_dst, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== generate_debug_keys ======&lt;br /&gt;
In order to generate debug keys, the bootloader only uses static seeds, the SBK and the SSK.&lt;br /&gt;
&lt;br /&gt;
See the pseudocode bellow for the detailed process.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 u32 in_addr = 0;&lt;br /&gt;
 u32 in_size = 0;&lt;br /&gt;
 u32 keyslot = 0;&lt;br /&gt;
 u32 keyslot_dst = 0;&lt;br /&gt;
 &lt;br /&gt;
 in_addr = static_seed8_addr;&lt;br /&gt;
 in_size = 0x10;&lt;br /&gt;
 keyslot = 0x0E;&lt;br /&gt;
 keyslot_dst = 0x0B;&lt;br /&gt;
 &lt;br /&gt;
 // Use SBK (keyslot 0x0E) to decrypt the&lt;br /&gt;
 // static_seed8 and install it to keyslot 0x0B&lt;br /&gt;
 // This will generate debug_pk11_key&lt;br /&gt;
 decrypt_keyslot(keyslot_dst, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 in_addr = static_seed5_addr;&lt;br /&gt;
 in_size = 0x10;&lt;br /&gt;
 keyslot = 0x0E;&lt;br /&gt;
 keyslot_dst = 0x0C;&lt;br /&gt;
 &lt;br /&gt;
 // Use SBK (keyslot 0x0E) to decrypt the&lt;br /&gt;
 // static_seed5 and install it to keyslot 0x0C&lt;br /&gt;
 // This will generate debug_master_static_kek&lt;br /&gt;
 decrypt_keyslot(keyslot_dst, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 in_addr = static_seed9_addr;&lt;br /&gt;
 in_size = 0x10;&lt;br /&gt;
 keyslot = 0x0F;&lt;br /&gt;
 keyslot_dst = 0x0D;&lt;br /&gt;
 &lt;br /&gt;
 // Use SSK (keyslot 0x0F) to decrypt the&lt;br /&gt;
 // static_seed9 and install it to keyslot 0x0D&lt;br /&gt;
 // This will generate debug_keyblob_key&lt;br /&gt;
 decrypt_keyslot(keyslot_dst, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 // Clear SBK and SSK keyslots&lt;br /&gt;
 clear_keyslot(0x0E);&lt;br /&gt;
 clear_keyslot(0x0F);&lt;br /&gt;
 &lt;br /&gt;
 in_addr = master_static_seed_addr;&lt;br /&gt;
 in_size = master_static_seed_size;&lt;br /&gt;
 keyslot = 0x0C;&lt;br /&gt;
 keyslot_dst = 0x0C;&lt;br /&gt;
 &lt;br /&gt;
 // Use the debug_master_static_kek (keyslot 0x0C) to decrypt the&lt;br /&gt;
 // master_static_seed and install it to keyslot 0x0C&lt;br /&gt;
 // This will generate the master_static_key&lt;br /&gt;
 decrypt_keyslot(keyslot_dst, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 in_addr = static_seed3_addr;&lt;br /&gt;
 in_size = 0x10;&lt;br /&gt;
 keyslot = 0x0D;&lt;br /&gt;
 keyslot_dst = 0x0D;&lt;br /&gt;
 &lt;br /&gt;
 // Use debug_keyblob_key (keyslot 0x0D) to decrypt the&lt;br /&gt;
 // static_seed3 and install it to keyslot 0x0D&lt;br /&gt;
 // This will generate the master_device_key&lt;br /&gt;
 decrypt_keyslot(keyslot_dst, keyslot, in_addr, in_size);&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Package1 (PK11) ===&lt;br /&gt;
This blob is stored encrypted inside the package and is decrypted by package1ldr.&lt;br /&gt;
&lt;br /&gt;
==== Encryption ====&lt;br /&gt;
The encrypted blob is prepended with it&#039;s CTR and total image size. After checking the image&#039;s size against an hardcoded value (can change on firmware updates), the image is AES-CTR decrypted and the keyslot used for decryption is immediately cleared.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // Maximum encrypted blob&#039;s size on firmware version 1.0.0&lt;br /&gt;
 u32 max_pk11_enc_blob_size = 0x29000;&lt;br /&gt;
 &lt;br /&gt;
 u32 pk11_enc_blob_size = *(u32 *)pk11_blob_addr;&lt;br /&gt;
 u32 pk11_enc_blob_ctr_addr = pk11_blob_addr + 0x10; &lt;br /&gt;
 u32 pk11_enc_blob_addr = pk11_blob_addr + 0x20;&lt;br /&gt;
 &lt;br /&gt;
 // Validate the encrypted blob&#039;s size&lt;br /&gt;
 if (pk11_enc_blob_size &amp;gt; max_pk11_enc_blob_size)&lt;br /&gt;
    panic();&lt;br /&gt;
 &lt;br /&gt;
 u32 in_addr = pk11_enc_blob_addr;&lt;br /&gt;
 u32 in_size = pk11_enc_blob_size;&lt;br /&gt;
 u32 ctr_addr = pk11_enc_blob_ctr_addr;&lt;br /&gt;
 u32 ctr_size = 0x10;&lt;br /&gt;
 u32 out_addr = pk11_dec_blob_addr;&lt;br /&gt;
 u32 out_size = pk11_dec_blob_size;&lt;br /&gt;
 u32 keyslot = 0x0B;&lt;br /&gt;
 &lt;br /&gt;
 // AES-CTR decrypt&lt;br /&gt;
 // Use the pk11_key (keyslot 0x0B) to decrypt the blob in place&lt;br /&gt;
 aes_ctr_decrypt(out_addr, out_size, keyslot, in_addr, in_size, ctr_addr, ctr_size);&lt;br /&gt;
 &lt;br /&gt;
 // Clear pk11_key keyslot&lt;br /&gt;
 clear_keyslot(0x0B);&lt;br /&gt;
 &lt;br /&gt;
 // Validate the decrypted blob&lt;br /&gt;
 // Checks the &amp;quot;PK11&amp;quot; magic and some pk11 header fields&lt;br /&gt;
 bool is_valid = check_pk11_header(pk11_dec_blob_addr, pk11_dec_blob_size);&lt;br /&gt;
 &lt;br /&gt;
 // Invalid PK11 image&lt;br /&gt;
 if (!is_valid)&lt;br /&gt;
    panic();&lt;br /&gt;
 &lt;br /&gt;
 u32 pk11_header_size = 0x20;&lt;br /&gt;
 u32 pk11_sec1_offset = *(u32 *)pk11_dec_blob_addr + 0x14;&lt;br /&gt;
 u32 pk11_sec2_size = *(u32 *)pk11_dec_blob_addr + 0x18;&lt;br /&gt;
 &lt;br /&gt;
 // Calculate NX bootloader&#039;s entrypoint&lt;br /&gt;
 u32 nx_boot_addr = (pk11_dec_blob_addr + pk11_header_size + pk11_sec1_offset + pk11_sec2_size);&lt;br /&gt;
 		&lt;br /&gt;
 return nx_boot_addr;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Header ====&lt;br /&gt;
When decrypted, the blob is encapsulated in the following header.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| Magic &amp;quot;PK11&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| Section 0 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Section 0 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Section 1 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Section 1 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Section 2 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Section 2 offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
What each section is used for may vary per system-version.&lt;br /&gt;
&lt;br /&gt;
==== Section 0 ====&lt;br /&gt;
This section contains the warmboot binary.&lt;br /&gt;
&lt;br /&gt;
==== Section 1 ====&lt;br /&gt;
This section contains the NX bootloader, which is run after the initial bootloader in package1.&lt;br /&gt;
&lt;br /&gt;
==== Section 2 ====&lt;br /&gt;
This section contains the Secure Monitor binary.&lt;br /&gt;
&lt;br /&gt;
== Mariko ==&lt;br /&gt;
This package is now distributed in a custom, signed and encrypted format.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x110&lt;br /&gt;
| Cryptographic signature&lt;br /&gt;
 0x0000: CryptoHash (empty)&lt;br /&gt;
 0x0010: RsaPssSig&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x20&lt;br /&gt;
| Random block&lt;br /&gt;
|-&lt;br /&gt;
| 0x130&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA256 hash over package1 data&lt;br /&gt;
|-&lt;br /&gt;
| 0x150&lt;br /&gt;
| 0x4&lt;br /&gt;
| KeyGeneration&lt;br /&gt;
|-&lt;br /&gt;
| 0x154&lt;br /&gt;
| 0x4&lt;br /&gt;
| Length&lt;br /&gt;
|-&lt;br /&gt;
| 0x158&lt;br /&gt;
| 0x4&lt;br /&gt;
| LoadAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x15C&lt;br /&gt;
| 0x4&lt;br /&gt;
| EntryPoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x160&lt;br /&gt;
| 0x10&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x170&lt;br /&gt;
| Variable&lt;br /&gt;
| Package1 data&lt;br /&gt;
 0x0170: [[Package1#Header|Header]]&lt;br /&gt;
 0x0190: Body (encrypted)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NPDM&amp;diff=8896</id>
		<title>NPDM</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NPDM&amp;diff=8896"/>
		<updated>2020-03-11T12:55:45Z</updated>

		<summary type="html">&lt;p&gt;Liam: Update MemoryMap bits and FsAccessControl structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Switch equivalent of 3DS [https://www.3dbrew.org/wiki/NCCH/Extended_Header exheader]. This is the file with extension &amp;quot;.npdm&amp;quot; in {Switch ExeFS}. The size of this file varies.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| [[#META|META]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;Varies&amp;gt;&lt;br /&gt;
| [[#ACID|ACID]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| [[#ACI0|ACI0]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= META =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;META&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| [9.0.0+] AcidSignatureKeyGeneration (0 or 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Flags|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#MainThreadPriority|MainThreadPriority]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| MainThreadCoreNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [3.0.0+] [[#SystemResourceSize|SystemResourceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Version|Version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#MainThreadStackSize|MainThreadStackSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Name (usually/always &amp;quot;Application&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| ProductCode (usually/always all zeroes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0|AciOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0|AciSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID|AcidOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID|AcidSize]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Is64BitInstruction&lt;br /&gt;
|-&lt;br /&gt;
| 1-3&lt;br /&gt;
| ProcessAddressSpace (0x00 = AddressSpace32Bit, 0x01 = AddressSpace64BitOld, 0x02 = AddressSpace32BitNoReserved, 0x03 = AddressSpace64Bit)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| OptimizeMemoryAllocation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MainThreadPriority ==&lt;br /&gt;
Ranges from 0 to 0x3F.&lt;br /&gt;
&lt;br /&gt;
== SystemResourceSize ==&lt;br /&gt;
This is the size of PersonalMmHeap. Maximum size as of 5.0.0 is 0x1FE00000.&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
0 for all titles.&lt;br /&gt;
&lt;br /&gt;
[8.1.0+] Now set to 1 for certain titles.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now set to a proper version field for all titles.&lt;br /&gt;
&lt;br /&gt;
== MainThreadStackSize ==&lt;br /&gt;
Must be aligned to 0x1000.&lt;br /&gt;
&lt;br /&gt;
In non-nspwn scenarios, values of 0 can also rarely break in Horizon. This might be something auto-adapting or a security feature of some sort?&lt;br /&gt;
&lt;br /&gt;
= ACID =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the data starting at 0x100 with the size field from 0x204&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 public key for the second [[NCA_Format|NCA]] signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;ACID&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Flags_2|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FsAccessControlOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x224&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FsAccessControlSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x228&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SrvAccessControlOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SrvAccessControlSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KernelCapabilityOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x234&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KernelCapabilitySize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x238&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ProductionFlag&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| UnqualifiedApproval&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| [5.0.0+ ] MemoryRegion (0 = Application, 1 = Applet, 2 = SecureSystem, 3 = NonSecureSystem)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MemoryRegion is set to Application for &amp;quot;starter&amp;quot; and NonSecureSystem for &amp;quot;nvservices&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= ACI0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;ACI0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FsAccessControlOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FsAccessControlSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SrvAccessControlOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SrvAccessControlSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KernelCapabilityOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KernelCapabilitySize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsAccessControl =&lt;br /&gt;
For [[#ACID|ACID]] this is a simple descriptor as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| ContentOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| SaveDataOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#FsAccessFlag|FsAccessFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentOwnerIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentOwnerIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x8 * ContentOwnerIdCount&lt;br /&gt;
| ContentOwnerIds&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x8 * SaveDataOwnerIdCount&lt;br /&gt;
| SaveDataOwnerIds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For [[#ACI0|ACI0]] this embeds data as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#FsAccessFlag|FsAccessFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentOwnerInfoOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentOwnerInfoSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerInfoOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerInfoSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| (Optional) ContentOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8 * ContentOwnerIdCount&lt;br /&gt;
| ContentOwnerIds&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x1 * SaveDataOwnerIdCount&lt;br /&gt;
| Accessibilities (1=Read, 2=Write, 3=ReadWrite)&lt;br /&gt;
|-&lt;br /&gt;
| Variable (padded to nearest 4 bytes)&lt;br /&gt;
| 0x8 * SaveDataOwnerIdCount&lt;br /&gt;
| SaveDataOwnerIds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FsAccessFlag ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ApplicationInfo&lt;br /&gt;
| MountContent* is accessible when set.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| BootModeControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Calibration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| GameCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| SaveDataBackUp&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| SaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| BisAllRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| GameCardRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| GameCardPrivate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| SetTime&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| ContentManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| ImageManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| CreateSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| SystemSaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| BisFileSystem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| SystemUpdate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| SaveDataMeta&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| DeviceSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| SettingsControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| SystemData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| SdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Host&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FillBis&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| CorruptSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SaveDataForDebug&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| FormatSdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| GetRightsId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| RegisterExternalKey&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| RegisterUpdatePartition&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| SaveDataTransfer&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| DeviceDetection&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| AccessFailureResolution&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| SaveDataTransferVersion2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| RegisterProgramIndexMapInfo&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 35&lt;br /&gt;
| CreateOwnSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 36-61&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 62&lt;br /&gt;
| Debug&lt;br /&gt;
| See [[SPL_services#GetConfig|here]].&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| FullPermission&lt;br /&gt;
| Enables access to everything: all [[Filesystem_services#Permissions|permission types]] which check a bitmask have this bit set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls the [[Filesystem_services#Permissions|filesystem permissions]].&lt;br /&gt;
&lt;br /&gt;
Web-applets permissions:&lt;br /&gt;
* &amp;quot;LibAppletWeb&amp;quot; and &amp;quot;LibAppletOff&amp;quot; have same access control: bit0 and bit3 set, and bit62 set.&lt;br /&gt;
* Rest of the web-applets: Same as above except bit0 isn&#039;t set.&lt;br /&gt;
&lt;br /&gt;
= Service Access Control =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Size (length of the service-name without null-terminator minus 1)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| IsServer (service is allowed to be registered)&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a list of [[Services_API|service]]-name strings which the title has access to.&lt;br /&gt;
&lt;br /&gt;
The service name string starts after the first byte and supports the wildcard &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
= KernelCapability =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pattern of lower bits&lt;br /&gt;
! Lowest clear bitmask/bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxxx0111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit3&lt;br /&gt;
| [[#ThreadInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxx01111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit4&lt;br /&gt;
| [[#EnableSystemCalls]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxx0111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit6&lt;br /&gt;
| [[#MemoryMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxx01111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit7&lt;br /&gt;
| [[#IoMemoryMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxx01111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit10&lt;br /&gt;
| [8.0.0+] [[#MemoryRegionMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxx011111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit11&lt;br /&gt;
| [[#EnableInterrupts]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxx01111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit13&lt;br /&gt;
| [[#MiscParams]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bx011111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit14&lt;br /&gt;
| [[#KernelVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b0111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit15&lt;br /&gt;
| [[#HandleTableSize]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b1111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit16&lt;br /&gt;
| [[#MiscFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| All ones&lt;br /&gt;
| &lt;br /&gt;
| Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These descriptors are identified by pattern 01..11 in low bits.&lt;br /&gt;
&lt;br /&gt;
== ThreadInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 4-9&lt;br /&gt;
| LowestPriority&lt;br /&gt;
|-&lt;br /&gt;
| 10-15&lt;br /&gt;
| HighestPriority&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| MinCoreNumber&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| MaxCoreNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EnableSystemCalls ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 5-28&lt;br /&gt;
| SystemCallId&lt;br /&gt;
|-&lt;br /&gt;
| 29-31&lt;br /&gt;
| Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryMap ==&lt;br /&gt;
MemoryMap entries are stored in pairs. The first pair will contain BeginAddress and PermissionType, while the second pair will contain Size and MappingType.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-30&lt;br /&gt;
| BeginAddress&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| PermissionType (0=RW, 1=RO)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-26&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 27-30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| MappingType (0=Io, 1=Static)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Restrictions ===&lt;br /&gt;
The physaddr range 0x80060000-0x2000000000 is not allowed to be mapped as IO.&lt;br /&gt;
The physaddr range 0x80000000-0x2000000000 is not allowed to be mapped as Normal.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] The range for IO was changed into 0x80060000-0x81D3FFFF.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] A blacklist was added for IO and Normal mappings:&lt;br /&gt;
* 0x50040000-0x50060000 (ARM, Interrupt Controller)&lt;br /&gt;
* 0x6000F000 (Exception Vectors)&lt;br /&gt;
* 0x6001DC00-0x6001E000 (IPATCH)&lt;br /&gt;
* 0x7000E000 (RTC/PMC)&lt;br /&gt;
* 0x70019000 (MC)&lt;br /&gt;
* 0x7001C000 (MC0)&lt;br /&gt;
* 0x7001D000 (MC1)&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] For IO, this blacklist was abandoned and instead two range checks were added. For Normal mappings it is still applied&lt;br /&gt;
&lt;br /&gt;
== IoMemoryMap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 8-31&lt;br /&gt;
| BeginAddress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryRegionMap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 11-16&lt;br /&gt;
| RegionType0 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| RegionIsReadOnly0&lt;br /&gt;
|-&lt;br /&gt;
| 18-23&lt;br /&gt;
| RegionType1 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| RegionIsReadOnly1&lt;br /&gt;
|-&lt;br /&gt;
| 25-30&lt;br /&gt;
| RegionType2 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| RegionIsReadOnly2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MemoryRegionMap is supported by the kernel but not by [[Loader_services|Loader]]. Thus, only initial processes may possess this capability.&lt;br /&gt;
&lt;br /&gt;
== EnableInterrupts ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 12-21&lt;br /&gt;
| InterruptNumber0&lt;br /&gt;
|-&lt;br /&gt;
| 22-31&lt;br /&gt;
| InterruptNumber1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
0x3FF means empty.&lt;br /&gt;
&lt;br /&gt;
== MiscParams ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 14-16&lt;br /&gt;
| ProgramType (0 = System, 1 = Application, 2 = Applet)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ProgramType is parsed by [[Process Manager services]]. Defaults to 0 if descriptor doesn&#039;t exist. Can only run 1 application at a time.&lt;br /&gt;
&lt;br /&gt;
== KernelVersion ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 15-18&lt;br /&gt;
| MinorVersion&lt;br /&gt;
|-&lt;br /&gt;
| 19-31&lt;br /&gt;
| MajorVersion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is compared with 0x80000, when less than an error is returned. This is equivalent to comparing the bits starting at bit15 with 0x10. This enforces a minimum required version, not a maximum.&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firmware || Kernel Version || Minimum Allowed&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 5.0.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0 || 6.1.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0 || 7.4.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2 || 7.4.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0 || 9.3.0 || 3.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HandleTableSize ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 16-25&lt;br /&gt;
| HandleTableSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MiscFlags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| ForceDebug&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Package2&amp;diff=8895</id>
		<title>Package2</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Package2&amp;diff=8895"/>
		<updated>2020-03-11T12:37:07Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Present in the firmware package titles (0100000000000819, 010000000000081A, 010000000000081B and 010000000000081C) and installed into eMMC storage&#039;s [[Flash_Filesystem#User_Partitions|BCPKG2 partitions]], &amp;quot;package2&amp;quot; contains the Switch kernel and the built-in system modules.&lt;br /&gt;
&lt;br /&gt;
= Format =&lt;br /&gt;
Package2 is distributed in an already encrypted format. Therefore, it&#039;s not additionally encrypted when installed into the flash filesystem.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| [[#Public Keys|RSA-2048]] signature (PKCS#1 v2.1 RSASSA-PSS-VERIFY with SHA256)&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| Encrypted header&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| Variable&lt;br /&gt;
| Encrypted body&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Encryption ==&lt;br /&gt;
Package2&#039;s contents are AES-CTR encrypted with a key known only by TrustZone.&lt;br /&gt;
&lt;br /&gt;
The encrypted header&#039;s CTR is stored as it&#039;s first 0x10 bytes (offset 0x100).&lt;br /&gt;
The encrypted body is divided in up to 4 sections, each one with a CTR stored inside the decrypted header.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
When decrypted, package2&#039;s header is as follows.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Header&#039;s CTR, official code copies the pre-decryption CTR over the decrypted result. Also used as metadata.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 0 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 1 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 2 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 3 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;PK21&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| Base offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Version. HighByte must be &amp;lt;{maxver} and LowByte must be &amp;gt;{minver}, where {maxver} and {minver} are constants used by TZ updated with each package1 update.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 0 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 1 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 2 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 3 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 0 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 1 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 2 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 3 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 0&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each section follows each other immediately and is encrypted with the same key used for encrypting the header.&lt;br /&gt;
The section offsets are relative to a base, which is typically 0x80000000 pointing to the base of DRAM.&lt;br /&gt;
&lt;br /&gt;
Before being decrypted, the encrypted header&#039;s CTR additionally encodes metadata used to validate package2&#039;s contents as follows:&lt;br /&gt;
* Size of the entire package2 with the raw header = ctr_word2 ^ ctr_word3 ^ ctr_word0&lt;br /&gt;
* Metadata version field = ((ctr_word1 ^ (ctr_word1 &amp;gt;&amp;gt; 16)) &amp;amp; 0xFF) ^ (ctr_word1 &amp;gt;&amp;gt; 24)&lt;br /&gt;
&lt;br /&gt;
In [4.0.0], the metadata version field must be less or equal to 4.&lt;br /&gt;
&lt;br /&gt;
== Section 0 ==&lt;br /&gt;
When decrypted, this section contains the plaintext Switch kernel binary.&lt;br /&gt;
&lt;br /&gt;
== Section 1 ==&lt;br /&gt;
When decrypted, this section contains the built-in system modules encapsulated in a custom format.&lt;br /&gt;
&lt;br /&gt;
Note: On firmware [[8.0.0]] INI1 is contained within the Kernel and section 1 is empty with NULL SHA256 to match.&lt;br /&gt;
&lt;br /&gt;
=== INI1 ===&lt;br /&gt;
This is &amp;quot;Initial Process List&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;INI1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of KIPs (Must be lower than 0x51)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KIP1 ====&lt;br /&gt;
This is &amp;quot;Kernel Initial Process&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;KIP1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Program ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main Thread Priority&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main Thread Core Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Flags (bit0=TextCompress, bit1=RoCompress, bit2=DataCompress, bit3=Is64BitInstruction, bit4=ProcessAddressSpace64Bit, bit5=[2.0.0+] UseSecureMemory)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0xC&lt;br /&gt;
| Text [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Thread Affinity Mask&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0xC&lt;br /&gt;
| Ro [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Thread Stack Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0xC&lt;br /&gt;
| Data [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0xC&lt;br /&gt;
| Bss [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x24&lt;br /&gt;
| Reserved (2 unused [[#Segment_Header|Segment Headers]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x80&lt;br /&gt;
| [[NPDM#KernelCapability|Kernel Capability Data]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Segment Header =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Memory Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Memory Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| File Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
File size can be 0 or lower than exepected, this is the case for BSS for example.&lt;br /&gt;
&lt;br /&gt;
===== Compression =====&lt;br /&gt;
The compression used here is BLZ, with a modified footer since 3ds. The footer is now 0xC bytes instead of 0x8, and has the form u32 compressed_data_len; u32 footer_size; u32 additional_len_when_uncompressed;&lt;br /&gt;
&lt;br /&gt;
== Section 2 ==&lt;br /&gt;
This section has a valid CTR and SHA-256 hash (over NULL) stored in the package2&#039;s header, but it&#039;s size is always 0. Likely reserved for future expansion.&lt;br /&gt;
&lt;br /&gt;
== Section 3 ==&lt;br /&gt;
This section is not present (CTR and SHA-256 hash in package2&#039;s header are NULL). Likely reserved for future expansion.&lt;br /&gt;
&lt;br /&gt;
= Versions =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Package1 maxver constant&lt;br /&gt;
! Package1 minver constant&lt;br /&gt;
! Package2 version field&lt;br /&gt;
|-&lt;br /&gt;
| [[1.0.0]]&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x0104&lt;br /&gt;
|-&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x0205&lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x0306&lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x0407&lt;br /&gt;
|-&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x0508&lt;br /&gt;
|-&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x0609&lt;br /&gt;
|-&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x070A&lt;br /&gt;
|-&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x080B&lt;br /&gt;
|-&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x090C&lt;br /&gt;
|-&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x0A0D&lt;br /&gt;
|-&lt;br /&gt;
| [[9.0.0]]&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x0B0E&lt;br /&gt;
|-&lt;br /&gt;
| [[9.1.0]]&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x0C0F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Public Keys =&lt;br /&gt;
&lt;br /&gt;
=== Exponent ===&lt;br /&gt;
 0x10001&lt;br /&gt;
&lt;br /&gt;
=== Retail Modulus ===&lt;br /&gt;
 8D 13 A7 77 6A E5 DC C0 3B 25 D0 58 E4 20 69 59&lt;br /&gt;
 55 4B AB 70 40 08 28 07 A8 A7 FD 0F 31 2E 11 FE&lt;br /&gt;
 47 A0 F9 9D DF 80 DB 86 5A 27 89 CD 97 6C 85 C5&lt;br /&gt;
 6C 39 7F 41 F2 FF 24 20 C3 95 A6 F7 9D 4A 45 74&lt;br /&gt;
 8B 5D 28 8A C6 99 35 68 85 A5 64 32 80 9F D3 48&lt;br /&gt;
 39 A2 1D 24 67 69 DF 75 AC 12 B5 BD C3 29 90 BE&lt;br /&gt;
 37 E4 A0 80 9A BE 36 BF 1F 2C AB 2B AD F5 97 32&lt;br /&gt;
 9A 42 9D 09 8B 08 F0 63 47 A3 E9 1B 36 D8 2D 8A&lt;br /&gt;
 D7 E1 54 11 95 E4 45 88 69 8A 2B 35 CE D0 A5 0B&lt;br /&gt;
 D5 5D AC DB AF 11 4D CA B8 1E E7 01 9E F4 46 A3&lt;br /&gt;
 8A 94 6D 76 BD 8A C8 3B D2 31 58 0C 79 A8 26 E9&lt;br /&gt;
 D1 79 9C CB D4 2B 6A 4F C6 CC CF 90 A7 B9 98 47&lt;br /&gt;
 FD FA 4C 6C 6F 81 87 3B CA B8 50 F6 3E 39 5D 4D&lt;br /&gt;
 97 3F 0F 35 39 53 FB FA CD AB A8 7A 62 9A 3F F2&lt;br /&gt;
 09 27 96 3F 07 9A 91 F7 16 BF C6 3A 82 5A 4B CF&lt;br /&gt;
 49 50 95 8C 55 80 7E 39 B1 48 05 1E 21 C7 24 4F&lt;br /&gt;
&lt;br /&gt;
=== Debug Modulus ===&lt;br /&gt;
 B3 65 54 FB 0A B0 1E 85 A7 F6 CF 91 8E BA 96 99&lt;br /&gt;
 0D 8B 91 69 2A EE 01 20 4F 34 5C 2C 4F 4E 37 C7&lt;br /&gt;
 F1 0B D4 CD A1 7F 93 F1 33 59 CE B1 E9 DD 26 E6&lt;br /&gt;
 F3 BB 77 87 46 7A D6 4E 47 4A D1 41 B7 79 4A 38&lt;br /&gt;
 06 6E CF 61 8F CD C1 40 0B FA 26 DC C0 34 51 83&lt;br /&gt;
 D9 3B 11 54 3B 96 27 32 9A 95 BE 1E 68 11 50 A0&lt;br /&gt;
 6B 10 A8 83 8B F5 FC BC 90 84 7A 5A 5C 43 52 E6&lt;br /&gt;
 C8 26 E9 FE 06 A0 8B 53 0F AF 1E C4 1C 0B CF 50&lt;br /&gt;
 1A A4 F3 5C FB F0 97 E4 DE 32 0A 9F E3 5A AA B7&lt;br /&gt;
 44 7F 5C 33 60 B9 0F 22 2D 33 2A E9 69 79 31 42&lt;br /&gt;
 8F E4 3A 13 8B E7 26 BD 08 87 6C A6 F2 73 F6 8E&lt;br /&gt;
 A7 F2 FE FB 6C 28 66 0D BD D7 EB 42 A8 78 E6 B8&lt;br /&gt;
 6B AE C7 A9 E2 40 6E 89 20 82 25 8E 3C 6A 60 D7&lt;br /&gt;
 F3 56 8E EC 8D 51 8A 63 3C 04 78 23 0E 90 0C B4&lt;br /&gt;
 E7 86 3B 4F 8E 13 09 47 32 0E 04 B8 4D 5B B0 46&lt;br /&gt;
 71 B0 5C F4 AD 63 4F C5 E2 AC 1E C4 33 96 09 7B&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Package2&amp;diff=8884</id>
		<title>Package2</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Package2&amp;diff=8884"/>
		<updated>2020-03-07T17:22:28Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Present in the firmware package titles (0100000000000819, 010000000000081A, 010000000000081B and 010000000000081C) and installed into eMMC storage&#039;s [[Flash_Filesystem#User_Partitions|BCPKG2 partitions]], &amp;quot;package2&amp;quot; contains the Switch kernel and the built-in system modules.&lt;br /&gt;
&lt;br /&gt;
= Format =&lt;br /&gt;
Package2 is distributed in an already encrypted format. Therefore, it&#039;s not additionally encrypted when installed into the flash filesystem.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| [[#Public Keys|RSA-2048]] signature (PKCS#1 v2.1 RSASSA-PSS-VERIFY with SHA256)&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| Encrypted header&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| Variable&lt;br /&gt;
| Encrypted body&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Encryption ==&lt;br /&gt;
Package2&#039;s contents are AES-CTR encrypted with a key known only by TrustZone.&lt;br /&gt;
&lt;br /&gt;
The encrypted header&#039;s CTR is stored as it&#039;s first 0x10 bytes (offset 0x100).&lt;br /&gt;
The encrypted body is divided in up to 4 sections, each one with a CTR stored inside the decrypted header.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
When decrypted, package2&#039;s header is as follows.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Header&#039;s CTR, official code copies the pre-decryption CTR over the decrypted result. Also used as metadata.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 0 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 1 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 2 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 3 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;PK21&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| Base offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Version. HighByte must be &amp;lt;{maxver} and LowByte must be &amp;gt;{minver}, where {maxver} and {minver} are constants used by TZ updated with each package1 update.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 0 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 1 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 2 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 3 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 0 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 1 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 2 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 3 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 0&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each section follows each other immediately and is encrypted with the same key used for encrypting the header.&lt;br /&gt;
The section offsets are relative to a base, which is typically 0x80000000 pointing to the base of DRAM.&lt;br /&gt;
&lt;br /&gt;
Before being decrypted, the encrypted header&#039;s CTR additionally encodes metadata used to validate package2&#039;s contents as follows:&lt;br /&gt;
* Size of the entire package2 with the raw header = ctr_word2 ^ ctr_word3 ^ ctr_word0&lt;br /&gt;
* Metadata version field = ((ctr_word1 ^ (ctr_word1 &amp;gt;&amp;gt; 16)) &amp;amp; 0xFF) ^ (ctr_word1 &amp;gt;&amp;gt; 24)&lt;br /&gt;
&lt;br /&gt;
In [4.0.0], the metadata version field must be less or equal to 4.&lt;br /&gt;
&lt;br /&gt;
== Section 0 ==&lt;br /&gt;
When decrypted, this section contains the plaintext Switch kernel binary.&lt;br /&gt;
&lt;br /&gt;
== Section 1 ==&lt;br /&gt;
When decrypted, this section contains the built-in system modules encapsulated in a custom format.&lt;br /&gt;
&lt;br /&gt;
Note: On firmware [[8.0.0]] INI1 is contained within the Kernel and section 1 is empty with NULL SHA256 to match.&lt;br /&gt;
&lt;br /&gt;
=== INI1 ===&lt;br /&gt;
This is &amp;quot;Initial Process List&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;INI1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of KIPs (Must be lower than 0x51)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KIP1 ====&lt;br /&gt;
This is &amp;quot;Kernel Initial Process&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;KIP1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Program ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main Thread Priority&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main Thread Core Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Flags (bit0=TextCompress, bit1=RoCompress, bit2=DataCompress, bit3=Is64BitInstruction, bit4=ProcessAddressSpace64Bit, bit5=[2.0.0+] UseSecureMemory)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0xC&lt;br /&gt;
| Text [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0xC&lt;br /&gt;
| Ro [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Thread Stack Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0xC&lt;br /&gt;
| Data [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0xC&lt;br /&gt;
| Bss [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x24&lt;br /&gt;
| Reserved (2 unused [[#Segment_Header|Segment Headers]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x80&lt;br /&gt;
| [[NPDM#KernelCapability|Kernel Capability Data]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Segment Header =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Decompressed Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Compressed Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Compressed size can be 0 or lower than exepected, this is the case for BSS for example.&lt;br /&gt;
&lt;br /&gt;
===== Compression =====&lt;br /&gt;
The compression used here is BLZ, with a modified footer since 3ds. The footer is now 0xC bytes instead of 0x8, and has the form u32 compressed_data_len; u32 initial_index; u32 additional_len_when_uncompressed;&lt;br /&gt;
&lt;br /&gt;
== Section 2 ==&lt;br /&gt;
This section has a valid CTR and SHA-256 hash (over NULL) stored in the package2&#039;s header, but it&#039;s size is always 0. Likely reserved for future expansion.&lt;br /&gt;
&lt;br /&gt;
== Section 3 ==&lt;br /&gt;
This section is not present (CTR and SHA-256 hash in package2&#039;s header are NULL). Likely reserved for future expansion.&lt;br /&gt;
&lt;br /&gt;
= Versions =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Package1 maxver constant&lt;br /&gt;
! Package1 minver constant&lt;br /&gt;
! Package2 version field&lt;br /&gt;
|-&lt;br /&gt;
| [[1.0.0]]&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x0104&lt;br /&gt;
|-&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x0205&lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x0306&lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x0407&lt;br /&gt;
|-&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x0508&lt;br /&gt;
|-&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x0609&lt;br /&gt;
|-&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x070A&lt;br /&gt;
|-&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x080B&lt;br /&gt;
|-&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x090C&lt;br /&gt;
|-&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x0A0D&lt;br /&gt;
|-&lt;br /&gt;
| [[9.0.0]]&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x0B0E&lt;br /&gt;
|-&lt;br /&gt;
| [[9.1.0]]&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x0C0F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Public Keys =&lt;br /&gt;
&lt;br /&gt;
=== Exponent ===&lt;br /&gt;
 0x10001&lt;br /&gt;
&lt;br /&gt;
=== Retail Modulus ===&lt;br /&gt;
 8D 13 A7 77 6A E5 DC C0 3B 25 D0 58 E4 20 69 59&lt;br /&gt;
 55 4B AB 70 40 08 28 07 A8 A7 FD 0F 31 2E 11 FE&lt;br /&gt;
 47 A0 F9 9D DF 80 DB 86 5A 27 89 CD 97 6C 85 C5&lt;br /&gt;
 6C 39 7F 41 F2 FF 24 20 C3 95 A6 F7 9D 4A 45 74&lt;br /&gt;
 8B 5D 28 8A C6 99 35 68 85 A5 64 32 80 9F D3 48&lt;br /&gt;
 39 A2 1D 24 67 69 DF 75 AC 12 B5 BD C3 29 90 BE&lt;br /&gt;
 37 E4 A0 80 9A BE 36 BF 1F 2C AB 2B AD F5 97 32&lt;br /&gt;
 9A 42 9D 09 8B 08 F0 63 47 A3 E9 1B 36 D8 2D 8A&lt;br /&gt;
 D7 E1 54 11 95 E4 45 88 69 8A 2B 35 CE D0 A5 0B&lt;br /&gt;
 D5 5D AC DB AF 11 4D CA B8 1E E7 01 9E F4 46 A3&lt;br /&gt;
 8A 94 6D 76 BD 8A C8 3B D2 31 58 0C 79 A8 26 E9&lt;br /&gt;
 D1 79 9C CB D4 2B 6A 4F C6 CC CF 90 A7 B9 98 47&lt;br /&gt;
 FD FA 4C 6C 6F 81 87 3B CA B8 50 F6 3E 39 5D 4D&lt;br /&gt;
 97 3F 0F 35 39 53 FB FA CD AB A8 7A 62 9A 3F F2&lt;br /&gt;
 09 27 96 3F 07 9A 91 F7 16 BF C6 3A 82 5A 4B CF&lt;br /&gt;
 49 50 95 8C 55 80 7E 39 B1 48 05 1E 21 C7 24 4F&lt;br /&gt;
&lt;br /&gt;
=== Debug Modulus ===&lt;br /&gt;
 B3 65 54 FB 0A B0 1E 85 A7 F6 CF 91 8E BA 96 99&lt;br /&gt;
 0D 8B 91 69 2A EE 01 20 4F 34 5C 2C 4F 4E 37 C7&lt;br /&gt;
 F1 0B D4 CD A1 7F 93 F1 33 59 CE B1 E9 DD 26 E6&lt;br /&gt;
 F3 BB 77 87 46 7A D6 4E 47 4A D1 41 B7 79 4A 38&lt;br /&gt;
 06 6E CF 61 8F CD C1 40 0B FA 26 DC C0 34 51 83&lt;br /&gt;
 D9 3B 11 54 3B 96 27 32 9A 95 BE 1E 68 11 50 A0&lt;br /&gt;
 6B 10 A8 83 8B F5 FC BC 90 84 7A 5A 5C 43 52 E6&lt;br /&gt;
 C8 26 E9 FE 06 A0 8B 53 0F AF 1E C4 1C 0B CF 50&lt;br /&gt;
 1A A4 F3 5C FB F0 97 E4 DE 32 0A 9F E3 5A AA B7&lt;br /&gt;
 44 7F 5C 33 60 B9 0F 22 2D 33 2A E9 69 79 31 42&lt;br /&gt;
 8F E4 3A 13 8B E7 26 BD 08 87 6C A6 F2 73 F6 8E&lt;br /&gt;
 A7 F2 FE FB 6C 28 66 0D BD D7 EB 42 A8 78 E6 B8&lt;br /&gt;
 6B AE C7 A9 E2 40 6E 89 20 82 25 8E 3C 6A 60 D7&lt;br /&gt;
 F3 56 8E EC 8D 51 8A 63 3C 04 78 23 0E 90 0C B4&lt;br /&gt;
 E7 86 3B 4F 8E 13 09 47 32 0E 04 B8 4D 5B B0 46&lt;br /&gt;
 71 B0 5C F4 AD 63 4F C5 E2 AC 1E C4 33 96 09 7B&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Package2&amp;diff=8883</id>
		<title>Package2</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Package2&amp;diff=8883"/>
		<updated>2020-03-07T17:12:20Z</updated>

		<summary type="html">&lt;p&gt;Liam: Update KIP1 format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Present in the firmware package titles (0100000000000819, 010000000000081A, 010000000000081B and 010000000000081C) and installed into eMMC storage&#039;s [[Flash_Filesystem#User_Partitions|BCPKG2 partitions]], &amp;quot;package2&amp;quot; contains the Switch kernel and the built-in system modules.&lt;br /&gt;
&lt;br /&gt;
= Format =&lt;br /&gt;
Package2 is distributed in an already encrypted format. Therefore, it&#039;s not additionally encrypted when installed into the flash filesystem.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| [[#Public Keys|RSA-2048]] signature (PKCS#1 v2.1 RSASSA-PSS-VERIFY with SHA256)&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| Encrypted header&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| Variable&lt;br /&gt;
| Encrypted body&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Encryption ==&lt;br /&gt;
Package2&#039;s contents are AES-CTR encrypted with a key known only by TrustZone.&lt;br /&gt;
&lt;br /&gt;
The encrypted header&#039;s CTR is stored as it&#039;s first 0x10 bytes (offset 0x100).&lt;br /&gt;
The encrypted body is divided in up to 4 sections, each one with a CTR stored inside the decrypted header.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
When decrypted, package2&#039;s header is as follows.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Header&#039;s CTR, official code copies the pre-decryption CTR over the decrypted result. Also used as metadata.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 0 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 1 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 2 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x10&lt;br /&gt;
| Section 3 CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;PK21&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| Base offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| Always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Version. HighByte must be &amp;lt;{maxver} and LowByte must be &amp;gt;{minver}, where {maxver} and {minver} are constants used by TZ updated with each package1 update.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 0 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 1 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 2 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 3 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 0 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 1 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 2 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Section 3 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 0&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash over encrypted section 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each section follows each other immediately and is encrypted with the same key used for encrypting the header.&lt;br /&gt;
The section offsets are relative to a base, which is typically 0x80000000 pointing to the base of DRAM.&lt;br /&gt;
&lt;br /&gt;
Before being decrypted, the encrypted header&#039;s CTR additionally encodes metadata used to validate package2&#039;s contents as follows:&lt;br /&gt;
* Size of the entire package2 with the raw header = ctr_word2 ^ ctr_word3 ^ ctr_word0&lt;br /&gt;
* Metadata version field = ((ctr_word1 ^ (ctr_word1 &amp;gt;&amp;gt; 16)) &amp;amp; 0xFF) ^ (ctr_word1 &amp;gt;&amp;gt; 24)&lt;br /&gt;
&lt;br /&gt;
In [4.0.0], the metadata version field must be less or equal to 4.&lt;br /&gt;
&lt;br /&gt;
== Section 0 ==&lt;br /&gt;
When decrypted, this section contains the plaintext Switch kernel binary.&lt;br /&gt;
&lt;br /&gt;
== Section 1 ==&lt;br /&gt;
When decrypted, this section contains the built-in system modules encapsulated in a custom format.&lt;br /&gt;
&lt;br /&gt;
Note: On firmware [[8.0.0]] INI1 is contained within the Kernel and section 1 is empty with NULL SHA256 to match.&lt;br /&gt;
&lt;br /&gt;
=== INI1 ===&lt;br /&gt;
This is &amp;quot;Initial Process List&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;INI1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of KIPs (Must be lower than 0x51)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KIP1 ====&lt;br /&gt;
This is &amp;quot;Kernel Initial Process&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;KIP1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Program ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main Thread Priority&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main Thread Core Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Flags (bit0=TextCompress, bit1=RoCompress, bit2=DataCompress, bit3=Is64BitInstruction, bit4=ProcessAddressSpace64Bit, bit5=[2.0.0+] UseSecureMemory)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0xC&lt;br /&gt;
| Text [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0xC&lt;br /&gt;
| Ro [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main Thread Stack Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0xC&lt;br /&gt;
| Data [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0xC&lt;br /&gt;
| Bss [[#Segment_Header|Segment Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x24&lt;br /&gt;
| Reserved (2 unused [[#Segment_Header|Segment Headers]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x80&lt;br /&gt;
| [[NPDM#KernelCapability|Kernel Capability Data]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Segment Header =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Decompressed Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Compressed Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Compressed size can be 0 or lower than exepected, this is the case for BSS for example.&lt;br /&gt;
&lt;br /&gt;
===== Compression =====&lt;br /&gt;
The compression used here is BLZ, with a modified footer since 3ds. The footer is now 0xC bytes instead of 0x8, and has the form u32 compressed_data_len; u32 initial_index; u32 additional_len_when_uncompressed;&lt;br /&gt;
&lt;br /&gt;
== Section 2 ==&lt;br /&gt;
This section has a valid CTR and SHA-256 hash (over NULL) stored in the package2&#039;s header, but it&#039;s size is always 0. Likely reserved for future expansion.&lt;br /&gt;
&lt;br /&gt;
== Section 3 ==&lt;br /&gt;
This section is not present (CTR and SHA-256 hash in package2&#039;s header are NULL). Likely reserved for future expansion.&lt;br /&gt;
&lt;br /&gt;
= Versions =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Package1 maxver constant&lt;br /&gt;
! Package1 minver constant&lt;br /&gt;
! Package2 version field&lt;br /&gt;
|-&lt;br /&gt;
| [[1.0.0]]&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x0104&lt;br /&gt;
|-&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x0205&lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x0306&lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x0407&lt;br /&gt;
|-&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x0508&lt;br /&gt;
|-&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x0609&lt;br /&gt;
|-&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x070A&lt;br /&gt;
|-&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x080B&lt;br /&gt;
|-&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x090C&lt;br /&gt;
|-&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x0A0D&lt;br /&gt;
|-&lt;br /&gt;
| [[9.0.0]]&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x0B0E&lt;br /&gt;
|-&lt;br /&gt;
| [[9.1.0]]&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x0C0F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Public Keys =&lt;br /&gt;
&lt;br /&gt;
=== Exponent ===&lt;br /&gt;
 0x10001&lt;br /&gt;
&lt;br /&gt;
=== Retail Modulus ===&lt;br /&gt;
 8D 13 A7 77 6A E5 DC C0 3B 25 D0 58 E4 20 69 59&lt;br /&gt;
 55 4B AB 70 40 08 28 07 A8 A7 FD 0F 31 2E 11 FE&lt;br /&gt;
 47 A0 F9 9D DF 80 DB 86 5A 27 89 CD 97 6C 85 C5&lt;br /&gt;
 6C 39 7F 41 F2 FF 24 20 C3 95 A6 F7 9D 4A 45 74&lt;br /&gt;
 8B 5D 28 8A C6 99 35 68 85 A5 64 32 80 9F D3 48&lt;br /&gt;
 39 A2 1D 24 67 69 DF 75 AC 12 B5 BD C3 29 90 BE&lt;br /&gt;
 37 E4 A0 80 9A BE 36 BF 1F 2C AB 2B AD F5 97 32&lt;br /&gt;
 9A 42 9D 09 8B 08 F0 63 47 A3 E9 1B 36 D8 2D 8A&lt;br /&gt;
 D7 E1 54 11 95 E4 45 88 69 8A 2B 35 CE D0 A5 0B&lt;br /&gt;
 D5 5D AC DB AF 11 4D CA B8 1E E7 01 9E F4 46 A3&lt;br /&gt;
 8A 94 6D 76 BD 8A C8 3B D2 31 58 0C 79 A8 26 E9&lt;br /&gt;
 D1 79 9C CB D4 2B 6A 4F C6 CC CF 90 A7 B9 98 47&lt;br /&gt;
 FD FA 4C 6C 6F 81 87 3B CA B8 50 F6 3E 39 5D 4D&lt;br /&gt;
 97 3F 0F 35 39 53 FB FA CD AB A8 7A 62 9A 3F F2&lt;br /&gt;
 09 27 96 3F 07 9A 91 F7 16 BF C6 3A 82 5A 4B CF&lt;br /&gt;
 49 50 95 8C 55 80 7E 39 B1 48 05 1E 21 C7 24 4F&lt;br /&gt;
&lt;br /&gt;
=== Debug Modulus ===&lt;br /&gt;
 B3 65 54 FB 0A B0 1E 85 A7 F6 CF 91 8E BA 96 99&lt;br /&gt;
 0D 8B 91 69 2A EE 01 20 4F 34 5C 2C 4F 4E 37 C7&lt;br /&gt;
 F1 0B D4 CD A1 7F 93 F1 33 59 CE B1 E9 DD 26 E6&lt;br /&gt;
 F3 BB 77 87 46 7A D6 4E 47 4A D1 41 B7 79 4A 38&lt;br /&gt;
 06 6E CF 61 8F CD C1 40 0B FA 26 DC C0 34 51 83&lt;br /&gt;
 D9 3B 11 54 3B 96 27 32 9A 95 BE 1E 68 11 50 A0&lt;br /&gt;
 6B 10 A8 83 8B F5 FC BC 90 84 7A 5A 5C 43 52 E6&lt;br /&gt;
 C8 26 E9 FE 06 A0 8B 53 0F AF 1E C4 1C 0B CF 50&lt;br /&gt;
 1A A4 F3 5C FB F0 97 E4 DE 32 0A 9F E3 5A AA B7&lt;br /&gt;
 44 7F 5C 33 60 B9 0F 22 2D 33 2A E9 69 79 31 42&lt;br /&gt;
 8F E4 3A 13 8B E7 26 BD 08 87 6C A6 F2 73 F6 8E&lt;br /&gt;
 A7 F2 FE FB 6C 28 66 0D BD D7 EB 42 A8 78 E6 B8&lt;br /&gt;
 6B AE C7 A9 E2 40 6E 89 20 82 25 8E 3C 6A 60 D7&lt;br /&gt;
 F3 56 8E EC 8D 51 8A 63 3C 04 78 23 0E 90 0C B4&lt;br /&gt;
 E7 86 3B 4F 8E 13 09 47 32 0E 04 B8 4D 5B B0 46&lt;br /&gt;
 71 B0 5C F4 AD 63 4F C5 E2 AC 1E C4 33 96 09 7B&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=CNMT&amp;diff=8873</id>
		<title>CNMT</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=CNMT&amp;diff=8873"/>
		<updated>2020-03-05T15:59:46Z</updated>

		<summary type="html">&lt;p&gt;Liam: Fix SystemUpdate Extended Data, change some names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the metadata file that ends in &amp;lt;code&amp;gt;&amp;quot;.cnmt{.nca}&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;meta0.ncd&amp;quot;&amp;lt;/code&amp;gt;. This seems to replace the TMD format.&lt;br /&gt;
&lt;br /&gt;
The official name for CNMT is &amp;quot;PackagedContentMeta&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Program ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Content Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Extended Header Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| Content Meta Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Download System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AddOnContent Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Packaged Content Info ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x6&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| 0x1&lt;br /&gt;
| Content Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 0x1&lt;br /&gt;
| ID Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Meta Info ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Program ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Content Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Content Meta Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]].&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Data ==&lt;br /&gt;
&lt;br /&gt;
If the Version field is 1, the format is:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Variation Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x20 * Variation Count&lt;br /&gt;
| [[CNMT#Firmware_Variation_Info_(Version_1)|Firmware Variation Info (Version 1)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the Version field is 2, the format is:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Variation Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4 * Variation Count&lt;br /&gt;
| Firmware Variation ID&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x20 * Variation Count&lt;br /&gt;
| [[CNMT#Firmware_Variation_Info_(Version_2)|Firmware Variation Info (Version 2)]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x10 * Meta Count (From [[CNMT#Firmware_Variation_Info_(Version_2)|Firmware Variation Info (Version 2)]])&lt;br /&gt;
| [[CNMT#Content_Meta_Info|Content Meta Info]] (If Refer To Base is True)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Firmware Variation Info (Version 1) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Firmware Variation ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Firmware Variation Info (Version 2) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Refer To Base (0=False, 1=True)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x18&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x38 * History Count&lt;br /&gt;
| [[CNMT#History_Header|History Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta History Count&lt;br /&gt;
| [[CNMT#Delta_History|Delta Histories]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta Count&lt;br /&gt;
| [[CNMT#Delta_Header|Delta Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x18 * History Content Count&lt;br /&gt;
| [[CNMT#Packaged_Content_Info|History Content Info]] (Packaged Content Info without the Hash entry)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x38 * Delta Content Count&lt;br /&gt;
| [[CNMT#Packaged_Content_Info|Delta Packaged Content Info]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (From [[CNMT#Fragment_Set|Fragment Sets]])&lt;br /&gt;
| [[CNMT#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== History Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content Meta Key (Slightly different Content Meta Info)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 0x6&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta History ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Download Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Set ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Source Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Destination Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x6&lt;br /&gt;
| Source Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x6&lt;br /&gt;
| Destination Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Indicator Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 0x1&lt;br /&gt;
| Fragment Target Content Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Indicator ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (From [[CNMT#Fragment_Set|Fragment Sets]])&lt;br /&gt;
| [[CNMT#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digest ==&lt;br /&gt;
&lt;br /&gt;
Always found at the end of the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NRR0&amp;diff=7483</id>
		<title>NRR0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NRR0&amp;diff=7483"/>
		<updated>2019-08-20T13:55:07Z</updated>

		<summary type="html">&lt;p&gt;Liam: update structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
The Switch uses the NRR file format to verify [[NRO]] at load time. These files contain hashes of each NRO that is allowed to be loaded by the program. An NRO&#039;s SHA-256 hash must match any of the hashes in the hash table. NRRs are signed with RSASSA-PSS-2048/SHA-256.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;NRR0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID Mask&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID Pattern&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x100&lt;br /&gt;
| Modulus for verifying the second signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x130&lt;br /&gt;
| 0x100&lt;br /&gt;
| First signature signed by a Nintendo key, over the above contents&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x100&lt;br /&gt;
| Second signature verifiable with the above key, over the rest of the file&lt;br /&gt;
|-&lt;br /&gt;
| 0x330&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x338&lt;br /&gt;
| 0x4&lt;br /&gt;
| File Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x33C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Module Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x340&lt;br /&gt;
| 0x4&lt;br /&gt;
| Hash Offset (Always 0x350)&lt;br /&gt;
|-&lt;br /&gt;
| 0x344&lt;br /&gt;
| 0x4&lt;br /&gt;
| Hash Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x348&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x350&lt;br /&gt;
| 0x20 * Hash Count&lt;br /&gt;
| NRO hashes (SHA-256) &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NACP&amp;diff=7482</id>
		<title>NACP</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NACP&amp;diff=7482"/>
		<updated>2019-08-20T12:04:45Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is &#039;&#039;&#039;control.nacp&#039;&#039;&#039;, &amp;quot;nn::ns::ApplicationControlProperty&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Roughly equivalent to non-gfx areas of 3DS SMDH. All strings for language-entries are UTF-8, unlike SMDH which uses UTF-16.&lt;br /&gt;
&lt;br /&gt;
Total size is 0x4000-bytes.&lt;br /&gt;
&lt;br /&gt;
= Structure =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3000 (0x300*0x10)&lt;br /&gt;
| [[#Title Entry|Title entries]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3000&lt;br /&gt;
| 0x25&lt;br /&gt;
| Isbn&lt;br /&gt;
|-&lt;br /&gt;
| 0x3025&lt;br /&gt;
| 0x1&lt;br /&gt;
| StartupUserAccount&lt;br /&gt;
|-&lt;br /&gt;
| 0x3026&lt;br /&gt;
| 0x1&lt;br /&gt;
| UserAccountSwitchLock&lt;br /&gt;
|-&lt;br /&gt;
| 0x3027&lt;br /&gt;
| 0x1&lt;br /&gt;
| AddOnContentRegistrationType&lt;br /&gt;
|-&lt;br /&gt;
| 0x3028&lt;br /&gt;
| 0x4&lt;br /&gt;
| ApplicationAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x302C&lt;br /&gt;
| 0x4&lt;br /&gt;
| SupportedLanguages&lt;br /&gt;
|-&lt;br /&gt;
| 0x3030&lt;br /&gt;
| 0x4&lt;br /&gt;
| ParentalControl&lt;br /&gt;
|-&lt;br /&gt;
| 0x3034&lt;br /&gt;
| 0x1&lt;br /&gt;
| Screenshot&lt;br /&gt;
|-&lt;br /&gt;
| 0x3035&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#VideoCaptureMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3036&lt;br /&gt;
| 0x1&lt;br /&gt;
| DataLossConfirmation&lt;br /&gt;
|-&lt;br /&gt;
| 0x3037&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#PlayLogPolicy]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3038&lt;br /&gt;
| 0x8&lt;br /&gt;
| PresenceGroupId&lt;br /&gt;
|-&lt;br /&gt;
| 0x3040&lt;br /&gt;
| 0x20&lt;br /&gt;
| RatingAge&lt;br /&gt;
|-&lt;br /&gt;
| 0x3060&lt;br /&gt;
| 0x10&lt;br /&gt;
| DisplayVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x3070&lt;br /&gt;
| 0x8&lt;br /&gt;
| AddOnContentBaseId&lt;br /&gt;
|-&lt;br /&gt;
| 0x3078&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerId&lt;br /&gt;
|-&lt;br /&gt;
| 0x3080&lt;br /&gt;
| 0x8&lt;br /&gt;
| UserAccountSaveDataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3088&lt;br /&gt;
| 0x8&lt;br /&gt;
| UserAccountSaveDataJournalSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3090&lt;br /&gt;
| 0x8&lt;br /&gt;
| DeviceSaveDataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3098&lt;br /&gt;
| 0x8&lt;br /&gt;
| DeviceSaveDataJournalSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x30A0&lt;br /&gt;
| 0x8&lt;br /&gt;
| BcatDeliveryCacheStorageSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x30A8&lt;br /&gt;
| 0x8&lt;br /&gt;
| ApplicationErrorCodeCategory&lt;br /&gt;
|-&lt;br /&gt;
| 0x30B0&lt;br /&gt;
| 0x40 (0x8*0x8)&lt;br /&gt;
| LocalCommunicationIds&lt;br /&gt;
|-&lt;br /&gt;
| 0x30F0&lt;br /&gt;
| 0x1&lt;br /&gt;
| LogoType&lt;br /&gt;
|-&lt;br /&gt;
| 0x30F1&lt;br /&gt;
| 0x1&lt;br /&gt;
| LogoHandling&lt;br /&gt;
|-&lt;br /&gt;
| 0x30F2&lt;br /&gt;
| 0x1&lt;br /&gt;
| RuntimeAddOnContentInstall&lt;br /&gt;
|-&lt;br /&gt;
| 0x30F3&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x30F6&lt;br /&gt;
| 0x1&lt;br /&gt;
| CrashReport&lt;br /&gt;
|-&lt;br /&gt;
| 0x30F7&lt;br /&gt;
| 0x1&lt;br /&gt;
| Hdcp&lt;br /&gt;
|-&lt;br /&gt;
| 0x30F8&lt;br /&gt;
| 0x8&lt;br /&gt;
| SeedForPseudoDeviceId&lt;br /&gt;
|-&lt;br /&gt;
| 0x3100&lt;br /&gt;
| 0x41&lt;br /&gt;
| [[BCAT_Content_Container|BcatPassphrase]] (all-zero when unused)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3141&lt;br /&gt;
| 0x1&lt;br /&gt;
| StartupUserAccountOption&lt;br /&gt;
|-&lt;br /&gt;
| 0x3142&lt;br /&gt;
| 0x6&lt;br /&gt;
| ReservedForUserAccountSaveDataOperation&lt;br /&gt;
|-&lt;br /&gt;
| 0x3148&lt;br /&gt;
| 0x8&lt;br /&gt;
| UserAccountSaveDataMaxSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3150&lt;br /&gt;
| 0x8&lt;br /&gt;
| UserAccountSaveDataMaxJournalSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3158&lt;br /&gt;
| 0x8&lt;br /&gt;
| DeviceSaveDataMaxSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3160&lt;br /&gt;
| 0x8&lt;br /&gt;
| DeviceSaveDataMaxJournalSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3168&lt;br /&gt;
| 0x8&lt;br /&gt;
| TemporaryStorageSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3170&lt;br /&gt;
| 0x8&lt;br /&gt;
| CacheStorageSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3178&lt;br /&gt;
| 0x8&lt;br /&gt;
| CacheStorageJournalSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3180&lt;br /&gt;
| 0x8&lt;br /&gt;
| CacheStorageMaxSizeAndMaxJournalSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3188&lt;br /&gt;
| 0x8&lt;br /&gt;
| CacheStorageMaxIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x3190&lt;br /&gt;
| 0x80 (0x8*0x10)&lt;br /&gt;
| PlayLogQueryableApplicationId&lt;br /&gt;
|-&lt;br /&gt;
| 0x3210&lt;br /&gt;
| 0x1&lt;br /&gt;
| PlayLogQueryCapability&lt;br /&gt;
|-&lt;br /&gt;
| 0x3211&lt;br /&gt;
| 0x1&lt;br /&gt;
| RepairFlag&lt;br /&gt;
|-&lt;br /&gt;
| 0x3212&lt;br /&gt;
| 0x1&lt;br /&gt;
| ProgramIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x3213&lt;br /&gt;
| 0x1&lt;br /&gt;
| RequiredNetworkServiceLicenseOnLaunchFlag&lt;br /&gt;
|-&lt;br /&gt;
| 0x3214&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x3218&lt;br /&gt;
| 0x18&lt;br /&gt;
| [[#SendDataConfiguration/ReceivableDataConfiguration Entry|SendDataConfiguration]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3230&lt;br /&gt;
| 0x180 (0x18 * 0x10)&lt;br /&gt;
| [[#SendDataConfiguration/ReceivableDataConfiguration Entry|ReceivableDataConfigurations]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33B0&lt;br /&gt;
| 0x8&lt;br /&gt;
| JitConfigurationFlag&lt;br /&gt;
|-&lt;br /&gt;
| 0x33B8&lt;br /&gt;
| 0x8&lt;br /&gt;
| MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x33C0&lt;br /&gt;
| 0xC40&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Title Entry ==&lt;br /&gt;
Total size is 0x300-bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x200&lt;br /&gt;
| Application name strings&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x100&lt;br /&gt;
| Application publisher strings&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Entry index for each [[Settings_services#LanguageCode|language]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Entry-index || Icon [[NCA_Content_FS#FS-type3|language]] filename&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &amp;quot;AmericanEnglish&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || &amp;quot;BritishEnglish&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 2 || &amp;quot;Japanese&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 3 || &amp;quot;French&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 4 || &amp;quot;German&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 5 || &amp;quot;LatinAmericanSpanish&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 6 || &amp;quot;Spanish&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 7 || &amp;quot;Italian&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 8 || &amp;quot;Dutch&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;quot;CanadianFrench&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 10 || &amp;quot;Portuguese&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 11 || &amp;quot;Russian&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 12 || &amp;quot;Korean&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 13 || &amp;quot;TraditionalChinese&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 14 || &amp;quot;SimplifiedChinese&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official apps tend to have the title entries&#039; strings set only to English. Some apps don&#039;t have certain title entries set at all. In addition, official apps usually (?) don&#039;t have the following title entries set: Korean, Taiwanese, and Chinese.&lt;br /&gt;
&lt;br /&gt;
== VideoCaptureMode ==&lt;br /&gt;
This is the enum used to determine how gameplay recording can occur, if at all.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Disabled&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Enabled&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Automatic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When this value is 0, gameplay cannot be recorded. When this value is 1, the game must manually sacrifice some of its heap as transfer memory for AM&#039;s IApplicationProxy-&amp;gt;InitializeGamePlayRecording(). When this value is 2, AM will call NS-&amp;gt;BoostSystemMemoryResourceSize(), and allocate the required memory for recording automatically without the usermode process having to do anything.&lt;br /&gt;
&lt;br /&gt;
== PlayLogPolicy ==&lt;br /&gt;
[[Applet_Manager_services|AM]] passes [[Shared_Database_services#PlayLogPolicy|this]] to [[Shared_Database_services|pdm:ntfy]] cmd9.&lt;br /&gt;
&lt;br /&gt;
== PlayLogQueryCapability ==&lt;br /&gt;
This is used with [[Applet_Manager_services|AM]] commands QueryApplicationPlayStatistics and QueryApplicationPlayStatisticsByUid, to verify whether querying the specified titleIDs are allowed. When not allowed, error 0x3E880 is returned.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Meaning || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None || The specified titleIDs must match the user-process titleID.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || WhiteList || The specified titleIDs must match the user-process titleID, or one of the titleIDs from PlayLogQueryableApplicationId.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || All || All titleIDs are allowed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SendDataConfiguration/ReceivableDataConfiguration Entry ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Id&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x10&lt;br /&gt;
| Key&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NPDM&amp;diff=7481</id>
		<title>NPDM</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NPDM&amp;diff=7481"/>
		<updated>2019-08-20T11:47:49Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Switch equivalent of 3DS [https://www.3dbrew.org/wiki/NCCH/Extended_Header exheader]. This is the file with extension &amp;quot;.npdm&amp;quot; in {Switch ExeFS}. The size of this file varies.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| META&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;Varies&amp;gt;&lt;br /&gt;
| ACID&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| ACI0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= META =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;META&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| MMU flags (bit0 = use 64-bit instructions, bit1 = use 64-bit address space, bit2 = use 32-bit address space, bit3 = use 32-bit address space without reserved region, bit4 = optimize memory allocation?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main thread priority (0-63)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main thread core number&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [3.0.0+] System resource (PersonalMmHeap) size (max size as of 5.x: 534773760)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version (0 for all titles prior to [[8.1.0]], 1 for certain titles since).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main thread stack size (Should(?) be page-aligned. In non-nspwn scenarios, values of 0 can also rarely break in Horizon. This might be something auto-adapting or a security feature of some sort?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Title name (usually/always &amp;quot;Application&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| Product code (usually/always all zeroes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID]] size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACID =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the data starting at 0x100 with the size field from 0x204&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 public key for the second [[NCA_Format|NCA]] signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;ACID&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x4&lt;br /&gt;
| Data size&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flags (bit0 = ProductionFlag, bit1 = UnqualifiedApproval, [5.0.0+] bit2-3: PoolPartition? For applets set to 0b01, for sysmodules set to 0b10. Exceptions: &amp;quot;starter&amp;quot; is set to 0, &amp;quot;nvservices&amp;quot; is set to 3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleIdRange_Min&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleIdRange_Max&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x224&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x228&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x234&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x238&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACI0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;ACI0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Header]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Header]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FS Access Header =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Permissions bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Data Size (always 0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of Content Owner ID section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Data size (0x1C) plus Content Owner size&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of Save Data owners section (for applications that wish to share save data?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| (OPTIONAL) Amount of content owner id&#039;s&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8 * Content Owner ID&#039;s&lt;br /&gt;
| Content owner ID&#039;s as uint64&#039;s.&lt;br /&gt;
|-&lt;br /&gt;
| VARIABLE&lt;br /&gt;
| 0x4&lt;br /&gt;
| Amount of save owner id&#039;s&lt;br /&gt;
|-&lt;br /&gt;
| VARIABLE&lt;br /&gt;
| 0x1 * Save data owner accessibilities (?)&lt;br /&gt;
| Sets flags for what save data owners can do with other applications save data (?)&lt;br /&gt;
|-&lt;br /&gt;
| VARIABLE (Pad to nearest 4 bytes)&lt;br /&gt;
| 0x8 * Amount of save owner ID&#039;s&lt;br /&gt;
| Save data owner ID&#039;s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FS Access Control =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Permissions bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x20&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Filesystem_services#Permissions|Permissions]] bitmask:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ApplicationInfo&lt;br /&gt;
| MountContent* is accessible when set.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| BootModeControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Calibration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| GameCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| SaveDataBackUp&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| SaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| BisAllRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| GameCardRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| GameCardPrivate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| SetTime&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| ContentManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| ImageManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| CreateSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| SystemSaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| BisFileSystem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| SystemUpdate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| SaveDataMeta&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| DeviceSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| SettingsControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| SystemData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| SdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Host&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FillBis&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| CorruptSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SaveDataForDebug&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| FormatSdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| GetRightsId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| RegisterExternalKey&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| RegisterUpdatePartition&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| SaveDataTransfer&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| DeviceDetection&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| AccessFailureResolution&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| SaveDataTransferVersion2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 34-61&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 62&lt;br /&gt;
| Debug&lt;br /&gt;
| See [[SPL_services#GetConfig|here]].&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| FullPermission&lt;br /&gt;
| Enables access to everything: all [[Filesystem_services#Permissions|permission types]] which check a bitmask have this bit set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Web-applets permissions:&lt;br /&gt;
* &amp;quot;LibAppletWeb&amp;quot; and &amp;quot;LibAppletOff&amp;quot; have same access control: bit0 and bit3 set, and bit62 set.&lt;br /&gt;
* Rest of the web-applets: Same as above except bit0 isn&#039;t set.&lt;br /&gt;
&lt;br /&gt;
= Service Access Control =&lt;br /&gt;
This is a list of [[Services_API|service]]-name strings which the title has access to, with the following structure:&lt;br /&gt;
  +0: control_byte&lt;br /&gt;
  +1: {service-name without nul-terminator}&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x07 in control_byte is the {length of the service-name without nul-terminator} - 1.&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x80 in control_byte means service is allowed to be registered.&lt;br /&gt;
&lt;br /&gt;
The service string can contain a wildcard &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
= Kernel Access Control =&lt;br /&gt;
On Switch, descriptors are identified by pattern 01..11 in low bits.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pattern of lower bits&lt;br /&gt;
! Lowest clear bitmask/bit&lt;br /&gt;
! Type&lt;br /&gt;
! Fields&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxxx0111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit3&lt;br /&gt;
| KernelFlags&lt;br /&gt;
| Bit31-24: Highest allowed cpu id, bit23-16: Lowest allowed cpu id, bit15-10: Highest allowed thread prio, bit9-4: Lowest allowed thread prio&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxx01111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit4&lt;br /&gt;
| SyscallMask&lt;br /&gt;
| Bits 29-31: Syscall mask table index; Bits 5-28: Mask&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxx0111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit6&lt;br /&gt;
| MapIoOrNormalRange&lt;br /&gt;
| Bits 7-30: Alternating start page and number of pages, bit31: Alternating read-only flag then MemoryAttribute 0x2001/0x42002 selector flag&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxx01111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit7&lt;br /&gt;
| MapNormalPage (RW)&lt;br /&gt;
| Bits 8-31: Page&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxx011111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit11&lt;br /&gt;
| InterruptPair&lt;br /&gt;
| Bits 12-21: Irq0, bits 22-31: Irq1, 0x3FF means empty.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxx01111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit13&lt;br /&gt;
| ApplicationType&lt;br /&gt;
| Bit16-14: ApplicationType (0=sysmodule, 1=application, 2=applet), bit16 ignored. Parsed by [[Process Manager services]]. Defaults to 0 if descriptor doesn&#039;t exist. Can only run 1 application at a time.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bx011111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit14&lt;br /&gt;
| KernelReleaseVersion&lt;br /&gt;
| Bits 15-X: Version. The raw descriptor is compared with 0x80000, when less than an error is returned. This is equivalent to comparing the bits starting at bit15 with 0x10. This enforces a minimum required version, not a maximum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b0111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit15&lt;br /&gt;
| HandleTableSize&lt;br /&gt;
| Bit25-16: Number of handles the table shall fit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b1111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit16&lt;br /&gt;
| DebugFlags&lt;br /&gt;
| Bit17: can be debugged, bit18: can debug others&lt;br /&gt;
|-&lt;br /&gt;
| All ones&lt;br /&gt;
| &lt;br /&gt;
| Ignored&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mapping restrictions ==&lt;br /&gt;
The physaddr range 0x80060000-0x2000000000 is not allowed to be mapped as IO.&lt;br /&gt;
The physaddr range 0x80000000-0x2000000000 is not allowed to be mapped as Normal.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] The range for IO was changed into 0x80060000-0x81D3FFFF.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] A blacklist was added for IO and Normal mappings:&lt;br /&gt;
* 0x50040000-0x50060000 (ARM, Interrupt Controller)&lt;br /&gt;
* 0x6000F000 (Exception Vectors)&lt;br /&gt;
* 0x6001DC00-0x6001E000 (IPATCH)&lt;br /&gt;
* 0x7000E000 (RTC/PMC)&lt;br /&gt;
* 0x70019000 (MC)&lt;br /&gt;
* 0x7001C000 (MC0)&lt;br /&gt;
* 0x7001D000 (MC1)&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] For IO, this blacklist was abandoned and instead two range checks were added. For Normal mappings it is still applied&lt;br /&gt;
&lt;br /&gt;
== Kernel versions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firmware || Kernel Version || Minimum Allowed&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 5.0.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0 || 6.1.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0 || 7.4.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2 || 7.4.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0 || 9.3.0 || 3.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit31-19: Major version&amp;lt;/br&amp;gt;&lt;br /&gt;
Bit18-15: Minor version&amp;lt;/br&amp;gt;&lt;br /&gt;
Bit14-0: Zeroes&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NPDM&amp;diff=7480</id>
		<title>NPDM</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NPDM&amp;diff=7480"/>
		<updated>2019-08-20T11:46:58Z</updated>

		<summary type="html">&lt;p&gt;Liam: update permissions bitmask, add meta flags bit4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Switch equivalent of 3DS [https://www.3dbrew.org/wiki/NCCH/Extended_Header exheader]. This is the file with extension &amp;quot;.npdm&amp;quot; in {Switch ExeFS}. The size of this file varies.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| META&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;Varies&amp;gt;&lt;br /&gt;
| ACID&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| ACI0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= META =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;META&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| MMU flags (bit0 = use 64-bit instructions, bit1 = use 64-bit address space, bit2 = use 32-bit address space, bit3 = use 32-bit address space without reserved region, bit4 = optimize memory allocation?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main thread priority (0-63)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| Main thread core number&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [3.0.0+] System resource (PersonalMmHeap) size (max size as of 5.x: 534773760)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version (0 for all titles prior to [[8.1.0]], 1 for certain titles since).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main thread stack size (Should(?) be page-aligned. In non-nspwn scenarios, values of 0 can also rarely break in Horizon. This might be something auto-adapting or a security feature of some sort?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Title name (usually/always &amp;quot;Application&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| Product code (usually/always all zeroes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID]] size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACID =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the data starting at 0x100 with the size field from 0x204&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 public key for the second [[NCA_Format|NCA]] signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;ACID&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x4&lt;br /&gt;
| Data size&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flags (bit0 = ProductionFlag, bit1 = UnqualifiedApproval, [5.0.0+] bit2-3: PoolPartition? For applets set to 0b01, for sysmodules set to 0b10. Exceptions: &amp;quot;starter&amp;quot; is set to 0, &amp;quot;nvservices&amp;quot; is set to 3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleIdRange_Min&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleIdRange_Max&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x224&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x228&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x234&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x238&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACI0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;ACI0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Header]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Header]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Kernel Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FS Access Header =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Permissions bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Data Size (always 0x1C)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of Content Owner ID section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Data size (0x1C) plus Content Owner size&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of Save Data owners section (for applications that wish to share save data?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| (OPTIONAL) Amount of content owner id&#039;s&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8 * Content Owner ID&#039;s&lt;br /&gt;
| Content owner ID&#039;s as uint64&#039;s.&lt;br /&gt;
|-&lt;br /&gt;
| VARIABLE&lt;br /&gt;
| 0x4&lt;br /&gt;
| Amount of save owner id&#039;s&lt;br /&gt;
|-&lt;br /&gt;
| VARIABLE&lt;br /&gt;
| 0x1 * Save data owner accessibilities (?)&lt;br /&gt;
| Sets flags for what save data owners can do with other applications save data (?)&lt;br /&gt;
|-&lt;br /&gt;
| VARIABLE (Pad to nearest 4 bytes)&lt;br /&gt;
| 0x8 * Amount of save owner ID&#039;s&lt;br /&gt;
| Save data owner ID&#039;s&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FS Access Control =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Permissions bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x20&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Filesystem_services#Permissions|Permissions]] bitmask:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ApplicationInfo&lt;br /&gt;
| MountContent* is accessible when set.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| BootModeControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Calibration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| GameCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| SaveDataBackUp&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| SaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| BisAllRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| GameCardRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| GameCardPrivate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| SetTime&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| ContentManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| ImageManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| CreateSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| SystemSaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| BisFileSystem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| SystemUpdate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| SaveDataMeta&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| DeviceSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| SettingsControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| SystemData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| SdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Host&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FillBis&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| CorruptSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SaveDataForDebug&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| FormatSdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| GetRightsId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| RegisterExternalKey&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| RegisterUpdatePartition&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| SaveDataTransfer&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| DeviceDetection&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| AccessFailureResolution&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| SaveDataTransferVersion2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 35-61&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 62&lt;br /&gt;
| Debug&lt;br /&gt;
| See [[SPL_services#GetConfig|here]].&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| FullPermission&lt;br /&gt;
| Enables access to everything: all [[Filesystem_services#Permissions|permission types]] which check a bitmask have this bit set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Web-applets permissions:&lt;br /&gt;
* &amp;quot;LibAppletWeb&amp;quot; and &amp;quot;LibAppletOff&amp;quot; have same access control: bit0 and bit3 set, and bit62 set.&lt;br /&gt;
* Rest of the web-applets: Same as above except bit0 isn&#039;t set.&lt;br /&gt;
&lt;br /&gt;
= Service Access Control =&lt;br /&gt;
This is a list of [[Services_API|service]]-name strings which the title has access to, with the following structure:&lt;br /&gt;
  +0: control_byte&lt;br /&gt;
  +1: {service-name without nul-terminator}&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x07 in control_byte is the {length of the service-name without nul-terminator} - 1.&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x80 in control_byte means service is allowed to be registered.&lt;br /&gt;
&lt;br /&gt;
The service string can contain a wildcard &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
= Kernel Access Control =&lt;br /&gt;
On Switch, descriptors are identified by pattern 01..11 in low bits.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pattern of lower bits&lt;br /&gt;
! Lowest clear bitmask/bit&lt;br /&gt;
! Type&lt;br /&gt;
! Fields&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxxx0111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit3&lt;br /&gt;
| KernelFlags&lt;br /&gt;
| Bit31-24: Highest allowed cpu id, bit23-16: Lowest allowed cpu id, bit15-10: Highest allowed thread prio, bit9-4: Lowest allowed thread prio&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxx01111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit4&lt;br /&gt;
| SyscallMask&lt;br /&gt;
| Bits 29-31: Syscall mask table index; Bits 5-28: Mask&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxx0111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit6&lt;br /&gt;
| MapIoOrNormalRange&lt;br /&gt;
| Bits 7-30: Alternating start page and number of pages, bit31: Alternating read-only flag then MemoryAttribute 0x2001/0x42002 selector flag&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxx01111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit7&lt;br /&gt;
| MapNormalPage (RW)&lt;br /&gt;
| Bits 8-31: Page&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxx011111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit11&lt;br /&gt;
| InterruptPair&lt;br /&gt;
| Bits 12-21: Irq0, bits 22-31: Irq1, 0x3FF means empty.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxx01111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit13&lt;br /&gt;
| ApplicationType&lt;br /&gt;
| Bit16-14: ApplicationType (0=sysmodule, 1=application, 2=applet), bit16 ignored. Parsed by [[Process Manager services]]. Defaults to 0 if descriptor doesn&#039;t exist. Can only run 1 application at a time.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bx011111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit14&lt;br /&gt;
| KernelReleaseVersion&lt;br /&gt;
| Bits 15-X: Version. The raw descriptor is compared with 0x80000, when less than an error is returned. This is equivalent to comparing the bits starting at bit15 with 0x10. This enforces a minimum required version, not a maximum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b0111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit15&lt;br /&gt;
| HandleTableSize&lt;br /&gt;
| Bit25-16: Number of handles the table shall fit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b1111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit16&lt;br /&gt;
| DebugFlags&lt;br /&gt;
| Bit17: can be debugged, bit18: can debug others&lt;br /&gt;
|-&lt;br /&gt;
| All ones&lt;br /&gt;
| &lt;br /&gt;
| Ignored&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mapping restrictions ==&lt;br /&gt;
The physaddr range 0x80060000-0x2000000000 is not allowed to be mapped as IO.&lt;br /&gt;
The physaddr range 0x80000000-0x2000000000 is not allowed to be mapped as Normal.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] The range for IO was changed into 0x80060000-0x81D3FFFF.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] A blacklist was added for IO and Normal mappings:&lt;br /&gt;
* 0x50040000-0x50060000 (ARM, Interrupt Controller)&lt;br /&gt;
* 0x6000F000 (Exception Vectors)&lt;br /&gt;
* 0x6001DC00-0x6001E000 (IPATCH)&lt;br /&gt;
* 0x7000E000 (RTC/PMC)&lt;br /&gt;
* 0x70019000 (MC)&lt;br /&gt;
* 0x7001C000 (MC0)&lt;br /&gt;
* 0x7001D000 (MC1)&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] For IO, this blacklist was abandoned and instead two range checks were added. For Normal mappings it is still applied&lt;br /&gt;
&lt;br /&gt;
== Kernel versions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firmware || Kernel Version || Minimum Allowed&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 5.0.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0 || 6.1.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0 || 7.4.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2 || 7.4.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0 || 9.3.0 || 3.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit31-19: Major version&amp;lt;/br&amp;gt;&lt;br /&gt;
Bit18-15: Minor version&amp;lt;/br&amp;gt;&lt;br /&gt;
Bit14-0: Zeroes&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6944</id>
		<title>CNMT</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6944"/>
		<updated>2019-05-22T15:09:17Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the metadata file that ends in &amp;lt;code&amp;gt;&amp;quot;.cnmt{.nca}&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;meta0.ncd&amp;quot;&amp;lt;/code&amp;gt;. This seems to replace the TMD format.&lt;br /&gt;
&lt;br /&gt;
There&#039;s at least 9 different filenames used for &amp;quot;.cnmt&amp;quot;:&lt;br /&gt;
* &amp;quot;Application_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Patch_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;AddOnContent_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemUpdate_{hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemData_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemProgram_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackage_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackageSafe_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Delta_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Extended Header Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x3&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Download System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AddOnContent Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x6&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| 0x1&lt;br /&gt;
| Content Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 0x1&lt;br /&gt;
| Id Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Meta Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]].&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Variation Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Firmware Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1C * Variation Count&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x38 * History Count&lt;br /&gt;
| [[CNMT#History_Header|History Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta History Count&lt;br /&gt;
| [[CNMT#Delta_History|Delta Histories]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta Count&lt;br /&gt;
| [[CNMT#Delta_Header|Delta Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x18 * History Content Count&lt;br /&gt;
| [[CNMT#Content_Records|History Content Records (Content Records without the Hash entry)]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x38 * Delta Content Count&lt;br /&gt;
| [[CNMT#Content_Records|Delta Content Records]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (Fragment Set)&lt;br /&gt;
| [[CNMT#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== History Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[CNMT#Content_Meta_Records|Content Meta Record]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta History ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Download Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Set ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Source Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Destination Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x6&lt;br /&gt;
| Source Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x6&lt;br /&gt;
| Destination Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Indicator Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 0x1&lt;br /&gt;
| Content Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Indicator ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (Fragment Set)&lt;br /&gt;
| [[CNMT#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digest ==&lt;br /&gt;
&lt;br /&gt;
Always found at the end of the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6943</id>
		<title>CNMT</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6943"/>
		<updated>2019-05-22T14:11:35Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the metadata file that ends in &amp;lt;code&amp;gt;&amp;quot;.cnmt{.nca}&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;meta0.ncd&amp;quot;&amp;lt;/code&amp;gt;. This seems to replace the TMD format.&lt;br /&gt;
&lt;br /&gt;
There&#039;s at least 9 different filenames used for &amp;quot;.cnmt&amp;quot;:&lt;br /&gt;
* &amp;quot;Application_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Patch_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;AddOnContent_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemUpdate_{hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemData_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemProgram_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackage_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackageSafe_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Delta_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Extended Header Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x3&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Download System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AddOnContent Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x6&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| 0x1&lt;br /&gt;
| Title Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 0x1&lt;br /&gt;
| Id Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Meta Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]].&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Variation Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Firmware Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1C * Variation Count&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x38 * History Count&lt;br /&gt;
| [[CNMT#History_Header|History Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta History Count&lt;br /&gt;
| [[CNMT#Delta_History|Delta Histories]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta Count&lt;br /&gt;
| [[CNMT#Delta_Header|Delta Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x18 * History Content Count&lt;br /&gt;
| [[CNMT#Content_Records|History Content Records (Content Records without the Hash entry)]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x38 * Delta Content Count&lt;br /&gt;
| [[CNMT#Content_Records|Delta Content Records]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (Fragment Set)&lt;br /&gt;
| [[CNMT#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== History Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[CNMT#Content_Meta_Records|Content Meta Record]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta History ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Download Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Set ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Source Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Destination Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x6&lt;br /&gt;
| Source Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x6&lt;br /&gt;
| Destination Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Indicator Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Indicator ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (Fragment Set)&lt;br /&gt;
| [[CNMT#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digest ==&lt;br /&gt;
&lt;br /&gt;
Always found at the end of the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6942</id>
		<title>CNMT</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6942"/>
		<updated>2019-05-22T14:09:03Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the metadata file that ends in &amp;lt;code&amp;gt;&amp;quot;.cnmt{.nca}&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;meta0.ncd&amp;quot;&amp;lt;/code&amp;gt;. This seems to replace the TMD format.&lt;br /&gt;
&lt;br /&gt;
There&#039;s at least 9 different filenames used for &amp;quot;.cnmt&amp;quot;:&lt;br /&gt;
* &amp;quot;Application_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Patch_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;AddOnContent_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemUpdate_{hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemData_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemProgram_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackage_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackageSafe_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Delta_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Extended Header Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x3&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Download System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AddOnContent Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x6&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| 0x1&lt;br /&gt;
| Title Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 0x1&lt;br /&gt;
| Id Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Meta Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]].&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Variation Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Firmware Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1C * Variation Count&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x38 * History Count&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#History_Header|History Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta History Count&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Delta_History|Delta Histories]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta Count&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Delta_Header|Delta Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x18 * History Content Count&lt;br /&gt;
| [[CNMT#Content_Records|History Content Records (Content Records without the Hash entry)]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x38 * Delta Content Count&lt;br /&gt;
| [[CNMT#Content_Records|Delta Content Records]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (Fragment Set)&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== History Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[CNMT#Content_Meta_Records|Content Meta Record]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta History ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Download Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Set ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Source Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Destination Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x6&lt;br /&gt;
| Source Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x6&lt;br /&gt;
| Destination Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Indicator Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Indicator ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (Fragment Set)&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digest ==&lt;br /&gt;
&lt;br /&gt;
Always found at the end of the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6941</id>
		<title>CNMT</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6941"/>
		<updated>2019-05-22T14:07:49Z</updated>

		<summary type="html">&lt;p&gt;Liam: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the metadata file that ends in &amp;lt;code&amp;gt;&amp;quot;.cnmt{.nca}&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;meta0.ncd&amp;quot;&amp;lt;/code&amp;gt;. This seems to replace the TMD format.&lt;br /&gt;
&lt;br /&gt;
There&#039;s at least 9 different filenames used for &amp;quot;.cnmt&amp;quot;:&lt;br /&gt;
* &amp;quot;Application_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Patch_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;AddOnContent_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemUpdate_{hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemData_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemProgram_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackage_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackageSafe_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Delta_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Extended Header Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x3&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Download System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AddOnContent Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x6&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| 0x1&lt;br /&gt;
| Title Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 0x1&lt;br /&gt;
| Id Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Meta Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]].&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Variation Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Firmware Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1C * Variation Count&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x38 * History Count&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#History_Header|History Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta History Count&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Delta_History|Delta Histories]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta Count&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Delta_Header|Delta Headers]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x18 * History Content Count&lt;br /&gt;
| [[CNMT#Content_Records|History Content Records (Content Records without the Hash entry)]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x38 * Delta Content Count&lt;br /&gt;
| [[CNMT#Content_Records|Delta Content Records]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (Fragment Set)&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== History Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[CNMT#Content_Meta_Records|Content Meta Record]]&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta History ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Download Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Set ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Source Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Destination Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x6&lt;br /&gt;
| Source Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x6&lt;br /&gt;
| Destination Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Indicator Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Indicator ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Fragment_Set|Fragment Sets]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (Fragment Set)&lt;br /&gt;
| [[CNMT#Patch_Extended_Data#Fragment_Indicator|Fragment Indicators]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digest ==&lt;br /&gt;
&lt;br /&gt;
Always found at the end of the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6940</id>
		<title>CNMT</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6940"/>
		<updated>2019-05-22T13:59:20Z</updated>

		<summary type="html">&lt;p&gt;Liam: Fix some mistakes and add Delta Extended Data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the metadata file that ends in &amp;lt;code&amp;gt;&amp;quot;.cnmt{.nca}&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;meta0.ncd&amp;quot;&amp;lt;/code&amp;gt;. This seems to replace the TMD format.&lt;br /&gt;
&lt;br /&gt;
There&#039;s at least 9 different filenames used for &amp;quot;.cnmt&amp;quot;:&lt;br /&gt;
* &amp;quot;Application_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Patch_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;AddOnContent_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemUpdate_{hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemData_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemProgram_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackage_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackageSafe_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Delta_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Extended Header Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x3&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Download System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AddOnContent Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x6&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| 0x1&lt;br /&gt;
| Title Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 0x1&lt;br /&gt;
| Id Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Meta Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]].&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Variation Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Firmware Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1C * Variation Count&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x38 * History Count&lt;br /&gt;
| History Headers&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta History Count&lt;br /&gt;
| Delta Histories&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta Count&lt;br /&gt;
| Delta Headers&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| Fragment Sets&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x18 * History Content Count&lt;br /&gt;
| History Content Records (Content Records without the Hash entry)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x38 * Delta Content Count&lt;br /&gt;
| Delta Content Records&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (Fragment Set)&lt;br /&gt;
| Fragment Indicators&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== History Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta History ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Download Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Set ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Source Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Destination Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x6&lt;br /&gt;
| Source Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x6&lt;br /&gt;
| Destination Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Indicator Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Indicator ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| Fragment Sets&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| 0x4 * Fragment Indicator Count (Fragment Set)&lt;br /&gt;
| Fragment Indicators&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digest ==&lt;br /&gt;
&lt;br /&gt;
Always found at the end of the file.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6939</id>
		<title>CNMT</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6939"/>
		<updated>2019-05-22T13:51:24Z</updated>

		<summary type="html">&lt;p&gt;Liam: Update all of Patch Extended Data and add SystemUpdate extended data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the metadata file that ends in &amp;lt;code&amp;gt;&amp;quot;.cnmt{.nca}&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;meta0.ncd&amp;quot;&amp;lt;/code&amp;gt;. This seems to replace the TMD format.&lt;br /&gt;
&lt;br /&gt;
There&#039;s at least 9 different filenames used for &amp;quot;.cnmt&amp;quot;:&lt;br /&gt;
* &amp;quot;Application_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Patch_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;AddOnContent_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemUpdate_{hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemData_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemProgram_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackage_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackageSafe_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Delta_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Extended Header Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x3&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Download System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AddOnContent Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x6&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| 0x1&lt;br /&gt;
| Title Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 0x1&lt;br /&gt;
| Id Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content Meta Records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]].&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Variation Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Firmware Variation&lt;br /&gt;
|- &lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1C * Variation Count&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta History Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| History Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Delta Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x38 * History Count&lt;br /&gt;
| History Headers&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta History Count&lt;br /&gt;
| Delta Histories&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28 * Delta Count&lt;br /&gt;
| Delta Headers&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x34 * Fragment Set Count&lt;br /&gt;
| Fragment Sets&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x18 * History Content Count&lt;br /&gt;
| History Content Records (Content Records without the Hash entry)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x38 * Delta Content Count&lt;br /&gt;
| Delta Content Records&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== History Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Title Types]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x20&lt;br /&gt;
| Digest&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta History ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Destination Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Download Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Delta Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Source Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| Destination Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Source Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Destination Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Set Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Set ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Source Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Destination Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x6&lt;br /&gt;
| Source Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x6&lt;br /&gt;
| Destination Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Indicator Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Title Types]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fragment Indicator ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Info Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Fragment Index&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6938</id>
		<title>CNMT</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=CNMT&amp;diff=6938"/>
		<updated>2019-05-22T13:30:56Z</updated>

		<summary type="html">&lt;p&gt;Liam: Update header and extended header - next is extended data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the metadata file that ends in &amp;lt;code&amp;gt;&amp;quot;.cnmt{.nca}&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;meta0.ncd&amp;quot;&amp;lt;/code&amp;gt;. This seems to replace the TMD format.&lt;br /&gt;
&lt;br /&gt;
There&#039;s at least 9 different filenames used for &amp;quot;.cnmt&amp;quot;:&lt;br /&gt;
* &amp;quot;Application_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Patch_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;AddOnContent_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemUpdate_{hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemData_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;SystemProgram_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackage_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;BootImagePackageSafe_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
* &amp;quot;Delta_{lower-case hex titleID}.cnmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[Title_list|Version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Extended Header Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| Content Meta Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x3&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Download System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemUpdate Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Header Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Application Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Patch ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Patch Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AddOnContent Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Required Application Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Delta Extended Header ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Extended Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Content records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x6&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| 0x1&lt;br /&gt;
| Title Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 0x1&lt;br /&gt;
| Id Offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Meta records ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[NCM_services#Title_Types|Meta Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]].&lt;br /&gt;
&lt;br /&gt;
== Extended data ==&lt;br /&gt;
&lt;br /&gt;
Patch-type cnmt files include an extended data section. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| Number of previous cnmt entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| Number of previous delta entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Number of delta info entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| Number of delta application info entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Number of previous content entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Number of delta content entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x38*X&lt;br /&gt;
| Previous cnmt entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28*X&lt;br /&gt;
| Previous delta entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x28*X&lt;br /&gt;
| Delta info entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x34*X&lt;br /&gt;
| Delta application info entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x18*X&lt;br /&gt;
| Previous content entries&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x38*X&lt;br /&gt;
| Delta content entries. (Standard content records)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Previous cnmt records ==&lt;br /&gt;
&lt;br /&gt;
Each entry is 0x38 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| Title version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| Type (see [[NCM_services#Title_Types|Title Types]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 3&lt;br /&gt;
| Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 32&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 2&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| 2&lt;br /&gt;
| Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 4&lt;br /&gt;
| Unused?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This contains information on previous metadata files.&lt;br /&gt;
&lt;br /&gt;
== Previous delta records ==&lt;br /&gt;
&lt;br /&gt;
Each entry is 0x28 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 8&lt;br /&gt;
| Old title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| New title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Old title version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| New title version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 8&lt;br /&gt;
| Unused?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This contains information on previous delta patches.&lt;br /&gt;
&lt;br /&gt;
== Delta info records ==&lt;br /&gt;
&lt;br /&gt;
Each entry is 0x28 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 8&lt;br /&gt;
| Old title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| New title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Old title version&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| New title version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| Some sort of index?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 8&lt;br /&gt;
| Some sort of index?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This contains information on the current delta patch.&lt;br /&gt;
&lt;br /&gt;
== Delta application info records ==&lt;br /&gt;
&lt;br /&gt;
Each entry is 0x34 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 16&lt;br /&gt;
| Old NcaId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 16&lt;br /&gt;
| New NcaId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 6&lt;br /&gt;
| Old size&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 2&lt;br /&gt;
| Upper 2 bytes of the new size&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| Lower 4 bytes of the new size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 2&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 1&lt;br /&gt;
| Type (see [[NCM_services#Title_Types|Title Types]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 1&lt;br /&gt;
| ? bit0 set = don&#039;t install?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| Unused?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This contains information on how to apply deltas to the previous patch.&lt;br /&gt;
&lt;br /&gt;
== Previous content records ==&lt;br /&gt;
&lt;br /&gt;
Each entry is 0x18 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 16&lt;br /&gt;
| NcaId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 6&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 1&lt;br /&gt;
| Type (see [[NCM_services#Title_Types|Title Types]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This contains information on previous title content from earlier patches.&lt;/div&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
</feed>