<?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=Thomhack50</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=Thomhack50"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Thomhack50"/>
	<updated>2026-05-01T01:56:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=10124</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=10124"/>
		<updated>2020-10-30T11:19:55Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: MKLIVE 047 &amp;amp; 010&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product Models =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Device || Product Code&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch || HAC&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch SDEV/EDEV || HAT&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Mariko || HAD&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Lite || HDH&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Product List ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Nintendo Switch Battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable also included in (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 || Ring-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 || Leg Strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 || Steelbook Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || Kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 || Battery for kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 || Gates (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen (&amp;quot;Super Mario Maker 2&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 || Touch Pen (&amp;quot;Brain Training for Switch&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 || SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 || Arrow Markers (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 || USB charging cable (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;) known as HAC-010 not 047&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1: Variety Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2: Robot Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3: Vehicle Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4: VR Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-055 || Nintendo Labo Storage Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || Relay Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001-01/HAD-001 || Retail Nintendo Switch Mariko console&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Nintendo Switch Lite console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-002 || HDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HDH-004 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HDH-005 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HDH-006 || Flip cover&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Product Serial Numbers =&lt;br /&gt;
Serial numbers are composed of at least [[#Prefix|three letters]] followed by ten decimal digits. The tenth digit is a [[#Check_Digit|check digit]], meaning that it is derived from the other digits.&lt;br /&gt;
&lt;br /&gt;
== Prefix ==&lt;br /&gt;
Observed prefixes are normally as follows:&lt;br /&gt;
&lt;br /&gt;
* First letter represents the product line:&lt;br /&gt;
** &amp;quot;X&amp;quot; (NX)&lt;br /&gt;
* Second letter represents the product model:&lt;br /&gt;
** &amp;quot;A&amp;quot; (HAC-001; Nintendo Switch console)&lt;br /&gt;
** &amp;quot;B&amp;quot; (HAC-015; Left Joy-Con)&lt;br /&gt;
** &amp;quot;C&amp;quot; (HAC-016; Right Joy-Con)&lt;br /&gt;
** &amp;quot;F&amp;quot; (HAC-007; Dock)&lt;br /&gt;
** &amp;quot;H&amp;quot; (HAC-024; Poké Ball Plus controller)&lt;br /&gt;
** &amp;quot;J&amp;quot; (HDH-001; Nintendo Switch Lite console)&lt;br /&gt;
** &amp;quot;K&amp;quot; (HAC-001-01; Nintendo Switch Mariko console)&lt;br /&gt;
** &amp;quot;L&amp;quot; (HAC-033; Left NES controller)&lt;br /&gt;
** &amp;quot;M&amp;quot; (HAC-034; Right NES controller)&lt;br /&gt;
** &amp;quot;Q&amp;quot; (HAC-037; Kart for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
** &amp;quot;R&amp;quot; (HAC-042; SNES controller)&lt;br /&gt;
** &amp;quot;Z&amp;quot; (HAT-003; SDEV cradle)&lt;br /&gt;
* Third letter represents the product region:&lt;br /&gt;
** &amp;quot;C&amp;quot; (China)&lt;br /&gt;
** &amp;quot;E&amp;quot; (Europe)&lt;br /&gt;
** &amp;quot;J&amp;quot; (Japan; and Europe on old models)&lt;br /&gt;
** &amp;quot;K&amp;quot; (Korea)&lt;br /&gt;
** &amp;quot;L&amp;quot; (All; for development only)&lt;br /&gt;
** &amp;quot;W&amp;quot; (Americas)&lt;br /&gt;
* Fourth letter is optional:&lt;br /&gt;
** &amp;quot;F&amp;quot; (Factory)&lt;br /&gt;
&lt;br /&gt;
== Assembly Line ==&lt;br /&gt;
The first two digits immediately after the [[#Prefix|prefix]] represent the assembly line 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;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Unspecified&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Prototype&lt;br /&gt;
|-&lt;br /&gt;
| 02 || SDEV&lt;br /&gt;
|-&lt;br /&gt;
| 03 || EDEV&lt;br /&gt;
|-&lt;br /&gt;
| 04 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 05 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 06 || HDEV&lt;br /&gt;
|-&lt;br /&gt;
| 07 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 90 || Refurbished&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Check Digit ==&lt;br /&gt;
The check digit is an industry-standard algorithm and is calculated just like it was on the [https://www.3dbrew.org/wiki/Serials#Console_Serial_Numbers 3DS].&lt;br /&gt;
&lt;br /&gt;
To calculate the check digit of a Switch console, separate the non-check digits into &amp;quot;odd&amp;quot; and &amp;quot;even&amp;quot; groups, where the &amp;quot;odd&amp;quot; group is digits in odd-numbered positions, and the &amp;quot;even&amp;quot; group is digits in even-numbered positions. (The first digit is &amp;quot;odd&amp;quot;, with &amp;quot;first&amp;quot; representing &amp;quot;1&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.&lt;br /&gt;
&lt;br /&gt;
Example: XAW10075273452&lt;br /&gt;
&lt;br /&gt;
The non-check digits are 1007527345. Separating into odd and even groups, we get the following:&lt;br /&gt;
&lt;br /&gt;
Odds: 1 + 0 + 5 + 7 + 4 = 17 Evens: 0 + 7 + 2 + 3 + 5 = 17&lt;br /&gt;
&lt;br /&gt;
Applying the algorithm, we get ((3 * 17) + 17) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example&#039;s check digit.&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=10111</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=10111"/>
		<updated>2020-10-26T20:09:45Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: HAC-038&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product Models =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Device || Product Code&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch || HAC&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch SDEV/EDEV || HAT&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Mariko || HAD&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Lite || HDH&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Product List ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Nintendo Switch Battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 || Ring-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 || Leg Strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 || Steelbook Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || Kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 || Battery for kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 || Gates (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen (&amp;quot;Super Mario Maker 2&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 || Touch Pen (&amp;quot;Brain Training for Switch&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 || SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 || Arrow Markers (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 || USB charging cable (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1: Variety Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2: Robot Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3: Vehicle Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4: VR Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-055 || Nintendo Labo Storage Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || Relay Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001-01/HAD-001 || Retail Nintendo Switch Mariko console&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Nintendo Switch Lite console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-002 || HDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HDH-004 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HDH-005 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HDH-006 || Flip cover&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Product Serial Numbers =&lt;br /&gt;
Serial numbers are composed of at least [[#Prefix|three letters]] followed by ten decimal digits. The tenth digit is a [[#Check_Digit|check digit]], meaning that it is derived from the other digits.&lt;br /&gt;
&lt;br /&gt;
== Prefix ==&lt;br /&gt;
Observed prefixes are normally as follows:&lt;br /&gt;
&lt;br /&gt;
* First letter represents the product line:&lt;br /&gt;
** &amp;quot;X&amp;quot; (NX)&lt;br /&gt;
* Second letter represents the product model:&lt;br /&gt;
** &amp;quot;A&amp;quot; (HAC-001; Nintendo Switch console)&lt;br /&gt;
** &amp;quot;B&amp;quot; (HAC-015; Left Joy-Con)&lt;br /&gt;
** &amp;quot;C&amp;quot; (HAC-016; Right Joy-Con)&lt;br /&gt;
** &amp;quot;F&amp;quot; (HAC-007; Dock)&lt;br /&gt;
** &amp;quot;H&amp;quot; (HAC-024; Poké Ball Plus controller)&lt;br /&gt;
** &amp;quot;J&amp;quot; (HDH-001; Nintendo Switch Lite console)&lt;br /&gt;
** &amp;quot;K&amp;quot; (HAC-001-01; Nintendo Switch Mariko console)&lt;br /&gt;
** &amp;quot;L&amp;quot; (HAC-033; Left NES controller)&lt;br /&gt;
** &amp;quot;M&amp;quot; (HAC-034; Right NES controller)&lt;br /&gt;
** &amp;quot;Q&amp;quot; (HAC-037; Kart for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
** &amp;quot;R&amp;quot; (HAC-042; SNES controller)&lt;br /&gt;
** &amp;quot;Z&amp;quot; (HAT-003; SDEV cradle)&lt;br /&gt;
* Third letter represents the product region:&lt;br /&gt;
** &amp;quot;C&amp;quot; (China)&lt;br /&gt;
** &amp;quot;E&amp;quot; (Europe)&lt;br /&gt;
** &amp;quot;J&amp;quot; (Japan; and Europe on old models)&lt;br /&gt;
** &amp;quot;K&amp;quot; (Korea)&lt;br /&gt;
** &amp;quot;L&amp;quot; (All; for development only)&lt;br /&gt;
** &amp;quot;W&amp;quot; (Americas)&lt;br /&gt;
* Fourth letter is optional:&lt;br /&gt;
** &amp;quot;F&amp;quot; (Factory)&lt;br /&gt;
&lt;br /&gt;
== Assembly Line ==&lt;br /&gt;
The first two digits immediately after the [[#Prefix|prefix]] represent the assembly line 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;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Unspecified&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Prototype&lt;br /&gt;
|-&lt;br /&gt;
| 02 || SDEV&lt;br /&gt;
|-&lt;br /&gt;
| 03 || EDEV&lt;br /&gt;
|-&lt;br /&gt;
| 04 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 05 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 06 || HDEV&lt;br /&gt;
|-&lt;br /&gt;
| 07 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 90 || Refurbished&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Check Digit ==&lt;br /&gt;
The check digit is an industry-standard algorithm and is calculated just like it was on the [https://www.3dbrew.org/wiki/Serials#Console_Serial_Numbers 3DS].&lt;br /&gt;
&lt;br /&gt;
To calculate the check digit of a Switch console, separate the non-check digits into &amp;quot;odd&amp;quot; and &amp;quot;even&amp;quot; groups, where the &amp;quot;odd&amp;quot; group is digits in odd-numbered positions, and the &amp;quot;even&amp;quot; group is digits in even-numbered positions. (The first digit is &amp;quot;odd&amp;quot;, with &amp;quot;first&amp;quot; representing &amp;quot;1&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.&lt;br /&gt;
&lt;br /&gt;
Example: XAW10075273452&lt;br /&gt;
&lt;br /&gt;
The non-check digits are 1007527345. Separating into odd and even groups, we get the following:&lt;br /&gt;
&lt;br /&gt;
Odds: 1 + 0 + 5 + 7 + 4 = 17 Evens: 0 + 7 + 2 + 3 + 5 = 17&lt;br /&gt;
&lt;br /&gt;
Applying the algorithm, we get ((3 * 17) + 17) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example&#039;s check digit.&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=9942</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=9942"/>
		<updated>2020-09-03T17:47:41Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product Models =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Device || Product Code&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch || HAC&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch SDEV/EDEV || HAT&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Mariko || HAD&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Lite || HDH&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Product List ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 || Ring-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 || Leg Strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || Kart for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 || Gates for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 || Touch Pen&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 || SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1: Variety Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2: Robot Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3: Vehicle Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4: VR Kit&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || Relay Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001-01/HAD-001 || Retail Nintendo Switch Mariko console&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Nintendo Switch Lite console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-002 || HDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HDH-004 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HDH-005 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HDH-006 || Flip cover&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Product Serial Numbers =&lt;br /&gt;
Serial numbers are composed of at least [[#Prefix|three letters]] followed by ten decimal digits. The tenth digit is a [[#Check_Digit|check digit]], meaning that it is derived from the other digits.&lt;br /&gt;
&lt;br /&gt;
== Prefix ==&lt;br /&gt;
Observed prefixes are normally as follows:&lt;br /&gt;
&lt;br /&gt;
* First letter represents the product line:&lt;br /&gt;
** &amp;quot;X&amp;quot; (NX)&lt;br /&gt;
* Second letter represents the product model:&lt;br /&gt;
** &amp;quot;A&amp;quot; (HAC-001; Nintendo Switch console)&lt;br /&gt;
** &amp;quot;B&amp;quot; (HAC-015; Left Joy-Con)&lt;br /&gt;
** &amp;quot;C&amp;quot; (HAC-016; Right Joy-Con)&lt;br /&gt;
** &amp;quot;F&amp;quot; (HAC-007; Dock)&lt;br /&gt;
** &amp;quot;H&amp;quot; (HAC-024; Poké Ball Plus controller)&lt;br /&gt;
** &amp;quot;J&amp;quot; (HDH-001; Nintendo Switch Lite console)&lt;br /&gt;
** &amp;quot;K&amp;quot; (HAC-001-01; Nintendo Switch Mariko console)&lt;br /&gt;
** &amp;quot;L&amp;quot; (HAC-033; Left NES controller)&lt;br /&gt;
** &amp;quot;M&amp;quot; (HAC-034; Right NES controller)&lt;br /&gt;
** &amp;quot;R&amp;quot; (HAC-042; SNES controller)&lt;br /&gt;
** &amp;quot;Z&amp;quot; (HAT-003; SDEV cradle)&lt;br /&gt;
* Third letter represents the product region:&lt;br /&gt;
** &amp;quot;C&amp;quot; (China)&lt;br /&gt;
** &amp;quot;E&amp;quot; (Europe)&lt;br /&gt;
** &amp;quot;J&amp;quot; (Japan; and Europe on old models)&lt;br /&gt;
** &amp;quot;K&amp;quot; (Korea)&lt;br /&gt;
** &amp;quot;L&amp;quot; (All; for development only)&lt;br /&gt;
** &amp;quot;W&amp;quot; (Americas)&lt;br /&gt;
* Fourth letter is optional:&lt;br /&gt;
** &amp;quot;F&amp;quot; (Factory)&lt;br /&gt;
&lt;br /&gt;
== Assembly Line ==&lt;br /&gt;
The first two digits immediately after the [[#Prefix|prefix]] represent the assembly line 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;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Unspecified&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Prototype&lt;br /&gt;
|-&lt;br /&gt;
| 02 || SDEV&lt;br /&gt;
|-&lt;br /&gt;
| 03 || EDEV&lt;br /&gt;
|-&lt;br /&gt;
| 04 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 05 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 06 || HDEV&lt;br /&gt;
|-&lt;br /&gt;
| 07 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 90 || Refurbished&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Check Digit ==&lt;br /&gt;
The check digit is an industry-standard algorithm and is calculated just like it was on the [https://www.3dbrew.org/wiki/Serials#Console_Serial_Numbers 3DS].&lt;br /&gt;
&lt;br /&gt;
To calculate the check digit of a Switch console, separate the non-check digits into &amp;quot;odd&amp;quot; and &amp;quot;even&amp;quot; groups, where the &amp;quot;odd&amp;quot; group is digits in odd-numbered positions, and the &amp;quot;even&amp;quot; group is digits in even-numbered positions. (The first digit is &amp;quot;odd&amp;quot;, with &amp;quot;first&amp;quot; representing &amp;quot;1&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.&lt;br /&gt;
&lt;br /&gt;
Example: XAW10075273452&lt;br /&gt;
&lt;br /&gt;
The non-check digits are 1007527345. Separating into odd and even groups, we get the following:&lt;br /&gt;
&lt;br /&gt;
Odds: 1 + 0 + 5 + 7 + 4 = 17 Evens: 0 + 7 + 2 + 3 + 5 = 17&lt;br /&gt;
&lt;br /&gt;
Applying the algorithm, we get ((3 * 17) + 17) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example&#039;s check digit.&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=XCI&amp;diff=9887</id>
		<title>XCI</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=XCI&amp;diff=9887"/>
		<updated>2020-08-12T05:32:24Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: boot is not only Tencent&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Known internally as &amp;quot;XCI&amp;quot; (NX Card Image), this is the format used for storing the contents of a Nintendo Switch Gamecard. &lt;br /&gt;
&lt;br /&gt;
= Gamecard Header =&lt;br /&gt;
This header is 0x200 bytes and is located at offset 0 in the Gamecard.&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 header (data from 0x100 to 0x200)&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;HEAD&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| Secure Area Start Address (in Media Units which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| Backup Area Start Address (always 0xFFFFFFFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x1&lt;br /&gt;
| TitleKeyDec Index (high nibble) and KEK Index (low nibble)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10D&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Gamecard Size|Gamecard Size]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10E&lt;br /&gt;
| 0x1&lt;br /&gt;
| Gamecard Header Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x10F&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Gamecard Flags|Gamecard Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x8&lt;br /&gt;
| Package ID (used for challenge–response authentication)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x8&lt;br /&gt;
| Valid Data End Address (in Media Units which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x120&lt;br /&gt;
| 0x10&lt;br /&gt;
| Gamecard Info IV (reversed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x130&lt;br /&gt;
| 0x8&lt;br /&gt;
| HFS0 partition offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x138&lt;br /&gt;
| 0x8&lt;br /&gt;
| HFS0 header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x140&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash of the [[#HFS0 Header|HFS0 Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x160&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash of the [[#Initial Data|Initial Data]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x180&lt;br /&gt;
| 0x4&lt;br /&gt;
| Security Mode (0x01 = T1, 0x02 = T2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x184&lt;br /&gt;
| 0x4&lt;br /&gt;
| T1 Key Index (always 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188&lt;br /&gt;
| 0x4&lt;br /&gt;
| Key Index (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Normal Area End Address (in Media Units which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190&lt;br /&gt;
| 0x70&lt;br /&gt;
| [[#Gamecard Info|Gamecard Info]] (AES-128-CBC encrypted)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Gamecard Size ==&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;
== Gamecard 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;
== Gamecard Info ==&lt;br /&gt;
When decrypted, this 0x70 byte region 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;
| 0x8&lt;br /&gt;
| Firmware Version (0x00 = Development, 0x01 = Retail, [4.0.0+] 0x02 = Retail)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Access Control (0x00A10011 = 25MHz access, 0x00A10010 = 50MHz access)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read Time Wait1 (always 0x1388)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read Time Wait2 (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Write Time Wait1 (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Write Time Wait2 (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Firmware Mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| CUP Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] Compatibility Type (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;
| Update Partition Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| CUP ID (always 0x0100000000000816, which is the title-listing data archive&#039;s title ID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x38&lt;br /&gt;
| Empty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Gamecard Certificate =&lt;br /&gt;
This is the Gamecard&#039;s unique certificate and is located at offset 0x7000.&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;
| Magicnum &amp;quot;CERT&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| Empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x1&lt;br /&gt;
| KEK Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x109&lt;br /&gt;
| 0x7&lt;br /&gt;
| Empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x10&lt;br /&gt;
| Device ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x120&lt;br /&gt;
| 0x10&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x130&lt;br /&gt;
| 0xD0&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data between the Gamecard Certificate and the start of the HFS0 region is all 0xFF, except for one BOTW cart that has been found, inwhich it is 0x00.&lt;br /&gt;
&lt;br /&gt;
= Initial Data =&lt;br /&gt;
This data 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 [[#Gamecard Header|Gamecard 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;
| Package ID from [[#Gamecard Header|Gamecard Header]] 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;
= HFS0 =&lt;br /&gt;
This is the Gamecard file system which starts with magicnum &amp;quot;HFS0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
The &amp;quot;SHA-256 File System&amp;quot; or &amp;quot;HFS0&amp;quot; starts at offset 0xF000 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).&lt;br /&gt;
&lt;br /&gt;
A hash for this header is stored at offset 0x140 in the [[#Gamecard Header|Gamecard Header]].&lt;br /&gt;
&lt;br /&gt;
== File System ==&lt;br /&gt;
The actual file system is as follows (also valid for the root partition):&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;
| Magicnum &amp;quot;HFS0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of files&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of the string table&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Zero/Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| X&lt;br /&gt;
| File Entry Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X&lt;br /&gt;
| Y&lt;br /&gt;
| String Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X + Y&lt;br /&gt;
| Z&lt;br /&gt;
| Raw File Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where File Entry Table consists of Number of Files FileEntries:&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;
| 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;br /&gt;
&lt;br /&gt;
= Cartridge Layout =&lt;br /&gt;
Observed gamecards contain three partitions: &amp;quot;update&amp;quot;, &amp;quot;normal&amp;quot;, and &amp;quot;secure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The update partition (Gamecard partition 0 for fsp-srv cmd 31) 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;
The normal 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;
The secure 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;
The entire rest of the Gamecard after the secure partition ends is all FF padding.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] The &amp;quot;normal&amp;quot; partition is now empty and a new partition &amp;quot;logo&amp;quot; was added.&lt;br /&gt;
A partition &amp;quot;boot&amp;quot; got added with exact same content than &amp;quot;logo&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=XCI&amp;diff=9728</id>
		<title>XCI</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=XCI&amp;diff=9728"/>
		<updated>2020-07-11T14:03:21Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: Tencent card&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Known internally as &amp;quot;XCI&amp;quot; (NX Card Image), this is the format used for storing the contents of a Nintendo Switch Gamecard. &lt;br /&gt;
&lt;br /&gt;
= Gamecard Header =&lt;br /&gt;
This header is 0x200 bytes and is located at offset 0 in the Gamecard.&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 header (data from 0x100 to 0x200)&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magicnum &amp;quot;HEAD&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| Secure Area Start Address (in Media Units which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x4&lt;br /&gt;
| Backup Area Start Address (always 0xFFFFFFFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C&lt;br /&gt;
| 0x1&lt;br /&gt;
| TitleKeyDec Index (high nibble) and KEK Index (low nibble)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10D&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Gamecard Size|Gamecard Size]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10E&lt;br /&gt;
| 0x1&lt;br /&gt;
| Gamecard Header Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x10F&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Gamecard Flags|Gamecard Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x8&lt;br /&gt;
| Package ID (used for challenge–response authentication)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| 0x8&lt;br /&gt;
| Valid Data End Address (in Media Units which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x120&lt;br /&gt;
| 0x10&lt;br /&gt;
| Gamecard Info IV (reversed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x130&lt;br /&gt;
| 0x8&lt;br /&gt;
| HFS0 partition offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x138&lt;br /&gt;
| 0x8&lt;br /&gt;
| HFS0 header size&lt;br /&gt;
|-&lt;br /&gt;
| 0x140&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash of the [[#HFS0 Header|HFS0 Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x160&lt;br /&gt;
| 0x20&lt;br /&gt;
| SHA-256 hash of the [[#Initial Data|Initial Data]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x180&lt;br /&gt;
| 0x4&lt;br /&gt;
| Security Mode (0x01 = T1, 0x02 = T2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x184&lt;br /&gt;
| 0x4&lt;br /&gt;
| T1 Key Index (always 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188&lt;br /&gt;
| 0x4&lt;br /&gt;
| Key Index (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Normal Area End Address (in Media Units which are 0x200 bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190&lt;br /&gt;
| 0x70&lt;br /&gt;
| [[#Gamecard Info|Gamecard Info]] (AES-128-CBC encrypted)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Gamecard Size ==&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;
== Gamecard 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;
== Gamecard Info ==&lt;br /&gt;
When decrypted, this 0x70 byte region 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;
| 0x8&lt;br /&gt;
| Firmware Version (0x00 = Development, 0x01 = Retail, [4.0.0+] 0x02 = Retail)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Access Control (0x00A10011 = 25MHz access, 0x00A10010 = 50MHz access)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read Time Wait1 (always 0x1388)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read Time Wait2 (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Write Time Wait1 (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Write Time Wait2 (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Firmware Mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| CUP Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] Compatibility Type (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;
| Update Partition Hash&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| CUP ID (always 0x0100000000000816, which is the title-listing data archive&#039;s title ID)&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x38&lt;br /&gt;
| Empty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Gamecard Certificate =&lt;br /&gt;
This is the Gamecard&#039;s unique certificate and is located at offset 0x7000.&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;
| Magicnum &amp;quot;CERT&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 0x4&lt;br /&gt;
| Empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x108&lt;br /&gt;
| 0x1&lt;br /&gt;
| KEK Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x109&lt;br /&gt;
| 0x7&lt;br /&gt;
| Empty&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| 0x10&lt;br /&gt;
| Device ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x120&lt;br /&gt;
| 0x10&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x130&lt;br /&gt;
| 0xD0&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data between the Gamecard Certificate and the start of the HFS0 region is all 0xFF, except for one BOTW cart that has been found, inwhich it is 0x00.&lt;br /&gt;
&lt;br /&gt;
= Initial Data =&lt;br /&gt;
This data 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 [[#Gamecard Header|Gamecard 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;
| Package ID from [[#Gamecard Header|Gamecard Header]] 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;
= HFS0 =&lt;br /&gt;
This is the Gamecard file system which starts with magicnum &amp;quot;HFS0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
The &amp;quot;SHA-256 File System&amp;quot; or &amp;quot;HFS0&amp;quot; starts at offset 0xF000 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).&lt;br /&gt;
&lt;br /&gt;
A hash for this header is stored at offset 0x140 in the [[#Gamecard Header|Gamecard Header]].&lt;br /&gt;
&lt;br /&gt;
== File System ==&lt;br /&gt;
The actual file system is as follows (also valid for the root partition):&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;
| Magicnum &amp;quot;HFS0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Number of files&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size of the string table&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Zero/Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| X&lt;br /&gt;
| File Entry Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X&lt;br /&gt;
| Y&lt;br /&gt;
| String Table&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + X + Y&lt;br /&gt;
| Z&lt;br /&gt;
| Raw File Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where File Entry Table consists of Number of Files FileEntries:&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;
| 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;br /&gt;
&lt;br /&gt;
= Cartridge Layout =&lt;br /&gt;
Observed gamecards contain three partitions: &amp;quot;update&amp;quot;, &amp;quot;normal&amp;quot;, and &amp;quot;secure&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The update partition (Gamecard partition 0 for fsp-srv cmd 31) 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;
The normal 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;
The secure 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;
The entire rest of the Gamecard after the secure partition ends is all FF padding.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] The &amp;quot;normal&amp;quot; partition is now empty and a new partition &amp;quot;logo&amp;quot; was added.&lt;br /&gt;
[CHINA -TENCENT] On tencent cartridge for China, A partition &amp;quot;boot&amp;quot; got added with exact same content than &amp;quot;logo&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=System_Versions&amp;diff=9627</id>
		<title>System Versions</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=System_Versions&amp;diff=9627"/>
		<updated>2020-06-05T05:29:41Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: 10.0.4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version &lt;br /&gt;
! Release date&lt;br /&gt;
! Package1 build date&lt;br /&gt;
! [[NCA_Format|SDK versions]]&lt;br /&gt;
|-&lt;br /&gt;
| [[1.0.0]]&lt;br /&gt;
| Before console release&lt;br /&gt;
| 2016-11-21 18:30:08&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| March 2, 2017&lt;br /&gt;
| 2017-02-10 15:51:24&lt;br /&gt;
| 1.2.2 - 1.3.2&lt;br /&gt;
|-&lt;br /&gt;
| [[2.1.0]]&lt;br /&gt;
| March 27, 2017&lt;br /&gt;
| 2017-02-10 15:51:24&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[2.2.0]]&lt;br /&gt;
| April 17, 2017&lt;br /&gt;
| 2017-02-10 15:51:24&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[2.3.0]]&lt;br /&gt;
| May 15, 2017&lt;br /&gt;
| 2017-02-10 15:51:24&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| June 19, 2017&lt;br /&gt;
| 2017-05-19 10:14:10&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| July 31, 2017&lt;br /&gt;
| 2017-07-10 16:17:58&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| September 5, 2017&lt;br /&gt;
| 2017-07-10 16:17:58&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| October 18, 2017&lt;br /&gt;
| 2017-09-21 17:26:29&lt;br /&gt;
| 4.4.0&lt;br /&gt;
|-&lt;br /&gt;
| [[4.0.1]]&lt;br /&gt;
| October 25, 2017&lt;br /&gt;
| 2017-09-21 17:26:29&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[4.1.0]]&lt;br /&gt;
| December 4, 2017&lt;br /&gt;
| 2017-09-21 17:26:29&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| March 12, 2018&lt;br /&gt;
| 2018-02-20 16:37:47&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[5.0.1]]&lt;br /&gt;
| March 26, 2018&lt;br /&gt;
| 2018-02-20 16:37:47&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[5.0.2]]&lt;br /&gt;
| April 16, 2018&lt;br /&gt;
| 2018-02-20 16:37:47&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[5.1.0]]&lt;br /&gt;
| May 30, 2018&lt;br /&gt;
| 2018-02-20 16:37:47&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| September 18, 2018&lt;br /&gt;
| 2018-08-02 16:27:53&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[6.0.1]]&lt;br /&gt;
| October 8, 2018&lt;br /&gt;
| 2018-08-02 16:27:53&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[6.1.0]]&lt;br /&gt;
| October 29, 2018&lt;br /&gt;
| 2018-08-02 16:27:53&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| November 19, 2018&lt;br /&gt;
| 2018-11-07 10:57:33&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| January 28, 2019&lt;br /&gt;
| 2018-12-18 17:57:30&lt;br /&gt;
| 7.2.1 - 7.3.0&lt;br /&gt;
|-&lt;br /&gt;
| [[7.0.1]]&lt;br /&gt;
| February 18, 2019&lt;br /&gt;
| 2019-02-08 15:00:37&lt;br /&gt;
| 7.3.0&lt;br /&gt;
|-&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| April 15, 2019&lt;br /&gt;
| 2019-03-14 17:20:56&lt;br /&gt;
| 8.1.0 - 8.2.99&lt;br /&gt;
|-&lt;br /&gt;
| [[8.0.1]]&lt;br /&gt;
| April 23, 2019&lt;br /&gt;
| 2019-03-14 17:20:56&lt;br /&gt;
| 8.1.0 - 8.2.0&lt;br /&gt;
|-&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| June 17, 2019&lt;br /&gt;
| 2019-05-31 15:24:32&lt;br /&gt;
| 8.1.0 - 8.2.0&lt;br /&gt;
|-&lt;br /&gt;
| [[8.1.1]]&lt;br /&gt;
| &lt;br /&gt;
| 2019-05-31 15:24:32&lt;br /&gt;
| 8.1.0 - 8.2.99&lt;br /&gt;
|-&lt;br /&gt;
| [[9.0.0]]&lt;br /&gt;
| September 9, 2019&lt;br /&gt;
| 2019-08-09 13:57:09&lt;br /&gt;
| 9.2.2 - 9.3.0&lt;br /&gt;
|-&lt;br /&gt;
| [[9.0.1]]&lt;br /&gt;
| September 30, 2019&lt;br /&gt;
| 2019-08-09 13:57:09&lt;br /&gt;
| 9.2.2 - 9.3.0&lt;br /&gt;
|-&lt;br /&gt;
| [[9.1.0]]&lt;br /&gt;
| December 4, 2019&lt;br /&gt;
| 2019-10-21 11:38:48&lt;br /&gt;
| 9.2.3 - 9.3.0&lt;br /&gt;
|-&lt;br /&gt;
| [[9.2.0]]&lt;br /&gt;
| March 3, 2020 (UTC)&lt;br /&gt;
| 2019-10-21 11:38:48&lt;br /&gt;
| 9.3.0&lt;br /&gt;
|-&lt;br /&gt;
| [[10.0.0]]&lt;br /&gt;
| April 14, 2020 (UTC)&lt;br /&gt;
| 2020-03-03 10:46:06&lt;br /&gt;
| 10.2.0-10.4.0&lt;br /&gt;
|-&lt;br /&gt;
| [[10.0.1]]&lt;br /&gt;
| April 22, 2020 (UTC)&lt;br /&gt;
| 2020-03-03 10:46:06&lt;br /&gt;
| 10.4.0&lt;br /&gt;
|-&lt;br /&gt;
| [[10.0.2]]&lt;br /&gt;
| April 30, 2020 (UTC)&lt;br /&gt;
| 2020-03-03 10:46:06&lt;br /&gt;
| 10.4.0&lt;br /&gt;
|-&lt;br /&gt;
| [[10.0.3]]&lt;br /&gt;
| May 26, 2020 (UTC)&lt;br /&gt;
| 2020-03-03 10:46:06&lt;br /&gt;
| 10.4.0&lt;br /&gt;
|-&lt;br /&gt;
| [[10.0.4]]&lt;br /&gt;
| June 5, 2020 (UTC)&lt;br /&gt;
| 2020-03-03 10:46:06?&lt;br /&gt;
| 10.4.0&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=7253</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=7253"/>
		<updated>2019-07-20T07:17:07Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: Add Nintendo Labo family&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product Models =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Device || Product Code&lt;br /&gt;
|-&lt;br /&gt;
| Switch || HAC&lt;br /&gt;
|-&lt;br /&gt;
| Switch SDEV/EDEV || HAT&lt;br /&gt;
|-&lt;br /&gt;
| Switch Lite || HDH&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Product List ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Switch console.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001-01 || New retail Switch console.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Battery.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1 : Variety Kit.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2 : Robot Kit. (To confirm.)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3 : Vehicle Kit.&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4 : VR Kit.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Switch console.&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Switch console.&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle.&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || Relay Box.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Switch Lite console.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=5119</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=5119"/>
		<updated>2018-09-29T13:07:17Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Colors==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Labo &amp;quot;creators contest&amp;quot; || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Black Pro Controller || #323232 or #323231 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=User:Thomhack50&amp;diff=3345</id>
		<title>User:Thomhack50</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=User:Thomhack50&amp;diff=3345"/>
		<updated>2018-01-01T09:52:14Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=User:Thomhack50&amp;diff=3344</id>
		<title>User:Thomhack50</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=User:Thomhack50&amp;diff=3344"/>
		<updated>2018-01-01T09:51:09Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: Created page with &amp;quot;Fan of Hack, Thomhack50 is a undiscovered hacker  He is french and he is like contribuate to forum like this .&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fan of Hack,&lt;br /&gt;
Thomhack50 is a undiscovered hacker &lt;br /&gt;
He is french and he is like contribuate to forum like this .&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Internet_Browser&amp;diff=3326</id>
		<title>Internet Browser</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Internet_Browser&amp;diff=3326"/>
		<updated>2017-12-31T18:51:43Z</updated>

		<summary type="html">&lt;p&gt;Thomhack50: shopn computer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nintendo Switch does not have a normal Internet Browser for user usage. However, there is multiple browser applets. It is the [https://web.archive.org/web/20170304075230/https://gl.access-company.com/news_event/archives/2017/170303/ NetFront NX] browser, which is based on Webkit.&lt;br /&gt;
&lt;br /&gt;
When linking the Nintendo Account with Facebook, the Facebook Auth website will open, offering a search box that can be used to browse the Internet (&amp;quot;LoginApplet&amp;quot;). Alternatively, it can be accessed with [https://gbatemp.net/threads/web-browser-kind-of-on-the-switch.463094/ custom DNS settings] which simulate a Wi-Fi login page (&amp;quot;WifiWebAuthApplet&amp;quot; for captive-portal).&lt;br /&gt;
&lt;br /&gt;
== Known User Agent Strings ==&lt;br /&gt;
{| class=&#039;wikitable&#039;&lt;br /&gt;
! System Version&lt;br /&gt;
! UA String&lt;br /&gt;
|-&lt;br /&gt;
| [[1.0.0]]&lt;br /&gt;
| Mozilla/5.0 (Nintendo Switch; &amp;lt;appletname&amp;gt;) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.4.25 NintendoBrowser/5.1.0.11682&lt;br /&gt;
|-&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| Mozilla/5.0 (Nintendo Switch; &amp;lt;appletname&amp;gt;) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.5.9 NintendoBrowser/5.1.0.13341&lt;br /&gt;
|-&lt;br /&gt;
| [[2.1.0]]-[[2.3.0]]&lt;br /&gt;
| Mozilla/5.0 (Nintendo Switch; &amp;lt;appletname&amp;gt;) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.5.10 NintendoBrowser/5.1.0.13343&lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| Mozilla/5.0 (Nintendo Switch; &amp;lt;appletname&amp;gt;) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.6.9 NintendoBrowser/5.1.0.14936&lt;br /&gt;
|-&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| Mozilla/5.0 (Nintendo Switch; &amp;lt;appletname&amp;gt;) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.7.9 NintendoBrowser/5.1.0.15785&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The UA is generated with: &amp;quot;Mozilla/5.0 (Nintendo Switch; &amp;lt;appletname&amp;gt;) AppleWebKit/&amp;lt;webkitver&amp;gt; (KHTML, like Gecko) NF/&amp;lt;nfver0&amp;gt;.&amp;lt;nfver1&amp;gt;.&amp;lt;nfver2&amp;gt; NintendoBrowser/5.&amp;lt;ninver0&amp;gt;.&amp;lt;ninver1&amp;gt;.&amp;lt;ninver2&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Browser Applets ==&lt;br /&gt;
{| class=&#039;wikitable&#039;&lt;br /&gt;
! appletname (From UA)&lt;br /&gt;
! Usage&lt;br /&gt;
! Invalid TLS cert handling&lt;br /&gt;
! Uses whitelist&lt;br /&gt;
! Title ID&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| WebApplet&lt;br /&gt;
| General web-applet for use by applications(online manuals, ...).&lt;br /&gt;
| Displays an error dialog without an option to ignore it.&lt;br /&gt;
| Yes&lt;br /&gt;
| 010000000000100A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ShopN&lt;br /&gt;
| Actual eShop client&lt;br /&gt;
| Just displays an error-code.&lt;br /&gt;
| Yes&lt;br /&gt;
| 010000000000100B&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| WebApplet&lt;br /&gt;
| Offline HTML display&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 010000000000100F&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| LoginApplet&lt;br /&gt;
| Nintendo Account linking&lt;br /&gt;
| Just displays an error-code.&lt;br /&gt;
| Yes&lt;br /&gt;
| 0100000000001010&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ShareApplet&lt;br /&gt;
| Posting screenshots to social media, and (optionally) linking social media accounts&lt;br /&gt;
| Just displays an error-code.&lt;br /&gt;
| Yes&lt;br /&gt;
| 0100000000001010&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| LobbyApplet&lt;br /&gt;
| Related to online-multiplayer lobbies&lt;br /&gt;
| Just displays an error-code.&lt;br /&gt;
| Yes&lt;br /&gt;
| 0100000000001010&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| WifiWebAuthApplet&lt;br /&gt;
| Captive-portal&lt;br /&gt;
| Displays an error dialog with an option to ignore it.&lt;br /&gt;
| No&lt;br /&gt;
| 0100000000001011&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When whitelisting is enabled, you can only load page domains included in the whitelist, otherwise an error is displayed. This only applies to page navigation. Videos via the &amp;lt;video&amp;gt; tag are not affected, likewise with network requests with JS.&lt;br /&gt;
&lt;br /&gt;
No known applets can directly access the SD card via mounting it. This includes ShareApplet (which posts screenshots from SD to social media).&lt;br /&gt;
&lt;br /&gt;
== OSS ==&lt;br /&gt;
The NROs for the OSS are stored under a separate [[Title_list|title]]. All of the web-applets use the same OSS NROs via this title.&lt;br /&gt;
&lt;br /&gt;
String from v2.0 in oss_wkc.nro: &amp;quot;libcurl/7.50.1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Video Playback ==&lt;br /&gt;
WifiWebAuthApplet does not fully support playing videos. It will [[Error_codes|assert]] with normal videos. The assert triggers before it even starts MP4 parsing?(For example, selecting a video from a video-tag will assert even though it doesn&#039;t send any network request for it) However, in some cases with certain MP4s using vulns it will display an error dialog instead.&lt;br /&gt;
&lt;br /&gt;
With v3.0 WifiWebAuthApplet video-playback was disabled, it now throws the following error when attempting to play a video: &amp;quot;Support Code: 2809-1212&amp;quot; &amp;quot;This feature is not available.&amp;quot; On past system-versions it would just trigger a fatal-error(see above). Video-playback which already worked fine under whitelisted-applet, still works fine on v3.0.&lt;br /&gt;
&lt;br /&gt;
== Trusted RootCAs ==&lt;br /&gt;
While the rootCA(s) for Let&#039;s Encrypt isn&#039;t included, Let&#039;s Encrypt is indirectly trusted via &amp;quot;Digital Signature Trust Co.&amp;quot;. This seems to be only(?) the case for WifiWebAuthApplet, hence non-WifiWebAuthApplet seems to have a different set of trusted rootCAs.&lt;br /&gt;
&lt;br /&gt;
== WifiWebAuthApplet ==&lt;br /&gt;
When doing a connection-test in system-settings, it will detect that the captive-portal is required and display an error for it when the response for &amp;quot;http://conntest.nintendowifi.net/&amp;quot; doesn&#039;t include the &amp;quot;X-Organization: Nintendo&amp;quot; HTTP header. The web-applet will not load until something else attempts a conntest, for example when launching eShop and prior to LoginApplet launching. The initial page loaded by this applet is the above conntest URL.&lt;br /&gt;
&lt;br /&gt;
This is only available starting with [[2.0.0]].&lt;br /&gt;
&lt;br /&gt;
Prior to version [[3.0.0]], this applet was launched when attempting a system update from recovery mode if needed. This was changed to display a &amp;quot;This feature is not available.&amp;quot; popup instead.&lt;br /&gt;
&lt;br /&gt;
==Whitelisted Applets==&lt;br /&gt;
The v2.1 main-codebin page-aligned .text size is 0x1000-bytes larger than ShopN.&lt;br /&gt;
&lt;br /&gt;
The file at &amp;quot;data:/whitelist/WhitelistLns.txt&amp;quot; for LoginApplet/ShareApplet/LobbyApplet, which doesn&#039;t exist in WifiWebAuthApplet, contains the following:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;^https://([0-9A-Za-z\-]+\.)*nintendo\.net(/|$)&lt;br /&gt;
 ^https?://([0-9A-Za-z\-]+\.)*nintendo\.(co\.jp|com|eu|co\.uk|es|pt|ch|at|de|nl|be|ch|ru|fr|it|co\.za|co\.kr|tw|com\.hk|com\.au|ca|co\.nz)(/|$)&lt;br /&gt;
 ^https?://([0-9A-Za-z\-]+\.)*nintendo-europe\.com(/|$)&lt;br /&gt;
 ^https?://([0-9A-Za-z\-]+\.)*nintendoservicecentre\.co\.uk(/|$)&lt;br /&gt;
 ^https?://([0-9A-Za-z\-]+\.)*google\.(com|ad|ae|com\.af|com\.ag|com\.ai|al|am|co\.ao|com\.ar|as|at|com\.au|az|ba|com\.bd|be|bf|bg|com\.bh|bi|bj|com\.bn|com\.bo|com\.br|bs|bt|co\.bw|by|com\.bz|ca|cd|cf|cg|ch|ci|co\.ck|cl|cm|cn|com\.co|co\.cr|com\.cu|cv|com\.cy|cz|de|dj|dk|dm|com\.do|dz|com\.ec|ee|com\.eg|es|com\.et|fi|com\.fj|fm|fr|ga|ge|gg|com\.gh|com\.gi|gl|gm|gp|gr|com\.gt|gy|com\.hk|hn|hr|ht|hu|co\.id|ie|co\.il|im|co\.in|iq|is|it|je|com\.jm|jo|co\.jp|co\.ke|com\.kh|ki|kg|co\.kr|com\.kw|kz|la|com\.lb|li|lk|co\.ls|lt|lu|lv|com\.ly|co\.ma|md|me|mg|mk|ml|com\.mm|mn|ms|com\.mt|mu|mv|mw|com\.mx|com\.my|co\.mz|com\.na|com\.nf|com\.ng|com\.ni|ne|nl|no|com\.np|nr|nu|co\.nz|com\.om|com\.pa|com\.pe|com\.pg|com\.ph|com\.pk|pl|pn|com\.pr|ps|pt|com\.py|com\.qa|ro|ru|rw|com\.sa|com\.sb|sc|se|com\.sg|sh|si|sk|com\.sl|sn|so|sm|sr|st|com\.sv|td|tg|co\.th|com\.tj|tk|tl|tm|tn|to|com\.tr|tt|com\.tw|co\.tz|com\.ua|co\.ug|co\.uk|com\.uy|co\.uz|com\.vc|co\.ve|vg|co\.vi|com\.vn|vu|ws|rs|co\.za|co\.zm|co\.zw|cat)(/|$)&lt;br /&gt;
 ^https://([0-9A-Za-z\-]+\.)*facebook\.com(/|$)&lt;br /&gt;
 ^https://([0-9A-Za-z\-]+\.)*twitter\.com(/|$)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ShareApplet===&lt;br /&gt;
The initial page loaded by this applet depends on a flag. &amp;lt;nowiki&amp;gt;non-val1: &amp;quot;https://web-lp1.share.srv.nintendo.net/&amp;quot; val1: &amp;quot;https://web-lp1.share.srv.nintendo.net/settings/&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The server will return a HTTP 302 redirect to &amp;lt;nowiki&amp;gt;&amp;quot;https://nintendo.com/&amp;quot;&amp;lt;/nowiki&amp;gt; when the specified User-Agent isn&#039;t the one for ShareApplet.&lt;br /&gt;
&lt;br /&gt;
===LobbyApplet===&lt;br /&gt;
The initial page loaded by this applet is: &amp;lt;nowiki&amp;gt;&amp;quot;https://web-lp1.znc.srv.nintendo.net/lobby/&amp;quot;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The content of the above URL refers to &amp;quot;rooms&amp;quot;, &amp;quot;NxView_Img_Google_Play_Icon&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
And also:&lt;br /&gt;
  Your room has been created.&lt;br /&gt;
  &lt;br /&gt;
  You can invite friends to the room via&lt;br /&gt;
  the Nintendo Switch Online Lounge app.&lt;br /&gt;
&lt;br /&gt;
== ShopN ==&lt;br /&gt;
The initial page loaded by ShopN seems to be the following: &amp;lt;nowiki&amp;gt;&amp;quot;https://bugyo.hac.lp1.eshop.nintendo.net/ashigaru/&amp;quot;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
This can be accessed via computer possesed the certificat ShopN.&lt;br /&gt;
&lt;br /&gt;
The file at &amp;quot;data:/whitelist/WhitelistEc.txt&amp;quot;, which doesn&#039;t exist in WifiWebAuthApplet, contains the following:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;^https://([0-9A-Za-z\-]+\.)*eshop\.nintendo\.net($|/)&lt;br /&gt;
 ^https?://([0-9A-Za-z\-]+\.)*nintendo\.(co\.jp|com|de)($|/)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WebApplet ==&lt;br /&gt;
===010000000000100A===&lt;br /&gt;
The initial page loaded by this applet is specified by the title which launched this applet. Plain HTTP is allowed.&lt;br /&gt;
&lt;br /&gt;
The files under &amp;quot;data:/&amp;quot; are identical to WifiWebAuthApplet except that the content of each file differs.&lt;br /&gt;
&lt;br /&gt;
This applet uses a whitelist, but it doesn&#039;t come from &amp;quot;data:/&amp;quot; like whitelisted-applet.&lt;br /&gt;
&lt;br /&gt;
==== WebApplet launch with Tetris ====&lt;br /&gt;
The Tetris game/demo can be used to launch the online-WebApplet. This &#039;&#039;only&#039;&#039; applies to the JPN region of the game/demo: &amp;quot;ぷよぷよ™テトリス®Ｓ&amp;quot;(aka &amp;quot;Puyo Puyo Tetris&amp;quot;). Note that the gamecard for this can be used to launch the online-WebApplet on system-version &amp;gt;=1.0.0.&lt;br /&gt;
&lt;br /&gt;
First, launch the offline-WebApplet for the manual:&lt;br /&gt;
* Game: Main-menu -&amp;gt; press A with the already selected top menu button -&amp;gt; press the R button.&lt;br /&gt;
* Demo: Main-menu -&amp;gt; select menu button on the right side -&amp;gt; press A.&lt;br /&gt;
&lt;br /&gt;
Then in the manual:&lt;br /&gt;
* Press A -&amp;gt; select the bottom menu entry in the list.&lt;br /&gt;
* Select the SEGA icon -&amp;gt; press A.&lt;br /&gt;
&lt;br /&gt;
The offline-WebApplet will then launch the online-WebApplet with the plain-http &amp;lt;nowiki&amp;gt;&amp;quot;http://sega.jp/&amp;quot;&amp;lt;/nowiki&amp;gt; URL. Non-JPN regions of Tetris don&#039;t have any external link in the manual. For example, with your own DNS-server setup to return your own server address for this domain, you can load your own content for use with online-WebApplet.&lt;br /&gt;
&lt;br /&gt;
As of 12/01/2017 this still works on the latest update for Tetris (version 1.1.2).&lt;br /&gt;
&lt;br /&gt;
=== Offline Applet ===&lt;br /&gt;
Minus TIDs, the [[NPDM]] is the same as 010000000000100A except 010000000000100A has access to more/other services.&lt;br /&gt;
&lt;br /&gt;
== Service/FS Access ==&lt;br /&gt;
All browser applets have access to the following services: acc:u1, appletAE, audin:u, audren:u, audout:u, bsd:u, fatal:u, fsp-srv, hid, hid:sys, irs, ldn:m, ldr:ro, lm, erpt:c, nifm:s, ns:am, nsd:u, nvdrv:a, mm:u, pl:u, prepo:s, set, set:sys, sfdnsres, ssl, time:u, vi:s&lt;br /&gt;
&lt;br /&gt;
LoginApplet/ShareApplet/LobbyApplet have access to the above + caps:a.&lt;br /&gt;
&lt;br /&gt;
ShopN has access to the above + nim:shp.&lt;br /&gt;
&lt;br /&gt;
Unlike the applets listed above, WebApplet TID 010000000000100A has access to the [[Filesystem_services|FS]] MountContent* commands. This is so that it can load the whitelist from &amp;quot;/accessible-urls/accessible-urls.txt&amp;quot; in the mounted FS, from [[NCA]]-type4 where titleID={application which launched this applet}.&lt;br /&gt;
&lt;br /&gt;
== Heap ==&lt;br /&gt;
&lt;br /&gt;
The size used for [[SVC|svcSetHeapSize]] by the web-applets is 0x15600000. Under ShopN, the largest size that can be passed to this without an error being returned, is 0x1B400000.&lt;br /&gt;
&lt;br /&gt;
== Versions ==&lt;br /&gt;
&lt;br /&gt;
=== [[1.0.0]] ===&lt;br /&gt;
&amp;quot;shareddata:/buildinfo/buildinfo.dat&amp;quot; content:&lt;br /&gt;
  r:11682&lt;br /&gt;
  p:NX64&lt;br /&gt;
  v:Pilot&lt;br /&gt;
  d:2016-11-25 23:30&lt;br /&gt;
  n:0.4.25&lt;br /&gt;
&lt;br /&gt;
=== [[2.0.0]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;shareddata:/buildinfo/buildinfo.dat&amp;quot; content:&lt;br /&gt;
  r:13341&lt;br /&gt;
  p:NX64&lt;br /&gt;
  v:Release&lt;br /&gt;
  d:2017-02-13 22:57&lt;br /&gt;
  n:0.5.9&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
=== [[2.1.0]] ===&lt;br /&gt;
See [[Switch_Userland_Flaws|here]] for vuln-related changes.&lt;br /&gt;
&lt;br /&gt;
The WebKit NRO was updated. For the WebKit NRO, the page-aligned size for the R-X, R--, and RW- pages are the same as v2.0.&lt;br /&gt;
* The actual code in the NRO starts differing starting at offset 0xE780. In v2.0 the offset following the last code instruction is text_lastpage+0x3F8(text_end-0xC08), while for v2.1 it&#039;s text_lastpage+0xE60(text_end-0x1A0). Compared to the previous version, there&#039;s a val0 u32(padding) inserted where the code for the import stubs begin, near the end of .text. Relative to that end offset going backwards, .text differs starting at v2.0 textbase+0xD56530 / v2.1 textbase+0xD56F94.&lt;br /&gt;
* The R-- section was updated. Besides the large table(?) which was updated(nothing was added/removed there), the strings containing &amp;quot;D:/for_cruiser/release_182/nx/webkit/&amp;quot; were updated: &amp;quot;182&amp;quot; was changed to &amp;quot;189&amp;quot;. 0x10-bytes at offset 0x57292C were removed. 0x8-bytes were inserted at offset 0x14B2B5C in the v2.1 section. 0x8-bytes were inserted at offset 0x14B5C10 in the v2.1 section. ...&lt;br /&gt;
* The RW- section was updated, mainly for different addrs. Nothing was added/removed. Most(?)/all(?) main-codebin func import-addrs relative to main-codebin-base are the same as v2.0.&lt;br /&gt;
&lt;br /&gt;
Main-codebin region(titleID 010000000000100B):&lt;br /&gt;
* rtld is same as before basically, minus addrs. Likewise for the &amp;quot;nnSdkEmpty&amp;quot; binary following the main-codebin.&lt;br /&gt;
* Various byte values were changed in the main .text.&lt;br /&gt;
* In the main R-- section:&lt;br /&gt;
** The length of a string used with the user-agent changed, due to being changed from &amp;quot;{...}.9&amp;quot; to &amp;quot;{...}.10&amp;quot;.&lt;br /&gt;
** The version in the following string was changed from &amp;quot;1.2.2&amp;quot; to &amp;quot;1.2.3&amp;quot;: &amp;quot;FS_ACCESS: { sdk_versio n: 1.2.3, spec:  NX }&amp;quot;&lt;br /&gt;
** The datetime strings following &amp;quot;b/23876444&amp;quot; was changed from &amp;quot;Feb 10 2017&amp;quot; &amp;quot;02:24:47&amp;quot; to &amp;quot;Mar  9 201 7&amp;quot; &amp;quot;21:41:27&amp;quot;.&lt;br /&gt;
** A 0x10-byte block prior to SDK library tag strings was updated. The version in those strings was changed from &amp;quot;1_2_2&amp;quot; to &amp;quot;1_2_3&amp;quot;.&lt;br /&gt;
* The main RW- section appears to be basically the same minus addrs.&lt;br /&gt;
&lt;br /&gt;
All of the other NROs were updated in FS with only the following changes:&lt;br /&gt;
* The R-X section is identical to the previous version except for the 0x10-byte block in the NRO header. &lt;br /&gt;
* The R-- section only had version values in &amp;quot;/release_{ver}/&amp;quot; strings updated, see the for_cruiser path mentioned for WebKit NRO above. The only other change was that a 0x10-byte block following a &amp;quot;GNU&amp;quot; string was updated.&lt;br /&gt;
&lt;br /&gt;
==== FS ====&lt;br /&gt;
The content of &amp;quot;blacklist:/&amp;quot; and &amp;quot;oceanShared:/&amp;quot; haven&#039;t changed. Only the content of &amp;quot;shareddata:/&amp;quot; and &amp;quot;data:/&amp;quot; changed.&lt;br /&gt;
&lt;br /&gt;
===== &amp;quot;shareddata:/&amp;quot; =====&lt;br /&gt;
The following files were updated here(nothing added/removed):&lt;br /&gt;
&lt;br /&gt;
* /buildinfo/buildinfo.dat&lt;br /&gt;
* /dll/cairo_wkc.nro&lt;br /&gt;
* /dll/libfont.nro&lt;br /&gt;
* /dll/oss_wkc.nro&lt;br /&gt;
* /dll/peer_wkc.nro&lt;br /&gt;
* /dll/webkit_wkc.nro&lt;br /&gt;
&lt;br /&gt;
That is, every .nro under the above directory was updated.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;shareddata:/buildinfo/buildinfo.dat&amp;quot; content:&lt;br /&gt;
  r:13343&lt;br /&gt;
  p::NX64&lt;br /&gt;
  v:Release&lt;br /&gt;
  d:2017-03-14 21:08&lt;br /&gt;
  n:0.5.10&lt;br /&gt;
&lt;br /&gt;
===== &amp;quot;data:/&amp;quot; =====&lt;br /&gt;
The following files were updated here(nothing added/removed):&lt;br /&gt;
&lt;br /&gt;
* /.nrr/netfront.nrr&lt;br /&gt;
* /buildinfo/buildinfo.dat&lt;br /&gt;
&lt;br /&gt;
=== [[3.0.1]] ===&lt;br /&gt;
While main-codebin .text was updated, no actual code was changed.&lt;br /&gt;
&lt;br /&gt;
The .nss path string in main-codebin was changed from &amp;quot;Q:\work\LibraryApplet\...&amp;quot; to &amp;quot;Q:\work\nup\LibraryApplet\...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See [[3.0.1|here]] regarding &amp;quot;shareddata:/&amp;quot; buildinfo.&lt;/div&gt;</summary>
		<author><name>Thomhack50</name></author>
	</entry>
</feed>