ScriptsToProcess/PreLoadTypes.ps1

# Pure-managed Ahtola stack — no native e_sqlite3 / SQLitePCLRaw preload.
$moduleRoot = Split-Path -Path $PSScriptRoot -Parent
$binPath = Join-Path -Path $moduleRoot -ChildPath 'bin'

if (-not (Test-Path -LiteralPath $binPath)) {
    Write-Error "Devolutions.Ahtola.Sqlite bin folder not found: $binPath"
    return
}

# Load dependency assemblies before the binary module binds types.
$preferredOrder = @(
    'Devolutions.Ahtola.Core.dll'
    'Devolutions.Ahtola.Data.dll'
    'Devolutions.Ahtola.Data.Sqlite.dll'
    'Devolutions.Ahtola.PowerShell.dll'
)

$loadedNames = [System.Collections.Generic.HashSet[string]]::new([StringComparer]::OrdinalIgnoreCase)
foreach ($assembly in [AppDomain]::CurrentDomain.GetAssemblies()) {
    try {
        $name = [System.IO.Path]::GetFileName($assembly.Location)
        if ($name) {
            [void]$loadedNames.Add($name)
        }
    }
    catch {
        # Dynamic assemblies have no Location.
    }
}

function Import-AhtolaAssembly {
    param([Parameter(Mandatory)][string]$Path)

    $fileName = [System.IO.Path]::GetFileName($Path)
    if ($loadedNames.Contains($fileName)) {
        Write-Verbose "Assembly already loaded: $fileName"
        return
    }

    Write-Verbose "Loading assembly: $Path"
    $null = [System.Reflection.Assembly]::LoadFrom($Path)
    [void]$loadedNames.Add($fileName)
}

foreach ($name in $preferredOrder) {
    $path = Join-Path -Path $binPath -ChildPath $name
    if (Test-Path -LiteralPath $path) {
        Import-AhtolaAssembly -Path $path
    }
}

Get-ChildItem -LiteralPath $binPath -Filter '*.dll' |
    Where-Object { -not $loadedNames.Contains($_.Name) } |
    ForEach-Object { Import-AhtolaAssembly -Path $_.FullName }

# SIG # Begin signature block
# MII2bwYJKoZIhvcNAQcCoII2YDCCNlwCAQExDTALBglghkgBZQMEAgEwdwYKKwYB
# BAGCNwIBBKBpMGcwNAYKKwYBBAGCNwIBHjAmAgMBAAAEEB/MO2BZSwhOtyTSxil+
# 81ECAQACAQACAQACAQACAQAwLzALBglghkgBZQMEAgEEIFCgI8Sp7lOjq+dVEgjo
# prHKSJy7Turq9qkp77NB4l89oIIbTDCCBcwwggO0oAMCAQICEFSY0tHUWxmVSBN5
# yBHAh5kwDQYJKoZIhvcNAQEMBQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1p
# Y3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5
# IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4X
# DTIwMDQxNjE4MzYxNloXDTQ1MDQxNjE4NDQ0MFowdzELMAkGA1UEBhMCVVMxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0
# IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
# eSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAs5EqB4MGZ/2e
# neDHwLek5kIEfw+m21/71VrXRaD7dwvwgPOmbVpNeVPYoIaEV0Ugx6JU+8eiv4rH
# bjXzohXEL07jSoWWSQ3/vpnYFPa8JwfuQpsr9QuSBuT9aRNlqJFy8piE64M9DuTX
# cRJIIcsN7fZHSbeb+cnHF7aET/+4rJrXc2dJheOGvTdA0CWG1N61wm1iatWpeLwt
# b0n55WwUFP0Ux9NlFjfey268XimN/WKbFSzWBea5iTIzo2LH19ZSZwjELvRWK54L
# h8zsp7SmqusFzRlXpToLBCcckWeeLWItLx6+2sAgywQZyjP7ib6Y4nKgcjW+eeGc
# g2/kbRdvkPM9AIZ1OI7Q4Emau9vT+DDK1VeIaE1y079tf3HY/b0NrpJkSLdbb3km
# tc2blSGE0e8PMj17V4zzRQdMfOBeGA41dottnss2dKsF+OBzXTJWlGeXJQrGNT2U
# l+fBRIuA/cH49HQZ5TD2BvshVz4GHItrFYYnSXuCk8pZ6HVH6D849MdTeaC2tOJc
# Ue+9XzjBE+Z4DJVaLsVAWSjMDyTA7LoJdyOZOKa2HNrHuiC21zfYfzevCOM7cdtu
# cxt9mXKw5IYzWXS1FgB7UG3GhhPa/cQ5gj0kAJpg2rqUwAVRLDSsUJkTh7uzBYCy
# TTACXLgmg120Y3PvriOVT2AovjfVW6UCAwEAAaNUMFIwDgYDVR0PAQH/BAQDAgGG
# MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMh+0mqFKhvKGZgEByfPUBBPaKii
# MBAGCSsGAQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBDAUAA4ICAQCvat3mGectlEMZ
# TsvpUJVkpQORAoviNoA7FaJSwhYZtmpaXXRDMPSb/2B0CbEhHpAWbcUkj1xmiGP0
# T8x98hJMQBCLAZ/aqciu8pUbz50F60k+dKBoW+VWLGUcgn5T2lbZRhd5kkXEEDYI
# UikXyy+m8n7UaSSKHo+wcw3MHEqrsqrtp5FjAWQiqDK4fjIos2dzLZG03DEBC/dH
# Cqbx10rtVmDELAije0CwvHQnUofWvojdN4qJbmeIHfXJXaD+tqs6gNcalzwXNiJB
# HqxN1YPmPDi9TzDpVKnTtgTDMnZhu7AYxSsYs8CA1beVsF5RTSL87Fiq6NiUtKUu
# 7ZLe5xh8IVfdVWP3v23NH9Kmdyhwx+JbOlsI0ltOyACWs+GDNq+GCmVcdPbq7Hpq
# dKDwS+7vlKOsUPKH7dc6MIPJ+31XvuXj+EHK5WSus6PsWOyFmszvuerzVhi5XHOa
# r8V3F4NZ2zcaGHJUpUHStiN1o0Oa5Xd8lnm3QY2/7NyAoJ/Rd3VYXzUT4CUaZwt9
# ziX6BwrkYSHY1BzlB8Y2mfSW0MYV/k7N166LndsW/QTGkr3UiOapo6q792Q4O1/M
# DNA1vnQZA6bFqkyiYTaCPh3zK7yXXdtLeDst9TvvYCPo9ewLIzaVr5hmv1PTe7hp
# SiqWZmnElMb0X26smHiIgAZcorLtojCCBqowggSSoAMCAQICEzMABhiN69u51YX9
# Qd0AAAAGGI0wDQYJKoZIhvcNAQEMBQAwWjELMAkGA1UEBhMCVVMxHjAcBgNVBAoT
# FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjErMCkGA1UEAxMiTWljcm9zb2Z0IElEIFZl
# cmlmaWVkIENTIEVPQyBDQSAwNDAeFw0yNjA5MTMxOTI3MzJaFw0yNjA5MTYxOTI3
# MzJaMGwxCzAJBgNVBAYTAkNBMRUwEwYDVQQIHgwAUQB1AOkAYgBlAGMxEjAQBgNV
# BAcTCUxhdmFsdHJpZTEYMBYGA1UEChMPRGV2b2x1dGlvbnMgSW5jMRgwFgYDVQQD
# Ew9EZXZvbHV0aW9ucyBJbmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB
# gQCKfNDJjd/AHHKgxCsOS5ubL/K9BAizU2YWUzKw9xUFBza96vegKi7/BwMGRs+2
# 6DrKLXJI9OspBAflVNM740Fwix9KfnSq/c064ftD9au6ExZCszZ+0/5iu3+1Ndp0
# FAMQEiU/8mDeaJw7SEv2OrBKwJ757MAQJkvpxWgv5TR0UiyEu8itpoBtb96AnB2K
# CLe5Z8H7fN2Nt2NRNbEgYLt+W8hOlOiGb9DTnj1cp37caJwrTScVXksnWAKJgnej
# whbXIx6dfkahfd1Uk8L0HImPk+6Mpf5JGCDCBYiIMKGIkqVARzna4BHjURY/jy/R
# rgcw2R7pPt0fupEGrHsI/pNh7ykILIYG3IxTJe3mpj5SKmX/5pyRyQD5xAO+zTZ/
# ibZwpU70HujoZEuUWZ+m/lZuV+V7X/Ch6EqMkwZEcVbGwLZZ6hl5ShgHMA9qtP7r
# ss3uaUXI5AFXu+Y071bu6lkhQLU5SCmRTK87qj80Hq554CTrYEmND5248HD/XLIY
# MykCAwEAAaOCAdUwggHRMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDwG
# A1UdJQQ1MDMGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhsrBgEEAYI3YYGIgLEFgoX5
# gFL4yJBqgdOiwFUwHQYDVR0OBBYEFAzDxjFqzNLjkSfMbxXMqScWzSSGMB8GA1Ud
# IwQYMBaAFJrxVHd1DIcWN0agrN55+fR/wXjpMGcGA1UdHwRgMF4wXKBaoFiGVmh0
# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElE
# JTIwVmVyaWZpZWQlMjBDUyUyMEVPQyUyMENBJTIwMDQuY3JsMHQGCCsGAQUFBwEB
# BGgwZjBkBggrBgEFBQcwAoZYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w
# cy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ1MlMjBFT0MlMjBD
# QSUyMDA0LmNydDBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRt
# MA0GCSqGSIb3DQEBDAUAA4ICAQBwuECN7xGNlNGf6QIRIf7k6fWjwNZ6v0KCApzQ
# HovF/aNtu0h38ajoiRq83lGjO9JVOWeA5qE9V4at/J04LWDk+VVdwb73+X9iYDG8
# OutleboizeVDG4TjA8mAWrNydU7/zdLD04upUNU++RP0YEBFSx+rk8GVEEIA8Jh6
# znMWNRNHfHb9EEmLowNmZwx3+I3DWkUumpN4pIFMbjRSQprEoZdwq6pYz0bR7tP+
# hmRJn2dVS5u6Dq+R0zZXFcMBOBANXLEEdMCez7JcFUrD0xrErHyFry2EgF9U+SNW
# 7ZWGliXHXhBPlrbiI4hpn6OdMvyQFwmBT/2gFgoC4FzNC/yLCgu/raCv1Xgmm+cF
# 833uKLKd211+vI5qWlBzbKb8eyFALmDUM6H5/HARQl2FJW9/stWTxDF/fuTtqF8r
# mMuvIazZ1pzSHHRdsTx8Vab7uUm1dsYcI8YW+12lk4UCF+EfSubZ9dTM6KG+MpOp
# L3j0Zlu7VudsjBeIswzxPxhKORjc/7FnH1LAEPaBeQVF93AW7mQ12+JpcLGQeSlX
# C4yXQ0dzeRWgNy5T1KNtkg00rHj2gsOjvj8H5ojr+lDPepd+GXxDL/YjIUAdKm8y
# RSy/lnpEvxp68HqsJMMHelNqNPFsh+D8OHdJRucET/kgBph6O39koBD8ga0jqh23
# KV0X4zCCBygwggUQoAMCAQICEzMAAAAXJ0UJC4uHr8YAAAAAABcwDQYJKoZIhvcN
# AQEMBQAwYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZlcmlmaWVkIENvZGUgU2lnbmlu
# ZyBQQ0EgMjAyMTAeFw0yNjAzMjYxODExMzFaFw0zMTAzMjYxODExMzFaMFoxCzAJ
# BgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNV
# BAMTIk1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBFT0MgQ0EgMDQwggIiMA0GCSqG
# SIb3DQEBAQUAA4ICDwAwggIKAoICAQCCx2T+Aw9mKgGVzJ+Tq0PMn49G3itIsYpb
# x7ClLSRHFe1RELdPcZ1sIqWOhsSfy6yyqEapClGH9Je9FXA1cQgZvvpQbkg+QInV
# Lr/0EPrVBCwrM96lbRI2PxNeCwXG9LsyW2hG6KQgintDmNCBo4zpDIr377plVdSl
# iZm6UB7rHwmvBnR02QT6tnrqWq2ihzB6lRJVTEzuh0OafzIMeMnYM0+x+ve5EOLH
# dfiq+HXiMf9Jb7YLHtYgyHIiJA7bTWLqFSLGaTh7ZlbxbsLXA91OOroEpv7OjzFu
# u3tkpC9FflA4Dp2Euq4+qPmxUqfGp+TX0gLRJp9NJOzzILjcTD3rkFFFbxUv1xyg
# 6avivFDLtoKBhM2Td138umE1pNOacanuSYtPHIeQHmB6haFi64avLBLwTTAm/Rbi
# t860cFXR72wq+5Qh4hSmezHqKXERWPpVBe+APrJ4Iqc+aPeMmIkoCWZQO22HnLNF
# UFSXjiwyIbgvlH/LIAJEqTafTzxDZgKhlLU7zr6gwsq3WNpcYQI6NuxWnwh3VVDD
# yF7onQqKs5Ll7bleVN0Y8VvqgE45ppyBbvwqN/Run5fMCCRz3aYMY0kZhKO92eP7
# t4zHqZ5bQMAgZ0tE2Pz/jb0wiykUF/PcoOqqk3vVLiRDYst6vd3GEMNzMpUUvQcv
# BG46+COIbwIDAQABo4IB3DCCAdgwDgYDVR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcV
# AQQDAgEAMB0GA1UdDgQWBBSa8VR3dQyHFjdGoKzeefn0f8F46TBUBgNVHSAETTBL
# MEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1
# AGIAQwBBMBIGA1UdEwEB/wQIMAYBAf8CAQAwHwYDVR0jBBgwFoAU2UEpsA8PY2zv
# adf1zSmepEhqMOYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDovL3d3dy5taWNyb3Nv
# ZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUyMENv
# ZGUlMjBTaWduaW5nJTIwUENBJTIwMjAyMS5jcmwwfQYIKwYBBQUHAQEEcTBvMG0G
# CCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRz
# L01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDb2RlJTIwU2lnbmluZyUyMFBD
# QSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQCQdVoZ/U0m38l2iKaZFlsx
# avptpoOLyaR1a9ZK2TSF1kOnFJhMDse6KkCgsveoiEjXTVc6Xt86IKHn76Nk5qZB
# 0BXv2iMRQ2giAJmYvZcmstoZqfB2M3Kd5wnJhUJOtF/b6HsqSelY6nhrF06zor1l
# DmDQixBZcLB9zR1+RKQso1jekNxYuUk+HaN3k1S57qk0O//YbkwU0mELCW04N5vI
# CMZx5T5c7Nq/7uLvbVhCdD7f2bZpA4U7vOkB1ooB4AaER3pjoJ0Mad5LFyi6Na9p
# 9Zu/hrLeOjU5FItS5YxsqvlfXxAThJ176CmkYstKRmytSHZ7JhKRfV6e9Zftk/OD
# b/CK4pGVAVqsOf4337bQGrOHHCQ3IvN9gmnUuDh8JdvbheoWPHxIN1GB5sUiY584
# tXN7xdD8LCSsRqJvQ8e7a3gZWTgViugRs1QWq+N0G9Nje6JHlN1CjJehge+H5PGk
# tJja+juGEr0P+ukSkcL6qaZxFQTh3SDI71lvW++3bl/Ezd6SO8N9Udw+reoyvRHC
# yTiSsplZQSBTVJdPmo3qCpGuyHFtPo5CBn3/FPTiqJd3M9BHoqKd0G9Kmg6fGcAv
# FwnLNXA2kov727wRljL3ypfqL7iAT/Ynpxul6RwHRlcOf9dDGg1RRvr92NP/CWVX
# Ib68geR2rvU/NsfmtjF1wDCCB54wggWGoAMCAQICEzMAAAAHh6M0o3uljhwAAAAA
# AAcwDQYJKoZIhvcNAQEMBQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jv
# c29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5IFZl
# cmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4XDTIx
# MDQwMTIwMDUyMFoXDTM2MDQwMTIwMTUyMFowYzELMAkGA1UEBhMCVVMxHjAcBgNV
# BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0IElE
# IFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEB
# BQADggIPADCCAgoCggIBALLwwK8ZiCji3VR6TElsaQhVCbRS/3pK+MHrJSj3Zxd3
# KU3rlfL3qrZilYKJNqztA9OQacr1AwoNcHbKBLbsQAhBnIB34zxf52bDpIO3NJlf
# IaTE/xrweLoQ71lzCHkD7A4As1Bs076Iu+mA6cQzsYYH/Cbl1icwQ6C65rU4V9NQ
# hNUwgrx9rGQ//h890Q8JdjLLw0nV+ayQ2Fbkd242o9kH82RZsH3HEyqjAB5a8+Ae
# 2nPIPc8sZU6ZE7iRrRZywRmrKDp5+TcmJX9MRff241UaOBs4NmHOyke8oU1TYrkx
# h+YeHgfWo5tTgkoSMoayqoDpHOLJs+qG8Tvh8SnifW2Jj3+ii11TS8/FGngEaNAW
# rbyfNrC69oKpRQXY9bGH6jn9NEJv9weFxhTwyvx9OJLXmRGbAUXN1U9nf4lXezky
# 6Uh/cgjkVd6CGUAf0K+Jw+GE/5VpIVbcNr9rNE50Sbmy/4RTCEGvOq3GhjITbCa4
# crCzTTHgYYjHs1NbOc6brH+eKpWLtr+bGecy9CrwQyx7S/BfYJ+ozst7+yZtG2wR
# 461uckFu0t+gCwLdN0A6cFtSRtR8bvxVFyWwTtgMMFRuBa3vmUOTnfKLsLefRaQc
# VTgRnzeLzdpt32cdYKp+dhr2ogc+qM6K4CBI5/j4VFyC4QFeUP2YAidLtvpXRRo3
# AgMBAAGjggI1MIICMTAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAw
# HQYDVR0OBBYEFNlBKbAPD2Ns72nX9c0pnqRIajDmMFQGA1UdIARNMEswSQYEVR0g
# ADBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L0RvY3MvUmVwb3NpdG9yeS5odG0wGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEw
# DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTIftJqhSobyhmYBAcnz1AQT2io
# ojCBhAYDVR0fBH0wezB5oHegdYZzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
# aW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmljYXRpb24lMjBS
# b290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNybDCBwwYIKwYB
# BQUHAQEEgbYwgbMwgYEGCCsGAQUFBzAChnVodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
# b20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0
# aW9uJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcnQw
# LQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20vb2NzcDAN
# BgkqhkiG9w0BAQwFAAOCAgEAfyUqnv7Uq+rdZgrbVyNMul5skONbhls5fccPlmIb
# zi+OwVdPQ4H55v7VOInnmezQEeW4LqK0wja+fBznANbXLB0KrdMCbHQpbLvG6UA/
# Xv2pfpVIE1CRFfNF4XKO8XYEa3oW8oVH+KZHgIQRIwAbyFKQ9iyj4aOWeAzwk+f9
# E5StNp5T8FG7/VEURIVWArbAzPt9ThVN3w1fAZkF7+YU9kbq1bCR2YD+MtunSQ1R
# ft6XG7b4e0ejRA7mB2IoX5hNh3UEauY0byxNRG+fT2MCEhQl9g2i2fs6VOG19CNe
# p7SquKaBjhWmirYyANb0RJSLWjinMLXNOAga10n8i9jqeprzSMU5ODmrMCJE12xS
# /NWShg/tuLjAsKP6SzYZ+1Ry358ZTFcx0FS/mx2vSoU8s8HRvy+rnXqyUJ9HBqS0
# DErVLjQwK8VtsBdekBmdTbQVoCgPCqr+PDPB3xajYnzevs7eidBsM71PINK2BoE2
# UfMwxCCX3mccFgx6UsQeRSdVVVNSyALQe6PT12418xon2iDGE81OGCreLzDcMAZn
# rUAx4XQLUz6ZTl65yPUiOh3k7Yww94lDf+8oG2oZmDh5O1Qe38E+M3vhKwmzIeoB
# 1dVLlz4i3IpaDcR+iuGjH2TdaC1ZOmBXiCRKJLj4DT2uhJ04ji+tHD6n58vhavFI
# rmcxghp9MIIaeQIBATBxMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmllZCBD
# UyBFT0MgQ0EgMDQCEzMABhiN69u51YX9Qd0AAAAGGI0wCwYJYIZIAWUDBAIBoEww
# GQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwLwYJKoZIhvcNAQkEMSIEIEs1KZdR
# GCw84ue5E2Y28k4/G9VUhV3SEP/Xokvy2qMdMA0GCSqGSIb3DQEBCwUABIIBgFlm
# ghUpBJ7YEHT9a4dq9IkI6QWHcg53S/FVOvWCizM+MKvA5zj58analgnCotdJweSD
# G4H3nUB6VWoEQzdooSRIuUU5+skBg0ySydE1Gvx82F6uOLBj/G8DoR4xLIR95oTC
# C1s/4jzQZabjf3yPyjZ2NXH2aT3GspKYlaYVDJFdMLZ5E0/FCC7t8F7HpOw7PwKy
# qQnUgk8fKvLq9KlS1OmZI8KiyvA15CaUyz+mfTglByXVw7kb9QVRUeQE1IKvZtwz
# yMJkEWIkjr/3kIhjdHtN0AUlwhh5KF5HXI83FV87IICXoWH7fA+ElS//MIDKz3jM
# jAJmmgGnHT1aBUMNzuob/bLbneypvhErKyjOA4tuLu8gHZn9K6oi5qJWIzJB7l0F
# 9Vyl5mh7wOXlGiBsxM54kPDfSwbbJZy3Pf9TKby1f4R2piKIMEdv18aOr2V/bDXM
# 4yYt/gSa2I/mqeGV9rMu3QiKF1oigHQ9/lnODX79xQWttef5doDIWV9bGRgJ+KGC
# GBEwghgNBgorBgEEAYI3AwMBMYIX/TCCF/kGCSqGSIb3DQEHAqCCF+owghfmAgED
# MQ8wDQYJYIZIAWUDBAIBBQAwggFiBgsqhkiG9w0BCRABBKCCAVEEggFNMIIBSQIB
# AQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCD19LS2vF4jkUoDIvRKa+uJ
# VyDOeYpfb4GuBMkOQGUJ/gIGaqQRcT9PGBMyMDI2MDkxNTEzNTQyMS40MjdaMASA
# AgH0oIHhpIHeMIHbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
# MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
# MSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQL
# Ex5uU2hpZWxkIFRTUyBFU046N0QwMC0wNUUwLUQ5NDcxNTAzBgNVBAMTLE1pY3Jv
# c29mdCBQdWJsaWMgUlNBIFRpbWUgU3RhbXBpbmcgQXV0aG9yaXR5oIIPITCCB4Iw
# ggVqoAMCAQICEzMAAAAF5c8P/2YuyYcAAAAAAAUwDQYJKoZIhvcNAQEMBQAwdzEL
# MAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYG
# A1UEAxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENlcnRp
# ZmljYXRlIEF1dGhvcml0eSAyMDIwMB4XDTIwMTExOTIwMzIzMVoXDTM1MTExOTIw
# NDIzMVowYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5n
# IENBIDIwMjAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCefOdSY/3g
# xZ8FfWO1BiKjHB7X55cz0RMFvWVGR3eRwV1wb3+yq0OXDEqhUhxqoNv6iYWKjkMc
# LhEFxvJAeNcLAyT+XdM5i2CgGPGcb95WJLiw7HzLiBKrxmDj1EQB/mG5eEiRBEp7
# dDGzxKCnTYocDOcRr9KxqHydajmEkzXHOeRGwU+7qt8Md5l4bVZrXAhK+WSk5Cih
# NQsWbzT1nRliVDwunuLkX1hyIWXIArCfrKM3+RHh+Sq5RZ8aYyik2r8HxT+l2hmR
# llBvE2Wok6IEaAJanHr24qoqFM9WLeBUSudz+qL51HwDYyIDPSQ3SeHtKog0ZubD
# k4hELQSxnfVYXdTGncaBnB60QrEuazvcob9n4yR65pUNBCF5qeA4QwYnilBkfnme
# AjRN3LVuLr0g0FXkqfYdUmj1fFFhH8k8YBozrEaXnsSL3kdTD01X+4LfIWOuFzTz
# uoslBrBILfHNj8RfOxPgjuwNvE6YzauXi4orp4Sm6tF245DaFOSYbWFK5ZgG6cUY
# 2/bUq3g3bQAqZt65KcaewEJ3ZyNEobv35Nf6xN6FrA6jF9447+NHvCjeWLCQZ3M8
# lgeCcnnhTFtyQX3XgCoc6IRXvFOcPVrr3D9RPHCMS6Ckg8wggTrtIVnY8yjbvGOU
# sAdZbeXUIQAWMs0d3cRDv09SvwVRd61evQIDAQABo4ICGzCCAhcwDgYDVR0PAQH/
# BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRraSg6NS9IY0DPe9iv
# Sek+2T3bITBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMG
# A1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8G
# A1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUyH7SaoUqG8oZmAQHJ89QEE9oqKIw
# gYQGA1UdHwR9MHsweaB3oHWGc2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lv
# cHMvY3JsL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9v
# dCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcmwwgZQGCCsGAQUF
# BwEBBIGHMIGEMIGBBggrBgEFBQcwAoZ1aHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNhdGlv
# biUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3J0MA0G
# CSqGSIb3DQEBDAUAA4ICAQBfiHbHfm21WhV150x4aPpO4dhEmSUVpbixNDmv6Tvu
# IHv1xIs174bNGO/ilWMm+Jx5boAXrJxagRhHQtiFprSjMktTliL4sKZyt2i+SXnc
# M23gRezzsoOiBhv14YSd1Klnlkzvgs29XNjT+c8hIfPRe9rvVCMPiH7zPZcw5nNj
# thDQ+zD563I1nUJ6y59TbXWsuyUsqw7wXZoGzZwijWT5oc6GvD3HDokJY401uhnj
# 3ubBhbkR83RbfMvmzdp3he2bvIUztSOuFzRqrLfEvsPkVHYnvH1wtYyrt5vShiKh
# eGpXa2AWpsod4OJyT4/y0dggWi8g/tgbhmQlZqDUf3UqUQsZaLdIu/XSjgoZqDja
# mzCPJtOLi2hBwL+KsCh0Nbwc21f5xvPSwym0Ukr4o5sCcMUcSy6TEP7uMV8RX0eH
# /4JLEpGyae6Ki8JYg5v4fsNGif1OXHJ2IWG+7zyjTDfkmQ1snFOTgyEX8qBpefQb
# F0fx6URrYiarjmBprwP6ZObwtZXJ23jK3Fg/9uqM3j0P01nzVygTppBabzxPAh/h
# Hhhls6kwo3QLJ6No803jUsZcd4JQxiYHHc+Q/wAMcPUnYKv/q2O444LO1+n6j01z
# 5mggCSlRwD9faBIySAcA9S8h22hIAcRQqIGEjolCK9F6nK9ZyX4lhthsGHumaABd
# WzCCB5cwggV/oAMCAQICEzMAAABV2d1pJij5+OIAAAAAAFUwDQYJKoZIhvcNAQEM
# BQAwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENB
# IDIwMjAwHhcNMjUxMDIzMjA0NjQ5WhcNMjYxMDIyMjA0NjQ5WjCB2zELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0
# IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjdE
# MDAtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1l
# IFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAL25H5IeWUiz9DAlFmn2sPymaFWbvYkMfK+ScIWb3a1IvOlIwghUDjY0Gp6y
# MRhfYURiGS0GedIB6ywvuH6VBCX3+bdOFcAclgtv21jrpOjZmk4fSaT2Q3BszUfe
# UJa8o3xI7ZfoMY9dszTxHQAz6ZVX87fHGEVhQcfxW33IdPJOj/ae419qtYxT21MV
# mCfsTshgtWioQxmOW/vMC9/b+qgtBxSMf798vm3qfmhF6KCvFaHlivrM32hY16PG
# E3L0PFC+LM7vRxU7mTb+r76CeybvqOWk4+dbKYftPhV1t/E5S/6wwXeYmu/Y7JC7
# Tnh2w45G5Y4pcM3oHMb/YuPRdOWa0v+RC2QgmNVWqjuxDiylWscXQDuaMtb29Acd
# GUVV9ZsRY2M2sthAtOdZOshiR5ufMtaHtiCkWv0jNfgUxrHurxzYuUNneWZ6EfQD
# gFAw8CSCKkSOK2c9jEop4ddVq10xvbqxdrqMneVXvvIcXrPQAXj9j2ECpV2EwMb3
# Wnmpw00P78JpzPsk3Fs61ZvOGd/F1RcOBu6f2TWdp7HL7+rq7tgHr13MldbfIWu4
# lpoYYE1gTQa1Yrg5XN4j7zs9klT2z3qocmPzV8DWQgIHNh+aTs7bujMEMQyI7Xt1
# zPxZCgcR6H0tmmzU/9BxvsWbRalCQ2sYGyWupTdc4e7KY7kPAgMBAAGjggHLMIIB
# xzAdBgNVHQ4EFgQUVgRfEG3cCAPwyL+pyRbKwdesZbYwHwYDVR0jBBgwFoAUa2ko
# OjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZbaHR0cDovL3d3dy5t
# aWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNB
# JTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5BggrBgEFBQcBAQRtMGsw
# aQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2Vy
# dHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0El
# MjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI
# MA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQBgjdMg30BATBBMD8G
# CCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3Mv
# UmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEBDAUAA4ICAQBSHuGS
# VHvalCnFnlsqXIQefH1xP2SFr9g+Vz+f5P7QeywjfQb5jUlSmd1XnJUDPe/MHxL7
# r3TEElL+mNtG6CDPAytStSFPXD9tTBtBMYh8Wqo64pH9qm361yIqeBH979mzWCkM
# QsTd0nM6dUl9B+7qiti+ToXwxIl39eYqLuYYfhD2mqqePXMzUKSQzkf73yYIVHP6
# nLJQz4aAmaWcfG9jg78sBkDV8KpW7JgktuLhphJEN1B+SVHjenPdcmrFXIUu/K4j
# K5ukfWaQIjuaXzSjBlNjC5tQN6adPfA3GxUwHPeR4ekL5If/9vBf13tmzBW+gy+0
# sNGTveb9IL9GU8iX8UvywsX62nhCCPRUhTigDBKdczRUrNrntBhowbfchBDFML8a
# vRMRc9Gmc2JvIryX336SFQ51//q1UU2HMSJEMhWLJSIWJVhfUowsOa+PampIzETY
# fFvTu2mqKJUlWZXkGYxrdCvCczJcqeoadpW1ul6kcdnDh228SQ8ZhDc6IRlM4iNd
# 5SNoNgX+aom3wuGyjUaSaPZWxPB1G2NKiYhPLt0lPHg0Gskj1zhISY8UQkMMDr3o
# 2JgRuT+wnJEDQUp55ddvhSkSoD6I9DL/s+TjIY/c9jLaW5xywJHqdKHUApRMsghv
# 7kebSua1upmR+TquelFktDSOjVdSRkuya4uoxTGCB0Mwggc/AgEBMHgwYTELMAkG
# A1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UE
# AxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjACEzMA
# AABV2d1pJij5+OIAAAAAAFUwDQYJYIZIAWUDBAIBBQCgggScMBEGCyqGSIb3DQEJ
# EAIPMQIFADAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF
# MQ8XDTI2MDkxNTEzNTQyMVowLwYJKoZIhvcNAQkEMSIEIN3NxOaiM7KtjaQkVviO
# Ya7Z3xYVd3wzwWWx8O1AsPc9MIG5BgsqhkiG9w0BCRACLzGBqTCBpjCBozCBoAQg
# 2Lk8l2SGYru/ff7+D2qrJnkswcYdK6pGKu7GGGr4/s0wfDBlpGMwYTELMAkGA1UE
# BhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp
# TWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjACEzMAAABV
# 2d1pJij5+OIAAAAAAFUwggNeBgsqhkiG9w0BCRACEjGCA00wggNJoYIDRTCCA0Ew
# ggIpAgEBMIIBCaGB4aSB3jCB2zELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEn
# MCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjdEMDAtMDVFMC1EOTQ3MTUwMwYDVQQD
# EyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eaIj
# CgEBMAcGBSsOAwIaAxUAHTtUAYJlv7bgWVeRBo4X7FeHDeqgZzBlpGMwYTELMAkG
# A1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UE
# AxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjAwDQYJ
# KoZIhvcNAQELBQACBQDuUy0wMCIYDzIwMjYwOTE1MDIzNDI0WhgPMjAyNjA5MTYw
# MjM0MjRaMHQwOgYKKwYBBAGEWQoEATEsMCowCgIFAO5TLTACAQAwBwIBAAICIBMw
# BwIBAAICEMcwCgIFAO5UfrACAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGE
# WQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQsFAAOCAQEA
# o7+l3l36AP0n+7kdl/1YtV0pp58LHKMkQNfUdxqMXCXebGjFXEGZ3uxKnQiwMLfY
# jphX0SinNoZ22q9ALLsrj3kqIoPhhI9hHhz5KglIkafgico/KOncvJZcO6Sg2zxT
# 6JBPLP6hWYw4ZFy8WYELE3z9W4mrErNZtphugTJ8fZ8IMdgDWUOgwTDYbwFl4xIJ
# lvOcoTGZ05IsFP39STSK/VOwkjy/pNETqlPODDxZfrA30UKgk1MW4aeZ9qrQ4NNZ
# mlc5coXTyoy7QZ9Rmu1hsj0nGBYyEz2vF88fIB54Yqy+EAVMmFzZN1fRvArPqe0t
# KDFkpO+tuSWq7DC45LLoYzANBgkqhkiG9w0BAQEFAASCAgBsdyZIUzwQr3xobebx
# C8ZPTXVtcykxs+eKWlp5XkiIodEIkEcJwDzF/rFDmYb/5PRNZXb8cc+dv4omoZJ7
# 2PqTA739Vywsi62XxiWlNX51TN42Xg++cahmXeNRlXVVMs2xDxydS7Fr99IKkqm+
# 0ooHt6rIdW4PH1OeojPgZZIUmi45+H/LRjx7OS376pFhs4x1EzliHWvMmqk+mh9R
# 4obaF3S4/4XgHVPI4cacQ1CKduso9YWhmmLYF63hrff9O+V7K+Hz9o1edw4k4MMA
# 3kRu8OrLdASqOj67rgFGmvUMiWMOoRs2Q1ZYn/+5TI9pL0EHnVG5KY1JfGJVBiCR
# tEMdgtuMOurvZ+D2S0fVGiS/YJmxlwESHHQKMtp/DUSFexb8eeeXF9LGWD4BNsce
# UwLIMbiVgrYcdyqaLQtLC6tJGI6I0myQzuvMutLlvYtKrEeSmylqMXhJ66aZ3GGM
# 1xmM9o+8oeX0QsUzKMv7IiF08kD77QlV4hGMlDt8pUZ/HaTgqy/26565CvpPB9k9
# xFO42AXutrtGTXkCTEUUoLeil5WGcX86IgWX5CKWKlypVNNwNPgSsWINCoP3ASmZ
# CRx9rQmWwRxLztr/llxuKTx6SVPViZ7BtDclWYNQ8kmbx3WKd8kOcCr8D9d/UEPA
# prhBj/qe8ekVRvQYpUCpX14EvQ==
# SIG # End signature block