' Windows Installer utility to applay a transform to an installer database
' For use with Windows Scripting Host, CScript.exe or WScript.exe
' Copyright (c) Microsoft Corporation. All rights reserved.
' Demonstrates use of Database.ApplyTransform and MsiDatabaseApplyTransform
'
Option Explicit

' Error conditions that may be suppressed when applying transforms
Const msiTransformErrorAddExistingRow         = 1 'Adding a row that already exists. 
Const msiTransformErrorDeleteNonExistingRow   = 2 'Deleting a row that doesn't exist. 
Const msiTransformErrorAddExistingTable       = 4 'Adding a table that already exists. 
Const msiTransformErrorDeleteNonExistingTable = 8 'Deleting a table that doesn't exist. 
Const msiTransformErrorUpdateNonExistingRow  = 16 'Updating a row that doesn't exist. 
Const msiTransformErrorChangeCodePage       = 256 'Transform and database code pages do not match 

Const msiOpenDatabaseModeReadOnly     = 0
Const msiOpenDatabaseModeTransact     = 1
Const msiOpenDatabaseModeCreate       = 3

If (Wscript.Arguments.Count < 2) Then
	Wscript.Echo "Windows Installer database tranform application utility" &_
		vbNewLine & " 1st argument is the path to an installer database" &_
		vbNewLine & " 2nd argument is the path to the transform file to apply" &_
		vbNewLine & " 3rd argument is optional set of error conditions to suppress:" &_
		vbNewLine & "     1 = adding a row that already exists" &_
		vbNewLine & "     2 = deleting a row that doesn't exist" &_
		vbNewLine & "     4 = adding a table that already exists" &_
		vbNewLine & "     8 = deleting a table that doesn't exist" &_
		vbNewLine & "    16 = updating a row that doesn't exist" &_
		vbNewLine & "   256 = mismatch of database and transform codepages" &_
		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 database and apply transform
Dim database : Set database = installer.OpenDatabase(Wscript.Arguments(0), msiOpenDatabaseModeTransact) : CheckError
Dim errorConditions:errorConditions = 0
If Wscript.Arguments.Count >= 3 Then errorConditions = CLng(Wscript.Arguments(2))
Database.ApplyTransform Wscript.Arguments(1), errorConditions : CheckError
Database.Commit : CheckError

Sub CheckError
	Dim message, errRec
	If Err = 0 Then Exit Sub
	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
	End If
	Wscript.Echo message
	Wscript.Quit 2
End Sub

'' SIG '' Begin signature block
'' SIG '' MIIpcAYJKoZIhvcNAQcCoIIpYTCCKV0CAQExDzANBglg
'' SIG '' hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
'' SIG '' BgEEAYI3AgEeMCQCAQEEEE7wKRaZJ7VNj+Ws4Q8X66sC
'' SIG '' AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
'' SIG '' ocXRzPIBsTOs40BugTYvo1tESbFrFB3U6AbYVQhStNmg
'' SIG '' gg3hMIIGvTCCBKWgAwIBAgITMwAAABxIn4HfobC3dwAA
'' SIG '' AAAAHDANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UEBhMC
'' SIG '' VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
'' SIG '' B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
'' SIG '' b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3Qg
'' SIG '' Q2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjQw
'' SIG '' ODA4MjEzNjIzWhcNMzUwNjIzMjIwNDAxWjBfMQswCQYD
'' SIG '' VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
'' SIG '' cmF0aW9uMTAwLgYDVQQDEydNaWNyb3NvZnQgV2luZG93
'' SIG '' cyBDb2RlIFNpZ25pbmcgUENBIDIwMjQwggIiMA0GCSqG
'' SIG '' SIb3DQEBAQUAA4ICDwAwggIKAoICAQCafWt9J8F2Ki6u
'' SIG '' 49U0/8wrbe78VPggo/uwZIn0vwdoFyhlOzlfUl0SRj9c
'' SIG '' hbOaeo6bGIuHGMxeegFdABJphI1fME9pbz1OQYTd8Fd9
'' SIG '' B6mDyGBI+T91l39JFw/X741H9RgLVxK4ifMOwCzWlRJv
'' SIG '' UbOHjwNGbGB2gm1OZAVCUA17++oWnznEIHRQgNyN82LX
'' SIG '' 819rzsMfO7gzmgrsijkWYofXN803/kywuUGC8oVTAZw1
'' SIG '' xBwzq72sPdg0siKqXYEVqbn86gxctXoFY5KF2YW/vaWf
'' SIG '' YXlMzV014TqF83sYemMwC+H5QVpvgXNYUMhEnpxLwSc5
'' SIG '' 1ftubt4e+444DFGOOPll0OLvanXQ3v1OUngGikb74m5o
'' SIG '' uM+0EaS72bJWtAj4jlBs9NA6ObH5AtBMJbEs3zN/vAPa
'' SIG '' 7MhVToFg1T87ffDiT9hKGhDqvBhPRgqDdou/+AthQsH3
'' SIG '' 9QUgkyVmTtVnK9jLXiROlMRlfooQPJzedWDyg9nWBqHs
'' SIG '' K170cwv9R6FHkr5WX9Jn/RhxLb75GyVUUaOjwX9Jnebf
'' SIG '' O1W9ZjP3yKdXsqcmsZl5IKXAcLspbDqtpElTiecAT6Gh
'' SIG '' LLCZHjHCpxLrrvvlCnQx5UtA7bGIzdEJzrnL03UrHb4c
'' SIG '' yjkoyRd11aq/X9gveOS10+a8SiB1CBAwXDWFOgSgwx+q
'' SIG '' 36SjjgkopQIDAQABo4IBRjCCAUIwDgYDVR0PAQH/BAQD
'' SIG '' AgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBQe
'' SIG '' gt8O14yz1wI0gw7aq61lua+47DAZBgkrBgEEAYI3FAIE
'' SIG '' DB4KAFMAdQBiAEMAQTAPBgNVHRMBAf8EBTADAQH/MB8G
'' SIG '' A1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG
'' SIG '' A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0Nl
'' SIG '' ckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
'' SIG '' MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
'' SIG '' b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIw
'' SIG '' MTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBD
'' SIG '' X/jfP7vplIw7XPW7aAOdkQXNF1Q0gTEATKsbueoVxwcL
'' SIG '' nLVFrNVwagwzCBQh7vXOmP1BfkzfBCII57owKSmJhz+H
'' SIG '' +BDNwEUppc66ReaMzicdAQORVL9Y5qXX/9mW6qbwsZcb
'' SIG '' /xtUeCo60ppqjx87OooMN2+0U24+wcSEvHziJMGFkIQd
'' SIG '' ny45YPtx0qwxjxSIaSCVlWpjCEe2u9jhqJ43X+Oa7KcK
'' SIG '' iB7sp2VOGr8va7gf0YYW8JvnzG/ATHnCGk5pKIcfxGWe
'' SIG '' RjVnDeqE2FtxtgTNwd2M51pJfbeLIT+tHzLnvtpLHRxl
'' SIG '' khPBFU3UphlHY9I61HOOpRlRSSEhd/zMXMZ5TXj9Socq
'' SIG '' /mc0+BLbPyO5rn6Wi5y2pczEdsyLoRjgFlrMHrG47Rc5
'' SIG '' FVBYA0dklvdNyNFypWzxAOqvHqRxifa6MYfOZ7BCnATV
'' SIG '' MOEnKevCgqkqRQWiosldbJHfpfFOdFjXjzG/Qc89DnwE
'' SIG '' mpfL+bEBvg1tNZDfiPkSlCGzOSOdMCY4h8pkBTQ7G6Gx
'' SIG '' cfSPeZghBD1O31Gd1U/xzlFW5Jl+5bSAv3kALuRjvH7v
'' SIG '' nHhEzMm726MVDOHWDQvj86KFMX5gtA7ikcAdtW1/fmnL
'' SIG '' iAZMSJuBHdztfcNVS6AO1DTlLie8+jUNlv/qu3J3zj5d
'' SIG '' kFS+KpYAm5VE9r5kKZZVdzCCBxwwggUEoAMCAQICEzMA
'' SIG '' AACTIsPyKjHn45EAAAAAAJMwDQYJKoZIhvcNAQEMBQAw
'' SIG '' XzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29m
'' SIG '' dCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWljcm9zb2Z0
'' SIG '' IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAyMDI0MB4X
'' SIG '' DTI1MDUwODE4MjUxMFoXDTI2MDUwNjE4MjUxMFowfzEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEpMCcGA1UEAxMgTWljcm9z
'' SIG '' b2Z0IFdpbmRvd3MgS2l0cyBQdWJsaXNoZXIwggIiMA0G
'' SIG '' CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC1QY/67PaQ
'' SIG '' pbWdpt4tt8q8kpv2T36a1JuvEdZeu8rR7fRF2E7oZHf6
'' SIG '' XrDlpmu8Qf1dZABr20S2v5PgYeCsQI230NYj/f+OdTJU
'' SIG '' RO5+WNkHC/4IwpMJd/EZPGA2/rMgdHC+4rqhssJ/Dt66
'' SIG '' s9wib39ghaETCPPqMG527IAPK5s4EGlVjnd+K44YCBUv
'' SIG '' uW52kt/WifhGTQXgzxz6E/hT0oLJ+A6W3YfRP45UXf0H
'' SIG '' f0CxLfoWhfsIrYfDymBjAUqIJxDKToigCN47rxUDeJY7
'' SIG '' SBzSK9MxfAhAo6A8n+npcMv4SaEI6ZPf8wifAqNLfnVz
'' SIG '' +RxBsU6CpAmuAojfy9cVn/o9QfLGVsyo8bOOVLEk0TMy
'' SIG '' 3urGhRhHZyNOJbuDvwUQWbZumFXc/briJOOapfWA2ua6
'' SIG '' rh7xGzPvT9epsiUmkzMCE7ihiolSbukbOtalKQUzZwF/
'' SIG '' U1jhPnQ1LGeFEHr6Q6GnlvWHus4CTGAsPNpC7Koqxu+o
'' SIG '' bOCZ2yLQj85kB732NV4j5gwrveHzSWF92ZFNm76027vj
'' SIG '' h3naiuD3K+gzJsM74VlziPSoaMdirKE8OWwFMzokUuna
'' SIG '' vg5A6HM6rMUOZ0+HdMWq17Wlew/2mYjPG1hJIQhjPWRq
'' SIG '' h2x4gyZMOFzKGPf5zpk9Nyhg7RLHUKeaPxV4v4dapnKw
'' SIG '' Fe5gktligpr7KQIDAQABo4IBrzCCAaswDgYDVR0PAQH/
'' SIG '' BAQDAgeAMB8GA1UdJQQYMBYGCisGAQQBgjcKAxQGCCsG
'' SIG '' AQUFBwMDMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFFIv
'' SIG '' q4ZMSMQi4ghdi+kangFORpsAMEUGA1UdEQQ+MDykOjA4
'' SIG '' MR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
'' SIG '' FjAUBgNVBAUTDTIyOTkwMys1MDQ1NzYwHwYDVR0jBBgw
'' SIG '' FoAUHoLfDteMs9cCNIMO2qutZbmvuOwwagYDVR0fBGMw
'' SIG '' YTBfoF2gW4ZZaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
'' SIG '' L3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwV2luZG93cyUy
'' SIG '' MENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAyNC5jcmww
'' SIG '' dwYIKwYBBQUHAQEEazBpMGcGCCsGAQUFBzAChltodHRw
'' SIG '' Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRz
'' SIG '' L01pY3Jvc29mdCUyMFdpbmRvd3MlMjBDb2RlJTIwU2ln
'' SIG '' bmluZyUyMFBDQSUyMDIwMjQuY3J0MA0GCSqGSIb3DQEB
'' SIG '' DAUAA4ICAQBQT/wL+kINN/MKl08zfpQ5majTXpznkVo6
'' SIG '' o89vkP+z2H6mfPWLBAVbV7Nim+eMDjtBZMmb3dajbo42
'' SIG '' Ew5quS9SNtD/EsDZ/IQAQEMJZiVI8bvkE0vDn9zFrV/g
'' SIG '' bQMmGYM22mrKsWo2kysolgvQ/3hCLZyrpWWcHGIvdmgP
'' SIG '' wtMuMsvb+bzTedo15gC97MTcDCgrEBQjOfWYwQ0AX0dD
'' SIG '' md745eqSOBSG+6vtLuN9/goSCwVRzH85aBSZG6yf3rs7
'' SIG '' G+tIv38LddCnA7pD9EPV+eUEsenhoJHi5xWIMk5lYBEp
'' SIG '' dT96C18bECUsvH8mTe95TXhwKdFtAkzGT45Oe9gld14y
'' SIG '' FfPAg+1XmLAtgKEnEhLNM6RPzHf1qfR5bpwCP7XsoNg8
'' SIG '' UURqem2ANWVJLmV0bB/3/iwBkffZHvTwa1E9xTFkUARz
'' SIG '' Qrw9nAXoUr0aYdc7+A/pgo6dWGwIF81yw8YY1RzqFmEA
'' SIG '' P24Vx0VflEGalO1sNFjwUI/xT0fdvEdLnPVykHFnCYfw
'' SIG '' HIoJPjACBH3De/8ZdOOTQPLn4BtbT5Dszf8pj9UQxq3D
'' SIG '' lVecV4dPT+74MLXdGEpxpWID/RUXIkaAudPrSoB/Wkcc
'' SIG '' z7Vpti6a3LZLeQulQcgoDtHhdHWlDQVIDg9p1Wx1F7cT
'' SIG '' UH8FyYAFr998Oimf5Pw7DJ53pJ70Aas0ajGCGucwghrj
'' SIG '' AgEBMHYwXzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1p
'' SIG '' Y3Jvc29mdCBDb3Jwb3JhdGlvbjEwMC4GA1UEAxMnTWlj
'' SIG '' cm9zb2Z0IFdpbmRvd3MgQ29kZSBTaWduaW5nIFBDQSAy
'' SIG '' MDI0AhMzAAAAkyLD8iox5+ORAAAAAACTMA0GCWCGSAFl
'' SIG '' AwQCAQUAoIGoMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3
'' SIG '' AgEEMC8GCSqGSIb3DQEJBDEiBCAtCfqj2RQ4MBMohL6y
'' SIG '' aM08VY23bHcHDmDORloFMrixuDBaBgorBgEEAYI3AgEM
'' SIG '' MUwwSqAkgCIATQBpAGMAcgBvAHMAbwBmAHQAIABXAGkA
'' SIG '' bgBkAG8AdwBzoSKAIGh0dHA6Ly93d3cubWljcm9zb2Z0
'' SIG '' LmNvbS93aW5kb3dzMA0GCSqGSIb3DQEBAQUABIICAEIV
'' SIG '' WfmLMzMCBLyvFZ8d4kQ4WGFqiAETH4OjcPI+d5jCs7UZ
'' SIG '' Tqmnw7qaF33rg+DCRm5OMTAjx8QJpAgthkr9LZ0BcN7X
'' SIG '' WUcLyp7BNHvT48veb6cIDh7TSOf14Zi6MC6R8fSsX8za
'' SIG '' PoOlgw72jLHIi1ZzFd9/nXJbOQsF5h4mSC8c8ad3iBMS
'' SIG '' TPrfZJS8UBxW1wajLQ2abqXZjOrt9223hjfU9AuEZYJK
'' SIG '' sx1FYS2PYgwMsfS2aCtH0ZeNseA2zgimstj1FbCaIWxK
'' SIG '' hhD/s9qBvahKTDntHsfYsl66R6uN1VvSW0BBE1qgik+x
'' SIG '' 3+bZtvjRHLpkzWN69e9UaWvN1KKXsUIwaqs30V67+Jb+
'' SIG '' 9TiOvnwo42rSWkVuCJDIqd6/cVAD+UqMujFGXdeJua34
'' SIG '' v4GH3yse0WqG1X7vgLfS6xGc2cbMn10TUz9BQylVO62I
'' SIG '' Lubg1yVGMjXvLG6EaIV2lXBn317LcaZkyKMJfCTNwnJP
'' SIG '' ml7OL9URln+tScC/w5poDqSuZbb0VFSSLMRwKSvXsQ+X
'' SIG '' fFHiTDc/WfDiBZFzBcXG2Vws06bhCPl0+eddqqZ2+mC3
'' SIG '' Lam73qS1l0ZJA6/BMHVkdvZhSgD8Ms1CAEYjiwev3up9
'' SIG '' Pteu5k4icD2aY/CGA5GGmp6nGBNHGiy6X3HXKQhwIWOC
'' SIG '' cXU1xW4/fFNb6owS+TQLoYIXlzCCF5MGCisGAQQBgjcD
'' SIG '' AwExgheDMIIXfwYJKoZIhvcNAQcCoIIXcDCCF2wCAQMx
'' SIG '' DzANBglghkgBZQMEAgEFADCCAVIGCyqGSIb3DQEJEAEE
'' SIG '' oIIBQQSCAT0wggE5AgEBBgorBgEEAYRZCgMBMDEwDQYJ
'' SIG '' YIZIAWUDBAIBBQAEIMe2GsLfMAE98cWWtpdCuVgznW3a
'' SIG '' ATtJyr4gA2HpVa+YAgZpb48Hru8YEzIwMjYwMTI3MDMy
'' SIG '' MzUxLjcxN1owBIACAfSggdGkgc4wgcsxCzAJBgNVBAYT
'' SIG '' AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
'' SIG '' EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
'' SIG '' cG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVy
'' SIG '' aWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQg
'' SIG '' VFNTIEVTTjo4OTAwLTA1RTAtRDk0NzElMCMGA1UEAxMc
'' SIG '' TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCEe0w
'' SIG '' ggcgMIIFCKADAgECAhMzAAACDizLKH2VIHVjAAEAAAIO
'' SIG '' MA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMw
'' SIG '' EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
'' SIG '' b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
'' SIG '' b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w
'' SIG '' IFBDQSAyMDEwMB4XDTI1MDEzMDE5NDMwM1oXDTI2MDQy
'' SIG '' MjE5NDMwM1owgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
'' SIG '' EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w
'' SIG '' HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAj
'' SIG '' BgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlv
'' SIG '' bnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo4OTAw
'' SIG '' LTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRp
'' SIG '' bWUtU3RhbXAgU2VydmljZTCCAiIwDQYJKoZIhvcNAQEB
'' SIG '' BQADggIPADCCAgoCggIBAKzm3uJG1e3SFt6j0wTvxliM
'' SIG '' ijexpC5YwEVDtfiz2+ihhEAFM5/amhMdq3H4TCcFQYHV
'' SIG '' Xa38TozCxA2Zjlekz/vloKtl3ECetX2jhO7mwF6ltt96
'' SIG '' Gys5ZEEgagkTo+1ah3UKsV6GbV2LPeNjcfyIWuHuep5+
'' SIG '' eJnVKdtxY8zI0jG4YXOlCIMD4TlhLfeZ4yppfCF1vTUK
'' SIG '' W7KaH/cQq+SePh0ilBkRY48zePFtFUBg3kna06tiQlx0
'' SIG '' PHSXTZX81h3WqS9QGA/Gsq+KrmTPsToBs6J8INIwGByf
'' SIG '' 9ftFDDrfRCTOqGnSQNTap6L9qj0gea65F5cSOeOmBOyv
'' SIG '' gBvfcgIAoxjE5B76fnCoRVwT05PKGZZklLkCdZROeKiT
'' SIG '' iaDA40FZDUMs4YWRnBdPffgg8Kp3j/f8t38i2LOKy3JR
'' SIG '' liyaX8LhmF0Atu99jDO/fU7F/w1OZXkgbFZ0eeTYeGHh
'' SIG '' ufNMqiwRoOsm9AyJD6WiiMzt/luB3IEGdhAGbn7+ImzH
'' SIG '' DyTbbvMXaNs0j47Czwct5ka3y3q4nZ5WM0PUHRi2CwE/
'' SIG '' RywGWecj7j528thG3RwCrDo+JhLPkVJlxumLTF0Af+N3
'' SIG '' d3PIYCtvIu6jr0e6B8YQRv+wzTutyg/Wjdxnx5Yxvj4w
'' SIG '' gHx645vkNU8OcRwWLg0O6Rgz3WDUO3+oh6T6u0TzxVLx
'' SIG '' AgMBAAGjggFJMIIBRTAdBgNVHQ4EFgQUhXFEaVIRkT7U
'' SIG '' RIrpQYjtg1wQiNswHwYDVR0jBBgwFoAUn6cVXQBeYl2D
'' SIG '' 9OXSZacbUzUZ6XIwXwYDVR0fBFgwVjBUoFKgUIZOaHR0
'' SIG '' cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwv
'' SIG '' TWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIw
'' SIG '' MTAoMSkuY3JsMGwGCCsGAQUFBwEBBGAwXjBcBggrBgEF
'' SIG '' BQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
'' SIG '' aW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1w
'' SIG '' JTIwUENBJTIwMjAxMCgxKS5jcnQwDAYDVR0TAQH/BAIw
'' SIG '' ADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8B
'' SIG '' Af8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBAHXgvZMv
'' SIG '' 4vw5cvGcZJqXaHfSZnsWwEWiiJiRRU5jTkX2mfA9NW58
'' SIG '' QMZYSk03LY59pQdYg6hD/3+uPA7SFLZKkHQHMwCTaDLP
'' SIG '' 3Y0ZY6lZukF0y+utEOmJZmL+4tLhkZ1Gfc/YNxxiaWQ0
'' SIG '' /69pEBe+e/6anbsqAjv2Yn2EbIJBu+0wiORtiguoruwX
'' SIG '' tZqGf2suNfXLlAkviW8TLdCYD0pEGPnpwS/+UC/MOrt5
'' SIG '' KKpGr+kLKrJzy7OZDxJ4pbJa7oONQD2+LzhCyYuOo8YK
'' SIG '' cfhw/KD633lGlb7veyeF7DWIJX7Be7ZHEydaDsSwPl4u
'' SIG '' QkcuzNQg935cKUP4VO9XTcZ+sMN+T7jl+Uf94pFlzcxR
'' SIG '' m2eEsmM/C/cqgoNJxbiJXpJsJHJxg+SqhYGsd/tK8MDs
'' SIG '' asfZQ63PVZrWTbux1mCkbr9z0KoojwJfm+Bpr4Duhgdv
'' SIG '' hkGPtLy7yyDHBYrseBYNEHI4fcKIm7gsnyHdOJGRECuY
'' SIG '' dGnSVs1/WIAq4vzzogoT3Xa/TKrnm3yMzGMFTu6guyth
'' SIG '' UigqTOH6wCSCSkY6hkvXj52XFUz3UFq/NriQ4NNSXDNv
'' SIG '' 5KlexKpXHye4HqqFTLumqmDDDWrhI2EDEWcXGzGJOVqg
'' SIG '' vvkY3E9HrTmUnZZd6G0SLv/5h8mq8f6+epymoKPJD2E1
'' SIG '' pXO44QdfgzK6pyPCMIIHcTCCBVmgAwIBAgITMwAAABXF
'' SIG '' 52ueAptJmQAAAAAAFTANBgkqhkiG9w0BAQsFADCBiDEL
'' SIG '' MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
'' SIG '' EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
'' SIG '' c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9z
'' SIG '' b2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw
'' SIG '' MTAwHhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1
'' SIG '' WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
'' SIG '' Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
'' SIG '' TWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1N
'' SIG '' aWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCAiIw
'' SIG '' DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOThpkzn
'' SIG '' tHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9s
'' SIG '' SuDivbk+F2Az/1xPx2b3lVNxWuJ+Slr+uDZnhUYjDLWN
'' SIG '' E893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ3MFEyHFc
'' SIG '' UTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUm
'' SIG '' ZNqYO7oaezOtgFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W
'' SIG '' 7IVWTe/dvI2k45GPsjksUZzpcGkNyjYtcI4xyDUoveO0
'' SIG '' hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0Xn
'' SIG '' Rm7KMtXAhjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De
'' SIG '' +JKRHh09/SDPc31BmkZ1zcRfNN0Sidb9pSB9fvzZnkXf
'' SIG '' tnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SU
'' SIG '' HDSCD/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyO
'' SIG '' ArxCaC4Q6oRRRuLRvWoYWmEBc8pnol7XKHYC4jMYcten
'' SIG '' IPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh
'' SIG '' 8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMUR
'' SIG '' HXLvjflSxIUXk8A8FdsaN8cIFRg/eKtFtvUeh17aj54W
'' SIG '' cmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkrBgEE
'' SIG '' AYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+
'' SIG '' ZMSavoKRPEY1Kc8Q/y8E7jAdBgNVHQ4EFgQUn6cVXQBe
'' SIG '' Yl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBRBgwrBgEE
'' SIG '' AYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3
'' SIG '' dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9z
'' SIG '' aXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMIMBkG
'' SIG '' CSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQE
'' SIG '' AwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaA
'' SIG '' FNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1UdHwRPME0w
'' SIG '' S6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9w
'' SIG '' a2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEw
'' SIG '' LTA2LTIzLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYB
'' SIG '' BQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
'' SIG '' a2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMu
'' SIG '' Y3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdVX38Kq3hLB9n
'' SIG '' ATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnXwnE2
'' SIG '' P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2
'' SIG '' HnjYNi6cqYJWAAOwBb6J6Gngugnue99qb74py27YP0h1
'' SIG '' AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jfZfakVqr3
'' SIG '' lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BU
'' SIG '' hUKz/AyeixmJ5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tu
'' SIG '' PywJeBTpkbKpW99Jo3QMvOyRgNI95ko+ZjtPu4b6MhrZ
'' SIG '' lvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdU
'' SIG '' bZ1jdEgssU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz
'' SIG '' 138eW0QBjloZkWsNn6Qo3GcZKCS6OEuabvshVGtqRRFH
'' SIG '' qfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xB
'' SIG '' Zj1p/cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7
'' SIG '' Fx0ViY1w/ue10CgaiQuPNtq6TPmb/wrpNPgkNWcr4A24
'' SIG '' 5oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784
'' SIG '' cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1V
'' SIG '' M1izoXBm8qGCA1AwggI4AgEBMIH5oYHRpIHOMIHLMQsw
'' SIG '' CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
'' SIG '' MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
'' SIG '' b2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3Nv
'' SIG '' ZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5u
'' SIG '' U2hpZWxkIFRTUyBFU046ODkwMC0wNUUwLUQ5NDcxJTAj
'' SIG '' BgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZp
'' SIG '' Y2WiIwoBATAHBgUrDgMCGgMVAErodj9lYuc5wwRCyOQM
'' SIG '' CgH8llYIoIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzAR
'' SIG '' BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
'' SIG '' bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
'' SIG '' bjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAg
'' SIG '' UENBIDIwMTAwDQYJKoZIhvcNAQELBQACBQDtIp4sMCIY
'' SIG '' DzIwMjYwMTI3MDIxNTA4WhgPMjAyNjAxMjgwMjE1MDha
'' SIG '' MHcwPQYKKwYBBAGEWQoEATEvMC0wCgIFAO0iniwCAQAw
'' SIG '' CgIBAAICB2sCAf8wBwIBAAICE44wCgIFAO0j76wCAQAw
'' SIG '' NgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAK
'' SIG '' MAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0B
'' SIG '' AQsFAAOCAQEAD0nRB67vRXzFeRpG9wgALPN3MUYZCc2t
'' SIG '' mJxilOT5OFW+mz7HgBmkL6fqnHumHSlzgMejilTQxyab
'' SIG '' NP0MyfFoyomKWqSPOyL5nyEe4cNNXdvI6Rmp/nHZGPa7
'' SIG '' Uys8q15VGvwoIhFnXWYYiQf0SAwIlT3Y0TUUYaCazEmC
'' SIG '' LwMWeV80xLx7FqUISJ2q8xdF4jZOloNdRdJ5HoznWNkO
'' SIG '' I0wwnED+FdpcmHK1uWKAUCENgY+ABJkNHUpT5ll7aUxC
'' SIG '' dyCJT2tY6QMhaE2XNxxG3Z3jTsgF9nSz3u4dmA7gEFIL
'' SIG '' xhXjkYXsxMiJRqqSTuuhINaw1YpJ9+EXRgsJmFa35pbL
'' SIG '' ZTGCBA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMw
'' SIG '' EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
'' SIG '' b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
'' SIG '' b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w
'' SIG '' IFBDQSAyMDEwAhMzAAACDizLKH2VIHVjAAEAAAIOMA0G
'' SIG '' CWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYL
'' SIG '' KoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIDOAcTjs
'' SIG '' F73yp29vvn+LmHB9zkQZkNvLrprpC3OUJGa9MIH6Bgsq
'' SIG '' hkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgAXQdcyXw6YGQ
'' SIG '' rbrubGhspKKHA50/R5Q1dAzKk/NPEoYwgZgwgYCkfjB8
'' SIG '' MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
'' SIG '' bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
'' SIG '' cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy
'' SIG '' b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAg4s
'' SIG '' yyh9lSB1YwABAAACDjAiBCAP3/Iv7KCy1AVsX2mKVzK5
'' SIG '' PaPeM5wgIOmLpKn4N/0dkjANBgkqhkiG9w0BAQsFAASC
'' SIG '' AgBZuxRnmGH45XtlJWQzbI3uN7t8UQynKsrc28JcW8fn
'' SIG '' facjGtjdSsGqqoLkJZ0SjobJO5p0ehKDqAX89sflVyN1
'' SIG '' aE2L8mzIAdYBAumdlfnCxuV/XvOe+GEuqNF5Avc5WHP5
'' SIG '' /AVFAm3SP0cpyfeMt51Kt6UfpGpXBnFZT2vw/A1A/uzU
'' SIG '' SXnGE4QRemqStO5123Y8t67WYniuPfP/ikdy7Hs+qhDD
'' SIG '' A9mTNcQ3po0hEr6YAPAfU4lHBvgNg9CctvPrKxfjd/+H
'' SIG '' cer0at8e8qf2oTYs+091ji9+H6S2s877jg4A2ke+uPBi
'' SIG '' UOkV99SL8mghBEB38/ai/maAuifyKbQxC4dTU+R3hAll
'' SIG '' VwA6DiLvgj1VNUlmdq+ZTLuDVupnShHQAI7O3UeRwiBl
'' SIG '' 96EbdNzg7Xp7dorBjVw/9C8qFZHyoUxThnclXKT9ByIn
'' SIG '' aK9tjGYn+9uuQIyKhzXSyzMhQcGfV40nX+VMDl+IYijt
'' SIG '' zLkbo32uWvT2dm3kJhjO0n4GUiJuvtnS38wEVZswQx52
'' SIG '' KM0XZtN3E887pDw7ITDpbfbrqvQKyWwayeJZCXGsRVSO
'' SIG '' 99qOtenka4SEjcsO+pDEPLpkUt7uH3JTZ7TPSaXXRDOO
'' SIG '' KeeX/gmhxYjBcyGwyjjg2MLT2NFJO2zXyPN3BXgVdr4f
'' SIG '' LLyg0bYaiP5vj58lYTIzDtJ/uQ==
'' SIG '' End signature block
