' Windows Installer database utility to merge data from another database              
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates the use of the Database.Merge method and MsiDatabaseMerge API
'
Option Explicit

Const msiOpenDatabaseModeReadOnly     = 0
Const msiOpenDatabaseModeTransact     = 1
Const msiOpenDatabaseModeCreate       = 3
Const ForAppending = 8
Const ForReading = 1
Const ForWriting = 2
Const TristateTrue = -1

Dim argCount:argCount = Wscript.Arguments.Count
Dim iArg:iArg = 0
If (argCount < 2) Then
	Wscript.Echo "Windows Installer database merge utility" &_
		vbNewLine & " 1st argument is the path to MSI database (installer package)" &_
		vbNewLine & " 2nd argument is the path to database containing data to merge" &_
		vbNewLine & " 3rd argument is the optional table to contain the merge errors" &_
		vbNewLine & " If 3rd argument is not present, the table _MergeErrors is used" &_
		vbNewLine & "  and that table will be dropped after displaying its contents." &_
		vbNewLine &_
		vbNewLine & "Copyright (C) Microsoft Corporation.  All rights reserved."
	Wscript.Quit 1
End If

' Connect to Windows Installer object
On Error Resume Next
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError

' Open databases and merge data
Dim database1 : Set database1 = installer.OpenDatabase(WScript.Arguments(0), msiOpenDatabaseModeTransact) : CheckError
Dim database2 : Set database2 = installer.OpenDatabase(WScript.Arguments(1), msiOpenDatabaseModeReadOnly) : CheckError
Dim errorTable : errorTable = "_MergeErrors"
If argCount >= 3 Then errorTable = WScript.Arguments(2)
Dim hasConflicts:hasConflicts = database1.Merge(database2, errorTable) 'Old code returns void value, new returns boolean
If hasConflicts <> True Then hasConflicts = CheckError 'Temp for old Merge function that returns void
If hasConflicts <> 0 Then
	Dim message, line, view, record
	Set view = database1.OpenView("Select * FROM `" & errorTable & "`") : CheckError
	view.Execute
	Do
		Set record = view.Fetch
		If record Is Nothing Then Exit Do
		line = record.StringData(1) & " table has " & record.IntegerData(2) & " conflicts"
		If message = Empty Then message = line Else message = message & vbNewLine & line
	Loop
	Set view = Nothing
	Wscript.Echo message
End If
If argCount < 3 And hasConflicts Then database1.OpenView("DROP TABLE `" & errorTable & "`").Execute : CheckError
database1.Commit : CheckError
Quit 0

Function CheckError
	Dim message, errRec
	CheckError = 0
	If Err = 0 Then Exit Function
	message = Err.Source & " " & Hex(Err) & ": " & Err.Description
	If Not installer Is Nothing Then
		Set errRec = installer.LastErrorRecord
		If Not errRec Is Nothing Then message = message & vbNewLine & errRec.FormatText : CheckError = errRec.IntegerData(1)
	End If
	If CheckError = 2268 Then Err.Clear : Exit Function
	Wscript.Echo message
	Wscript.Quit 2
End Function

'' SIG '' Begin signature block
'' SIG '' MIImVQYJKoZIhvcNAQcCoIImRjCCJkICAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' QXX+BeRpnj5/3w9MZiLTEbzssoFPyxBqr0/6QcQWjb+g
'' SIG '' ggtyMIIE+jCCA+KgAwIBAgITMwAABX168ttzjB8s2AAA
'' SIG '' AAAFfTANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
'' SIG '' UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
'' SIG '' UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
'' SIG '' aWduaW5nIFBDQSAyMDEwMB4XDTI0MDQyNDIwMjA0N1oX
'' SIG '' DTI1MDQxOTIwMjA0N1owfzELMAkGA1UEBhMCVVMxEzAR
'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEpMCcGA1UEAxMgTWljcm9zb2Z0IFdpbmRvd3MgS2l0
'' SIG '' cyBQdWJsaXNoZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
'' SIG '' DwAwggEKAoIBAQDq70XAHhp1Bzk5Sink3hOLKK4RoGVw
'' SIG '' mFv26xDMZdc92EZCzhjpva6HbqPi1tXi4wEi1w+wYRMn
'' SIG '' oe+fqoEyoivKSjKuERFoGbz67xXnlPFpjf3Q+7dZzjc5
'' SIG '' I9emBCj5IinlPNjxXX44L6Gu5uabQScPqcy96Xnv7d8w
'' SIG '' 9Hqs36epaD0hKmPFspsEm6yZEMotfYhJimrIW6q1i+Gz
'' SIG '' 77OuxKH5rGfaQxG1hDKZ0T0v8K1mGo51ik+/ITJOQMLm
'' SIG '' ToH8JZXL9WGjAWt6tP8mwgdQWLSaR5qHT1H6ElTezGkT
'' SIG '' XSNS6htmhQLwZ6bAYvOcG7TguFOoZaYIAxG2r5zgOx9Q
'' SIG '' aN5tAgMBAAGjggFuMIIBajAfBgNVHSUEGDAWBgorBgEE
'' SIG '' AYI3CgMUBggrBgEFBQcDAzAdBgNVHQ4EFgQU6W12kIJh
'' SIG '' z7jArDY6rVulZAOcFTAwRQYDVR0RBD4wPKQ6MDgxHjAc
'' SIG '' BgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEWMBQG
'' SIG '' A1UEBRMNMjI5OTAzKzUwMjIzMjAfBgNVHSMEGDAWgBTm
'' SIG '' /F97uyIAWORyTrX0IXQjMubvrDBWBgNVHR8ETzBNMEug
'' SIG '' SaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp
'' SIG '' L2NybC9wcm9kdWN0cy9NaWNDb2RTaWdQQ0FfMjAxMC0w
'' SIG '' Ny0wNi5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUF
'' SIG '' BzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp
'' SIG '' L2NlcnRzL01pY0NvZFNpZ1BDQV8yMDEwLTA3LTA2LmNy
'' SIG '' dDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IB
'' SIG '' AQA0ypoeFSVk5BzVHEUkeqK1sO1jCfpIVeDCsGow8JK+
'' SIG '' 2turz2Ppmhrx3WZD1KIcllf8oiN0wZBiBC25UjNOfvRk
'' SIG '' MShOkLEj175n2yLa6i3/MIRyLleBClzY37z4fEQ1fdPG
'' SIG '' nyYMiv7J8Rs+QHXP34A940wJsxlnq1IwErtwaffSOmrU
'' SIG '' yLp4Yk05nkvekFJpprPC3QTuow2ONyMZVD1Wj+icbD3W
'' SIG '' Id8wPGPcgcetGIkMVQEGjj+fcLyrWI4gXnrAfdgCQEP7
'' SIG '' qNvg+3nN7VBNIJ4YsH97JhBc09X7DfVjUKlrzXFfEQl6
'' SIG '' POqf4tM/jNrEgtKUQvUOAWuTZHR0wUzp8GEPMIIGcDCC
'' SIG '' BFigAwIBAgIKYQxSTAAAAAAAAzANBgkqhkiG9w0BAQsF
'' SIG '' ADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
'' SIG '' bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
'' SIG '' FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp
'' SIG '' TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9y
'' SIG '' aXR5IDIwMTAwHhcNMTAwNzA2MjA0MDE3WhcNMjUwNzA2
'' SIG '' MjA1MDE3WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
'' SIG '' V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
'' SIG '' A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD
'' SIG '' VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAy
'' SIG '' MDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
'' SIG '' AQEA6Q5kUHlntcTj/QkATJ6UrPdWaOpE2M/FWE+ppXZ8
'' SIG '' bUW60zmStKQe+fllguQX0o/9RJwI6GWTzixVhL99COMu
'' SIG '' K6hBKxi3oktuSUxrFQfe0dLCiR5xlM21f0u0rwjYzIjW
'' SIG '' axeUOpPOJj/s5v40mFfVHV1J9rIqLtWFu1k/+JC0K4N0
'' SIG '' yiuzO0bj8EZJwRdmVMkcvR3EVWJXcvhnuSUgNN5dpqWV
'' SIG '' XqsogM3Vsp7lA7Vj07IUyMHIiiYKWX8H7P8O7YASNUwS
'' SIG '' pr5SW/Wm2uCLC0h31oVH1RC5xuiq7otqLQVcYMa0Kluc
'' SIG '' IxxfReMaFB5vN8sZM4BqiU2jamZjeJPVMM+VHwIDAQAB
'' SIG '' o4IB4zCCAd8wEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0O
'' SIG '' BBYEFOb8X3u7IgBY5HJOtfQhdCMy5u+sMBkGCSsGAQQB
'' SIG '' gjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAP
'' SIG '' BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP
'' SIG '' 6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeG
'' SIG '' RWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3Js
'' SIG '' L3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIz
'' SIG '' LmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKG
'' SIG '' Pmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2Vy
'' SIG '' dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGd
'' SIG '' BgNVHSAEgZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9Bggr
'' SIG '' BgEFBQcCARYxaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
'' SIG '' L1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEF
'' SIG '' BQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMA
'' SIG '' eQBfAFMAdABhAHQAZQBtAGUAbgB0AC4gHTANBgkqhkiG
'' SIG '' 9w0BAQsFAAOCAgEAGnTvV08pe8QWhXi4UNMi/AmdrIKX
'' SIG '' +DT/KiyXlRLl5L/Pv5PI4zSp24G43B4AvtI1b6/lf3mV
'' SIG '' d+UC1PHr2M1OHhthosJaIxrwjKhiUUVnCOM/PB6T+DCF
'' SIG '' F8g5QKbXDrMhKeWloWmMIpPMdJjnoUdD8lOswA8waX/+
'' SIG '' 0iUgbW9h098H1dlyACxphnY9UdumOUjJN2FtB91TGcun
'' SIG '' 1mHCv+KDqw/ga5uV1n0oUbCJSlGkmmzItx9KGg5pqdfc
'' SIG '' wX7RSXCqtq27ckdjF/qm1qKmhuyoEESbY7ayaYkGx0aG
'' SIG '' ehg/6MUdIdV7+QIjLcVBy78dTMgW77Gcf/wiS0mKbhXj
'' SIG '' pn92W9FTeZGFndXS2z1zNfM8rlSyUkdqwKoTldKOEdqZ
'' SIG '' Z14yjPs3hdHcdYWch8ZaV4XCv90Nj4ybLeu07s8n07Ve
'' SIG '' afqkFgQBpyRnc89NT7beBVaXevfpUk30dwVPhcbYC/GO
'' SIG '' 7UIJ0Q124yNWeCImNr7KsYxuqh3khdpHM2KPpMmRM19x
'' SIG '' HkCvmGXJIuhCISWKHC1g2TeJQYkqFg/XYTyUaGBS79ZH
'' SIG '' maCAQO4VgXc+nOBTGBpQHTiVmx5mMxMnORd4hzbOTsNf
'' SIG '' svU9R1O24OXbC2E9KteSLM43Wj5AQjGkHxAIwlacvyRd
'' SIG '' UQKdannSF9PawZSOB3slcUSrBmrm1MbfI5qWdcUxgho7
'' SIG '' MIIaNwIBATCBlTB+MQswCQYDVQQGEwJVUzETMBEGA1UE
'' SIG '' CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
'' SIG '' MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgw
'' SIG '' JgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBD
'' SIG '' QSAyMDEwAhMzAAAFfXry23OMHyzYAAAAAAV9MA0GCWCG
'' SIG '' SAFlAwQCAQUAoIHGMBkGCSqGSIb3DQEJAzEMBgorBgEE
'' SIG '' AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3
'' SIG '' AgEVMC8GCSqGSIb3DQEJBDEiBCB9ZNrAIUSORGzQaD3s
'' SIG '' ArrVgPFTTGrK3FiVXZNuVgrDzzBaBgorBgEEAYI3AgEM
'' SIG '' MUwwSqAkgCIATQBpAGMAcgBvAHMAbwBmAHQAIABXAGkA
'' SIG '' bgBkAG8AdwBzoSKAIGh0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS93aW5kb3dzMA0GCSqGSIb3DQEBAQUABIIBAHsC
'' SIG '' d95XbtrMlE1lhpRVKeWr9t1kgGVQEXJjVFsDSOOxoXsB
'' SIG '' Tt2uf0TQKJ07tEHPFQPx7SX99MQiUsmbQB3CYWOFK2BC
'' SIG '' DEM6DVUzQt+WtAw4vd+ZbITOnLHlulZ7r84MSzsTmM3H
'' SIG '' 0YpWSa0/3w+4k+onAaUL5cYNsXyaKCqBYZQ2RNwBBrCP
'' SIG '' MOsAc8XzgulrIirR7WwHx8rCl54TkWjKQdQWmHZEyDJ5
'' SIG '' Mi7LytBxDGTRnzclOCZnBEbn963+K1ZB4hCPZF5U2keS
'' SIG '' jZSFBKRElZ6F90BFqAgzy5jBtf8PE/gtt8+RQsgSnmvn
'' SIG '' 8bvdlqZNuDuTbY9Vi2vX0rq1BjoLOaqhghetMIIXqQYK
'' SIG '' KwYBBAGCNwMDATGCF5kwgheVBgkqhkiG9w0BBwKggheG
'' SIG '' MIIXggIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBWgYLKoZI
'' SIG '' hvcNAQkQAQSgggFJBIIBRTCCAUECAQEGCisGAQQBhFkK
'' SIG '' AwEwMTANBglghkgBZQMEAgEFAAQgDCyhlR7CNUPV32a0
'' SIG '' M7zkuV+VIfzoLHYvnc17DVtUhhMCBme2MtJooxgTMjAy
'' SIG '' NTAzMTIxMzE0MjQuNzU1WjAEgAIB9KCB2aSB1jCB0zEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9z
'' SIG '' b2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMScw
'' SIG '' JQYDVQQLEx5uU2hpZWxkIFRTUyBFU046NTIxQS0wNUUw
'' SIG '' LUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0
'' SIG '' YW1wIFNlcnZpY2WgghH7MIIHKDCCBRCgAwIBAgITMwAA
'' SIG '' AgAL16p/GyoXVgABAAACADANBgkqhkiG9w0BAQsFADB8
'' SIG '' MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
'' SIG '' bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
'' SIG '' cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy
'' SIG '' b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAeFw0yNDA3
'' SIG '' MjUxODMxMjFaFw0yNTEwMjIxODMxMjFaMIHTMQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg
'' SIG '' SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNV
'' SIG '' BAsTHm5TaGllbGQgVFNTIEVTTjo1MjFBLTA1RTAtRDk0
'' SIG '' NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg
'' SIG '' U2VydmljZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
'' SIG '' AgoCggIBAK9V2mnSpD9k5Lp6Exee9/7ReyiTPQ6Ir93H
'' SIG '' L9upqp1IZr9gzOfYpBE+Fp0X6OW4hSB3Oi6qyHqgoE/X
'' SIG '' 0/xpLOVSjvdGUFtmr4fzzB55dJGX1/yOc3VaKFx23VFJ
'' SIG '' D4mXzV7M1rMJi/VJVqPJs8r/S6fUwLcP6FzmEwMXWEqj
'' SIG '' geVM89UNwPLgqTZbpkDQyRg2OnEp9DJWLpF5JQKwoaup
'' SIG '' fimK5eq/1pzql0pJwAaYIErCd96C96J5g4jfWFAKWcI5
'' SIG '' zYfTOpA2p3ks+/P2LQ/9qRqcffy1xC6GsxFBcYcoOCnZ
'' SIG '' qFhjWMHUe/4nfNYHjhEevZeXSb+9Uv5h/i8W+i+vdp/L
'' SIG '' hJgFcOn1bxPnPMI4GGW5WQjTwMpwpw3bkS3ZNY7MAqo6
'' SIG '' jXN1/1iMwOxhrOB1EuGCKwFMfB9gPeLwzYgPAFmu2fx0
'' SIG '' sEwsiIHlW5XV2DNgbcTCqt5J3kaE9uzUO2O5/GU2gI3u
'' SIG '' wZX47vN7KRj/0FmDWdcGM2FRkcjqXQPFpsauVfH+a+B2
'' SIG '' hvcz3MpDsiaUWcvld0RooIRZrAiVwHDM4ju+h4p8AiIy
'' SIG '' JpwhShifyGy4x+ie3yV6kT24Ph+q2C2fFwaZlwRR+D02
'' SIG '' pGVWMQfz/hEGy+SzcNGSDPnrn8QpY1eDvpx5DPs4EsfP
'' SIG '' tOwVWTwSrJaKHm7JoSHATtO+/ZHoXImDAgMBAAGjggFJ
'' SIG '' MIIBRTAdBgNVHQ4EFgQUgCUk2r4JIyqoHucUDl59+X13
'' SIG '' dzowHwYDVR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ
'' SIG '' 6XIwXwYDVR0fBFgwVjBUoFKgUIZOaHR0cDovL3d3dy5t
'' SIG '' aWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0
'' SIG '' JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3Js
'' SIG '' MGwGCCsGAQUFBwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0
'' SIG '' cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0
'' SIG '' cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIw
'' SIG '' MjAxMCgxKS5jcnQwDAYDVR0TAQH/BAIwADAWBgNVHSUB
'' SIG '' Af8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4Aw
'' SIG '' DQYJKoZIhvcNAQELBQADggIBACjwhvZ40bSKkPn7hAoM
'' SIG '' c1jLEDiNx71u7FfT5hFggjlpU7hgiMzYt4m3S2UtG9iA
'' SIG '' x4NMi67XVbgYtxcVXXrCF7s2MqHyHv2pUwXVeA4Yoy01
'' SIG '' 7QezYDp6Oxtdojt7eo8tYT0qrsxi68v9phGQcCLEqEtg
'' SIG '' /h/txwicTw8oczBaj/qZZbTwAgf0DcGe6vhxsmb97/Hr
'' SIG '' fq0GIPLBdz07lng4N3Uf85NTWsCf3XxQg2JVjXggQi7z
'' SIG '' T0AXHjGFxURSoXElMLO5hXSAw4WacasiCg9lg8BcjSBh
'' SIG '' Hs5/p3eJF0bqXjRMfnkqSV8pUQ/tXeOYW+j8ziBewZHD
'' SIG '' 7UbRVtsF4JIy6rU1lpQZL85drjX2Cdwj2VWg8jA2ml4D
'' SIG '' vh+g4q7CeCBvYpCHfeNfplg3o5I+WmJ/UDekTn6PxzR4
'' SIG '' NbYpsKRaFIr6gBbuoq1mRcOVfsi6/BS3O52zGtpRUosc
'' SIG '' 7ves3Zw7DyJs9HOkrW2MoSkpTN7g0YvVFsnUiqpxG7Se
'' SIG '' jJPmLsb86a5LlkCWFn6T77oPsE54qMpFcHNMkVXLHeMT
'' SIG '' M5550bWQxjElBJfbTFZ3m2EbIcGSMiU7AYC2ZhzO6tkx
'' SIG '' Sv1/feOEpCKsmNtgHLi3tBqqDXwEgiHGbc22f8z+JU9v
'' SIG '' zdKQ259n3wM42ZISPkK6q/fN5kGVsGXa905NTGBJQ04c
'' SIG '' 9g9DMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAA
'' SIG '' AAAAFTANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3Qg
'' SIG '' Q2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEw
'' SIG '' OTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYD
'' SIG '' VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
'' SIG '' A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
'' SIG '' IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg
'' SIG '' VGltZS1TdGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcN
'' SIG '' AQEBBQADggIPADCCAgoCggIBAOThpkzntHIhC3miy9ck
'' SIG '' eb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az
'' SIG '' /1xPx2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhg
'' SIG '' fWpSg0S3po5GawcU88V29YZQ3MFEyHFcUTE3oAo4bo3t
'' SIG '' 1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOt
'' SIG '' gFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k
'' SIG '' 45GPsjksUZzpcGkNyjYtcI4xyDUoveO0hyTD4MmPfrVU
'' SIG '' j9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXAhjBc
'' SIG '' TyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDP
'' SIG '' c31BmkZ1zcRfNN0Sidb9pSB9fvzZnkXftnIv231fgLrb
'' SIG '' qn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdH
'' SIG '' GO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRR
'' SIG '' RuLRvWoYWmEBc8pnol7XKHYC4jMYctenIPDC+hIK12Nv
'' SIG '' DMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh8zYGNRiER9vc
'' SIG '' G9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUX
'' SIG '' k8A8FdsaN8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q
'' SIG '' 4i6tAgMBAAGjggHdMIIB2TASBgkrBgEEAYI3FQEEBQID
'' SIG '' AQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1
'' SIG '' Kc8Q/y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacb
'' SIG '' UzUZ6XIwXAYDVR0gBFUwUzBRBgwrBgEEAYI3TIN9AQEw
'' SIG '' QTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3Nv
'' SIG '' ZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRt
'' SIG '' MBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcU
'' SIG '' AgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNV
'' SIG '' HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJc
'' SIG '' YmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0
'' SIG '' dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3By
'' SIG '' b2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNy
'' SIG '' bDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0
'' SIG '' dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMv
'' SIG '' TWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqG
'' SIG '' SIb3DQEBCwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8
'' SIG '' qW/qXBS2Pk5HZHixBpOXPTEztTnXwnE2P9pkbHzQdTlt
'' SIG '' uw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJW
'' SIG '' AAOwBb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVt
'' SIG '' I1TkeFN1JFe53Z/zjj3G82jfZfakVqr3lbYoVSfQJL1A
'' SIG '' oL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ
'' SIG '' 5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKp
'' SIG '' W99Jo3QMvOyRgNI95ko+ZjtPu4b6MhrZlvSP9pEB9s7G
'' SIG '' dP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5H
'' SIG '' LcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZ
'' SIG '' kWsNn6Qo3GcZKCS6OEuabvshVGtqRRFHqfG3rsjoiV5P
'' SIG '' ndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+
'' SIG '' fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue1
'' SIG '' 0CgaiQuPNtq6TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAn
'' SIG '' Qj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784cETRkPHIqzqK
'' SIG '' Oghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGC
'' SIG '' A1YwggI+AgEBMIIBAaGB2aSB1jCB0zELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxh
'' SIG '' bmQgT3BlcmF0aW9ucyBMaW1pdGVkMScwJQYDVQQLEx5u
'' SIG '' U2hpZWxkIFRTUyBFU046NTIxQS0wNUUwLUQ5NDcxJTAj
'' SIG '' BgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZp
'' SIG '' Y2WiIwoBATAHBgUrDgMCGgMVAIyTny2W94r4qS97Ei5V
'' SIG '' hWy61o5koIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzAR
'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAg
'' SIG '' UENBIDIwMTAwDQYJKoZIhvcNAQELBQACBQDre7ZaMCIY
'' SIG '' DzIwMjUwMzEyMDcyOTMwWhgPMjAyNTAzMTMwNzI5MzBa
'' SIG '' MHQwOgYKKwYBBAGEWQoEATEsMCowCgIFAOt7tloCAQAw
'' SIG '' BwIBAAICJ2wwBwIBAAICFJYwCgIFAOt9B9oCAQAwNgYK
'' SIG '' KwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgC
'' SIG '' AQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQsF
'' SIG '' AAOCAQEAhmd8TehFO5Cn/wmD6zI8N2qKT2PN/V6h7FDB
'' SIG '' 0UskeVv7ItHTUULbKjbxcYH0fzI5JBMthnWN+4akQbET
'' SIG '' NNsQbb0XwgTBOSGjcExWqDjfO4AZACEMcYdW+g025CDV
'' SIG '' nixY0wBXSmzhiK4gx4ycGVIKNSi2z9niPfyYGhh6pYoA
'' SIG '' j0I79cdq9QuuP2R0wRXoiwZwfLzc3XkWMDOFPSWfMhaw
'' SIG '' VNarkw+hcbs6ZxfiB+AUv0/0tagP1udCZ7dF12zC30/f
'' SIG '' Scn2GRjVAbBqrdoe8dk7455R3/a43ggECWencaGni87p
'' SIG '' xm1PffFuGVpVUt1dlguw4ZZBTOO9qsjpAGImgGSiSzGC
'' SIG '' BA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYD
'' SIG '' VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
'' SIG '' MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
'' SIG '' JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
'' SIG '' QSAyMDEwAhMzAAACAAvXqn8bKhdWAAEAAAIAMA0GCWCG
'' SIG '' SAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZI
'' SIG '' hvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIIuG6OEVw0QG
'' SIG '' T/G3BuKUh7ZEswM7cv1wttFIWcpdH/S6MIH6BgsqhkiG
'' SIG '' 9w0BCRACLzGB6jCB5zCB5DCBvQQg1Mjt7DWd27qwTQxl
'' SIG '' AleDXzNoB+GlrkbnSJP/SgJP2ScwgZgwgYCkfjB8MQsw
'' SIG '' CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
'' SIG '' MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
'' SIG '' b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3Nv
'' SIG '' ZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAgAL16p/
'' SIG '' GyoXVgABAAACADAiBCAi0obXYQ/W2cphvCYid3LTSObr
'' SIG '' Ud0fXr0UxmOxiX6z4zANBgkqhkiG9w0BAQsFAASCAgCh
'' SIG '' IpS/iKshIBFk9znNahoUTVdhfRxyP/O3I2mICmlJgdiU
'' SIG '' 0iDjNJha3UPg5vRTnmBD/CmrIuOSMOd0esVhtgGlb0Wb
'' SIG '' WvhqpjxERjvXc9SVm6gUzBS0Xe/c27C0xmgRCx2DPLZW
'' SIG '' xE6cBjSN5EDDYrmTFRZdct7pBaWSZQCGUCESj9CJ/YAt
'' SIG '' GP+rUrcj3yRf3UcksDP+rz8SCTtn565Kf1jb9EA7nUnc
'' SIG '' 9qfRu686bI2GKMSyGJQoVOjzRq+fMMMGDiESD721572I
'' SIG '' 6xqT3u+S0vvcSPZKZXEfqrnaIrF3iT0eLo1WjlU6eumx
'' SIG '' O8S1hVXlOq588+IpJh+OpWlWR5SZl5YPKrZ8QMvvGnVS
'' SIG '' 8G3CaE/6OdT1h2CzpMcxXrakwey8rTXRoBN7TB16DoO8
'' SIG '' xITIttZaE5yDBE9BgY0GektZLfc72sl0KYFKb/1+InMp
'' SIG '' bIiDQlqxcgfBnevrBx1Ik+izBn18/6+ASK82ma/lYOcD
'' SIG '' K/PhWj3aYn/K/+6lV5f0j82efBDnf45HsTEiGmDTAMi9
'' SIG '' 6p0rI2DD+0f6WmH8LpEO2vbNqUBWLHZ+DgHd5xYvVolS
'' SIG '' LDKbH59rBqstEeYCUgM+yTKAi1yfuzSJdvy0/fkkL2HV
'' SIG '' EGtceaUypfEgUWCKM5u6yt2agQokdbxBgSmEj51crQZJ
'' SIG '' jFB5gQ2oE4GNxEQlU3oTPA==
'' SIG '' End signature block
