From 8abda1b72cb93a19be4526727ad1f8013534b6c8 Mon Sep 17 00:00:00 2001
From: icenine451 <benjamin.r.shelton@protonmail.com>
Date: Wed, 18 Jan 2023 14:54:24 -0500
Subject: [PATCH 1/3] Remove legacy PCSX2 and Ryujinx references

---
 tools/configurator.sh | 20 ++------------------
 1 file changed, 2 insertions(+), 18 deletions(-)

diff --git a/tools/configurator.sh b/tools/configurator.sh
index b4dc3a2b..82a35f9d 100644
--- a/tools/configurator.sh
+++ b/tools/configurator.sh
@@ -75,7 +75,6 @@ configurator_reset_dialog() {
     "PPSSPP" \
     "Primehack" \
     "RPCS3" \
-    "Ryujinx" \
     "XEMU" \
     "Yuzu")
 
@@ -126,11 +125,6 @@ configurator_reset_dialog() {
       configurator_process_complete_dialog "resetting $emulator_to_reset"
     ;;
 
-    "Ryujinx" )
-      ryujinx_init
-      configurator_process_complete_dialog "resetting $emulator_to_reset"
-    ;;
-
     "XEMU" )
       xemu_init
       configurator_process_complete_dialog "resetting $emulator_to_reset"
@@ -220,12 +214,10 @@ configurator_power_user_changes_dialog() {
     "Dolphin" \
     "Duckstation" \
     "MelonDS" \
-    "PCSX2-QT" \
-    "PCSX2-Legacy" \
+    "PCSX2" \
     "PPSSPP" \
     "Primehack" \
     "RPCS3" \
-    "Ryujinx" \
     "XEMU" \
     "Yuzu")
 
@@ -251,14 +243,10 @@ configurator_power_user_changes_dialog() {
       melonDS
     ;;
 
-    "PCSX2-QT" )
+    "PCSX2" )
       pcsx2-qt
     ;;
 
-    "PCSX2-Legacy" )
-      pcsx2
-    ;;
-
     "PPSSPP" )
       PPSSPPSDL
     ;;
@@ -271,10 +259,6 @@ configurator_power_user_changes_dialog() {
       rpcs3
     ;;
 
-    "Ryujinx" )
-      ryujinx-wrapper
-    ;;
-
     "XEMU" )
       xemu
     ;;

From 8736afc0463f8a5f0d5f763d92c9b90184608345 Mon Sep 17 00:00:00 2001
From: icenine451 <benjamin.r.shelton@protonmail.com>
Date: Thu, 19 Jan 2023 11:50:23 -0500
Subject: [PATCH 2/3] syntax cleanup

---
 tools/configurator.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/configurator.sh b/tools/configurator.sh
index 82a35f9d..f3cc7747 100644
--- a/tools/configurator.sh
+++ b/tools/configurator.sh
@@ -394,7 +394,7 @@ configurator_move_dialog() {
           configurator_generic_dialog "The SD card was found but is not writable\nThis can happen with cards formatted on PC or for other reasons.\nPlease format the SD card through the Steam Deck's Game Mode and try the moving process again."
           configurator_welcome_dialog
         else
-          if [[ $(verify_space $rdhome $sdcard) == "true" ]];then
+          if [[ $(verify_space $rdhome $sdcard) == "true" ]]; then
             configurator_generic_dialog "Moving RetroDECK data folder to $destination"
             if [[ -L "$HOME/retrodeck/roms" ]]; then # Check for ROMs symlink user may have created
                 unlink "$HOME/retrodeck/roms"

From 525bb576c4b97c53545e2d6e7b37822cb0c5ce42 Mon Sep 17 00:00:00 2001
From: icenine451 <benjamin.r.shelton@protonmail.com>
Date: Wed, 1 Feb 2023 10:38:25 -0500
Subject: [PATCH 3/3] Several fixes, add PH config, fix Yuzu controls

---
 emu-configs/defaults/primehack/Dolphin.ini    |  68 +++++
 .../defaults/primehack/FreeLookController.ini |  22 ++
 emu-configs/defaults/primehack/GBA.ini        |  18 ++
 emu-configs/defaults/primehack/GCKeyNew.ini   |  93 ++++++
 emu-configs/defaults/primehack/GCPadNew.ini   |  41 +++
 emu-configs/defaults/primehack/Logger.ini     |  58 ++++
 emu-configs/defaults/primehack/Qt.ini         |  90 ++++++
 emu-configs/defaults/primehack/WiimoteNew.ini | 101 ++++++
 emu-configs/primehack/Dolphin.ini             |  70 +++++
 emu-configs/primehack/FreeLookController.ini  |  22 ++
 emu-configs/primehack/GBA.ini                 |  18 ++
 emu-configs/primehack/GCKeyNew.ini            |  93 ++++++
 emu-configs/primehack/GCPadNew.ini            |  44 +++
 emu-configs/primehack/Logger.ini              |  58 ++++
 .../GCPad/Steam Virtual Controller.ini        |  29 ++
 emu-configs/primehack/Qt.ini                  |  90 ++++++
 emu-configs/primehack/WiimoteNew.ini          | 101 ++++++
 emu-configs/yuzu/qt-config.ini                |  90 +++---
 functions.sh                                  | 229 +++++++-------
 net.retrodeck.retrodeck.yml                   |  13 +-
 rd-submodules/ryujinx/nuget_sources.json      | 289 +++++++++---------
 rd-submodules/ryujinx/ryujinx-wrapper         |   2 +-
 tools/configurator.sh                         |   6 -
 23 files changed, 1327 insertions(+), 318 deletions(-)
 create mode 100644 emu-configs/defaults/primehack/Dolphin.ini
 create mode 100644 emu-configs/defaults/primehack/FreeLookController.ini
 create mode 100644 emu-configs/defaults/primehack/GBA.ini
 create mode 100644 emu-configs/defaults/primehack/GCKeyNew.ini
 create mode 100644 emu-configs/defaults/primehack/GCPadNew.ini
 create mode 100644 emu-configs/defaults/primehack/Logger.ini
 create mode 100644 emu-configs/defaults/primehack/Qt.ini
 create mode 100644 emu-configs/defaults/primehack/WiimoteNew.ini
 create mode 100644 emu-configs/primehack/Dolphin.ini
 create mode 100644 emu-configs/primehack/FreeLookController.ini
 create mode 100644 emu-configs/primehack/GBA.ini
 create mode 100644 emu-configs/primehack/GCKeyNew.ini
 create mode 100644 emu-configs/primehack/GCPadNew.ini
 create mode 100644 emu-configs/primehack/Logger.ini
 create mode 100644 emu-configs/primehack/Profiles/GCPad/Steam Virtual Controller.ini
 create mode 100644 emu-configs/primehack/Qt.ini
 create mode 100644 emu-configs/primehack/WiimoteNew.ini

diff --git a/emu-configs/defaults/primehack/Dolphin.ini b/emu-configs/defaults/primehack/Dolphin.ini
new file mode 100644
index 00000000..8983fa34
--- /dev/null
+++ b/emu-configs/defaults/primehack/Dolphin.ini
@@ -0,0 +1,68 @@
+[Analytics]
+ID = 0d7f9276eb4e2200f7454c1bf3d780e0
+Enabled = False
+[Core]
+InitialPrimeHackRun = True
+SIDevice0 = 7
+SIDevice1 = 0
+SIDevice2 = 0
+SIDevice3 = 0
+AutoDiscChange = False
+CPUThread = True
+EnableCheats = False
+OverrideRegionSettings = False
+EnablePrimeHack = True
+EmulationSpeed = 1.0
+FallbackRegion = 1
+AudioStretch = False
+AudioStretchMaxLatency = 80
+CPUCore = 1
+DPL2Decoder = False
+DPL2Quality = 2
+DSPHLE = True
+EnableCustomRTC = False
+MMU = False
+OverclockEnable = False
+RAMOverrideEnable = False
+SelectedLanguage = 0
+SerialPort1 = 255
+SkipIPL = True
+SlotA = 8
+SlotB = 255
+WiiKeyboard = False
+WiiSDCard = True
+WiiSDCardAllowWrites = True
+WiiSDCardEnableFolderSync = False
+[NetPlay]
+TraversalChoice = direct
+[General]
+UseDiscordPresence = True
+HotkeysRequireFocus = True
+UseGameCovers = False
+RecursiveISOPaths = False
+[Display]
+DisableScreenSaver = True
+KeepWindowOnTop = False
+[Interface]
+ConfirmStop = True
+LanguageCode =
+OnScreenDisplayMessages = True
+PauseOnFocusLost = False
+ShowActiveTitle = True
+UseBuiltinTitleDatabase = True
+UsePanicHandlers = False
+ThemeName = Clean
+DebugModeEnabled = False
+CursorVisibility = 2
+[DSP]
+Backend = No Audio Output
+EnableJIT = False
+[GBA]
+BIOS =
+Rom1 =
+Rom2 =
+Rom3 =
+Rom4 =
+SavesInRomPath = False
+SavesPath =
+Threads = True
diff --git a/emu-configs/defaults/primehack/FreeLookController.ini b/emu-configs/defaults/primehack/FreeLookController.ini
new file mode 100644
index 00000000..0a03c416
--- /dev/null
+++ b/emu-configs/defaults/primehack/FreeLookController.ini
@@ -0,0 +1,22 @@
+[FreeLook1]
+Device = XInput2/0/Virtual core pointer
+Move/Up = @(Shift+E)
+Move/Down = @(Shift+Q)
+Move/Left = @(Shift+A)
+Move/Right = @(Shift+D)
+Move/Forward = @(Shift+W)
+Move/Backward = @(Shift+S)
+Speed/Decrease = @(Shift+`1`)
+Speed/Increase = @(Shift+`2`)
+Speed/Reset = @(Shift+F)
+Other/Reset View = @(Shift+R)
+Field of View/Increase X = @(Shift+`Axis Z+`)
+Field of View/Decrease X = @(Shift+`Axis Z-`)
+Field of View/Increase Y = @(Shift+`Axis Z+`)
+Field of View/Decrease Y = @(Shift+`Axis Z-`)
+Incremental Rotation/Pitch Up = if(`Click 3`,`RelativeMouse Y-` * 0.10, 0)
+Incremental Rotation/Pitch Down = if(`Click 3`,`RelativeMouse Y+` * 0.10, 0)
+Incremental Rotation/Roll Left = if(`Click 2`,`RelativeMouse X-` * 0.10, 0)
+Incremental Rotation/Roll Right = if(`Click 2`,`RelativeMouse X+` * 0.10, 0)
+Incremental Rotation/Yaw Left = if(`Click 3`,`RelativeMouse X-` * 0.10, 0)
+Incremental Rotation/Yaw Right = if(`Click 3`,`RelativeMouse X+` * 0.10, 0)
diff --git a/emu-configs/defaults/primehack/GBA.ini b/emu-configs/defaults/primehack/GBA.ini
new file mode 100644
index 00000000..3afa86fc
--- /dev/null
+++ b/emu-configs/defaults/primehack/GBA.ini
@@ -0,0 +1,18 @@
+[GBA1]
+Device = XInput2/0/Virtual core pointer
+Buttons/B = `Z`
+Buttons/A = `X`
+Buttons/L = `Q`
+Buttons/R = `W`
+Buttons/SELECT = `Backspace`
+Buttons/START = `Return`
+D-Pad/Up = `T`
+D-Pad/Down = `G`
+D-Pad/Left = `F`
+D-Pad/Right = `H`
+[GBA2]
+Device = XInput2/0/Virtual core pointer
+[GBA3]
+Device = XInput2/0/Virtual core pointer
+[GBA4]
+Device = XInput2/0/Virtual core pointer
diff --git a/emu-configs/defaults/primehack/GCKeyNew.ini b/emu-configs/defaults/primehack/GCKeyNew.ini
new file mode 100644
index 00000000..dcdb8ce3
--- /dev/null
+++ b/emu-configs/defaults/primehack/GCKeyNew.ini
@@ -0,0 +1,93 @@
+[GCKeyboard1]
+Device = XInput2/0/Virtual core pointer
+Keys/HOME = Home
+Keys/END = End
+Keys/PGUP = Prior
+Keys/PGDN = Next
+Keys/SCR LK = Scroll_Lock
+Keys/A = A
+Keys/B = B
+Keys/C = C
+Keys/D = D
+Keys/E = E
+Keys/F = F
+Keys/G = G
+Keys/H = H
+Keys/I = I
+Keys/J = J
+Keys/K = K
+Keys/L = L
+Keys/M = M
+Keys/N = N
+Keys/O = O
+Keys/P = P
+Keys/Q = Q
+Keys/R = R
+Keys/S = S
+Keys/T = T
+Keys/U = U
+Keys/V = V
+Keys/W = W
+Keys/X = X
+Keys/Y = Y
+Keys/Z = Z
+Keys/1 = `1`
+Keys/2 = `2`
+Keys/3 = `3`
+Keys/4 = `4`
+Keys/5 = `5`
+Keys/6 = `6`
+Keys/7 = `7`
+Keys/8 = `8`
+Keys/9 = `9`
+Keys/0 = `0`
+Keys/- = minus
+Keys/` = grave
+Keys/PRT SC = Print
+Keys/' = apostrophe
+Keys/[ = bracketleft
+Keys/EQUALS = equal
+Keys/* = KP_Multiply
+Keys/] = bracketright
+Keys/, = comma
+Keys/. = period
+Keys// = slash
+Keys/\ = backslash
+Keys/F1 = F1
+Keys/F2 = F2
+Keys/F3 = F3
+Keys/F4 = F4
+Keys/F5 = F5
+Keys/F6 = F6
+Keys/F7 = F7
+Keys/F8 = F8
+Keys/F9 = F9
+Keys/F10 = F10
+Keys/F11 = F11
+Keys/F12 = F12
+Keys/ESC = Escape
+Keys/INSERT = Insert
+Keys/DELETE = Delete
+Keys/; = semicolon
+Keys/BACKSPACE = BackSpace
+Keys/TAB = Tab
+Keys/CAPS LOCK = Caps_Lock
+Keys/L SHIFT = Shift_L
+Keys/R SHIFT = Shift_R
+Keys/L CTRL = Control_L
+Keys/R ALT = Alt_R
+Keys/L WIN = Super_L
+Keys/SPACE = space
+Keys/R WIN = Super_R
+Keys/MENU = Menu
+Keys/LEFT = Left
+Keys/DOWN = Down
+Keys/UP = Up
+Keys/RIGHT = Right
+Keys/ENTER = Return
+[GCKeyboard2]
+Device = XInput2/0/Virtual core pointer
+[GCKeyboard3]
+Device = XInput2/0/Virtual core pointer
+[GCKeyboard4]
+Device = XInput2/0/Virtual core pointer
diff --git a/emu-configs/defaults/primehack/GCPadNew.ini b/emu-configs/defaults/primehack/GCPadNew.ini
new file mode 100644
index 00000000..edb3b23b
--- /dev/null
+++ b/emu-configs/defaults/primehack/GCPadNew.ini
@@ -0,0 +1,41 @@
+[GCPad1]
+Device = XInput2/0/Virtual core pointer
+Buttons/A = `Click 1` | RETURN
+Buttons/B = space
+Buttons/X = Ctrl
+Buttons/Y = F
+Buttons/Z = Tab
+Buttons/Start = grave
+Main Stick/Up = W | Up
+Main Stick/Down = S | Down
+Main Stick/Left = A | Left
+Main Stick/Right = D | Right
+Main Stick/Modifier/Range = 50.0
+Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+C-Stick/Up = !E & `1`
+C-Stick/Down = !E & `3`
+C-Stick/Left = !E & `4`
+C-Stick/Right = !E & `2`
+C-Stick/Modifier/Range = 50.0
+C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+Triggers/L = `Click 3`
+D-Pad/Up = E & `1`
+D-Pad/Down = E & `3`
+D-Pad/Left = E & `2`
+D-Pad/Right = E & `4`
+Camera Control/Modifier/Range = 50.0
+[GCPad2]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
+[GCPad3]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
+[GCPad4]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
diff --git a/emu-configs/defaults/primehack/Logger.ini b/emu-configs/defaults/primehack/Logger.ini
new file mode 100644
index 00000000..9021eeae
--- /dev/null
+++ b/emu-configs/defaults/primehack/Logger.ini
@@ -0,0 +1,58 @@
+[Logs]
+ActionReplay = False
+AI = False
+Audio = False
+BOOT = False
+CI = False
+COMMON = False
+CONSOLE = False
+CORE = False
+CP = False
+DIO = False
+DSP = False
+DSPHLE = False
+DSPLLE = False
+DSPMails = False
+DVD = False
+EXI = False
+FileMon = False
+FRAMEDUMP = False
+GDB_STUB = False
+GP = False
+HLE = False
+Host GPU = False
+HSP = False
+IOS = False
+IOS_DI = False
+IOS_ES = False
+IOS_FS = False
+IOS_NET = False
+IOS_SD = False
+IOS_SSL = False
+IOS_STM = False
+IOS_USB = False
+IOS_WC24 = False
+IOS_WFS = False
+IOS_WIIMOTE = False
+JIT = False
+MASTER = False
+MemCard Manager = False
+MI = False
+NETPLAY = False
+OSREPORT = False
+OSREPORT_HLE = False
+PE = False
+PI = False
+PowerPC = False
+SI = False
+SP1 = False
+SYMBOLS = False
+VI = False
+Video = False
+WII_IPC = False
+Wiimote = False
+[Options]
+Verbosity = 1
+WriteToConsole = True
+WriteToFile = False
+WriteToWindow = True
diff --git a/emu-configs/defaults/primehack/Qt.ini b/emu-configs/defaults/primehack/Qt.ini
new file mode 100644
index 00000000..4b5f0311
--- /dev/null
+++ b/emu-configs/defaults/primehack/Qt.ini
@@ -0,0 +1,90 @@
+[breakpointwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[cheatsmanager]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[codewidget]
+boxsplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x4\0\0\0\x8d\0\0\0\x8d\0\0\0\x8d\0\0\0\x8d\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
+codesplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\x8b\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3)
+
+[debugger]
+showcode=true
+
+[gamelist]
+autorefresh=true
+
+[gridview]
+scale=@Variant(\0\0\0\x87?\x80\0\0)
+
+[jitwidget]
+asmsplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0W\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+tablesplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0W\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
+
+[logconfigwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[logging]
+font=0
+wraplines=false
+
+[logwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[mainwindow]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\xf0\0\0\0\\\0\0\x4\xf\0\0\x3l\0\0\0\xf0\0\0\0y\0\0\x4\xf\0\0\x3l\0\0\0\0\0\0\0\0\x5\0\0\0\0\xf0\0\0\0y\0\0\x4\xf\0\0\x3l)
+state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\0\0\0\x1\x8f\0\0\x2\x80\xfc\x2\0\0\0\x1\xfc\0\0\0t\0\0\x2\x80\0\0\0\0\0\xff\xff\xff\xfa\xff\xff\xff\xff\x2\0\0\0\n\xfb\0\0\0\x6\0l\0o\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\0\xb1\x1\0\0\x3\xfb\0\0\0\x12\0l\0o\0g\0\x63\0o\0n\0\x66\0i\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x1b\x1\0\0\x3\xfb\0\0\0\b\0\x63\0o\0\x64\0\x65\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x80\x1\0\0\x3\xfb\0\0\0\x12\0r\0\x65\0g\0i\0s\0t\0\x65\0r\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0}\x1\0\0\x3\xfb\0\0\0\xe\0t\0h\0r\0\x65\0\x61\0\x64\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x91\x1\0\0\x3\xfb\0\0\0\n\0w\0\x61\0t\0\x63\0h\0\0\0\0\0\xff\xff\xff\xff\0\0\0\xab\x1\0\0\x3\xfb\0\0\0\x16\0\x62\0r\0\x65\0\x61\0k\0p\0o\0i\0n\0t\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0\xab\x1\0\0\x3\xfb\0\0\0\f\0m\0\x65\0m\0o\0r\0y\0\0\0\0\0\xff\xff\xff\xff\0\0\0}\x1\0\0\x3\xfb\0\0\0\xe\0n\0\x65\0t\0w\0o\0r\0k\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x92\x1\0\0\x3\xfb\0\0\0\x12\0j\0i\0t\0w\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\x1\x1\x1\0\0\x3\0\0\x3 \0\0\x2\x80\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\xe\0t\0o\0o\0l\0\x62\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
+
+[memorywidget]
+addrspace_auxiliary=false
+addrspace_effective=true
+addrspace_physical=false
+bplog=true
+bpread=false
+bpreadwrite=true
+bpwrite=false
+display_type=1
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+inputcombo=1
+splitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\xff\xff\xff\xff\xff\xff\xff\xff\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+
+[netplaydialog]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3)
+splitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\xa5\0\0\0\xd7\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+
+[networkwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[registerwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[renderwidget]
+geometry=@ByteArray()
+
+[tableheader]
+state=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x2\x1\0\0\0\0\0\0\0\0\0\0\0\xe(?\0\0\0\b\0\0\0\n\0\0\0\x64\0\0\0\x5\0\0\0\x46\0\0\0\x3\0\0\0\x64\0\0\0\r\0\0\0\x64\0\0\0\f\0\0\0\x64\0\0\0\t\0\0\0\x64\0\0\0\b\0\0\0\x64\0\0\0\v\0\0\0\x64\0\0\x3\v\0\0\0\xe\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\0\0\0&\0\0\0\x84\0\0\0\0\0\0\0\xe\0\0\0&\0\0\0\x1\0\0\0\x2\0\0\0\x66\0\0\0\x1\0\0\0\x2\0\0\x1\x2\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x1\x2\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0&\0\0\0\x1\0\0\0\x2\0\0\0U\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\0)
+
+[threadwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[toolbar]
+visible=true
+
+[userstyle]
+enabled=false
+name=
+
+[watchwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
diff --git a/emu-configs/defaults/primehack/WiimoteNew.ini b/emu-configs/defaults/primehack/WiimoteNew.ini
new file mode 100644
index 00000000..af2be94b
--- /dev/null
+++ b/emu-configs/defaults/primehack/WiimoteNew.ini
@@ -0,0 +1,101 @@
+[Wiimote1]
+Device = XInput2/0/Virtual core pointer
+Buttons/A = `Click 1` | RETURN
+Buttons/B = space
+Buttons/1 = Tab
+Buttons/2 = `grave`
+Buttons/- = E
+Buttons/+ = R
+Tilt/Modifier/Range = 50.0
+IMUIR/Enabled = False
+Extension = Nunchuk
+Nunchuk/Buttons/C = Ctrl
+Nunchuk/Buttons/Z = `Click 3`
+Nunchuk/Stick/Up = W | UP
+Nunchuk/Stick/Down = S | DOWN
+Nunchuk/Stick/Left = A | LEFT
+Nunchuk/Stick/Right = D | RIGHT
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+Nunchuk/Tilt/Modifier/Range = 50.0
+Nunchuk/Shake/Y = LSHIFT & (`Axis Y-` | `Axis Y+` | `Axis X-` | `Axis X+`)
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+D-Pad/Down = F
+PrimeHack/Beam 1 = `1` & !E
+PrimeHack/Beam 2 = `2` & !E
+PrimeHack/Beam 3 = `3` & !E
+PrimeHack/Beam 4 = `4` & !E
+PrimeHack/Next Beam = !E & `Axis Z+`
+PrimeHack/Previous Beam = !E & `Axis Z-`
+PrimeHack/Visor 1 = E & (!`1` & !`2` & !`3`)
+PrimeHack/Visor 2 = E & `1`
+PrimeHack/Visor 3 = E & `2`
+PrimeHack/Visor 4 = E & `3`
+PrimeHack/Next Visor = E & `Axis Z+`
+PrimeHack/Previous Visor = E & `Axis Z-`
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+PrimeHack/Spring Ball = Alt
+PrimeHack/Grapple Lasso = Shift
+[Wiimote2]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[Wiimote3]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[Wiimote4]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[BalanceBoard]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
diff --git a/emu-configs/primehack/Dolphin.ini b/emu-configs/primehack/Dolphin.ini
new file mode 100644
index 00000000..8b4df327
--- /dev/null
+++ b/emu-configs/primehack/Dolphin.ini
@@ -0,0 +1,70 @@
+[Analytics]
+ID = 0d7f9276eb4e2200f7454c1bf3d780e0
+Enabled = False
+[Core]
+InitialPrimeHackRun = True
+SIDevice0 = 7
+SIDevice1 = 0
+SIDevice2 = 0
+SIDevice3 = 0
+AutoDiscChange = False
+CPUThread = True
+EnableCheats = False
+OverrideRegionSettings = False
+EnablePrimeHack = True
+EmulationSpeed = 1.0
+FallbackRegion = 1
+AudioStretch = False
+AudioStretchMaxLatency = 80
+CPUCore = 1
+DPL2Decoder = False
+DPL2Quality = 2
+DSPHLE = True
+EnableCustomRTC = False
+MMU = False
+OverclockEnable = False
+RAMOverrideEnable = False
+SelectedLanguage = 0
+SerialPort1 = 255
+SkipIPL = True
+SlotA = 8
+SlotB = 255
+WiiKeyboard = False
+WiiSDCard = True
+WiiSDCardAllowWrites = True
+WiiSDCardEnableFolderSync = False
+[NetPlay]
+TraversalChoice = direct
+[General]
+UseDiscordPresence = True
+HotkeysRequireFocus = True
+UseGameCovers = False
+RecursiveISOPaths = False
+ISOPath0 = /home/deck/retrodeck/roms/gc
+ISOPaths = 1
+[Display]
+DisableScreenSaver = True
+KeepWindowOnTop = False
+[Interface]
+ConfirmStop = True
+LanguageCode =
+OnScreenDisplayMessages = True
+PauseOnFocusLost = False
+ShowActiveTitle = True
+UseBuiltinTitleDatabase = True
+UsePanicHandlers = False
+ThemeName = Clean
+DebugModeEnabled = False
+CursorVisibility = 2
+[DSP]
+Backend = No Audio Output
+EnableJIT = False
+[GBA]
+BIOS = /var/data/primehack/GBA/gba_bios.bin
+Rom1 =
+Rom2 =
+Rom3 =
+Rom4 =
+SavesInRomPath = False
+SavesPath = /var/data/primehack/GBA/Saves/
+Threads = True
diff --git a/emu-configs/primehack/FreeLookController.ini b/emu-configs/primehack/FreeLookController.ini
new file mode 100644
index 00000000..0a03c416
--- /dev/null
+++ b/emu-configs/primehack/FreeLookController.ini
@@ -0,0 +1,22 @@
+[FreeLook1]
+Device = XInput2/0/Virtual core pointer
+Move/Up = @(Shift+E)
+Move/Down = @(Shift+Q)
+Move/Left = @(Shift+A)
+Move/Right = @(Shift+D)
+Move/Forward = @(Shift+W)
+Move/Backward = @(Shift+S)
+Speed/Decrease = @(Shift+`1`)
+Speed/Increase = @(Shift+`2`)
+Speed/Reset = @(Shift+F)
+Other/Reset View = @(Shift+R)
+Field of View/Increase X = @(Shift+`Axis Z+`)
+Field of View/Decrease X = @(Shift+`Axis Z-`)
+Field of View/Increase Y = @(Shift+`Axis Z+`)
+Field of View/Decrease Y = @(Shift+`Axis Z-`)
+Incremental Rotation/Pitch Up = if(`Click 3`,`RelativeMouse Y-` * 0.10, 0)
+Incremental Rotation/Pitch Down = if(`Click 3`,`RelativeMouse Y+` * 0.10, 0)
+Incremental Rotation/Roll Left = if(`Click 2`,`RelativeMouse X-` * 0.10, 0)
+Incremental Rotation/Roll Right = if(`Click 2`,`RelativeMouse X+` * 0.10, 0)
+Incremental Rotation/Yaw Left = if(`Click 3`,`RelativeMouse X-` * 0.10, 0)
+Incremental Rotation/Yaw Right = if(`Click 3`,`RelativeMouse X+` * 0.10, 0)
diff --git a/emu-configs/primehack/GBA.ini b/emu-configs/primehack/GBA.ini
new file mode 100644
index 00000000..3afa86fc
--- /dev/null
+++ b/emu-configs/primehack/GBA.ini
@@ -0,0 +1,18 @@
+[GBA1]
+Device = XInput2/0/Virtual core pointer
+Buttons/B = `Z`
+Buttons/A = `X`
+Buttons/L = `Q`
+Buttons/R = `W`
+Buttons/SELECT = `Backspace`
+Buttons/START = `Return`
+D-Pad/Up = `T`
+D-Pad/Down = `G`
+D-Pad/Left = `F`
+D-Pad/Right = `H`
+[GBA2]
+Device = XInput2/0/Virtual core pointer
+[GBA3]
+Device = XInput2/0/Virtual core pointer
+[GBA4]
+Device = XInput2/0/Virtual core pointer
diff --git a/emu-configs/primehack/GCKeyNew.ini b/emu-configs/primehack/GCKeyNew.ini
new file mode 100644
index 00000000..dcdb8ce3
--- /dev/null
+++ b/emu-configs/primehack/GCKeyNew.ini
@@ -0,0 +1,93 @@
+[GCKeyboard1]
+Device = XInput2/0/Virtual core pointer
+Keys/HOME = Home
+Keys/END = End
+Keys/PGUP = Prior
+Keys/PGDN = Next
+Keys/SCR LK = Scroll_Lock
+Keys/A = A
+Keys/B = B
+Keys/C = C
+Keys/D = D
+Keys/E = E
+Keys/F = F
+Keys/G = G
+Keys/H = H
+Keys/I = I
+Keys/J = J
+Keys/K = K
+Keys/L = L
+Keys/M = M
+Keys/N = N
+Keys/O = O
+Keys/P = P
+Keys/Q = Q
+Keys/R = R
+Keys/S = S
+Keys/T = T
+Keys/U = U
+Keys/V = V
+Keys/W = W
+Keys/X = X
+Keys/Y = Y
+Keys/Z = Z
+Keys/1 = `1`
+Keys/2 = `2`
+Keys/3 = `3`
+Keys/4 = `4`
+Keys/5 = `5`
+Keys/6 = `6`
+Keys/7 = `7`
+Keys/8 = `8`
+Keys/9 = `9`
+Keys/0 = `0`
+Keys/- = minus
+Keys/` = grave
+Keys/PRT SC = Print
+Keys/' = apostrophe
+Keys/[ = bracketleft
+Keys/EQUALS = equal
+Keys/* = KP_Multiply
+Keys/] = bracketright
+Keys/, = comma
+Keys/. = period
+Keys// = slash
+Keys/\ = backslash
+Keys/F1 = F1
+Keys/F2 = F2
+Keys/F3 = F3
+Keys/F4 = F4
+Keys/F5 = F5
+Keys/F6 = F6
+Keys/F7 = F7
+Keys/F8 = F8
+Keys/F9 = F9
+Keys/F10 = F10
+Keys/F11 = F11
+Keys/F12 = F12
+Keys/ESC = Escape
+Keys/INSERT = Insert
+Keys/DELETE = Delete
+Keys/; = semicolon
+Keys/BACKSPACE = BackSpace
+Keys/TAB = Tab
+Keys/CAPS LOCK = Caps_Lock
+Keys/L SHIFT = Shift_L
+Keys/R SHIFT = Shift_R
+Keys/L CTRL = Control_L
+Keys/R ALT = Alt_R
+Keys/L WIN = Super_L
+Keys/SPACE = space
+Keys/R WIN = Super_R
+Keys/MENU = Menu
+Keys/LEFT = Left
+Keys/DOWN = Down
+Keys/UP = Up
+Keys/RIGHT = Right
+Keys/ENTER = Return
+[GCKeyboard2]
+Device = XInput2/0/Virtual core pointer
+[GCKeyboard3]
+Device = XInput2/0/Virtual core pointer
+[GCKeyboard4]
+Device = XInput2/0/Virtual core pointer
diff --git a/emu-configs/primehack/GCPadNew.ini b/emu-configs/primehack/GCPadNew.ini
new file mode 100644
index 00000000..9579f8ef
--- /dev/null
+++ b/emu-configs/primehack/GCPadNew.ini
@@ -0,0 +1,44 @@
+[GCPad1]
+Device = SDL/0/Microsoft X-Box 360 pad 0
+Buttons/A = `Button 0`
+Buttons/B = `Button 1`
+Buttons/X = `Button 2`
+Buttons/Y = `Button 3`
+Buttons/Z = `Button 6`
+Buttons/Start = `Button 7`
+Main Stick/Up = `Axis 4-`
+Main Stick/Down = `Axis 4+`
+Main Stick/Left = `Axis 3-`
+Main Stick/Right = `Axis 3+`
+Main Stick/Modifier/Range = 50.0
+Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+C-Stick/Up = `Axis 1-`
+C-Stick/Down = `Axis 1+`
+C-Stick/Left = `Axis 0-`
+C-Stick/Right = `Axis 0+`
+C-Stick/Modifier/Range = 50.0
+C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+Triggers/L = `Button 4`
+D-Pad/Up = `Hat 0 N`
+D-Pad/Down = `Hat 0 S`
+D-Pad/Left = `Hat 0 W`
+D-Pad/Right = `Hat 0 E`
+Camera Control/Modifier/Range = 50.0
+Triggers/L-Analog = `Full Axis 2+`
+Triggers/R-Analog = `Full Axis 5+`
+Triggers/R = `Button 5`
+[GCPad2]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
+[GCPad3]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
+[GCPad4]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
diff --git a/emu-configs/primehack/Logger.ini b/emu-configs/primehack/Logger.ini
new file mode 100644
index 00000000..9021eeae
--- /dev/null
+++ b/emu-configs/primehack/Logger.ini
@@ -0,0 +1,58 @@
+[Logs]
+ActionReplay = False
+AI = False
+Audio = False
+BOOT = False
+CI = False
+COMMON = False
+CONSOLE = False
+CORE = False
+CP = False
+DIO = False
+DSP = False
+DSPHLE = False
+DSPLLE = False
+DSPMails = False
+DVD = False
+EXI = False
+FileMon = False
+FRAMEDUMP = False
+GDB_STUB = False
+GP = False
+HLE = False
+Host GPU = False
+HSP = False
+IOS = False
+IOS_DI = False
+IOS_ES = False
+IOS_FS = False
+IOS_NET = False
+IOS_SD = False
+IOS_SSL = False
+IOS_STM = False
+IOS_USB = False
+IOS_WC24 = False
+IOS_WFS = False
+IOS_WIIMOTE = False
+JIT = False
+MASTER = False
+MemCard Manager = False
+MI = False
+NETPLAY = False
+OSREPORT = False
+OSREPORT_HLE = False
+PE = False
+PI = False
+PowerPC = False
+SI = False
+SP1 = False
+SYMBOLS = False
+VI = False
+Video = False
+WII_IPC = False
+Wiimote = False
+[Options]
+Verbosity = 1
+WriteToConsole = True
+WriteToFile = False
+WriteToWindow = True
diff --git a/emu-configs/primehack/Profiles/GCPad/Steam Virtual Controller.ini b/emu-configs/primehack/Profiles/GCPad/Steam Virtual Controller.ini
new file mode 100644
index 00000000..7320c1f6
--- /dev/null
+++ b/emu-configs/primehack/Profiles/GCPad/Steam Virtual Controller.ini	
@@ -0,0 +1,29 @@
+[Profile]
+Device = SDL/0/Microsoft X-Box 360 pad 0
+Buttons/A = `Button 0`
+Buttons/B = `Button 1`
+Buttons/X = `Button 2`
+Buttons/Y = `Button 3`
+Buttons/Z = `Button 6`
+Buttons/Start = `Button 7`
+Main Stick/Up = `Axis 4-`
+Main Stick/Down = `Axis 4+`
+Main Stick/Left = `Axis 3-`
+Main Stick/Right = `Axis 3+`
+Main Stick/Modifier/Range = 50.0
+Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+C-Stick/Up = `Axis 1-`
+C-Stick/Down = `Axis 1+`
+C-Stick/Left = `Axis 0-`
+C-Stick/Right = `Axis 0+`
+C-Stick/Modifier/Range = 50.0
+C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+Triggers/L = `Button 4`
+Triggers/R = `Button 5`
+Triggers/L-Analog = `Full Axis 2+`
+Triggers/R-Analog = `Full Axis 5+`
+D-Pad/Up = `Hat 0 N`
+D-Pad/Down = `Hat 0 S`
+D-Pad/Left = `Hat 0 W`
+D-Pad/Right = `Hat 0 E`
+Camera Control/Modifier/Range = 50.0
diff --git a/emu-configs/primehack/Qt.ini b/emu-configs/primehack/Qt.ini
new file mode 100644
index 00000000..c9114c35
--- /dev/null
+++ b/emu-configs/primehack/Qt.ini
@@ -0,0 +1,90 @@
+[breakpointwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[cheatsmanager]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[codewidget]
+boxsplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x4\0\0\0\x8d\0\0\0\x8d\0\0\0\x8d\0\0\0\x8d\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
+codesplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\x8b\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3)
+
+[debugger]
+showcode=true
+
+[gamelist]
+autorefresh=true
+
+[gridview]
+scale=@Variant(\0\0\0\x87?\x80\0\0)
+
+[jitwidget]
+asmsplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0W\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+tablesplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0W\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
+
+[logconfigwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[logging]
+font=0
+wraplines=false
+
+[logwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[mainwindow]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\x1f\0\0\x2\xcc\0\0\0\0\0\0\0\0\0\0\x3\x1f\0\0\x2\xcc\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\0\0\0\x3\x1f\0\0\x2\xcc)
+state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\0\0\0\x1\x8f\0\0\x2\x80\xfc\x2\0\0\0\x1\xfc\0\0\0t\0\0\x2\x80\0\0\0\0\0\xff\xff\xff\xfa\xff\xff\xff\xff\x2\0\0\0\n\xfb\0\0\0\x6\0l\0o\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x88\0\xff\xff\xff\xfb\0\0\0\x12\0l\0o\0g\0\x63\0o\0n\0\x66\0i\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\x1\xc3\0\xff\xff\xff\xfb\0\0\0\b\0\x63\0o\0\x64\0\x65\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x2\0\xff\xff\xff\xfb\0\0\0\x12\0r\0\x65\0g\0i\0s\0t\0\x65\0r\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0]\0\xff\xff\xff\xfb\0\0\0\xe\0t\0h\0r\0\x65\0\x61\0\x64\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x14\0\xff\xff\xff\xfb\0\0\0\n\0w\0\x61\0t\0\x63\0h\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x84\0\xff\xff\xff\xfb\0\0\0\x16\0\x62\0r\0\x65\0\x61\0k\0p\0o\0i\0n\0t\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x84\0\xff\xff\xff\xfb\0\0\0\f\0m\0\x65\0m\0o\0r\0y\0\0\0\0\0\xff\xff\xff\xff\0\0\0]\0\xff\xff\xff\xfb\0\0\0\xe\0n\0\x65\0t\0w\0o\0r\0k\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x1d\0\xff\xff\xff\xfb\0\0\0\x12\0j\0i\0t\0w\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0\xc4\0\xff\xff\xff\0\0\x3 \0\0\x2w\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\xe\0t\0o\0o\0l\0\x62\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
+
+[memorywidget]
+addrspace_auxiliary=false
+addrspace_effective=true
+addrspace_physical=false
+bplog=true
+bpread=false
+bpreadwrite=true
+bpwrite=false
+display_type=1
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+inputcombo=1
+splitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\xff\xff\xff\xff\xff\xff\xff\xff\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+
+[netplaydialog]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3)
+splitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\xa5\0\0\0\xd7\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+
+[networkwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[registerwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[renderwidget]
+geometry=@ByteArray()
+
+[tableheader]
+state=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x2\x1\0\0\0\0\0\0\0\0\0\0\0\xe(?\0\0\0\b\0\0\0\t\0\0\0\x64\0\0\0\b\0\0\0\x64\0\0\0\v\0\0\0\x64\0\0\0\n\0\0\0\x64\0\0\0\r\0\0\0\x64\0\0\0\f\0\0\0\x64\0\0\0\x3\0\0\0\x64\0\0\0\x5\0\0\0\x46\0\0\x3\x13\0\0\0\xe\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\0\0\0&\0\0\0\x84\0\0\0\0\0\0\0\xe\0\0\0&\0\0\0\x1\0\0\0\x2\0\0\0\x66\0\0\0\x1\0\0\0\x2\0\0\x1\x6\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x1\x6\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0&\0\0\0\x1\0\0\0\x2\0\0\0U\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\0)
+
+[threadwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[toolbar]
+visible=true
+
+[userstyle]
+enabled=false
+name=
+
+[watchwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
diff --git a/emu-configs/primehack/WiimoteNew.ini b/emu-configs/primehack/WiimoteNew.ini
new file mode 100644
index 00000000..af2be94b
--- /dev/null
+++ b/emu-configs/primehack/WiimoteNew.ini
@@ -0,0 +1,101 @@
+[Wiimote1]
+Device = XInput2/0/Virtual core pointer
+Buttons/A = `Click 1` | RETURN
+Buttons/B = space
+Buttons/1 = Tab
+Buttons/2 = `grave`
+Buttons/- = E
+Buttons/+ = R
+Tilt/Modifier/Range = 50.0
+IMUIR/Enabled = False
+Extension = Nunchuk
+Nunchuk/Buttons/C = Ctrl
+Nunchuk/Buttons/Z = `Click 3`
+Nunchuk/Stick/Up = W | UP
+Nunchuk/Stick/Down = S | DOWN
+Nunchuk/Stick/Left = A | LEFT
+Nunchuk/Stick/Right = D | RIGHT
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+Nunchuk/Tilt/Modifier/Range = 50.0
+Nunchuk/Shake/Y = LSHIFT & (`Axis Y-` | `Axis Y+` | `Axis X-` | `Axis X+`)
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+D-Pad/Down = F
+PrimeHack/Beam 1 = `1` & !E
+PrimeHack/Beam 2 = `2` & !E
+PrimeHack/Beam 3 = `3` & !E
+PrimeHack/Beam 4 = `4` & !E
+PrimeHack/Next Beam = !E & `Axis Z+`
+PrimeHack/Previous Beam = !E & `Axis Z-`
+PrimeHack/Visor 1 = E & (!`1` & !`2` & !`3`)
+PrimeHack/Visor 2 = E & `1`
+PrimeHack/Visor 3 = E & `2`
+PrimeHack/Visor 4 = E & `3`
+PrimeHack/Next Visor = E & `Axis Z+`
+PrimeHack/Previous Visor = E & `Axis Z-`
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+PrimeHack/Spring Ball = Alt
+PrimeHack/Grapple Lasso = Shift
+[Wiimote2]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[Wiimote3]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[Wiimote4]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[BalanceBoard]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
diff --git a/emu-configs/yuzu/qt-config.ini b/emu-configs/yuzu/qt-config.ini
index 166892cc..28d4ca15 100644
--- a/emu-configs/yuzu/qt-config.ini
+++ b/emu-configs/yuzu/qt-config.ini
@@ -86,59 +86,59 @@ player_0_body_color_left=4278893030
 player_0_body_color_left\default=false
 player_0_body_color_right=4294917160
 player_0_body_color_right\default=false
-player_0_button_a="toggle:0,code:67,engine:keyboard"
-player_0_button_a\default=true
-player_0_button_b="toggle:0,code:88,engine:keyboard"
-player_0_button_b\default=true
+player_0_button_a="button:1,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_a\default=false
+player_0_button_b="button:0,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_b\default=false
 player_0_button_color_left=4278197790
 player_0_button_color_left\default=false
 player_0_button_color_right=4280158730
 player_0_button_color_right\default=false
-player_0_button_ddown="toggle:0,code:16777237,engine:keyboard"
-player_0_button_ddown\default=true
-player_0_button_dleft="toggle:0,code:16777234,engine:keyboard"
-player_0_button_dleft\default=true
-player_0_button_dright="toggle:0,code:16777236,engine:keyboard"
-player_0_button_dright\default=true
-player_0_button_dup="toggle:0,code:16777235,engine:keyboard"
-player_0_button_dup\default=true
-player_0_button_home="engine:keyboard,port:0,pad:0,code:82"
+player_0_button_ddown="hat:0,direction:down,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_ddown\default=false
+player_0_button_dleft="hat:0,direction:left,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_dleft\default=false
+player_0_button_dright="hat:0,direction:right,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_dright\default=false
+player_0_button_dup="hat:0,direction:up,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_dup\default=false
+player_0_button_home="button:8,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
 player_0_button_home\default=false
-player_0_button_l="toggle:0,code:81,engine:keyboard"
-player_0_button_l\default=true
-player_0_button_lstick="toggle:0,code:70,engine:keyboard"
-player_0_button_lstick\default=true
-player_0_button_minus="toggle:0,code:78,engine:keyboard"
-player_0_button_minus\default=true
-player_0_button_plus="toggle:0,code:77,engine:keyboard"
-player_0_button_plus\default=true
-player_0_button_r="toggle:0,code:69,engine:keyboard"
-player_0_button_r\default=true
-player_0_button_rstick="toggle:0,code:71,engine:keyboard"
-player_0_button_rstick\default=true
-player_0_button_screenshot="toggle:0,code:0,engine:keyboard"
-player_0_button_screenshot\default=true
-player_0_button_sl="toggle:0,code:81,engine:keyboard"
-player_0_button_sl\default=true
-player_0_button_sr="toggle:0,code:69,engine:keyboard"
-player_0_button_sr\default=true
-player_0_button_x="toggle:0,code:86,engine:keyboard"
-player_0_button_x\default=true
-player_0_button_y="toggle:0,code:90,engine:keyboard"
-player_0_button_y\default=true
-player_0_button_zl="toggle:0,code:82,engine:keyboard"
-player_0_button_zl\default=true
-player_0_button_zr="toggle:0,code:84,engine:keyboard"
-player_0_button_zr\default=true
+player_0_button_l="button:4,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_l\default=false
+player_0_button_lstick="button:9,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_lstick\default=false
+player_0_button_minus="button:6,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_minus\default=false
+player_0_button_plus="button:7,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_plus\default=false
+player_0_button_r="button:5,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_r\default=false
+player_0_button_rstick="button:10,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_rstick\default=false
+player_0_button_screenshot=[empty]
+player_0_button_screenshot\default=false
+player_0_button_sl="button:4,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_sl\default=false
+player_0_button_sr="button:5,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_sr\default=false
+player_0_button_x="button:3,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_x\default=false
+player_0_button_y="button:2,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_y\default=false
+player_0_button_zl="threshold:0.500000,axis:2,guid:03000000de280000ff11000001000000,port:0,invert:+,engine:sdl"
+player_0_button_zl\default=false
+player_0_button_zr="threshold:0.500000,axis:5,guid:03000000de280000ff11000001000000,port:0,invert:+,engine:sdl"
+player_0_button_zr\default=false
 player_0_connected=true
 player_0_connected\default=true
-player_0_lstick="modifier_scale:0.500000,engine:analog_from_button,up:engine$0keyboard$1code$087$1toggle$00,down:engine$0keyboard$1code$083$1toggle$00,left:engine$0keyboard$1code$065$1toggle$00,right:engine$0keyboard$1code$068$1toggle$00,modifier:toggle$00$1code$016777248$1engine$0keyboard"
+player_0_lstick="deadzone:0.150000,invert_y:+,invert_x:+,offset_y:0.000000,axis_y:1,offset_x:-0.000000,axis_x:0,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
 player_0_lstick\default=false
-player_0_motionleft="toggle:0,code:55,engine:keyboard"
-player_0_motionleft\default=true
-player_0_motionright="toggle:0,code:56,engine:keyboard"
-player_0_motionright\default=true
-player_0_rstick="modifier_scale:0.500000,engine:analog_from_button,up:engine$0keyboard$1code$073$1toggle$00,down:engine$0keyboard$1code$075$1toggle$00,left:engine$0keyboard$1code$074$1toggle$00,right:engine$0keyboard$1code$076$1toggle$00,modifier:toggle$00$1code$00$1engine$0keyboard"
+player_0_motionleft=[empty]
+player_0_motionleft\default=false
+player_0_motionright=[empty]
+player_0_motionright\default=false
+player_0_rstick="deadzone:0.150000,invert_y:+,invert_x:+,offset_y:-0.063723,axis_y:4,offset_x:-0.024476,axis_x:3,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
 player_0_rstick\default=false
 player_0_type=0
 player_0_type\default=true
diff --git a/functions.sh b/functions.sh
index 29de20bc..b5c197b9 100644
--- a/functions.sh
+++ b/functions.sh
@@ -171,7 +171,7 @@ get_setting_value() {
     if [[ -z $current_section_name ]]; then
       echo $(grep -o -P "(?<=^$current_setting_name=).*" $1)
     else
-      sed -n '\^\['"$section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name=).*"
+      sed -n '\^\['"$current_section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name=).*"
     fi
   ;;
 
@@ -179,7 +179,7 @@ get_setting_value() {
     if [[ -z $current_section_name ]]; then
       echo $(grep -o -P "(?<=^$current_setting_name = \").*(?=\")" $1)
     else
-      sed -n '\^\['"$section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = \").*(?=\")"
+      sed -n '\^\['"$current_section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = \").*(?=\")"
     fi
   ;;
 
@@ -187,7 +187,7 @@ get_setting_value() {
     if [[ -z $current_section_name ]]; then
       echo $(grep -o -P "(?<=^$current_setting_name = ).*" $1)
     else
-      sed -n '\^\['"$section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = ).*"
+      sed -n '\^\['"$current_section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = ).*"
     fi
   ;;
 
@@ -195,7 +195,7 @@ get_setting_value() {
     if [[ -z $current_section_name ]]; then
       echo $(grep -o -P "(?<=$current_setting_name: ).*" $1)
     else
-      sed -n '\^\['"$section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=$current_setting_name: ).*"
+      sed -n '\^\['"$current_section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=$current_setting_name: ).*"
     fi
   ;;
 
@@ -219,7 +219,7 @@ add_setting() {
     if [[ -z $current_section_name ]]; then
       sed -i '$ a '"$current_setting_line"'' $1
     else
-      sed -i '/^\s*?\['"$current_section_name"'\]|\b'"$current_section"':$/a '"$current_setting_line"'' $1
+      sed -i '/^\s*?\['"$current_section_name"'\]|\b'"$current_section_name"':$/a '"$current_setting_line"'' $1
     fi
     ;;
 
@@ -239,7 +239,7 @@ disable_setting() {
     if [[ -z $current_section_name ]]; then
       sed -i -E 's^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' $1
     else
-      sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section"':$^,\^\s*?'"$current_setting_line"'^s^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' $1
+      sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?'"$current_setting_line"'^s^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' $1
     fi
   ;;
 
@@ -259,7 +259,7 @@ enable_setting() {
     if [[ -z $current_section_name ]]; then
       sed -i -E 's^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' $1
     else
-      sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section"':$^,\^\s*?#'"$current_setting_line"'^s^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' $1
+      sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?#'"$current_setting_line"'^s^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' $1
     fi
   ;;
 
@@ -705,6 +705,63 @@ standalones_init() {
   yuzu_init
 }
 
+ra_init() {
+  dir_prep "$rdhome/bios" "/var/config/retroarch/system"
+  dir_prep "$rdhome/.logs/retroarch" "/var/config/retroarch/logs"
+  mkdir -pv /var/config/retroarch/shaders/
+  cp -rf /app/share/libretro/shaders /var/config/retroarch/
+  dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders"
+  mkdir -pv /var/config/retroarch/cores/
+  cp -f /app/share/libretro/cores/* /var/config/retroarch/cores/
+  cp -fv $emuconfigs/retroarch/retroarch.cfg /var/config/retroarch/
+  cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg /var/config/retroarch/
+  mkdir -pv /var/config/retroarch/config/
+  cp -rf $emuconfigs/retroarch/core-overrides/* /var/config/retroarch/config
+  #rm -rf $rdhome/bios/bios # in some situations a double bios symlink is created
+  sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/retroarch/retroarch.cfg
+
+  # PPSSPP
+  echo "--------------------------------"
+  echo "Initializing PPSSPP_LIBRETRO"
+  echo "--------------------------------"
+  if [ -d $rdhome/bios/PPSSPP/flash0/font ]
+  then
+    mv -fv $rdhome/bios/PPSSPP/flash0/font $rdhome/bios/PPSSPP/flash0/font.bak
+  fi
+  mkdir -p $rdhome/bios/PPSSPP
+  #if [ ! -f "$rdhome/bios/PPSSPP/ppge_atlas.zim" ]
+  #then
+    wget "https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip" -P $rdhome/bios/PPSSPP
+    unzip -q "$rdhome/bios/PPSSPP/master.zip" -d $rdhome/bios/PPSSPP/
+    mv -f "$rdhome/bios/PPSSPP/ppsspp-master/assets/"* "$rdhome/bios/PPSSPP/"
+    rm -rfv "$rdhome/bios/PPSSPP/master.zip"
+    rm -rfv "$rdhome/bios/PPSSPP/ppsspp-master"
+  #fi
+  if [ -d $rdhome/bios/PPSSPP/flash0/font.bak ]
+  then
+    mv -fv $rdhome/bios/PPSSPP/flash0/font.bak $rdhome/bios/PPSSPP/flash0/font
+  fi
+
+  # MSX / SVI / ColecoVision / SG-1000
+  echo "-----------------------------------------------------------"
+  echo "Initializing MSX / SVI / ColecoVision / SG-1000 LIBRETRO"
+  echo "-----------------------------------------------------------"
+  wget "http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip" -P $rdhome/bios/MSX
+  unzip -q "$rdhome/bios/MSX/blueMSXv282full.zip" -d $rdhome/bios/MSX
+  mv -f $rdhome/bios/MSX/Databases $rdhome/bios/Databases
+  mv -f $rdhome/bios/MSX/Machines $rdhome/bios/Machines
+  rm -rfv $rdhome/bios/MSX
+}
+
+tools_init() {
+  rm -rfv /var/config/retrodeck/tools/
+  mkdir -pv /var/config/retrodeck/tools/
+  cp -rfv /app/retrodeck/tools/* /var/config/retrodeck/tools/
+  mkdir -pv /var/config/emulationstation/.emulationstation/custom_systems/tools/
+  rm -rfv /var/config/retrodeck/tools/gamelist.xml
+  cp -fv /app/retrodeck/tools-gamelist.xml /var/config/retrodeck/tools/gamelist.xml
+}
+
 emulators_post_move() {
   # This script will redo the symlinks for all emulators after moving the $rdhome location without resetting other options
   # FUTURE WORK: The sed commands here should be replaced with set_setting_value and dir_prep should be replaced with changing paths in config files directly where possible
@@ -774,116 +831,6 @@ emulators_post_move() {
   dir_prep "$rdhome/bios/switch/keys" "/var/config/Ryujinx/system"
 }
 
-#=========================
-# REUSABLE DIALOGS SECTION
-#=========================
-
-debug_dialog() {
-  # This function is for displaying commands run by the Configurator without actually running them
-  # USAGE: debug_dialog "command"
-
-  zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
-  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
-  --title "RetroDECK Configurator Utility - Debug Dialog" \
-  --text="$1"
-}
-
-configurator_process_complete_dialog() {
-  # This dialog shows when a process is complete.
-  # USAGE: configurator_process_complete_dialog "process text"
-  zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Quit" --extra-button="OK" \
-  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
-  --title "RetroDECK Configurator Utility - Process Complete" \
-  --text="The process of $1 is now complete.\n\nYou may need to quit and restart RetroDECK for your changes to take effect\n\nClick OK to return to the Main Menu or Quit to return to RetroDECK."
-
-  if [ ! $? == 0 ] # OK button clicked
-  then
-      configurator_welcome_dialog
-  fi
-}
-
-configurator_generic_dialog() {
-  # This dialog is for showing temporary messages before another process happens.
-  # USAGE: configurator_generid_dialog "info text"
-  zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
-  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
-  --title "RetroDECK Configurator Utility" \
-  --text="$1"
-}
-
-configurator_destination_choice_dialog() {
-  # This dialog is for making things easy for new users to move files to common locations. Gives the options for "Internal", "SD Card" and "Custom" locations.
-  # USAGE: $(configurator_destination_choice_dialog "folder being moved" "action text")
-  # This function returns one of the values: "Back" "Internal Storage" "SD Card" "Custom Location"
-  choice=$(zenity --title "RetroDECK Configurator Utility - Moving $1 folder" --info --no-wrap --ok-label="Back" --extra-button="Internal Storage" --extra-button="SD Card" --extra-button="Custom Location" \
-  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
-  --text="$2")
-
-  echo $choice
-}
-
-#=========================
-# LEGACY FUNCTIONS SECTION
-#=========================
-
-# These functions were pulled from retrodeck.sh or global.sh and should be consolidated eventually
-
-tools_init() {
-  rm -rfv /var/config/retrodeck/tools/
-  mkdir -pv /var/config/retrodeck/tools/
-  cp -rfv /app/retrodeck/tools/* /var/config/retrodeck/tools/
-  mkdir -pv /var/config/emulationstation/.emulationstation/custom_systems/tools/
-  rm -rfv /var/config/retrodeck/tools/gamelist.xml
-  cp -fv /app/retrodeck/tools-gamelist.xml /var/config/retrodeck/tools/gamelist.xml
-}
-
-ra_init() {
-  dir_prep "$rdhome/bios" "/var/config/retroarch/system"
-  dir_prep "$rdhome/.logs/retroarch" "/var/config/retroarch/logs"
-  mkdir -pv /var/config/retroarch/shaders/
-  cp -rfv /app/share/libretro/shaders /var/config/retroarch/
-  dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders"
-  mkdir -pv /var/config/retroarch/cores/
-  cp -f /app/share/libretro/cores/* /var/config/retroarch/cores/
-  cp -fv $emuconfigs/retroarch/retroarch.cfg /var/config/retroarch/
-  cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg /var/config/retroarch/
-  cp -rfv $emuconfigs/retroarch/core-overrides/* /var/config/retroarch/config
-  #rm -rf $rdhome/bios/bios # in some situations a double bios symlink is created
-  sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/retroarch/retroarch.cfg
-
-  # PPSSPP
-  echo "--------------------------------"
-  echo "Initializing PPSSPP_LIBRETRO"
-  echo "--------------------------------"
-  if [ -d $rdhome/bios/PPSSPP/flash0/font ]
-  then
-    mv -fv $rdhome/bios/PPSSPP/flash0/font $rdhome/bios/PPSSPP/flash0/font.bak
-  fi
-  mkdir -p $rdhome/bios/PPSSPP
-  #if [ ! -f "$rdhome/bios/PPSSPP/ppge_atlas.zim" ]
-  #then
-    wget "https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip" -P $rdhome/bios/PPSSPP
-    unzip -q "$rdhome/bios/PPSSPP/master.zip" -d $rdhome/bios/PPSSPP/
-    mv -f "$rdhome/bios/PPSSPP/ppsspp-master/assets/"* "$rdhome/bios/PPSSPP/"
-    rm -rfv "$rdhome/bios/PPSSPP/master.zip"
-    rm -rfv "$rdhome/bios/PPSSPP/ppsspp-master"
-  #fi
-  if [ -d $rdhome/bios/PPSSPP/flash0/font.bak ]
-  then
-    mv -fv $rdhome/bios/PPSSPP/flash0/font.bak $rdhome/bios/PPSSPP/flash0/font
-  fi
-
-  # MSX / SVI / ColecoVision / SG-1000
-  echo "-----------------------------------------------------------"
-  echo "Initializing MSX / SVI / ColecoVision / SG-1000 LIBRETRO"
-  echo "-----------------------------------------------------------"
-  wget "http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip" -P $rdhome/bios/MSX
-  unzip -q "$rdhome/bios/MSX/blueMSXv282full.zip" -d $rdhome/bios/MSX
-  mv -f $rdhome/bios/MSX/Databases $rdhome/bios/Databases
-  mv -f $rdhome/bios/MSX/Machines $rdhome/bios/Machines
-  rm -rfv $rdhome/bios/MSX
-}
-
 create_lock() {
   # creating RetroDECK's lock file and writing the version in the config file
   version=$hard_version
@@ -1083,4 +1030,52 @@ finit() {
   --title "RetroDECK" \
   --text="Installation completed.\nPlease put your roms in:\n\n$roms_folder\n\nand your bioses in\n\n$bios_folder\n\nThen start the program again.\nIf you wish to change the roms location, you may use the tool located the tools section of RetroDECK.\n\nIMPORTANT NOTES:\n- RetroDECK must be manually added and launched from your Steam Library in order to work correctly.\n- It's recommended to use the 'RetroDECK Offical Controller Config' from Steam (under community layouts).\n- It's suggested to use BoilR to automatically add the SteamGridDB images to Steam (this will be automated soon).\nhttps://github.com/PhilipK/BoilR"
   # TODO: Replace the stuff above with BoilR code when ready
+}
+
+#=========================
+# REUSABLE DIALOGS SECTION
+#=========================
+
+debug_dialog() {
+  # This function is for displaying commands run by the Configurator without actually running them
+  # USAGE: debug_dialog "command"
+
+  zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
+  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+  --title "RetroDECK Configurator Utility - Debug Dialog" \
+  --text="$1"
+}
+
+configurator_process_complete_dialog() {
+  # This dialog shows when a process is complete.
+  # USAGE: configurator_process_complete_dialog "process text"
+  zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Quit" --extra-button="OK" \
+  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+  --title "RetroDECK Configurator Utility - Process Complete" \
+  --text="The process of $1 is now complete.\n\nYou may need to quit and restart RetroDECK for your changes to take effect\n\nClick OK to return to the Main Menu or Quit to return to RetroDECK."
+
+  if [ ! $? == 0 ] # OK button clicked
+  then
+      configurator_welcome_dialog
+  fi
+}
+
+configurator_generic_dialog() {
+  # This dialog is for showing temporary messages before another process happens.
+  # USAGE: configurator_generid_dialog "info text"
+  zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
+  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+  --title "RetroDECK Configurator Utility" \
+  --text="$1"
+}
+
+configurator_destination_choice_dialog() {
+  # This dialog is for making things easy for new users to move files to common locations. Gives the options for "Internal", "SD Card" and "Custom" locations.
+  # USAGE: $(configurator_destination_choice_dialog "folder being moved" "action text")
+  # This function returns one of the values: "Back" "Internal Storage" "SD Card" "Custom Location"
+  choice=$(zenity --title "RetroDECK Configurator Utility - Moving $1 folder" --info --no-wrap --ok-label="Back" --extra-button="Internal Storage" --extra-button="SD Card" --extra-button="Custom Location" \
+  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+  --text="$2")
+
+  echo $choice
 }
\ No newline at end of file
diff --git a/net.retrodeck.retrodeck.yml b/net.retrodeck.retrodeck.yml
index d331c04c..d4fba3a0 100644
--- a/net.retrodeck.retrodeck.yml
+++ b/net.retrodeck.retrodeck.yml
@@ -181,6 +181,17 @@ modules:
         url: https://ftp.osuosl.org/pub/blfs/conglomeration/libgudev/libgudev-237.tar.xz
         sha256: 0d06b21170d20c93e4f0534dbb9b0a8b4f1119ffb00b4031aaeb5b9148b686aa
 
+  - name: chdman-tool
+    buildsystem: simple
+    build-commands:
+      - cmake -B . -G Ninja
+      - cmake --build .
+      - cp chdman /app/bin
+    sources:
+      - type: git
+        url: https://github.com/CharlesThobe/chdman.git
+        commit: f7cadf1720cbeba8a14f2685830ff424a0c7f6cd
+
   # ES-DE - START
   # https://gitlab.com/es-de/emulationstation-de
 
@@ -282,7 +293,7 @@ modules:
 
   # RetroArch - START
   # https://github.com/flathub/org.libretro.RetroArch
-  
+
   - name: retroarch
     config-opts:
       - '--enable-dbus'
diff --git a/rd-submodules/ryujinx/nuget_sources.json b/rd-submodules/ryujinx/nuget_sources.json
index 9e109970..e943cede 100644
--- a/rd-submodules/ryujinx/nuget_sources.json
+++ b/rd-submodules/ryujinx/nuget_sources.json
@@ -1,4 +1,11 @@
 [
+    {
+        "type": "file",
+        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.cairosharp/3.24.24.59-ryujinx/ryujinx.cairosharp.3.24.24.59-ryujinx.nupkg",
+        "sha512": "441db2af76714be2fa020488537f4ad9cd99c6910e9df70c4876a828e776ffa8cd910d06c9a0f5bdf26827be0a6b2c0217eac3c060f0a46be5557083ed263a75",
+        "dest": "nuget-sources",
+        "dest-filename": "ryujinx.cairosharp.3.24.24.59-ryujinx.nupkg"
+    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
@@ -8,10 +15,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.osx-x64/7.0.0/microsoft.netcore.app.host.osx-x64.7.0.0.nupkg",
-        "sha512": "a5a12fe0bcd069780a6d58bb2af0bf550c2544d967d5efb5d7d1674564b1844c2fa716e3bf5e9030a0f6ef693439e8aa66b5581ad76580258a5e9dc47e3887d2",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.osx-x64/7.0.2/microsoft.netcore.app.host.osx-x64.7.0.2.nupkg",
+        "sha512": "fdace91cf3c44efc3ccccfc06813ff773f97ada860dcea309dac1a47cf2cd44722b43e87d94fc9fae9ccd946b641662bedf1d47f89d4015d719e99563c085e61",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.netcore.app.host.osx-x64.7.0.0.nupkg"
+        "dest-filename": "microsoft.netcore.app.host.osx-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -50,17 +57,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.memory/4.5.4/system.memory.4.5.4.nupkg",
-        "sha512": "8ece5491eb0fe332bc190f40cf76b3beee0c5f996325034861be221fdb0ff02fd59e4f7020b3c4a1f29a457f76ff76c4c95d46d38555e4f48c7a3bf172d87966",
+        "url": "https://api.nuget.org/v3-flatcontainer/system.memory/4.5.5/system.memory.4.5.5.nupkg",
+        "sha512": "e8c8e536c97b94ac3443c940b30dad43cf6e97dc7a8c3d989371048fe74e168606384f5e0143bdc0d86f7783bf9fdee8417964cb3a8a5d752713e90b125172dc",
         "dest": "nuget-sources",
-        "dest-filename": "system.memory.4.5.4.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.memory/4.5.3/system.memory.4.5.3.nupkg",
-        "sha512": "70fce15a52cc76aacbae05c8e89e2e398d1d32903f63f640a7dd4a3e5747f2c7a887d4bfd22f2a2e40274906cf91648dfd169734fb7c74eb9b4f72614084e1db",
-        "dest": "nuget-sources",
-        "dest-filename": "system.memory.4.5.3.nupkg"
+        "dest-filename": "system.memory.4.5.5.nupkg"
     },
     {
         "type": "file",
@@ -71,10 +71,17 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.linux-x64/7.0.0/microsoft.aspnetcore.app.runtime.linux-x64.7.0.0.nupkg",
-        "sha512": "285817dc47116766e8f3279c0c6b7add76e1c362ed455b7d03790874bb4fab70f0507a31747a109a8afa3b80215b9c463a3d245e80ba14ee896114ef44f8892d",
+        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.glibsharp/3.24.24.59-ryujinx/ryujinx.glibsharp.3.24.24.59-ryujinx.nupkg",
+        "sha512": "0b25ed67932e8665ceff32b19f767200b2909b3b9daeaa83091ea9d98b084498fe7c610f629568722ba630dbe33f6102df9aee33ed2e86665703d62e20c43ae4",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.aspnetcore.app.runtime.linux-x64.7.0.0.nupkg"
+        "dest-filename": "ryujinx.glibsharp.3.24.24.59-ryujinx.nupkg"
+    },
+    {
+        "type": "file",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.linux-x64/7.0.2/microsoft.aspnetcore.app.runtime.linux-x64.7.0.2.nupkg",
+        "sha512": "b50f95c6609ea02b4894b9aaf4a339aa5bddbf4aaf2b14cce78d9a51ef2cb523d8ff0765d41f3476f47018b461cbbe1af152e79b181c41efd6c06c2bf894748d",
+        "dest": "nuget-sources",
+        "dest-filename": "microsoft.aspnetcore.app.runtime.linux-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -113,10 +120,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.identitymodel.tokens.jwt/6.25.0/system.identitymodel.tokens.jwt.6.25.0.nupkg",
-        "sha512": "c3b8bc78fce36c78161c4807f14091ee178be308ed487c8a2920fe22e8e1268b4d3da1e3b31c0f588a8df48c9ee93e8207768bac458298c2f52408251dfc5361",
+        "url": "https://api.nuget.org/v3-flatcontainer/system.identitymodel.tokens.jwt/6.25.1/system.identitymodel.tokens.jwt.6.25.1.nupkg",
+        "sha512": "286685f006f25c79c1df6153eb802fc0ce49f44c12f4854c870709a1c3f1f6e7ce9e433d54cd92ae19e053c52d154858d2365b73ccd855b2627f593a33c579a5",
         "dest": "nuget-sources",
-        "dest-filename": "system.identitymodel.tokens.jwt.6.25.0.nupkg"
+        "dest-filename": "system.identitymodel.tokens.jwt.6.25.1.nupkg"
     },
     {
         "type": "file",
@@ -125,6 +132,13 @@
         "dest": "nuget-sources",
         "dest-filename": "runtime.unix.microsoft.win32.primitives.4.3.0.nupkg"
     },
+    {
+        "type": "file",
+        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.gtksharp/3.24.24.59-ryujinx/ryujinx.gtksharp.3.24.24.59-ryujinx.nupkg",
+        "sha512": "35f68992f86629a3face6b13ce0e17933f6576de0279f9eeb023e44fe07dc2765ac58e2636a8a6f9fbfd66f4fc428867cc2bd5a07bd4f2ed8cd8978c4c1ef195",
+        "dest": "nuget-sources",
+        "dest-filename": "ryujinx.gtksharp.3.24.24.59-ryujinx.nupkg"
+    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.io.filesystem/4.3.0/runtime.win.system.io.filesystem.4.3.0.nupkg",
@@ -146,6 +160,13 @@
         "dest": "nuget-sources",
         "dest-filename": "runtime.unix.system.diagnostics.debug.4.3.0.nupkg"
     },
+    {
+        "type": "file",
+        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.atksharp/3.24.24.59-ryujinx/ryujinx.atksharp.3.24.24.59-ryujinx.nupkg",
+        "sha512": "6237bbfcd7f80517c9eb40d8b2ceea7586f34cc7e0aaf8e550ba6c1364d0b4bc3560a497bc7ecfb71d6e4cb08a0aabf97568cd38be6153ad74a8504cb59e9c3b",
+        "dest": "nuget-sources",
+        "dest-filename": "ryujinx.atksharp.3.24.24.59-ryujinx.nupkg"
+    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/system.resources.resourcemanager/4.0.1/system.resources.resourcemanager.4.0.1.nupkg",
@@ -162,17 +183,17 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.common/4.2.0/microsoft.codeanalysis.common.4.2.0.nupkg",
-        "sha512": "579adf4d1f1ecb6461788bc29184c09e6f9bf1de047bfa234160fb0b95a931061f89e3bbebaf13d89faafd65b9bad31bcbb3db755de5e20ae8b5e7b9e7a2507c",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.common/4.4.0/microsoft.codeanalysis.common.4.4.0.nupkg",
+        "sha512": "564fe62e3a4b98770b5bdcc1ca119189ba96e3c52df9c5f5d150de8b3d1bf6e058ac7a3c5cd85f6fc9db3ec91e0666d93566c763a5b2913b3c58589f557a6d29",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.codeanalysis.common.4.2.0.nupkg"
+        "dest-filename": "microsoft.codeanalysis.common.4.4.0.nupkg"
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.tokens/6.25.0/microsoft.identitymodel.tokens.6.25.0.nupkg",
-        "sha512": "755b1d20de8529a9875124ec2d8829a0ce700a66d52fc4281148d79cd70421f276af3181373626233b06a4481d0352c3d34fef293bd7d3a263076d9abd3778af",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.tokens/6.25.1/microsoft.identitymodel.tokens.6.25.1.nupkg",
+        "sha512": "64a53939613d80e992f8ad43230cd50680b27fbb23591360b42699a139032315630478136b98cdbc578b56fb3fa82b6650b5278c49bdaf8bf4134f99ca842fe4",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.identitymodel.tokens.6.25.0.nupkg"
+        "dest-filename": "microsoft.identitymodel.tokens.6.25.1.nupkg"
     },
     {
         "type": "file",
@@ -190,10 +211,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.win-x64/7.0.0/microsoft.netcore.app.runtime.win-x64.7.0.0.nupkg",
-        "sha512": "c77b10619a29bc1dd81573efa6fd73303b590b8a29ab69f83c6a595c7534050cb45b240d2f1e1c18c5dc63bab55e1184f0febff8eb885b80420a1ab34a75effb",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.win-x64/7.0.2/microsoft.netcore.app.runtime.win-x64.7.0.2.nupkg",
+        "sha512": "f7eff3e04057ef75b7fab704a1c5a4c5e81af2a931476404a591e1e0e6527cc22d530a4615a8b2be6682b4bf65de30e4fd94dfc8d140cb265a5921488fe89ca1",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.netcore.app.runtime.win-x64.7.0.0.nupkg"
+        "dest-filename": "microsoft.netcore.app.runtime.win-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -218,10 +239,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.csharp/4.2.0/microsoft.codeanalysis.csharp.4.2.0.nupkg",
-        "sha512": "d54de9b27a4632fd45982e2094c37db3a39425447f79332c289cbd0b8c3f163a05a82d6679b1cdc37ce19cfa701e99070eaddaed15f9e2afd0a5b8beac826465",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.csharp/4.4.0/microsoft.codeanalysis.csharp.4.4.0.nupkg",
+        "sha512": "fe0f852202c1934df0a5fe5aae60f303685035a93b9ea955c326dc0e53d8d1fd2469dfa813cc0a235b9668fb642a56a18b63eda6ad5fccb58a694abb5fb8953b",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.codeanalysis.csharp.4.2.0.nupkg"
+        "dest-filename": "microsoft.codeanalysis.csharp.4.4.0.nupkg"
     },
     {
         "type": "file",
@@ -316,38 +337,24 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/pangosharp/3.22.25.128/pangosharp.3.22.25.128.nupkg",
-        "sha512": "9ff54c0f4f58964d3129649170bcb757563707aa67ffbc2c1c2b764fab8e79043556a13747215b22a93f00ef18791b7f32c9a1a596ddb153da52082050f47a32",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.linux-x64/7.0.2/microsoft.netcore.app.host.linux-x64.7.0.2.nupkg",
+        "sha512": "ccb3b16768fd6609212d5f71cce73f9b8e88a8da6d5918b8af814b6f811d2cde68f5b1c8abecd6b5cb47d24f82569927c1e362829204c3c269dfe15816605b0f",
         "dest": "nuget-sources",
-        "dest-filename": "pangosharp.3.22.25.128.nupkg"
+        "dest-filename": "microsoft.netcore.app.host.linux-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.linux-x64/7.0.0/microsoft.netcore.app.host.linux-x64.7.0.0.nupkg",
-        "sha512": "c902c0592f57eb559a3d1d14c0979abe3eb59913be55aeb65b26ea441eb0ba8b3fa7cbbd267c62c5e93734328c3d96319a3cfe36ce45ac926a4350eeb3e40be3",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.win-x64/7.0.2/microsoft.aspnetcore.app.runtime.win-x64.7.0.2.nupkg",
+        "sha512": "4365c6b2e07d9c5d2dc5fb388213490ba7e00538019b7b56cc08a02f7b0b5f82f7cd24d3094be449c410f0b7b39004844bec8842b066827b47a8380228202c4a",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.netcore.app.host.linux-x64.7.0.0.nupkg"
+        "dest-filename": "microsoft.aspnetcore.app.runtime.win-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.win-x64/7.0.0/microsoft.aspnetcore.app.runtime.win-x64.7.0.0.nupkg",
-        "sha512": "259a8d654da97a14b6ebcc1840be24e3acc1add6947a3e1e920a75d951cef357437f173d8b1256255445ea61ac1ae377895e67f38e77fd225ad3e07e54e778d0",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.logging/6.25.1/microsoft.identitymodel.logging.6.25.1.nupkg",
+        "sha512": "48218fef14ea564f1c3577a1cd5a2005d31d504569df97bc427fee245b4a6ad0e8370c560a0c9da8ea6d0283ba0f75f45bcf4f2c157eb2870c4fc94f654dce62",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.aspnetcore.app.runtime.win-x64.7.0.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.logging/6.25.0/microsoft.identitymodel.logging.6.25.0.nupkg",
-        "sha512": "9dbaed1fdf9d4b28acb389b0bf262dca03f502ac514f5e4b8c8d5fe683bf9c4750f5adabeda8d9f1aafc5301035025552fcbad8d4f5e494dffcac3ae9a21f4b2",
-        "dest": "nuget-sources",
-        "dest-filename": "microsoft.identitymodel.logging.6.25.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.win32.systemevents/6.0.0/microsoft.win32.systemevents.6.0.0.nupkg",
-        "sha512": "5e274ace996c3eba63099ed5116f9dc39f69f684f7c1e7623c28c3c73988b75c67dfcc929a50a761f0222df243dd540720a6e588e91dfa784f81bfce7a893875",
-        "dest": "nuget-sources",
-        "dest-filename": "microsoft.win32.systemevents.6.0.0.nupkg"
+        "dest-filename": "microsoft.identitymodel.logging.6.25.1.nupkg"
     },
     {
         "type": "file",
@@ -372,10 +379,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencymodel/3.1.1/microsoft.extensions.dependencymodel.3.1.1.nupkg",
-        "sha512": "962939cede743858bd9e70509f5951ffd72bcfe59411d18a7a217f6a8b0ec7bcc76d6da755184da38183242635c761945dc5bb6b426092943ff206d2c0cbacad",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencymodel/6.0.0/microsoft.extensions.dependencymodel.6.0.0.nupkg",
+        "sha512": "4222e75931c6e471e40966d3cb47ed73987b1bf9082d6753ef41a0ec6c6011df654847b540bc67accfe24b258fa2ea188be5c4e4458849afe7bff1d376e78789",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.extensions.dependencymodel.3.1.1.nupkg"
+        "dest-filename": "microsoft.extensions.dependencymodel.6.0.0.nupkg"
     },
     {
         "type": "file",
@@ -398,13 +405,6 @@
         "dest": "nuget-sources",
         "dest-filename": "netstandard.library.2.0.3.nupkg"
     },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/gdksharp/3.22.25.128/gdksharp.3.22.25.128.nupkg",
-        "sha512": "c081968df5c14e78f0c31bf39e9cbc32efb966406f143e930e367b5f7325e39ff7efe8e2e04b28d1fcf8abe4aa81b2a5f094fdd2c86ac9e5561283c7acf709c2",
-        "dest": "nuget-sources",
-        "dest-filename": "gdksharp.3.22.25.128.nupkg"
-    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.3.0/system.numerics.vectors.4.3.0.nupkg",
@@ -428,10 +428,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.core/2.10.1/silk.net.core.2.10.1.nupkg",
-        "sha512": "abf974ee5257efc79e3809ca5db72c615d8453bdb70b84f96fc521409997165c8a5388faac83526cc1b1d87aa8f0926247457313c13b18c6b486f333597e9bdb",
+        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.core/2.16.0/silk.net.core.2.16.0.nupkg",
+        "sha512": "9cea9e04ab772b40da0f48e5f7fede810ee7380bdec00fe98fa59bd2234664adec38ef63e7e0d6fa4cf83e0ecd6054901a814a28b9c804fbac33ff045cb9f3df",
         "dest": "nuget-sources",
-        "dest-filename": "silk.net.core.2.10.1.nupkg"
+        "dest-filename": "silk.net.core.2.16.0.nupkg"
     },
     {
         "type": "file",
@@ -454,13 +454,6 @@
         "dest": "nuget-sources",
         "dest-filename": "system.security.principal.4.3.0.nupkg"
     },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/atksharp/3.22.25.128/atksharp.3.22.25.128.nupkg",
-        "sha512": "b6f34f51f632b35d96aebe2b46785478ec8dc59c77180bb45b3adb7d72197fd3d39f5807376d53bc4f6cbfb04a0fce7beb8c8cd927031403e8ab576c4ee0a2f4",
-        "dest": "nuget-sources",
-        "dest-filename": "atksharp.3.22.25.128.nupkg"
-    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.numerics/4.0.1/system.runtime.numerics.4.0.1.nupkg",
@@ -631,10 +624,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan.extensions.ext/2.10.1/silk.net.vulkan.extensions.ext.2.10.1.nupkg",
-        "sha512": "470b2423d725545fa305d1a42d07e2c5e05e86f68c094fe02b44413e954df3b0cc38322224cf64b3954db46c54b4f314be6d0ca6686ba37bf0082ed551873fef",
+        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan.extensions.ext/2.16.0/silk.net.vulkan.extensions.ext.2.16.0.nupkg",
+        "sha512": "1efe3177b98eec2457c6ee7ade30012580cf6077f6985ed76a9fb5ad358a9934cc9dd621bc1fdedcca90219f321e952344b898fdb5b23a59a6445e870d8d6a00",
         "dest": "nuget-sources",
-        "dest-filename": "silk.net.vulkan.extensions.ext.2.10.1.nupkg"
+        "dest-filename": "silk.net.vulkan.extensions.ext.2.16.0.nupkg"
     },
     {
         "type": "file",
@@ -699,13 +692,6 @@
         "dest": "nuget-sources",
         "dest-filename": "runtime.unix.system.net.sockets.4.3.0.nupkg"
     },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/gtksharp/3.22.25.128/gtksharp.3.22.25.128.nupkg",
-        "sha512": "aedc50ef1d59135004a79e3dd4f00be2c86b5d47979322e23a33490cf81d2c6e086c61ff4123dfab43b1d1e849e5003221cb920f28fac40e4fbc069984c2a396",
-        "dest": "nuget-sources",
-        "dest-filename": "gtksharp.3.22.25.128.nupkg"
-    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/system.net.http/4.1.0/system.net.http.4.1.0.nupkg",
@@ -715,10 +701,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.abstractions/6.25.0/microsoft.identitymodel.abstractions.6.25.0.nupkg",
-        "sha512": "5c0a884c57e76022852e5b33dbd1790ba63a3fa2b445dd8046423f2f39932c3069761cb4966b9bbfd7c241ed998c89904505d970f3cb330e3e37e1dbb523746f",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.abstractions/6.25.1/microsoft.identitymodel.abstractions.6.25.1.nupkg",
+        "sha512": "9cb8de51706bc3d992cdf2500714b8242cc6ea15bdbeb34702de1acc501ec16a678ecf61b1ebcfef512d9482bc9311c12269bf803124a6351884d1077f08cbfd",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.identitymodel.abstractions.6.25.0.nupkg"
+        "dest-filename": "microsoft.identitymodel.abstractions.6.25.1.nupkg"
     },
     {
         "type": "file",
@@ -771,10 +757,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.osx-x64/7.0.0/microsoft.netcore.app.runtime.osx-x64.7.0.0.nupkg",
-        "sha512": "10a6f069f8152ed97556fdc0f52558ceffe10c02feb8451ad054665d5ce7f323f77772f47844de972cc903a0457a92033faf84e61105ceb4a9ff03c001e0198b",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.osx-x64/7.0.2/microsoft.netcore.app.runtime.osx-x64.7.0.2.nupkg",
+        "sha512": "bd49fdf797e4754971271224eed97051574872e6bf617704386cef00d2de2c61b579cdc7908c2192230fe3c80048bc0d621ce06e49ffa4481fd923cdc12489dc",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.netcore.app.runtime.osx-x64.7.0.0.nupkg"
+        "dest-filename": "microsoft.netcore.app.runtime.osx-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -792,17 +778,17 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.jsonwebtokens/6.25.0/microsoft.identitymodel.jsonwebtokens.6.25.0.nupkg",
-        "sha512": "822549449b1d7b1e1d63fe54c1b74da53c327ca769532abbaa69a40aa40a872066185f3f5efd26cb2547d36d2563ee636ea4d5ab694547af5382fa66ba0f0d1c",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.jsonwebtokens/6.25.1/microsoft.identitymodel.jsonwebtokens.6.25.1.nupkg",
+        "sha512": "7c8a0e5dcc06de6fa5a4700936cbc311e32289138e81150562aab78a0f74482b1782c7c7a60f3a0fd65eae53f27cf8a2695808c45231d426ab6dd564b55f33c7",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.identitymodel.jsonwebtokens.6.25.0.nupkg"
+        "dest-filename": "microsoft.identitymodel.jsonwebtokens.6.25.1.nupkg"
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.collections.immutable/5.0.0/system.collections.immutable.5.0.0.nupkg",
-        "sha512": "726f8db7d179714cf0efeb0fc02fcebe7b4755762902e391e77cf78671dd5d5f364c7cf4ce3545b51cc7f37327d12d1500ba19f4b934f0e8bb69a6a347c0bbfd",
+        "url": "https://api.nuget.org/v3-flatcontainer/system.collections.immutable/6.0.0/system.collections.immutable.6.0.0.nupkg",
+        "sha512": "f8036412e384c5c5af6d28f4eab2543207d2ebbb16c47b70f6c471bc5aa4b9f44404c47d776d295191f20a89caa898abd73a2304dcaf77979174ced2d9160169",
         "dest": "nuget-sources",
-        "dest-filename": "system.collections.immutable.5.0.0.nupkg"
+        "dest-filename": "system.collections.immutable.6.0.0.nupkg"
     },
     {
         "type": "file",
@@ -846,6 +832,13 @@
         "dest": "nuget-sources",
         "dest-filename": "system.net.primitives.4.0.11.nupkg"
     },
+    {
+        "type": "file",
+        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.pangosharp/3.24.24.59-ryujinx/ryujinx.pangosharp.3.24.24.59-ryujinx.nupkg",
+        "sha512": "61b96fa224cd3411e91aa6690fa764455418a655ac867d1deb4eca5acc174d2115ad68310e4e4c6f9d6db5bf6169a99383617ce2fc4b123071a7e13e9b77369f",
+        "dest": "nuget-sources",
+        "dest-filename": "ryujinx.pangosharp.3.24.24.59-ryujinx.nupkg"
+    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.primitives/4.0.0/system.security.cryptography.primitives.4.0.0.nupkg",
@@ -876,10 +869,17 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.linux-x64/7.0.0/microsoft.netcore.app.runtime.linux-x64.7.0.0.nupkg",
-        "sha512": "0d2c0cd4a669b753abebb2edaf65b9fd277836b029d6f945bc95f98ed487221b462f9a82dc199dd08c5b12f1f15134531e208fcad5931c426f9fdba6ab068786",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.linux-x64/7.0.2/microsoft.netcore.app.runtime.linux-x64.7.0.2.nupkg",
+        "sha512": "caaf98ba70b486f85686d40d973849967cef077ec53d1b3b4bd2e25d6c24a83498ea790f37feebe5db71e108df2ddf4f752adf0223382741405c186efa25d688",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.netcore.app.runtime.linux-x64.7.0.0.nupkg"
+        "dest-filename": "microsoft.netcore.app.runtime.linux-x64.7.0.2.nupkg"
+    },
+    {
+        "type": "file",
+        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.giosharp/3.24.24.59-ryujinx/ryujinx.giosharp.3.24.24.59-ryujinx.nupkg",
+        "sha512": "39d109adc3ce6b0ec8c4ad5d33c780d10d03c8632786f0eca0704163580d8f70cdea0e42f8ee7ea933bb0281cb58e5cbbf7ff2ccd2e51da4f23dc2f031bf13ba",
+        "dest": "nuget-sources",
+        "dest-filename": "ryujinx.giosharp.3.24.24.59-ryujinx.nupkg"
     },
     {
         "type": "file",
@@ -888,6 +888,13 @@
         "dest": "nuget-sources",
         "dest-filename": "sharpziplib.1.4.1.nupkg"
     },
+    {
+        "type": "file",
+        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.graphics.vulkan.dependencies.moltenvk/1.2.0/ryujinx.graphics.vulkan.dependencies.moltenvk.1.2.0.nupkg",
+        "sha512": "d1fbf91712fcaadbd9151eb2dfe5cd1a58a0add3737053d5c53caebcb64165db1a542a2ab4d95a180d356abcc028a97491b91992cff5b1e80091758e54ba0c31",
+        "dest": "nuget-sources",
+        "dest-filename": "ryujinx.graphics.vulkan.dependencies.moltenvk.1.2.0.nupkg"
+    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/system.objectmodel/4.0.12/system.objectmodel.4.0.12.nupkg",
@@ -1135,24 +1142,17 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan.extensions.khr/2.10.1/silk.net.vulkan.extensions.khr.2.10.1.nupkg",
-        "sha512": "d0a5fab0fbc549f62cca0558245b41b696bf89e1e74f75732afb56012a474b5bd70ed0842e24f63c6ec7404a2779dae46c50a959fc2960aed83d3467a0819d65",
+        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan.extensions.khr/2.16.0/silk.net.vulkan.extensions.khr.2.16.0.nupkg",
+        "sha512": "6b6365aa6246013c62408dcbc6c51818eae841a84c900f30ce4d163201386518b7f01ae10e003ae6a92e97cec9da287ca73c8665ab475666a503dc49f0790778",
         "dest": "nuget-sources",
-        "dest-filename": "silk.net.vulkan.extensions.khr.2.10.1.nupkg"
+        "dest-filename": "silk.net.vulkan.extensions.khr.2.16.0.nupkg"
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.win-x64/7.0.0/microsoft.netcore.app.host.win-x64.7.0.0.nupkg",
-        "sha512": "5bd8b1e987ff863997900fbefed1164d4659bb8676e3f6f93977f359e27a2097259c84b55797a2238835c02aa255cff7a74aa26b9f84e0a8033f436ca177b77f",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.win-x64/7.0.2/microsoft.netcore.app.host.win-x64.7.0.2.nupkg",
+        "sha512": "82c4dccfbb1abd11925125eb4ae4ddb168de6b5889a513c9bd14909cc8a4ad8fb115867138c950a1095806bd939132d21dbf67b3412409414f816ed92e2a32e4",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.netcore.app.host.win-x64.7.0.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/glibsharp/3.22.25.128/glibsharp.3.22.25.128.nupkg",
-        "sha512": "a0c634eb422c36b07a18adf7410a5bb6f56a28ea85e7ebb1dfc42dfa0a57cdfc9791d62b16dcbe015179d5aefdddf2645a15c836e690c2ac775de5da30192454",
-        "dest": "nuget-sources",
-        "dest-filename": "glibsharp.3.22.25.128.nupkg"
+        "dest-filename": "microsoft.netcore.app.host.win-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -1161,6 +1161,13 @@
         "dest": "nuget-sources",
         "dest-filename": "system.security.cryptography.x509certificates.4.1.0.nupkg"
     },
+    {
+        "type": "file",
+        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.gdksharp/3.24.24.59-ryujinx/ryujinx.gdksharp.3.24.24.59-ryujinx.nupkg",
+        "sha512": "a79da0931504eea4acaceb4eedc739e844d5e978690c241446f9bc958ea62cad1f2f6df7f0f6b96f86643426a2539c3e5b1bf13bb33eac053d5b9b43e7d53bf7",
+        "dest": "nuget-sources",
+        "dest-filename": "ryujinx.gdksharp.3.24.24.59-ryujinx.nupkg"
+    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.reflection/4.3.0/runtime.any.system.reflection.4.3.0.nupkg",
@@ -1198,17 +1205,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.drawing.common/6.0.0/system.drawing.common.6.0.0.nupkg",
-        "sha512": "d61f0a3e01c3eac15f13fc1ba04a2c7ce4eac956400b2faa361fecabd3836d49d5bd344f3985ee3d94cdc3f6a72b8e07e423cdb2965b4f5ca2222b5de32988e4",
+        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.graphics.nvdec.dependencies/5.0.1-build13/ryujinx.graphics.nvdec.dependencies.5.0.1-build13.nupkg",
+        "sha512": "2b3f0627e8a74a80971c50e01eec9b1a97fab47f4ce0a6e6048b08297be99b7a1a95635eabb6989eecd45a53be42111c03a7902d71162a15be3b1219df16e49c",
         "dest": "nuget-sources",
-        "dest-filename": "system.drawing.common.6.0.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.graphics.nvdec.dependencies/5.0.1-build10/ryujinx.graphics.nvdec.dependencies.5.0.1-build10.nupkg",
-        "sha512": "b3899cd05981053998ee14a9ade58617d0302e1151bd566fc9e6809638fd5079fd7b95a0db95c25d5047be2740646a95231931f293cc7ce7c3d6c2a06f3aa442",
-        "dest": "nuget-sources",
-        "dest-filename": "ryujinx.graphics.nvdec.dependencies.5.0.1-build10.nupkg"
+        "dest-filename": "ryujinx.graphics.nvdec.dependencies.5.0.1-build13.nupkg"
     },
     {
         "type": "file",
@@ -1233,10 +1233,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.sdl2-cs/2.24.2-build21/ryujinx.sdl2-cs.2.24.2-build21.nupkg",
-        "sha512": "43ddb0660ccae42616d5f2205ef399eea21e822a96e3de2e7ca7e0885ea6a77fd3a8fc75b118c645c54c57ff3e48c184a18a7e3314f9efb2a40b070780a6a9cd",
+        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.sdl2-cs/2.26.1-build23/ryujinx.sdl2-cs.2.26.1-build23.nupkg",
+        "sha512": "8112accffc66185e5dad3648cdf062de1a867c762fbed2a078c87fd2748b7604b777e7bf7a721f87cfa1d32e8970a015d38950ec2aa7d1e05d24a7a776daffd5",
         "dest": "nuget-sources",
-        "dest-filename": "ryujinx.sdl2-cs.2.24.2-build21.nupkg"
+        "dest-filename": "ryujinx.sdl2-cs.2.26.1-build23.nupkg"
     },
     {
         "type": "file",
@@ -1261,10 +1261,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.text.json/4.7.0/system.text.json.4.7.0.nupkg",
-        "sha512": "d6ad50bdc50a094b0e0d08cba8d708e77e974b11102b64e618bc8e324ef7288015f91b44ceddd845d974b138277c4a45aa27c32a4aeb0a918fa65929eb088e7c",
+        "url": "https://api.nuget.org/v3-flatcontainer/system.text.json/6.0.0/system.text.json.6.0.0.nupkg",
+        "sha512": "167b4ee8d1277a5d8bd6b4fbe0a3b3a708519235fb005ea98cafdd5b30e17758efeb0a87dcd068af289400d841f4d2cd24550df882d1927c47ec6ff4fb8781ff",
         "dest": "nuget-sources",
-        "dest-filename": "system.text.json.4.7.0.nupkg"
+        "dest-filename": "system.text.json.6.0.0.nupkg"
     },
     {
         "type": "file",
@@ -1275,17 +1275,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.osx-x64/7.0.0/microsoft.aspnetcore.app.runtime.osx-x64.7.0.0.nupkg",
-        "sha512": "8e23f05c3a455dc538fe3550704732b4ed00ade8a07a3b93d2af16bbc0dd14086b163d43255e6d396edaf5f99c08cf553f15a7888a09e5657bb419116f0ecf9d",
+        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.osx-x64/7.0.2/microsoft.aspnetcore.app.runtime.osx-x64.7.0.2.nupkg",
+        "sha512": "51081d70ca56578a41314b9505a8fb2d0ce7724cf5c052e52b2d32a69d82bf3979f930cfb58701327790f77956c85e5802171c83dbd07bcc9f4f1e61861807bb",
         "dest": "nuget-sources",
-        "dest-filename": "microsoft.aspnetcore.app.runtime.osx-x64.7.0.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/giosharp/3.22.25.128/giosharp.3.22.25.128.nupkg",
-        "sha512": "575bef7f1d64b71715b15b8913ad2268e8cdbaa8d1061c6940719a2905eb9fb51eb7a21b054e1e3b4d9be67192799fa0435707bad27672307be27821329ee28c",
-        "dest": "nuget-sources",
-        "dest-filename": "giosharp.3.22.25.128.nupkg"
+        "dest-filename": "microsoft.aspnetcore.app.runtime.osx-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -1476,6 +1469,13 @@
         "dest": "nuget-sources",
         "dest-filename": "runtime.unix.system.net.primitives.4.3.0.nupkg"
     },
+    {
+        "type": "file",
+        "url": "https://api.nuget.org/v3-flatcontainer/system.text.encodings.web/6.0.0/system.text.encodings.web.6.0.0.nupkg",
+        "sha512": "0f26afeeaa709ea1f05ef87058408dd9df640c869d7398b2c9c270268ddf21a9208cd7d2bfa1f7fbd8a5ceab735dd22d470a3689627c9c4fadc0ea5fe76237fa",
+        "dest": "nuget-sources",
+        "dest-filename": "system.text.encodings.web.6.0.0.nupkg"
+    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.openssl/4.0.0/system.security.cryptography.openssl.4.0.0.nupkg",
@@ -1485,10 +1485,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan/2.10.1/silk.net.vulkan.2.10.1.nupkg",
-        "sha512": "83a68239d20c2e7ff15af5da53a1fa8c5b35f36fc842ed34035da8f558c3f9a411eceb7822bd70c819c99ceb6328b95931c0e04d8e93e1278aa4ce92a1fc6941",
+        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan/2.16.0/silk.net.vulkan.2.16.0.nupkg",
+        "sha512": "b6f53b3d4d2cd4e8eed14a5d567de5195ff595d2649f441b09920d7bbaec48563a95554cf7289901f8bb394339a92b428a05ae913b4d2a45a7af61ad38e44fc8",
         "dest": "nuget-sources",
-        "dest-filename": "silk.net.vulkan.2.10.1.nupkg"
+        "dest-filename": "silk.net.vulkan.2.16.0.nupkg"
     },
     {
         "type": "file",
@@ -1524,12 +1524,5 @@
         "sha512": "0c64f255836cb629587b117bd8de5e70bfe7e4c6d7d138bff10b9e85f4883fba250ae07118c21d5e9130ba3cf120a9a2bf581a17577d3a7ec09260933c7b4d47",
         "dest": "nuget-sources",
         "dest-filename": "system.diagnostics.tracing.4.1.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/cairosharp/3.22.25.128/cairosharp.3.22.25.128.nupkg",
-        "sha512": "259e6fac6bd4fe22a43f1ea2c4f935701f756295829c5b9e1e93aa4b36bc0c2bc55635b70200c2ff85d0cfc4c0af500e9c1c5ab25da7e665d07744f69bd5434d",
-        "dest": "nuget-sources",
-        "dest-filename": "cairosharp.3.22.25.128.nupkg"
     }
 ]
\ No newline at end of file
diff --git a/rd-submodules/ryujinx/ryujinx-wrapper b/rd-submodules/ryujinx/ryujinx-wrapper
index ac9704f6..e7ea8693 100644
--- a/rd-submodules/ryujinx/ryujinx-wrapper
+++ b/rd-submodules/ryujinx/ryujinx-wrapper
@@ -4,4 +4,4 @@ for i in {0..9}; do
     test -S $XDG_RUNTIME_DIR/discord-ipc-$i || ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i;
 done
 
-Ryujinx "$@"
+env DOTNET_EnableAlternateStackCheck=1 Ryujinx "$@"
\ No newline at end of file
diff --git a/tools/configurator.sh b/tools/configurator.sh
index f3cc7747..b46a6c1b 100644
--- a/tools/configurator.sh
+++ b/tools/configurator.sh
@@ -66,7 +66,6 @@ configurator_reset_dialog() {
     --text="Which emulator do you want to reset to default?" \
     --hide-header \
     --column=emulator \
-    "RetroArch" \
     "Citra" \
     "Dolphin" \
     "Duckstation" \
@@ -80,11 +79,6 @@ configurator_reset_dialog() {
 
     case $emulator_to_reset in
 
-    "RetroArch" )
-      ra_init
-      configurator_process_complete_dialog "resetting $emulator_to_reset"
-    ;;
-
     "Citra" )
       citra_init
       configurator_process_complete_dialog "resetting $emulator_to_reset"