Skip to content

Instantly share code, notes, and snippets.

@ThioJoe
Last active August 8, 2025 15:31
Show Gist options
  • Select an option

  • Save ThioJoe/56e1c4951be2c1a19b126ec619ec26c4 to your computer and use it in GitHub Desktop.

Select an option

Save ThioJoe/56e1c4951be2c1a19b126ec619ec26c4 to your computer and use it in GitHub Desktop.
PowerShell script to allocate and pass through GPU to Hyper-V Virtual Machine
# Script to easily set resource allocation for GPUs to be passed through into a Hyper-V VM
#
# Author: ThioJoe / https://github.com/thiojoe
#
### Instructions for copying drivers to VM - Will likely need to do this before running this script
# NOTE: Instead of manually copying the files, if you have an Nvidia GPU you can use my other script called "Copy-GPU-Drivers-VM.ps1" to do it automatically
# 1. Open C:\Windows\System32 on host machine and copy any files beginning with "nv" (Except nvspinfo.exe and NvAgent.dll , which are unrelated)
# 2. Place those files into the System32 folder on the VM
# 3. On the VM, create the following directory: C:\Windows\System32\HostDriverStore\FileRepository
# 4. For Nvidia GPUs, open C:\Windows\System32\DriverStore\FileRepository, copy any folders beginning with "nv_" (The number of folders should match the number of GPUs, or at least number of different models of GPU)
# 5. Place those copied folders into the new HostDriverStore\FileRepository folder on the VM
# 6. Shut down VM and run this script.
# Ask for user input for VM Name
do {
Write-Host ""
$vm = Read-Host "Enter your Hyper-V VM Name"
$vmObject = Get-VM -Name $vm -ErrorAction SilentlyContinue
if (-not $vmObject) {
Write-Host "VM with name '$vm' not found. Please check the name and ensure you're running this script as administrator." -ForegroundColor Red
} else {
Write-Host "VM '$vm' found successfully." -ForegroundColor Green
}
} while (-not $vmObject)
# Ask for user input for number of GPUs
$numGPUs = Read-Host "`nEnter the number of GPUs (1 or 2)"
# Gets info about the GPUs and whether they are partitionable
Write-Host "`nRetrieving information about partitionable GPUs..." -ForegroundColor Yellow
$partitionableGPUs = Get-VMHostPartitionableGpu
# Displaying GPU information
foreach ($gpu in $partitionableGPUs) {
Write-Host "Partitionable GPU found: $($gpu.Name)" -ForegroundColor Yellow
}
# Pausing for user to review GPU information
Write-Host "`nPress Enter to proceed with the configuration..." -ForegroundColor Cyan
$null = Read-Host
# Get existing GPU adapters
$existingAdapters = Get-VMGpuPartitionAdapter -VMName $vm
# Loop through each GPU based on user input
for ($i=0; $i -lt $numGPUs; $i++) {
$targetGpu = $partitionableGPUs[$i]
$instancePath = $targetGpu.Name
Write-Host "Configuring GPU $i with Instance Path: $instancePath" -ForegroundColor Yellow
# Check if adapters with this instance path already exist
$matchingAdapters = $existingAdapters | Where-Object { $_.InstancePath -eq $instancePath }
$adapterCount = $matchingAdapters | Measure-Object | Select-Object -ExpandProperty Count
if ($adapterCount -gt 1) {
# Multiple adapters found - ask user if they want to remove them
Write-Host "`nWARNING: $adapterCount GPU adapters found with the same instance path." -ForegroundColor Red
Write-Host "This indicates duplicate assignments which may not be desired." -ForegroundColor Red
$removeChoice = Read-Host "Do you want to remove all existing adapters and create a fresh one? (Y/N)"
if ($removeChoice -eq "Y" -or $removeChoice -eq "y") {
Write-Host "Removing existing GPU adapters..." -ForegroundColor Yellow
foreach ($adapter in $matchingAdapters) {
Remove-VMGpuPartitionAdapter -VMName $vm -AdapterId $adapter.Id
Write-Host "Removed adapter with ID: $($adapter.Id)" -ForegroundColor Yellow
}
# Add new GPU adapter
Write-Host "Adding fresh GPU partition adapter for VM '$vm'..." -ForegroundColor Yellow
Add-VMGpuPartitionAdapter -VMName $vm -InstancePath $instancePath
# Get the newly added adapter
$gpus = Get-VMGpuPartitionAdapter -VMName $vm
$existingAdapter = $gpus | Where-Object { $_.InstancePath -eq $instancePath }
$adapterId = $existingAdapter.Id
} else {
# User chose not to remove - use the first adapter
Write-Host "Using the first existing adapter for configuration." -ForegroundColor Yellow
$adapterId = $matchingAdapters[0].Id
}
} elseif ($adapterCount -eq 1) {
Write-Host "One GPU adapter for instance path $instancePath already exists. Using existing adapter." -ForegroundColor Yellow
$adapterId = $matchingAdapters[0].Id
} else {
# Add new GPU adapter
Write-Host "Adding GPU partition adapter for VM '$vm'..." -ForegroundColor Yellow
Add-VMGpuPartitionAdapter -VMName $vm -InstancePath $instancePath
# Get the newly added adapter
$gpus = Get-VMGpuPartitionAdapter -VMName $vm
$existingAdapter = $gpus | Where-Object { $_.InstancePath -eq $instancePath }
$adapterId = $existingAdapter.Id
}
# Configure GPU adapter (whether existing or new)
Write-Host "Setting configurations for GPU partition adapter..." -ForegroundColor Yellow
Set-VMGpuPartitionAdapter -VMName $vm -AdapterId $adapterId `
-MinPartitionVRAM $targetGpu.MinPartitionVRAM `
-MaxPartitionVRAM $targetGpu.MaxPartitionVRAM `
-OptimalPartitionVRAM $targetGpu.OptimalPartitionVRAM `
-MinPartitionEncode $targetGpu.MinPartitionEncode `
-MaxPartitionEncode $targetGpu.MaxPartitionEncode `
-OptimalPartitionEncode $targetGpu.OptimalPartitionEncode `
-MinPartitionDecode $targetGpu.MinPartitionDecode `
-MaxPartitionDecode $targetGpu.MaxPartitionDecode `
-OptimalPartitionDecode $targetGpu.OptimalPartitionDecode `
-MinPartitionCompute $targetGpu.MinPartitionCompute `
-MaxPartitionCompute $targetGpu.MaxPartitionCompute `
-OptimalPartitionCompute $targetGpu.OptimalPartitionCompute
Write-Host "GPU configuration completed for adapter ID: $adapterId`n" -ForegroundColor Green
}
# Additional VM settings
Write-Host "Setting additional VM configurations for '$vm'..." -ForegroundColor Yellow
Set-VM -GuestControlledCacheTypes $true -VMName $vm
Set-VM -LowMemoryMappedIoSpace 1GB -VMName $vm
Set-VM -HighMemoryMappedIoSpace 32GB -VMName $vm
Write-Host "Additional VM configurations set." -ForegroundColor Green
Write-Host "`n--------------------------------------------------------------------------"
Write-Host "Script execution complete. If there were no errors, your VM '$vm' is now configured with GPU passthrough.`n" -ForegroundColor Green
# SIG # Begin signature block
# MII6kAYJKoZIhvcNAQcCoII6gTCCOn0CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBF5RiZ8NiD+X12
# aJHOzeZpozXXfpNauEMHGPYJy4tXLqCCIrQwggXMMIIDtKADAgECAhBUmNLR1FsZ
# lUgTecgRwIeZMA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQK
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVu
# dGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAy
# MDAeFw0yMDA0MTYxODM2MTZaFw00NTA0MTYxODQ0NDBaMHcxCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jv
# c29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo
# b3JpdHkgMjAyMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALORKgeD
# Bmf9np3gx8C3pOZCBH8Ppttf+9Va10Wg+3cL8IDzpm1aTXlT2KCGhFdFIMeiVPvH
# or+Kx24186IVxC9O40qFlkkN/76Z2BT2vCcH7kKbK/ULkgbk/WkTZaiRcvKYhOuD
# PQ7k13ESSCHLDe32R0m3m/nJxxe2hE//uKya13NnSYXjhr03QNAlhtTetcJtYmrV
# qXi8LW9J+eVsFBT9FMfTZRY33stuvF4pjf1imxUs1gXmuYkyM6Nix9fWUmcIxC70
# ViueC4fM7Ke0pqrrBc0ZV6U6CwQnHJFnni1iLS8evtrAIMsEGcoz+4m+mOJyoHI1
# vnnhnINv5G0Xb5DzPQCGdTiO0OBJmrvb0/gwytVXiGhNctO/bX9x2P29Da6SZEi3
# W295JrXNm5UhhNHvDzI9e1eM80UHTHzgXhgONXaLbZ7LNnSrBfjgc10yVpRnlyUK
# xjU9lJfnwUSLgP3B+PR0GeUw9gb7IVc+BhyLaxWGJ0l7gpPKWeh1R+g/OPTHU3mg
# trTiXFHvvV84wRPmeAyVWi7FQFkozA8kwOy6CXcjmTimthzax7ogttc32H83rwjj
# O3HbbnMbfZlysOSGM1l0tRYAe1BtxoYT2v3EOYI9JACaYNq6lMAFUSw0rFCZE4e7
# swWAsk0wAly4JoNdtGNz764jlU9gKL431VulAgMBAAGjVDBSMA4GA1UdDwEB/wQE
# AwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIftJqhSobyhmYBAcnz1AQ
# T2ioojAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0BAQwFAAOCAgEAr2rd5hnn
# LZRDGU7L6VCVZKUDkQKL4jaAOxWiUsIWGbZqWl10QzD0m/9gdAmxIR6QFm3FJI9c
# Zohj9E/MffISTEAQiwGf2qnIrvKVG8+dBetJPnSgaFvlVixlHIJ+U9pW2UYXeZJF
# xBA2CFIpF8svpvJ+1Gkkih6PsHMNzBxKq7Kq7aeRYwFkIqgyuH4yKLNncy2RtNwx
# AQv3Rwqm8ddK7VZgxCwIo3tAsLx0J1KH1r6I3TeKiW5niB31yV2g/rarOoDXGpc8
# FzYiQR6sTdWD5jw4vU8w6VSp07YEwzJ2YbuwGMUrGLPAgNW3lbBeUU0i/OxYqujY
# lLSlLu2S3ucYfCFX3VVj979tzR/SpncocMfiWzpbCNJbTsgAlrPhgzavhgplXHT2
# 6ux6anSg8Evu75SjrFDyh+3XOjCDyft9V77l4/hByuVkrrOj7FjshZrM77nq81YY
# uVxzmq/FdxeDWds3GhhyVKVB0rYjdaNDmuV3fJZ5t0GNv+zcgKCf0Xd1WF81E+Al
# GmcLfc4l+gcK5GEh2NQc5QfGNpn0ltDGFf5Ozdeui53bFv0ExpK91IjmqaOqu/dk
# ODtfzAzQNb50GQOmxapMomE2gj4d8yu8l13bS3g7LfU772Aj6PXsCyM2la+YZr9T
# 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggbuMIIE1qADAgECAhMzAALtvQ7r
# mviBJqoOAAAAAu29MA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ
# RCBWZXJpZmllZCBDUyBBT0MgQ0EgMDIwHhcNMjUwMzA1MTEyNjUwWhcNMjUwMzA4
# MTEyNjUwWjBsMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHV3lvbWluZzERMA8GA1UE
# BxMIU2hlcmlkYW4xGzAZBgNVBAoTElRoaW8gU29mdHdhcmUsIExMQzEbMBkGA1UE
# AxMSVGhpbyBTb2Z0d2FyZSwgTExDMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
# igKCAYEAqxZlpsKXMGXjrF+aj89M+goMOvNaHBaP7KPiZg7iJpKu1UdkeOEV/wP2
# ZFFJCe1LrbWzu+G6GidWtLGlUJM9RoXlALXBGAQp5z04Z4DVPi/l9PldiCb2VFPG
# tSCoGPrg7tPVQUCJOU+tfWxp4m5R2pLlfw4IFjMHELeEvAQRHktGvwJWZi+korzY
# 8qVbxmEyGg7K0uV6OeSDjFnb3WvwFSFjM549vzDbrnqCxHqATyLkN+cx5O9C95rA
# sfdtyFyzo+xxrxw+GBVAMWzEWtZ+YgNvkUMpDSTFQxzQN8ZWuYh/VFEs0rBlj6XJ
# 22Et0xBBbMrbjrN6WU3dRYUJOs9pJig635Xl8fQqWSSz7pF8EU8bwmsRynnJJVbp
# FAWajhd+a8RWLKNwZ8W1RVaa1Q4STaP9BSg0w3aTvIJYYXNzU/tF8y74H6R8IRnK
# sY4WPXfcKCu3yDhQT2rhg/LvquHFOrJoUP4FL55kfrwigcJVNvNh6ahBC0T+6Khq
# T4wl7iADAgMBAAGjggIZMIICFTAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIH
# gDA8BgNVHSUENTAzBgorBgEEAYI3YQEABggrBgEFBQcDAwYbKwYBBAGCN2GCyITf
# TKbD3mqByam9GIO77qlmMB0GA1UdDgQWBBSr2AYaNAh3/xAG094Qu1ypBXm4pjAf
# BgNVHSMEGDAWgBQkRZmhd5AqfMPKg7BuZBaEKvgsZzBnBgNVHR8EYDBeMFygWqBY
# hlZodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQl
# MjBJRCUyMFZlcmlmaWVkJTIwQ1MlMjBBT0MlMjBDQSUyMDAyLmNybDCBpQYIKwYB
# BQUHAQEEgZgwgZUwZAYIKwYBBQUHMAKGWGh0dHA6Ly93d3cubWljcm9zb2Z0LmNv
# bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUyMENTJTIw
# QU9DJTIwQ0ElMjAwMi5jcnQwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVvY3NwLm1p
# Y3Jvc29mdC5jb20vb2NzcDBmBgNVHSAEXzBdMFEGDCsGAQQBgjdMg30BATBBMD8G
# CCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3Mv
# UmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQBMA0GCSqGSIb3DQEBDAUAA4ICAQDJ9pqA
# Y7jUMmDWd+BP3PFlOxgqV5BCgRNplIjgpFNxOK6ynHukwZImPrcD8momkzqLIKg0
# aoV/PcQHAT3hZFbtSdV9oUZl7Y/aKFDA6HE1LjLg2BWP9xHtdJUq34DQR4o070Xm
# mo6IPhNkE4NwBCZr1kgM57dbf5NQ+FQWwVW0e2a7mUr1/CiG3mCOoNYABDGIcLKH
# aKR7x2KUO315e09i4BjYUenVvgdMlOsmnOjs7kATvPf15n3cyFwagk1OntbGyVl/
# 5ge9npMsBAWINYy/w50sMF1zANh2OhxY4aZrCsANlukOcJiG+qZs1bY5O3AK3zFz
# t0Mvao4+q5sR5pi+L8fVF/buQaIXjKGLhRS3l4B1cwGCMa4hLrtsj2erD9RogaUM
# WIXm8sbl5pq8ZCRQzOGblc9rz70aXMKQ9UKaECwkEApx4NM9Uyiey5CmG9PuEtSP
# XIPDt7YEJVQQA/oxV1/PgmsBUeUp0z879B5hnCi6GoouYE2Q8LZQc30MvkvE4y18
# vfsZVvBoWwz5cnLFucxs1tcuPfhMkIHMBp7kKQRZ8FlCycHnYs9DWtPe5TDR5Qtc
# RSsy17uk3jaqZO+rtWq0kzBU2/gRMBcF9+IoYrWW6T0wjvc/QZk8lWoE3sbne2yF
# pRyLX2roNbQGpVrYm0Tbp5ObzxM45zAeFj2vdjCCBu4wggTWoAMCAQICEzMAAu29
# Duua+IEmqg4AAAAC7b0wDQYJKoZIhvcNAQEMBQAwWjELMAkGA1UEBhMCVVMxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjErMCkGA1UEAxMiTWljcm9zb2Z0
# IElEIFZlcmlmaWVkIENTIEFPQyBDQSAwMjAeFw0yNTAzMDUxMTI2NTBaFw0yNTAz
# MDgxMTI2NTBaMGwxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdXeW9taW5nMREwDwYD
# VQQHEwhTaGVyaWRhbjEbMBkGA1UEChMSVGhpbyBTb2Z0d2FyZSwgTExDMRswGQYD
# VQQDExJUaGlvIFNvZnR3YXJlLCBMTEMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAw
# ggGKAoIBgQCrFmWmwpcwZeOsX5qPz0z6Cgw681ocFo/so+JmDuImkq7VR2R44RX/
# A/ZkUUkJ7UuttbO74boaJ1a0saVQkz1GheUAtcEYBCnnPThngNU+L+X0+V2IJvZU
# U8a1IKgY+uDu09VBQIk5T619bGniblHakuV/DggWMwcQt4S8BBEeS0a/AlZmL6Si
# vNjypVvGYTIaDsrS5Xo55IOMWdvda/AVIWMznj2/MNuueoLEeoBPIuQ35zHk70L3
# msCx923IXLOj7HGvHD4YFUAxbMRa1n5iA2+RQykNJMVDHNA3xla5iH9UUSzSsGWP
# pcnbYS3TEEFsytuOs3pZTd1FhQk6z2kmKDrfleXx9CpZJLPukXwRTxvCaxHKeckl
# VukUBZqOF35rxFYso3BnxbVFVprVDhJNo/0FKDTDdpO8glhhc3NT+0XzLvgfpHwh
# GcqxjhY9d9woK7fIOFBPauGD8u+q4cU6smhQ/gUvnmR+vCKBwlU282HpqEELRP7o
# qGpPjCXuIAMCAwEAAaOCAhkwggIVMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQD
# AgeAMDwGA1UdJQQ1MDMGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhsrBgEEAYI3YYLI
# hN9MpsPeaoHJqb0Yg7vuqWYwHQYDVR0OBBYEFKvYBho0CHf/EAbT3hC7XKkFebim
# MB8GA1UdIwQYMBaAFCRFmaF3kCp8w8qDsG5kFoQq+CxnMGcGA1UdHwRgMF4wXKBa
# oFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29m
# dCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUyMENBJTIwMDIuY3JsMIGlBggr
# BgEFBQcBAQSBmDCBlTBkBggrBgEFBQcwAoZYaHR0cDovL3d3dy5taWNyb3NvZnQu
# Y29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ1Ml
# MjBBT0MlMjBDQSUyMDAyLmNydDAtBggrBgEFBQcwAYYhaHR0cDovL29uZW9jc3Au
# bWljcm9zb2Z0LmNvbS9vY3NwMGYGA1UdIARfMF0wUQYMKwYBBAGCN0yDfQEBMEEw
# PwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9j
# cy9SZXBvc2l0b3J5Lmh0bTAIBgZngQwBBAEwDQYJKoZIhvcNAQEMBQADggIBAMn2
# moBjuNQyYNZ34E/c8WU7GCpXkEKBE2mUiOCkU3E4rrKce6TBkiY+twPyaiaTOosg
# qDRqhX89xAcBPeFkVu1J1X2hRmXtj9ooUMDocTUuMuDYFY/3Ee10lSrfgNBHijTv
# Reaajog+E2QTg3AEJmvWSAznt1t/k1D4VBbBVbR7ZruZSvX8KIbeYI6g1gAEMYhw
# sodopHvHYpQ7fXl7T2LgGNhR6dW+B0yU6yac6OzuQBO89/XmfdzIXBqCTU6e1sbJ
# WX/mB72ekywEBYg1jL/DnSwwXXMA2HY6HFjhpmsKwA2W6Q5wmIb6pmzVtjk7cArf
# MXO3Qy9qjj6rmxHmmL4vx9UX9u5BoheMoYuFFLeXgHVzAYIxriEuu2yPZ6sP1GiB
# pQxYhebyxuXmmrxkJFDM4ZuVz2vPvRpcwpD1QpoQLCQQCnHg0z1TKJ7LkKYb0+4S
# 1I9cg8O3tgQlVBAD+jFXX8+CawFR5SnTPzv0HmGcKLoaii5gTZDwtlBzfQy+S8Tj
# LXy9+xlW8GhbDPlycsW5zGzW1y49+EyQgcwGnuQpBFnwWULJwediz0Na097lMNHl
# C1xFKzLXu6TeNqpk76u1arSTMFTb+BEwFwX34ihitZbpPTCO9z9BmTyVagTexud7
# bIWlHItfaug1tAalWtibRNunk5vPEzjnMB4WPa92MIIHWjCCBUKgAwIBAgITMwAA
# AASWUEvS2+7LiAAAAAAABDANBgkqhkiG9w0BAQwFADBjMQswCQYDVQQGEwJVUzEe
# MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTQwMgYDVQQDEytNaWNyb3Nv
# ZnQgSUQgVmVyaWZpZWQgQ29kZSBTaWduaW5nIFBDQSAyMDIxMB4XDTIxMDQxMzE3
# MzE1MloXDTI2MDQxMzE3MzE1MlowWjELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1p
# Y3Jvc29mdCBDb3Jwb3JhdGlvbjErMCkGA1UEAxMiTWljcm9zb2Z0IElEIFZlcmlm
# aWVkIENTIEFPQyBDQSAwMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
# AOHOoOgzomOmwDsAj2wZUBdrY6N3JFGbmm+WaKzJ0aeKzpsGQ4k2yKcxZGf5PJOI
# rwSVdcOf2/6MpCPnlwKmmsTHcgDtDKHZxFuyJ30Pq05MpBMx8UWwjYOig7E52HP2
# HS+yCIiZYvJOdbqWhyy+wmJvWDXNEhWL5WhY9jtB4zvcvzUZnFjY2pmTpUY8VtnF
# oFLFHWs0h4EQnpPO1dmzP9e2/qPFl1FvdSKYIEWrJomeuVhBR1ym8oZti24QSumV
# pkKBXhPhlqylghiv6v+EYk2jDYR11r1r/v/yOfFLTsVYtw2itX0OmC8iCBh8w+Ap
# rXKxor8bqav3K6x7pxjQe//0JrpdmT/R3DpmP2qbYFJ8E/ttIPwN+4g37rlcOskt
# i6NP5Kf42/ifLxOBTKiIsMRgci+PNjzFQQt6nfzWxUGvDJo+np7FPhxKr/Wq/gG3
# CsLpm2aiSSpkKxmkjXVn5NjaHYHFjpqu48oW8cGTo5y49P28J7FDXDQHtPb/qoqM
# 8kEHrPAN1Fz3EUG/BvnNMmjtiAon1kyu8krslCfPJNZrTdtgjX7W44rYgHmn6GfV
# ZoZ+UX2/kvyuWq1b03C7pLeT3Uw0MZeeexCBOgPulxQaXbIzs5C83RIexC5PD1Tz
# I0HzwoCrSfOHNe33dgvfqcRdZREFBV2P2LQi/jZrPXFlAgMBAAGjggIOMIICCjAO
# BgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFCRFmaF3
# kCp8w8qDsG5kFoQq+CxnMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIB
# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9y
# eS5odG0wGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwEgYDVR0TAQH/BAgwBgEB
# /wIBADAfBgNVHSMEGDAWgBTZQSmwDw9jbO9p1/XNKZ6kSGow5jBwBgNVHR8EaTBn
# MGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNy
# b3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAy
# MDIxLmNybDCBrgYIKwYBBQUHAQEEgaEwgZ4wbQYIKwYBBQUHMAKGYWh0dHA6Ly93
# d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSUQlMjBW
# ZXJpZmllZCUyMENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAyMS5jcnQwLQYIKwYB
# BQUHMAGGIWh0dHA6Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20vb2NzcDANBgkqhkiG
# 9w0BAQwFAAOCAgEAZy04XZWzDSKJHSrc0mvIqPqRDveQnN1TsmP4ULCCHHTMpNoS
# Tsy7fzNVl30MhJQ5P0Lci81+t03Tm+SfpzvLdKc88Iu2WLzIjairwEDudLDDiZ90
# 94Qj6acTTYaBhVcc9lMokOG9rzq3LCyvUzhBV1m1DCTm0fTzNMGbAASIbuJOlVS8
# RA3tBknkF/2ROzx304OOC7n7eCCqmJp79QrqLKd4JRWLFXoC5zFmVGfFLTvRfEAo
# gKLiWIS+TpQpLIA2/b3vx0ISxZ3pX4OnULmyBbKgfSJQqJ2CiWfx2jGb2LQO8vRD
# kSuHMZb03rQlwB2soklx9LnhP0/dsFRtHLL+VXVMo+sla5ttr5SmAJFyDSrwzgfP
# rOIfk4EoZVGtgArthVp+yc5U0m6ZNCBPERLmJpLshPwU5JPd1gzMez8C55+CfuX5
# L2440NPDnsH6TIYfErj3UCqpmeNCOFtlMiSjDE23rdeiRYpkqgwoYJwgepcJaXtI
# H26Pe1O6a6W3wSqegdpNn+2Pk41q0GDfjnXDzskAHcRhjwcCUmiRt6IXZJQsYACe
# WpwsXmJe0o0ORLmumrYyHlYTdCnzyxT6WM+QkFPiQth+/ceHfzumDhUfWmHuePwh
# rqe3UVCHy0r9f49Az3OhJX92MlsZaFo/MnmN5B62RWgJUTMIQF8j0N6xF/cwggee
# MIIFhqADAgECAhMzAAAAB4ejNKN7pY4cAAAAAAAHMA0GCSqGSIb3DQEBDAUAMHcx
# CzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBG
# BgNVBAMTP01pY3Jvc29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0
# aWZpY2F0ZSBBdXRob3JpdHkgMjAyMDAeFw0yMTA0MDEyMDA1MjBaFw0zNjA0MDEy
# MDE1MjBaMGMxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
# YXRpb24xNDAyBgNVBAMTK01pY3Jvc29mdCBJRCBWZXJpZmllZCBDb2RlIFNpZ25p
# bmcgUENBIDIwMjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCy8MCv
# GYgo4t1UekxJbGkIVQm0Uv96SvjB6yUo92cXdylN65Xy96q2YpWCiTas7QPTkGnK
# 9QMKDXB2ygS27EAIQZyAd+M8X+dmw6SDtzSZXyGkxP8a8Hi6EO9Zcwh5A+wOALNQ
# bNO+iLvpgOnEM7GGB/wm5dYnMEOguua1OFfTUITVMIK8faxkP/4fPdEPCXYyy8NJ
# 1fmskNhW5HduNqPZB/NkWbB9xxMqowAeWvPgHtpzyD3PLGVOmRO4ka0WcsEZqyg6
# efk3JiV/TEX39uNVGjgbODZhzspHvKFNU2K5MYfmHh4H1qObU4JKEjKGsqqA6Rzi
# ybPqhvE74fEp4n1tiY9/ootdU0vPxRp4BGjQFq28nzawuvaCqUUF2PWxh+o5/TRC
# b/cHhcYU8Mr8fTiS15kRmwFFzdVPZ3+JV3s5MulIf3II5FXeghlAH9CvicPhhP+V
# aSFW3Da/azROdEm5sv+EUwhBrzqtxoYyE2wmuHKws00x4GGIx7NTWznOm6x/niqV
# i7a/mxnnMvQq8EMse0vwX2CfqM7Le/smbRtsEeOtbnJBbtLfoAsC3TdAOnBbUkbU
# fG78VRclsE7YDDBUbgWt75lDk53yi7C3n0WkHFU4EZ83i83abd9nHWCqfnYa9qIH
# PqjOiuAgSOf4+FRcguEBXlD9mAInS7b6V0UaNwIDAQABo4ICNTCCAjEwDgYDVR0P
# AQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTZQSmwDw9jbO9p
# 1/XNKZ6kSGow5jBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRt
# MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYD
# VR0jBBgwFoAUyH7SaoUqG8oZmAQHJ89QEE9oqKIwgYQGA1UdHwR9MHsweaB3oHWG
# c2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUy
# MElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRlJTIw
# QXV0aG9yaXR5JTIwMjAyMC5jcmwwgcMGCCsGAQUFBwEBBIG2MIGzMIGBBggrBgEF
# BQcwAoZ1aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNy
# b3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNhdGlvbiUyMFJvb3QlMjBDZXJ0aWZp
# Y2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3J0MC0GCCsGAQUFBzABhiFodHRwOi8v
# b25lb2NzcC5taWNyb3NvZnQuY29tL29jc3AwDQYJKoZIhvcNAQEMBQADggIBAH8l
# Kp7+1Kvq3WYK21cjTLpebJDjW4ZbOX3HD5ZiG84vjsFXT0OB+eb+1TiJ55ns0BHl
# uC6itMI2vnwc5wDW1ywdCq3TAmx0KWy7xulAP179qX6VSBNQkRXzReFyjvF2BGt6
# FvKFR/imR4CEESMAG8hSkPYso+GjlngM8JPn/ROUrTaeU/BRu/1RFESFVgK2wMz7
# fU4VTd8NXwGZBe/mFPZG6tWwkdmA/jLbp0kNUX7elxu2+HtHo0QO5gdiKF+YTYd1
# BGrmNG8sTURvn09jAhIUJfYNotn7OlThtfQjXqe0qrimgY4Vpoq2MgDW9ESUi1o4
# pzC1zTgIGtdJ/IvY6nqa80jFOTg5qzAiRNdsUvzVkoYP7bi4wLCj+ks2GftUct+f
# GUxXMdBUv5sdr0qFPLPB0b8vq516slCfRwaktAxK1S40MCvFbbAXXpAZnU20FaAo
# Dwqq/jwzwd8Wo2J83r7O3onQbDO9TyDStgaBNlHzMMQgl95nHBYMelLEHkUnVVVT
# UsgC0Huj09duNfMaJ9ogxhPNThgq3i8w3DAGZ61AMeF0C1M+mU5eucj1Ijod5O2M
# MPeJQ3/vKBtqGZg4eTtUHt/BPjN74SsJsyHqAdXVS5c+ItyKWg3Eforhox9k3Wgt
# WTpgV4gkSiS4+A09roSdOI4vrRw+p+fL4WrxSK5nMYIXMjCCFy4CAQEwcTBaMQsw
# CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYD
# VQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgQU9DIENBIDAyAhMzAALtvQ7r
# mviBJqoOAAAAAu29MA0GCWCGSAFlAwQCAQUAoF4wEAYKKwYBBAGCNwIBDDECMAAw
# GQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwLwYJKoZIhvcNAQkEMSIEICQFdIgk
# Q8vySK41ih1cRyFRzHViHCZ0JgEXrzSqzy+AMA0GCSqGSIb3DQEBAQUABIIBgCW5
# SruTGhAqxTlV9RsNcPVVj3IvbuSK6GaNSizmyQgLCFhps6sRiupt97fPorrCkTmX
# tLad5pb1KyQddI9n0j9d4/b83eaKvsgP6+k2grl0H41ECKLF8lFCMvmQdeOSJZuw
# XqEaxA6ex3xMGHqxXtk86YdUiyx6/41BIqi6LoNCsZMR64RL+FyLH5q8Khiegsc4
# i4Baq38qHfhdV4sC3LM6ZNbRiftHZ0ZlJ5vfrhrbx1xeFQ9tVOIY5zSZyQHpqAuW
# lU5A4rjW2+nvB+dfJ9PXEx8EAXhPWXLjoGrc0Hq5YAoxid1UafImFEUZ5feHzu82
# ruUamgsrpqDeWdUyRHulKJjRE1M3PpN/SlCjtzmaroG1d4k0N+bD2oDLdXntZJRt
# Zdfnvus429yzSZYQree48F4E8Vu7oZ01NGQ1bjHUjSMfxJFhSjy/g1JQC6b7toDw
# +0l1Vig0fYXwXaO75V6hKy2CSs/0gE32DR2wU5BsCsBJnweqLkilt6aQsz6Qj6GC
# FLIwghSuBgorBgEEAYI3AwMBMYIUnjCCFJoGCSqGSIb3DQEHAqCCFIswghSHAgED
# MQ8wDQYJYIZIAWUDBAIBBQAwggFqBgsqhkiG9w0BCRABBKCCAVkEggFVMIIBUQIB
# AQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCC37nNTwZDvfS+x4grM7Mfj
# dXQwaP/1ue32wHJLbnnsEgIGZ7jUk3ESGBMyMDI1MDMwNTE2NTQxNS44MDhaMASA
# AgH0oIHppIHmMIHjMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
# MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
# MS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQx
# JzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo3QTFBLTA1RTAtRDk0NzE1MDMGA1UE
# AxMsTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZSBTdGFtcGluZyBBdXRob3JpdHmg
# gg8pMIIHgjCCBWqgAwIBAgITMwAAAAXlzw//Zi7JhwAAAAAABTANBgkqhkiG9w0B
# AQwFADB3MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
# aW9uMUgwRgYDVQQDEz9NaWNyb3NvZnQgSWRlbnRpdHkgVmVyaWZpY2F0aW9uIFJv
# b3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMjAwHhcNMjAxMTE5MjAzMjMxWhcN
# MzUxMTE5MjA0MjMxWjBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1l
# c3RhbXBpbmcgQ0EgMjAyMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
# AJ5851Jj/eDFnwV9Y7UGIqMcHtfnlzPREwW9ZUZHd5HBXXBvf7KrQ5cMSqFSHGqg
# 2/qJhYqOQxwuEQXG8kB41wsDJP5d0zmLYKAY8Zxv3lYkuLDsfMuIEqvGYOPURAH+
# Ybl4SJEESnt0MbPEoKdNihwM5xGv0rGofJ1qOYSTNcc55EbBT7uq3wx3mXhtVmtc
# CEr5ZKTkKKE1CxZvNPWdGWJUPC6e4uRfWHIhZcgCsJ+sozf5EeH5KrlFnxpjKKTa
# vwfFP6XaGZGWUG8TZaiTogRoAlqcevbiqioUz1Yt4FRK53P6ovnUfANjIgM9JDdJ
# 4e0qiDRm5sOTiEQtBLGd9Vhd1MadxoGcHrRCsS5rO9yhv2fjJHrmlQ0EIXmp4DhD
# BieKUGR+eZ4CNE3ctW4uvSDQVeSp9h1SaPV8UWEfyTxgGjOsRpeexIveR1MPTVf7
# gt8hY64XNPO6iyUGsEgt8c2PxF87E+CO7A28TpjNq5eLiiunhKbq0XbjkNoU5Jht
# YUrlmAbpxRjb9tSreDdtACpm3rkpxp7AQndnI0Shu/fk1/rE3oWsDqMX3jjv40e8
# KN5YsJBnczyWB4JyeeFMW3JBfdeAKhzohFe8U5w9WuvcP1E8cIxLoKSDzCCBOu0h
# WdjzKNu8Y5SwB1lt5dQhABYyzR3dxEO/T1K/BVF3rV69AgMBAAGjggIbMIICFzAO
# BgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFGtpKDo1
# L0hjQM972K9J6T7ZPdshMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIB
# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9y
# eS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUA
# YgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTIftJqhSobyhmYBAcn
# z1AQT2ioojCBhAYDVR0fBH0wezB5oHegdYZzaHR0cDovL3d3dy5taWNyb3NvZnQu
# Y29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmljYXRp
# b24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNybDCB
# lAYIKwYBBQUHAQEEgYcwgYQwgYEGCCsGAQUFBzAChnVodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVy
# aWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAy
# MC5jcnQwDQYJKoZIhvcNAQEMBQADggIBAF+Idsd+bbVaFXXnTHho+k7h2ESZJRWl
# uLE0Oa/pO+4ge/XEizXvhs0Y7+KVYyb4nHlugBesnFqBGEdC2IWmtKMyS1OWIviw
# pnK3aL5JedwzbeBF7POyg6IGG/XhhJ3UqWeWTO+Czb1c2NP5zyEh89F72u9UIw+I
# fvM9lzDmc2O2END7MPnrcjWdQnrLn1Ntday7JSyrDvBdmgbNnCKNZPmhzoa8PccO
# iQljjTW6GePe5sGFuRHzdFt8y+bN2neF7Zu8hTO1I64XNGqst8S+w+RUdie8fXC1
# jKu3m9KGIqF4aldrYBamyh3g4nJPj/LR2CBaLyD+2BuGZCVmoNR/dSpRCxlot0i7
# 9dKOChmoONqbMI8m04uLaEHAv4qwKHQ1vBzbV/nG89LDKbRSSvijmwJwxRxLLpMQ
# /u4xXxFfR4f/gksSkbJp7oqLwliDm/h+w0aJ/U5ccnYhYb7vPKNMN+SZDWycU5OD
# IRfyoGl59BsXR/HpRGtiJquOYGmvA/pk5vC1lcnbeMrcWD/26ozePQ/TWfNXKBOm
# kFpvPE8CH+EeGGWzqTCjdAsno2jzTeNSxlx3glDGJgcdz5D/AAxw9Sdgq/+rY7jj
# gs7X6fqPTXPmaCAJKVHAP19oEjJIBwD1LyHbaEgBxFCogYSOiUIr0Xqcr1nJfiWG
# 2GwYe6ZoAF1bMIIHnzCCBYegAwIBAgITMwAAAER45LNw/Hbb6gAAAAAARDANBgkq
# hkiG9w0BAQwFADBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENv
# cnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3Rh
# bXBpbmcgQ0EgMjAyMDAeFw0yNDA0MTgxNzU5MjFaFw0yNTA0MTcxNzU5MjFaMIHj
# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRN
# aWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5T
# aGllbGQgVFNTIEVTTjo3QTFBLTA1RTAtRDk0NzE1MDMGA1UEAxMsTWljcm9zb2Z0
# IFB1YmxpYyBSU0EgVGltZSBTdGFtcGluZyBBdXRob3JpdHkwggIiMA0GCSqGSIb3
# DQEBAQUAA4ICDwAwggIKAoICAQCkOm8duCg12uPg10xT6Cq6p3rqkaoYZrIyu9Rs
# j1pFsoU1aG2xh5IVMn8JX+rE3DVagmANFwKQ/lLext/45uMFC71vLxqQCw6VBXgA
# Ovg/D2631BjEYa7WRkb/OTOQqEOBEjRwLfLier4O+FCWZDy5BlpZzWBsSHcV5OrW
# rrhdeWD4EZILdKOqJFXiM3hRz/OO+cua3HfZwcA4Q9WYNFex2pyIAfShiUhMjCr2
# YGRFFwOFyzv27f/qXBYdAlkmQXlZsPQAWmnHnbvDyNg/b6fHBQSoSjW6h/2m5Ghh
# +D72RQQ6Sv3UYA7MvoQYNXHp8CnlQtlUI8t4muRefT/jwVXRSzpgQtaMhD6v7nnY
# du1CSzdV58TOa523bre4iYyzA5skuxDOaJFDkYlvRRftfTRgBfyhIj9EJpmkS89w
# /kJgO+4OxXDLvta0uQo2R+N8ixVx5odrLuK0O2oCEZF0xzR9THbYUSBb0peaAXbz
# iUHlSp92N1L6wO24DdKfjY12/CSLxFpXIdaO3Cp8zUOxPpLNAoT2AYvU8JAY6yQM
# NFEbQWF2qJ+wrVrPLlRvuYt7EvLNOZKUGvSAp83fYsou1x803cFSQfixHLcGo/7z
# eZ92SeTbtId2vGpGJwiWSrNXVIE0BTOzVrbAUZl3rTUw61SiHop8eSqXfIpqQH7S
# 7GhgnQIDAQABo4IByzCCAccwHQYDVR0OBBYEFCCPw+UF492FV00UbbZlYYgv0MOu
# MB8GA1UdIwQYMBaAFGtpKDo1L0hjQM972K9J6T7ZPdshMGwGA1UdHwRlMGMwYaBf
# oF2GW2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29m
# dCUyMFB1YmxpYyUyMFJTQSUyMFRpbWVzdGFtcGluZyUyMENBJTIwMjAyMC5jcmww
# eQYIKwYBBQUHAQEEbTBrMGkGCCsGAQUFBzAChl1odHRwOi8vd3d3Lm1pY3Jvc29m
# dC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFB1YmxpYyUyMFJTQSUyMFRp
# bWVzdGFtcGluZyUyMENBJTIwMjAyMC5jcnQwDAYDVR0TAQH/BAIwADAWBgNVHSUB
# Af8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4AwZgYDVR0gBF8wXTBRBgwr
# BgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQu
# Y29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMAgGBmeBDAEEAjANBgkqhkiG
# 9w0BAQwFAAOCAgEAFgi00QwJ/iM7fbqNgXFAC8IwZ+aLZGFJzVDNcFg7qM20LvnL
# jor98X8hdORnEmU08uQ0B5FqrbDFoXKZNKFrWnv81NlkwOkMnlEGLQIAVzBgRHOK
# LtKgyc864JkON4Cxt2eBpdv3EGwjYjb6jSCME5XEfl2isP6fNivL5zYFuyXTmtTi
# c25M3eEt0PiAgfX34kvHkexN44XzMT+mixR93L2ohq7bgP6I//Zmn5Ol7dBlzJXf
# NpQyWLCVuEiIqB5jaYmAj3umgG3hU6ykUgXyx2i15rtflJc/ddUKlB9p2Hh/Up+O
# 7cTw0A4BjvtYs5ogqWurdaGzWrStMkB+yGgv78iNYJ8mEBoN1ylhP95BbhXltF75
# 4yRx6N09tX8sN9gwc8ukv1PRNYQ3fskSURMlikW7IiG7OBH4Fx3ZVWo/TtksXZau
# XF2Ie3Mb5h1QamrP2il9Ym4szqyMGlv7eMEI3D1B2uXgC1bOFzxMZxpQLQ2M+xix
# ycurfC2ptjv5KJyTw2BxqUSBvzwSNgvDRfrrYo+ODKX7owxH0stNbvWPdrP/ElhS
# eDZvAyI9CrhT0FRhNtVIx0kEVywCwpBOCtcEjQy0u16kWk3JK5lv0bVx0Bcb88Uo
# cU8xjgv2LmWxlYey+aMpdy6nb/ZYEBvr6sZE276zm7wSgr+DM9VZqq/rZgExggPU
# MIID0AIBATB4MGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
# cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFt
# cGluZyBDQSAyMDIwAhMzAAAARHjks3D8dtvqAAAAAABEMA0GCWCGSAFlAwQCAQUA
# oIIBLTAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIE
# ILpjxVG8ii379DFA/Yq/by/tbgOyj+Df6Q+kD6aV2E8KMIHdBgsqhkiG9w0BCRAC
# LzGBzTCByjCBxzCBoAQgdWVJ7Gn31DnkMwnvpWJjMD7VtGgYCMppdl2knxpf5ZYw
# fDBlpGMwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5n
# IENBIDIwMjACEzMAAABEeOSzcPx22+oAAAAAAEQwIgQgh4ir7L6OSnsS7N0Z58NF
# w8CJZK6BqOkWzz9C0LGCymYwDQYJKoZIhvcNAQELBQAEggIAm69ytnxXe8J3Ahva
# wZb8J9BGqMUXh3wTn5GV6JmOSIo2tnN9/IkSrWzV0v9wHyAdBlOJrmjVXQXwGHVM
# iB1Hggv69DpkzI/zUY+n72g2n268u14JV5gpdHRO3pwhAnTtgFnRcG/hVcYA+dsw
# iXX6BnU2n4kDi5H9mu4IAvbo2ZMRZ6mpEBR5FmHWZQEUsYkm4HdPZ3r0SJthRCrx
# 15PGXzOovv782D/YWHVS5sTJAvKiO9xZ8+TWUbR63jewO409iilILxzOEXH849vY
# uuPz06ZyKsyIxP1ynfQFIlFmn9AKrLGHfkVrd3UsggtjkG+vkY/6Im8sizPzjck2
# +5wR+MWfN6ewSvdup7W5lFG98zxcvraq1k+AizTsy/xUtksEMYpqaa5LAVwNtyEt
# y8fJTixNJbW0mDykRVuc5IOKsKn8HkrCygBDLcd9efQJwtLpNUdgCE06HyWb9b1l
# 7qepKN+SlQQ5TAGJHE7BxyhhUUJljgUPODPohOUDoEBNXIXSsaXtO21PPqVMiPDU
# 23kNvPqCPCXqRpnl3+9ONF7NGb32zpE1duWP/sp0fIHebPgKxqBGvatjWhhEL7Ou
# fdFQ+68Hz5fPISSCqPU/GImcVZaigYSqN9CwAeRYA11XzUJHVMFjE2ZoSMZ7aAYJ
# Eum6QMACbY+AFgHkcHs/hfvqChU=
# SIG # End signature block
@ThioJoe
Copy link
Author

ThioJoe commented Mar 5, 2025

@mhtvsSFrpHdE Wow incredible find 🧐 I guess the capabilities are already embedded in that object and we can just directly assign them when adding the adapter. I'll have to update the script

@mhtvsSFrpHdE
Copy link

mhtvsSFrpHdE commented Mar 5, 2025

@ThioJoe At the beginning I follow the Microsoft guide and it didn't work
https://learn.microsoft.com/en-us/windows-server/virtualization/hyper-v/partition-assign-vm-gpu?tabs=powershell
At the same time, later I installed and try vGPU in Windows Sandbox, the one doesn't report code 43 and everything is fine.
Nvidia is correct, Microsoft lacks key information on their website.

Now I'm struggling with GPU over Remote desktop... RemoteFX something maybe

@mhtvsSFrpHdE
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment