<?xml version="1.0"?>
<ScriptProject Name="ScriptTask_f78a7fe941b64be4b48c89def8d01fa9" VSTAMajorVersion="3" VSTAMinorVersion="0" Language="VisualBasic">
  <ProjectItem Name="ScriptMain.vb" Encoding="UTF8">
<![CDATA[' Microsoft SQL Server Integration Services Script Task
'
' Copyright (c) 2006-2013 COZYROC LLC
' 
' Permission is hereby granted, free of charge, to any person
' obtaining a copy of this software and associated documentation
' files (the "Software"), to deal in the Software without
' restriction, including without limitation the rights to use,
' copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following
' conditions:
' 
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
' OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
' HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
' WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
' OTHER DEALINGS IN THE SOFTWARE.
'
' The following resource was used as a reference:
' http://mattfrear.com/2010/07/13/send-as2-with-dotnet/

Imports System
Imports System.ComponentModel
Imports System.Collections
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography.X509Certificates
Imports System.Security.Cryptography.Pkcs

Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS
Imports CozyRoc.SqlServer.SSIS.Attributes


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() { _
    "HttpConnection", _
    "IsInputFileVariable", "InputFileVariable", "InputFile", "ContentType", _
    "AS2From", "AS2To", _
    "ResultFile", _
    "Sign", "IsSigningCertificateVariable", "SigningCertificateVariable", "SigningCertificate", "SigningCertificatePassword", _
    "Encrypt", "IsRecipientCertificateVariable", "RecipientCertificateVariable", "RecipientCertificate"})> _
<ValidateProperties("Validate")> _
<FilterProperties("GetProperties")> _
<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
	Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

	Enum ScriptResults
		Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
		Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
	End Enum


    Private Class Consts
        Public Const EncryptionNone As String = "None"
    End Class   ' Consts


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' The execution engine calls this method when the task executes.
    ' To access the object model, use the Dts object. Connections, variables, events,
    ' and logging features are available as static members of the Dts class.
    ' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
    ' 
    ' To open Code and Text Editor Help, press F1.
    ' To open Object Browser, press Ctrl+Alt+J.
    Public Sub Main()
        Dim result As Integer = ScriptResults.Success

        Try
            Dim inputFile As String = GetFileName_(Me.IsInputFileVariable, Me.InputFile)

            ' Initialize request.
            Dim req As HttpWebRequest = SetupRequest_()
            Call req.Headers.Add("Subject", inputFile + " transmission.")

            Dim content() As Byte = File.ReadAllBytes(inputFile)
            Dim contentType As String = Me.ContentType

            If Not Me.Sign AndAlso Me.Encrypt = Consts.EncryptionNone Then
                Call req.Headers.Add("Content-Transfer-Encoding", "binary")
                Call req.Headers.Add("Content-Disposition", "inline; filename=""" + inputFile + """")
            End If

            If Me.Sign Then
                Dim signCert As String = GetFileName_( _
                    Me.IsSigningCertificateVariable, _
                    Me.SigningCertificate)

                content = CreateMessage_(content, contentType, "binary")
                content = SignMessage_(content, signCert, Me.SigningCertificatePassword, contentType)

                Call req.Headers.Add("EDIINT-Features", "multiple-attachments")
            End If

            If Me.Encrypt <> Consts.EncryptionNone Then
                Dim recipientCert As String = GetFileName_( _
                    Me.IsRecipientCertificateVariable, _
                    Me.RecipientCertificate)

                content = CreateMessage_(content, contentType, String.Empty)
                content = Encrypt_(content, recipientCert, Me.Encrypt)

                contentType = "application/pkcs7-mime; smime-type=enveloped-data; name=""smime.p7m"""
            End If

            req.ContentType = contentType
            req.ContentLength = content.Length
            Using reqStream As Stream = req.GetRequestStream()
                Call reqStream.Write(content, 0, content.Length)
            End Using

            Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse)
            Call StoreResult_(res)
        Catch ex As Exception
            result = ScriptResults.Failure
            Call Dts.Events.FireError( _
                0, _
                "AS2 Send Task", _
                ex.ToString(), _
                String.Empty, _
                0)
        End Try

        Dts.TaskResult = result
    End Sub ' Main


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function Validate(ByRef errMessage As String) As Boolean
        Dim result As Boolean

        Try
            If String.IsNullOrEmpty(Me.HttpConnection) Then
                Throw New Exception("Select HTTP connection.")
            End If

            If String.IsNullOrEmpty(m_inputFile) Then
                Throw New Exception("Select input file.")
            End If

            If String.IsNullOrEmpty(Me.AS2From) Then
                Throw New Exception("Specify AS2 from.")
            End If

            If String.IsNullOrEmpty(Me.AS2To) Then
                Throw New Exception("Specify AS2 to.")
            End If

            If Me.Sign Then
                If String.IsNullOrEmpty(m_signCert) Then
                    Throw New Exception("Select signing certificate file.")
                End If

                If String.IsNullOrEmpty(Me.SigningCertificatePassword) Then
                    Throw New Exception("Specify signing certificate password.")
                End If
            End If

            If Me.Encrypt <> Consts.EncryptionNone Then
                If String.IsNullOrEmpty(m_recipientCert) Then
                    Throw New Exception("Select recipient certificate file.")
                End If
            End If

            result = True
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate



    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of current properties based on current state.
    Public Function GetProperties() As String()
        Dim result As New ArrayList

        ' Base properties.
        Call result.Add("HttpConnection")
        Call result.Add("IsInputFileVariable")
        Call result.Add(IIf(Me.IsInputFileVariable, "InputFileVariable", "InputFile"))
        Call result.Add("ContentType")
        Call result.Add("AS2From")
        Call result.Add("AS2To")
        Call result.Add("ResultFile")

        Call result.Add("Sign")
        If Me.Sign Then
            Call result.Add("IsSigningCertificateVariable")
            Call result.Add(IIf( _
                Me.IsSigningCertificateVariable, _
                "SigningCertificateVariable", _
                "SigningCertificate"))
            Call result.Add("SigningCertificatePassword")
        End If

        Call result.Add("Encrypt")
        If Me.Encrypt <> Consts.EncryptionNone Then
            Call result.Add("IsRecipientCertificateVariable")
            Call result.Add(IIf( _
                Me.IsRecipientCertificateVariable, _
                "RecipientCertificateVariable", _
                "RecipientCertificate"))
        End If

        Return CType(result.ToArray(GetType(String)), String())
    End Function    ' GetProperties


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("	Settings")> _
    <Description("Select HTTP connection.")> _
    <Connection("HttpConnectionType")> _
    Public Property HttpConnection() As String
        Get
            HttpConnection = m_connection
        End Get
        Set(ByVal value As String)
            m_connection = value
        End Set
    End Property    ' HttpConnection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("	Settings")> _
    <Description("Specifies if InputFile is variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    <NonEssential()> _
    Public Property IsInputFileVariable() As Boolean
        Get
            IsInputFileVariable = m_isInputFileVar
        End Get
        Set(ByVal value As Boolean)
            m_isInputFileVar = value
        End Set
    End Property    ' IsInputFileVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("	Settings")> _
    <Description("Select variable containing input file path.")> _
    <Variable()> _
    Public Property InputFileVariable() As String
        Get
            InputFileVariable = m_inputFile
        End Get
        Set(ByVal value As String)
            m_inputFile = value
        End Set
    End Property    ' InputFileVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("	Settings")> _
    <Description("Select input file.")> _
    <Connection("FileConnectionType")> _
    Public Property InputFile() As String
        Get
            InputFile = m_inputFile
        End Get
        Set(ByVal value As String)
            m_inputFile = value
        End Set
    End Property    ' InputFile


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("	Settings")> _
    <Description("Specify content type.")> _
    <List(New Object() {"application/xml", "application/EDI-X12", "application/EDIFACT"}, False, True)> _
    <DefaultValue("application/EDI-X12")> _
    Public Property ContentType() As String
        Get
            ContentType = m_contentType
        End Get
        Set(ByVal value As String)
            m_contentType = value
        End Set
    End Property    ' ContentType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("	Settings")> _
    <Description("Specify AS2 From.")> _
    Public Property AS2From() As String
        Get
            AS2From = m_from
        End Get
        Set(ByVal value As String)
            m_from = value
        End Set
    End Property    ' AS2From


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("	Settings")> _
    <Description("Specify AS2 To.")> _
    Public Property AS2To() As String
        Get
            AS2To = m_to
        End Get
        Set(ByVal value As String)
            m_to = value
        End Set
    End Property    ' AS2To


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("	Settings")> _
    <Description("Select result file.")> _
    <Connection("FileConnectionType")> _
    Public Property ResultFile() As String
        Get
            ResultFile = m_resultFile
        End Get
        Set(ByVal value As String)
            m_resultFile = value
        End Set
    End Property    ' ResultFile


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Signature")> _
    <Description("Specifies if input file is signed.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Sign() As Boolean
        Get
            Sign = m_sign
        End Get
        Set(ByVal value As Boolean)
            m_sign = value
        End Set
    End Property    ' Sign


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Signature")> _
    <Description("Specifies if SigningCertificate is variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    <NonEssential()> _
    Public Property IsSigningCertificateVariable() As Boolean
        Get
            IsSigningCertificateVariable = m_isSignCertVar
        End Get
        Set(ByVal value As Boolean)
            m_isSignCertVar = value
        End Set
    End Property    ' IsSigningCertificateVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Signature")> _
    <Description("Select variable containing signing certificate file path.")> _
    <Variable()> _
    Public Property SigningCertificateVariable() As String
        Get
            SigningCertificateVariable = m_signCert
        End Get
        Set(ByVal value As String)
            m_signCert = value
        End Set
    End Property    ' SigningCertificateVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Signature")> _
    <Description("Select signing certificate file.")> _
    <Connection("FileConnectionType")> _
    Public Property SigningCertificate() As String
        Get
            SigningCertificate = m_signCert
        End Get
        Set(ByVal value As String)
            m_signCert = value
        End Set
    End Property    ' SigningCertificate


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Signature")> _
    <Description("Specify signing certificate password.")> _
    <PasswordPropertyText(True)> _
    Public Property SigningCertificatePassword() As String
        Get
            SigningCertificatePassword = m_signPass
        End Get
        Set(ByVal value As String)
            m_signPass = value
        End Set
    End Property    ' SigningCertificatePassword


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Encryption")> _
    <Description("Specify encryption type.")> _
    <List(New Object() {"None", "3DES", "RC2"})> _
    <DefaultValue(Consts.EncryptionNone)> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Encrypt() As String
        Get
            Encrypt = m_encryption
        End Get
        Set(ByVal value As String)
            m_encryption = value
        End Set
    End Property    ' Encrypt


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Encryption")> _
    <Description("Specifies if RecipientCertificate is variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    <NonEssential()> _
    Public Property IsRecipientCertificateVariable() As Boolean
        Get
            IsRecipientCertificateVariable = m_isRecipientCertVar
        End Get
        Set(ByVal value As Boolean)
            m_isRecipientCertVar = value
        End Set
    End Property    ' IsRecipientCertificateVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Encryption")> _
    <Description("Select variable containing recipient certificate file path.")> _
    <Variable()> _
    Public Property RecipientCertificateVariable() As String
        Get
            RecipientCertificateVariable = m_recipientCert
        End Get
        Set(ByVal value As String)
            m_recipientCert = value
        End Set
    End Property    ' RecipientCertificateVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Encryption")> _
    <Description("Select recipient certificate file.")> _
    <Connection("FileConnectionType")> _
    Public Property RecipientCertificate() As String
        Get
            RecipientCertificate = m_recipientCert
        End Get
        Set(ByVal value As String)
            m_recipientCert = value
        End Set
    End Property    ' RecipientCertificate
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property HttpConnectionType() As String()
        Get
            HttpConnectionType = New String() {"HTTP"}
        End Get
    End Property    ' HttpConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property FileConnectionType() As String()
        Get
            FileConnectionType = New String() {"FILE"}
        End Get
    End Property    ' FileConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetVariable_(ByVal name As String) As Object
        Dim result As Object
        Dim vars As Variables = Nothing

        Call Dts.VariableDispenser.LockOneForRead(name, vars)
        Try
            result = vars(name).Value
        Finally
            Call vars.Unlock()
        End Try

        GetVariable_ = result
    End Function    ' GetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetFileName_(ByVal isVar As Boolean, ByVal name As String) As String
        If isVar Then
            GetFileName_ = GetVariable_(name).ToString()
        Else
            GetFileName_ = Dts.Connections(name).AcquireConnection(Nothing).ToString()
        End If
    End Function    ' GetFileName_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function SetupRequest_() As HttpWebRequest
        Dim connection As IDTSHttpClientConnection100 = CType( _
            Dts.Connections(Me.HttpConnection).AcquireConnection(Nothing), _
            IDTSHttpClientConnection100)

        Dim result As HttpWebRequest = CType( _
            WebRequest.Create(connection.ServerURL), _
            HttpWebRequest)
        result.Timeout = connection.Timeout * 1000
        result.Method = "POST"
        result.AllowAutoRedirect = True
        result.KeepAlive = True
        result.PreAuthenticate = False
        result.SendChunked = False
        result.UserAgent = "COZYROC AS2 Send Task"

        If connection.UseServerCredentials Then
            result.Credentials = New NetworkCredential( _
                connection.ServerUserName, _
                connection.GetServerPassword(), _
                connection.ServerDomain)
        End If

        If connection.UseProxy Then
            result.Proxy = New WebProxy(connection.ProxyURL)

            If connection.UseProxyCredentials Then
                result.Proxy.Credentials = New NetworkCredential( _
                    connection.ProxyUserName, _
                    connection.GetProxyPassword(), _
                    connection.ProxyDomain)
            End If
        End If

        ' Common request headers.
        Call result.Headers.Add("Mime-Version", "1.0")
        Call result.Headers.Add("AS2-Version", "1.0")
        Call result.Headers.Add("AS2-From", Me.AS2From)
        Call result.Headers.Add("AS2-To", Me.AS2To)
        Call result.Headers.Add("Message-Id", "<" + DateTime.Now.ToString("hhmmssddd") + "@as2>")

        SetupRequest_ = result
    End Function    ' SetupRequest_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '  Returns a single array of bytes out of all the supplied byte arrays.
    Private Function ConcatBytes_(ByVal ParamArray inputList As Byte()()) As Byte()
        Dim length As Integer = 0

        For Each input As Byte() In inputList
            length += input.Length
        Next

        Dim result() As Byte = New Byte(length) {}
        Dim pos As Integer
        For Each input As Byte() In inputList
            Call input.CopyTo(result, pos)
            pos += input.Length
        Next

        ConcatBytes_ = result
    End Function    ' ConcatBytes_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns a unique MIME style boundary
    Private Function CreateMimeBoundary_() As String
        CreateMimeBoundary_ = "_" + Guid.NewGuid().ToString("N") + "_"
    End Function    ' CreateMimeBoundary_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Creates the a Mime header out of the components listed.
    Private Function CreateMimeHeader_( _
        ByVal contentType As String, _
        ByVal encoding As String, _
        ByVal disposition As String) As String

        Dim result As String = "Content-Type: " + contentType + Environment.NewLine

        If Not String.IsNullOrEmpty(encoding) Then
            result += "Content-Transfer-Encoding: " + encoding + Environment.NewLine
        End If

        If Not String.IsNullOrEmpty(disposition) Then
            result += "Content-Disposition: " + disposition + Environment.NewLine
        End If

        result += Environment.NewLine

        CreateMimeHeader_ = result
    End Function    ' CreateMimeHeader_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Create a MIME Message out of byte arrays.
    Private Function CreateMessage_( _
        ByVal content() As Byte, _
        ByVal contentType As String, _
        ByVal encoding As String) As Byte()

        Dim header() As Byte = ASCIIEncoding.ASCII.GetBytes(CreateMimeHeader_( _
            contentType, _
            encoding, _
            String.Empty))

        CreateMessage_ = ConcatBytes_(header, content)
    End Function    ' CreateMessage_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Signs a message and returns a MIME encoded array of bytes containing the signature.
    Private Function SignMessage_( _
        ByVal message() As Byte, _
        ByVal certFile As String, _
        ByVal certPass As String, _
        ByRef contentType As String) As Byte()

        ' get a MIME boundary
        Dim boundaryStr As String = CreateMimeBoundary_()

        ' Get the Headers for the entire message.
        contentType = "multipart/signed; protocol=""application/pkcs7-signature""; micalg=""sha1""; boundary=""" + boundaryStr + """"

        ' Define the boundary byte array.
        Dim boundary() As Byte = ASCIIEncoding.ASCII.GetBytes(Environment.NewLine + "--" + boundaryStr + Environment.NewLine)

        ' Encode the header for the signature portion.
        Dim signatureHeader() As Byte = ASCIIEncoding.ASCII.GetBytes(CreateMimeHeader_( _
            "application/pkcs7-signature; name=""smime.p7s""", "base64", "attachment; filename=smime.p7s"))

        ' Get the signature.
        Dim signature() As Byte = CreateSignature_(message, certFile, certPass)

        ' Convert to base64
        signature = ASCIIEncoding.ASCII.GetBytes(Convert.ToBase64String(signature) + Environment.NewLine + Environment.NewLine)

        ' Calculate the final footer elements.
        Dim finalFooter() As Byte = ASCIIEncoding.ASCII.GetBytes("--" + boundaryStr + "--" + Environment.NewLine)

        ' Concatenate all the above together to form the message.
        SignMessage_ = ConcatBytes_(boundary, message, boundary, signatureHeader, signature, finalFooter)
    End Function    ' SignMessage_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function CreateSignature_( _
        ByVal content() As Byte, _
        ByVal certFile As String, _
        ByVal certPass As String) As Byte()

        Dim signedCms As New SignedCms(New ContentInfo(content), True)
        Dim cmsSigner As New CmsSigner(New X509Certificate2(certFile, certPass))

        Call signedCms.ComputeSignature(cmsSigner)

        CreateSignature_ = signedCms.Encode()
    End Function    ' CreateSignature_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function Encrypt_( _
        ByVal content() As Byte, _
        ByVal recipientCert As String, _
        ByVal algorithm As String) As Byte()

        Dim envelopedCms As EnvelopedCms = New EnvelopedCms( _
            New ContentInfo(content), _
            New AlgorithmIdentifier(New System.Security.Cryptography.Oid(algorithm)))

        Dim recipient As CmsRecipient = New CmsRecipient( _
            SubjectIdentifierType.IssuerAndSerialNumber, _
            New X509Certificate2(recipientCert))

        Call envelopedCms.Encrypt(recipient)

        Encrypt_ = envelopedCms.Encode()
    End Function    ' Encrypt_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub StoreResult_(ByVal res As HttpWebResponse)
        If String.IsNullOrEmpty(Me.ResultFile) Then
            Return
        End If

        ' Store response in result file.
        Dim resultFile As String = Dts.Connections(Me.ResultFile).AcquireConnection(Nothing).ToString()
        Using resStream As Stream = Res.GetResponseStream()
            Using resultStream As Stream = File.OpenWrite(resultFile)
                Dim buf() As Byte = New Byte(4096) {}
                Dim bytesRead As Integer = 0
                Do
                    bytesRead = resStream.Read(buf, 0, buf.Length)
                    Call resultStream.Write(buf, 0, bytesRead)
                Loop While bytesRead > 0
            End Using
        End Using
    End Sub ' StoreResult_
#End Region ' Internals


#Region "Attributes"
    Private m_connection As String
    Private m_isInputFileVar As Boolean
    Private m_inputFile As String
    Private m_contentType As String
    Private m_from As String
    Private m_to As String
    Private m_resultFile As String
    Private m_sign As Boolean
    Private m_isSignCertVar As Boolean
    Private m_signCert As String
    Private m_signPass As String
    Private m_encryption As String
    Private m_isRecipientCertVar As Boolean
    Private m_recipientCert As String
#End Region ' Attributes

End Class   ' ScriptMain]]></ProjectItem>
  <ProjectItem Name="ScriptTask_f78a7fe941b64be4b48c89def8d01fa9.vbproj" Encoding="UTF16LE">
<![CDATA[<?xml version="1.0" encoding="utf-16"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{95062B64-21BB-4EF4-B36D-D98AF0DF781D}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptTask_f78a7fe941b64be4b48c89def8d01fa9</RootNamespace>
    <AssemblyName>ScriptTask_f78a7fe941b64be4b48c89def8d01fa9</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <OptionCompare>Binary</OptionCompare>
    <OptionExplicit>On</OptionExplicit>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>.\bin\Release\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\CozyRoc.SSISPlus.2014.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.ScriptTask, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Data">
      <Private>False</Private>
    </Reference>
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Security">
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Import Include="Microsoft.VisualBasic" />
    <Import Include="System" />
    <Import Include="System.Collections" />
    <Import Include="System.Data" />
    <Import Include="System.Diagnostics" />
    <Import Include="System.Windows.Forms" />
  </ItemGroup>
  <ItemGroup>
    <AppDesigner Include="My Project\" />
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="ScriptTask" />
        <ProjectClient>
          <HostIdentifier>SSIS_ST120</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <ItemGroup>
    <Compile Include="ScriptMain.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
</Project>]]></ProjectItem>
  <ProjectItem Name="Project" Encoding="UTF16LE">
<![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:Language>msBuild</msb:Language>
		<msb:CodeName>ScriptTask_f78a7fe941b64be4b48c89def8d01fa9</msb:CodeName>
		<msb:DisplayName>ScriptTask_f78a7fe941b64be4b48c89def8d01fa9</msb:DisplayName>
		<msb:ProjectId>{70B211E3-052B-49EE-9D00-629F2AB98E29}</msb:ProjectId>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Project Include="ScriptTask_f78a7fe941b64be4b48c89def8d01fa9.vbproj"/>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
	</msb:ItemGroup>
</c:Project>]]></ProjectItem>
  <BinaryItem Name="ScriptTask_f78a7fe941b64be4b48c89def8d01fa9.dll">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
KBEAAApvNwAACiYHcqgDAHBvNwAACiYHcsADAHBvNwAACiYHctADAHBvNwAACiYHctwDAHBvNwAA
CiYHcvIDAHBvNwAACiYCbyUAAAYsOQdy/AMAcG83AAAKJgcCbycAAAZyNgQAcHJsBABwKDgAAAoo
EQAACm83AAAKJgdykgQAcG83AAAKJgdyyAQAcG83AAAKJgJvLwAABnIvAABwFigjAAAKFi4tB3LY
BABwbzcAAAomBwJvMQAABnIWBQBwclAFAHAoOAAACigRAAAKbzcAAAomB9AaAAABKBQAAApvOQAA
CnQKAAAbKgATMAEACQAAAA8AABECewYAAAQKBioAAAAiAgN9BgAABCoAAAATMAEACQAAABAAABEC
ewcAAAQKBioAAAAiAgN9BwAABCoAAAATMAEACQAAABEAABECewgAAAQKBioAAAAiAgN9CAAABCoA
AAATMAEACQAAABIAABECewgAAAQKBioAAAAiAgN9CAAABCoAAAATMAEACQAAABMAABECewkAAAQK
BioAAAAiAgN9CQAABCoAAAATMAEACQAAABQAABECewoAAAQKBioAAAAiAgN9CgAABCoAAAATMAEA
CQAAABUAABECewsAAAQKBioAAAAiAgN9CwAABCoAAAATMAEACQAAABYAABECewwAAAQKBioAAAAi
AgN9DAAABCoAAAATMAEACQAAABcAABECew0AAAQKBioAAAAiAgN9DQAABCoAAAATMAEACQAAABgA
ABECew4AAAQKBioAAAAiAgN9DgAABCoAAAATMAEACQAAABkAABECew8AAAQKBioAAAAiAgN9DwAA
BCoAAAATMAEACQAAABoAABECew8AAAQKBioAAAAiAgN9DwAABCoAAAATMAEACQAAABsAABECexAA
AAQKBioAAAAiAgN9EAAABCoAAAATMAEACQAAABwAABECexEAAAQKBioAAAAiAgN9EQAABCoAAAAT
MAEACQAAAB0AABECexIAAAQKBioAAAAiAgN9EgAABCoAAAATMAEACQAAAB4AABECexMAAAQKBioA
AAAiAgN9EwAABCoAAAATMAEACQAAAB8AABECexMAAAQKBioAAAAiAgN9EwAABCoAAAATMAMAEwAA
ACAAABEXjRoAAAELBxZyegUAcKIHCgYqABMwAwATAAAAIQAAEReNGgAAAQsHFnKEBQBwogcKBioA
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
og0WAAMOog0WABwOog0WADgOog0aAKcOfw4GAMMOVwESANoOlwYSALQPlwYSAMYPlwYSAP0PlwYS
AAYQlwYGAHcQVwEGAIMQVwEGAJAQVwEGALQQqBAGANAQVwEeABkR9xAeACMR9xAeAC0R9xASAGcR
OREeAJAR9xAeAJ0R9xASAMcRqhEeAMsR9xAeAN8R9xAGAAcS3AsGACESVwEOADcS+gIiAJESbxIi
AKsSbxIiAMcSbxIiAN8SbxISAPES2AkSAAYT2AkSABgT2AkSADMT2AkSAEUT2AkiAFsTbxIiAGkT
bxIiAH8TbxISAJMT2AkGALETVwEGAMUT/woGAOUT/woGAB0UAxQAAAAAAQAAAAAAAQABAAAAAAAp
ADcABQABAAEAAAAAAGYANwAJAAEAAgAAARAAcQA3AA0AAQADAAUBAAB7AAAADQAFAAgABQEAAIkA
AAANAAUADwABAAAApACvAB0ABgARAAIBAADbAAAAKQAUAEQAAwAAAOkAAAANABcARAAxAHkBIAAx
AKIBLQAxAMQBOgAxAOkBRwAhAMUCkAABAK4H+AABALsH+wABAMwH+AABANgH+AABAOYH+AABAO0H
+AABAPIH+AABAP8H+wABAAYI+wABABYI+AABACEI+AABACwI+AABADkI+wABAE4I+AAGBrEJCwFW
gLkJDgFWgMEJDgFWgMkJ+ABQIAAAAAAGGCoBEwABAFggAAAAAAYYKgETAAEAYCAAAAAAERhlARcA
AQCMIAAAAAATCGwBGwABAKQgAAAAABMIkgEoAAEAvCAAAAAAEwi7ATUAAQDUIAAAAAATCNkBQgAB
AOwgAAAAAEYCHwJjAAEACCEAAAAARgIoAmgAAgAcIQAAAACDADkCbAACADQhAAAAAEYCQQJxAAIA
SCEAAAAAEQBKAngAAgBkIQAAAAABAGgCgAADAIAhAAAAAAYYKgETAAQAiCEAAAAAAwh8AosABAC8
IQAAAAAGGCoBEwAEANAhAAAAAAYYKgETAAQA2CEAAAAABgA/AxMABADgIwAAAAAGAEQDpgAEAOAk
AAAAAAYAWAOsAAUADCYAAAAABghmA3EABQAkJgAAAAAGCHkDsQAFADAmAAAAAAYIkgO2AAYASCYA
AAAABgiqA7oABgBUJgAAAAAGCMIDcQAHAGwmAAAAAAYI2AOxAAcAeCYAAAAABgjuA3EACACQJgAA
AAAGCPwDsQAIAJwmAAAAAAYICgRxAAkAtCYAAAAABggaBLEACQDAJgAAAAAGCCoEcQAKANgmAAAA
AAYINgSxAAoA5CYAAAAABghCBHEACwD8JgAAAAAGCEwEsQALAAgnAAAAAAYIVgRxAAwAICcAAAAA
BghlBLEADAAsJwAAAAAGCHQEtgANAEQnAAAAAAYIfQS6AA0AUCcAAAAABgiGBLYADgBoJwAAAAAG
CKcEugAOAHQnAAAAAAYIyARxAA8AjCcAAAAABgjnBLEADwCYJwAAAAAGCAYFcQAQALAnAAAAAAYI
HQWxABAAvCcAAAAABgg0BXEAEQDUJwAAAAAGCFMFsQARAOAnAAAAAAYIcgVxABIA+CcAAAAABgh+
BbEAEgAEKAAAAAAGCIoFtgATABwoAAAAAAYIrQW6ABMAKCgAAAAABgjQBXEAFABAKAAAAAAGCPEF
sQAUAEwoAAAAAAYIEgZxABUAZCgAAAAABggrBrEAFQBwKAAAAAABCEQGrAAWAJAoAAAAAAEIWwas
ABYAsCgAAAAAAQByBr8AFgAIKQAAAAABAIQGxAAXAEgpAAAAAAEAsQbKABkAwCoAAAAAAQC/Bs8A
GQAsKwAAAAABANYGcQAaAFwrAAAAAAEA6gbXABoAwCsAAAAAAQAdB94AHQAALAAAAAABADQH5wAg
AOgsAAAAAAEAWwfeACQAIC0AAAAAAQBsB94AJwBgLQAAAAABAJ0H8gAqAAwuAAAAAAYYKgETACsA
AAABACYCAAABAF8CAAABAF8CAAABAE0DAAABAIwDAAABAIwDAAABAIwDAAABAIwDAAABAIwDAAAB
AIwDAAABAIwDAAABAIwDAAABAIwDAAABAIwDAAABAIwDAAABAIwDAAABAIwDAAABAIwDAAABAIwD
AAABAIwDAAABAIwDAAABAH8GAAABAJEGAAACAH8GAAABAMwGAAABAPwGAAACAAgHAAADABEHAAAB
ACwHAAACAPwGAAADAAgHAAABAEEHAAACAEkHAAADAFIHAAAEAPwGAAABACwHAAACAEkHAAADAFIH
AAABACwHAAACAHUHAAADAIMHAAABAKoHCQAqARMAWQAqASUBaQAqATQBEQAqARMAcQAqARMAJAAq
ARMALAAqARMANAAqARMAPAAqARMAJAB8AosALAB8AosANAB8AosAPAB8AosAeQAqARMAgQAqARMA
iQAqAbEAkQAuC8kBGQAfAmMAGQAoAmgAKQBPC9YBGQBBAnEAoQBrC+YBGQAqARMAqQAqAfYBRADF
ApAATACVC4sATACfC3MCTAAqARMAsQAqAboAOQAqARMAQQALDIgC0QAeDI0CyQAlDDQB2QAuDJMC
4QBFDJkC0QAeDKAC0QBTDPgAQQAaBLEAQQBZDKcCQQBrDKwCuQB8DLEC6QCODBMAQQCiDLkC+QC6
DL4COQDcDMQCAQH4DMoCwQBBAnEACQEDDdAC+QANDRcAAQEfDdkC0QAuDfACwQAqAbEAwQA8DXEA
EQEqARMAEQElDPwCGQFxDQEDEQF7DQgDAQHeDSIDMQH0DSgDKQEMDjEDOQGVCzgDKQEVDhMAAQEo
DkQDQQEMDkoDSQFKDlEDUQHMDnEAYQHlDlYDUQHsDmgAQQD4DtkCQQAED7EAQQAPD7oAQQAlD7oA
QQAzD7oAQQBHD7oAQQBXD7EAUQFlD7YAUQF+D3EAUQGRD3EAUQGjD3EAaQEqAV0DQQDTD2QDUQHj
D7YAUQHwD3EAeQEqAbEAQQAQEGsDUQEaELYAQQAyEHIDUQE8EHEAUQFOEHEAUQFfEHEAgQHTD2QD
WQFvEHgDWQFBAn4DIQF8EJADkQGIEK0DkQFBAn4DmQGcELoD0QAeDL4DoQG9EMsDoQHHENEDqQHY
EOQDwQEqAfsDuQEqAQEEyQEqATQBsQEqAQkEuQF4ERAEuQGJERcE4QEqAbEA6QEqAScE0QEqAS4E
yQEqAbEA2QEqATgE0QEtCUIE0QGJERcESQD1EawC2QASElQEuQAcElsEAQIqAboACQIqARMAEQIq
AbEAGQIqAbEAIQIqAZgEKQIqARMAMQIqAbEAOQIqAbEAQQIqASEGUQIqAbEAWQIqAWkGYQIqARMA
aQIqAbEAcQIqAboAWQIqAb0HeQIqARMAgQIqAdkCiQIqARMAkQIqAbEACABUABIBCABYABcBDgBc
ABwBKQCDAJcBLgAzBGAJLgA7BGkJLgBDBIgJQAArABcBQAATACsBQwATACsBQwAbADoBSQCDAIMB
YwAbADoBYwATACsBaQCDAKgBgAArABcBgwAbADoBgwBzABcBgwB7ABcBiQCDALUBoAArABcBowDD
AP4BowATACsBwAArABcBwwATACsBwwDrAIICyQDjA00IyQDrAyYIyQATBDUI4AArABcB4wDTA54E
4wC7AxcB4wDDA3cE4wDLA4oE4wCzA4IC6QDzAysB6QDrAyYI6QDjAzcJ6QALBBcBAAETACsBAAEr
ABcBCQHbAxcBCQHrAyYICQHjA5YIIAErABcBIAETACsBKQETBNkGKQHjA+AIKQHrAyYIQAErABcB
QAETACsBSQHrAyYISQEjBMUHSQH7A6QHSQHjAwsIYAETACsBYAErABcBaQHrAyYIaQHjA2oIgAEr
ABcBiQHrAyYIiQHjA4EIoAErABcBqQHrAyYIqQETBNkGqQHjA8cIwAETACsBwAErABcByQHzAysB
yQHrA1AGyQHjAygG4AErABcB6QHrA1AG6QELBBcB6QHzAysB6QHjA6cGAAITACsBAAIrABcBCQLr
A1AGCQLbAxcBCQLjA/gIKQLrA1AGKQLjA/EGKQITBNkGSQIbBBcHSQLjAx0HSQLrA1AGaQIDBG8G
aQL7A18GaQLjA4kGaQLrAxEGaQLzAysBiQLzAysBiQLrAxEGiQILBBcBiQLjA0gHqQLrAxEGqQLj
A9AFqQLbAxcByQITBNkGyQLjA3wHyQLrAxEGJAMrBBcBbwF0AXkBfgHOAdIB3QHiAfEB8QF5At4C
9QITA+IBzgHiAeIB4gHiAeIB4gHOAc4B4gHiAeIB4gHOAeIB4gEbAxsDPAPiAYMDmAOzA8YD2gPq
AxwESQRjBAQAAQAGAAUABwAGAAAATgFPAAAABwJUAAAAtgFZAAAAEwJeAAAAzwKYAAAAXgj+AAAA
bQgCAQAAgQj+AAAAkwj+AAAAnQj+AAAAqQj+AAAAsQj+AAAAtwj+AAAAwggCAQAAxwgCAQAA5Aj+
AAAA/wj+AAAAEgn+AAAALQn+AAAANQkCAQAAVAn+AAAAcQn+AAAAhgkGAQAAmQkGAQIABAADAAIA
BQAFAAIABgAHAAIABwAJAAIADwALAAIAFQANAAEAFgANAAIAFwAPAAEAGAAPAAIAGQARAAEAGgAR
AAIAGwATAAEAHAATAAEAHgAVAAIAHQAVAAEAIAAXAAIAHwAXAAIAIQAZAAEAIgAZAAEAJAAbAAIA
IwAbAAIAJQAdAAEAJgAdAAEAKAAfAAIAJwAfAAEAKgAhAAIAKQAhAAIAKwAjAAEALAAjAAEALgAl
AAIALQAlAAEAMAAnAAIALwAnAAIAMQApAAEAMgApAAIAMwArAAEANAArAAEANgAtAAIANQAtAAIA
NwAvAAIAOAAxAHUAdQCIAFMBWgFhAWgBYAJnAhAD1wMEgAAAAAAAAAAAAAAAAAAAAACvAAAABAAA
AAAAAAAAAAAAAQAKAAAAAAAKAAAAAAAAAAAAAAAKABMAAAAAAAwAAAAAAAAAAAAAAJ0A2wIAAAAA
BAAAAAAAAAAAAAAAAQBXAQAAAAAMAAAAAAAAAAAAAACdAIMNAAAAAAwAAAAAAAAAAAAAAJ0AXA4A
AAAABAAAAAAAAAAAAAAACgDnEAAAAAABAAAAAAAAAAAAAABuBFkSAAAAAAUABAAGAAQACAAHAAkA
BwAAABAADABdAgAAEAAZAF0CAAAAABsAXQItAOwBLQBuAgAAADxNb2R1bGU+AG1zY29ybGliAE1p
Y3Jvc29mdC5WaXN1YWxCYXNpYwBNeUFwcGxpY2F0aW9uAFNjcmlwdFRhc2tfZjc4YTdmZTk0MWI2
NGJlNGI0OGM4OWRlZjhkMDFmYTkuTXkATXlDb21wdXRlcgBNeVByb2plY3QATXlXZWJTZXJ2aWNl
cwBUaHJlYWRTYWZlT2JqZWN0UHJvdmlkZXJgMQBTY3JpcHRNYWluAFNjcmlwdFRhc2tfZjc4YTdm
ZTk0MWI2NGJlNGI0OGM4OWRlZjhkMDFmYTkAU2NyaXB0UmVzdWx0cwBDb25zdHMATWljcm9zb2Z0
LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMAQXBwbGljYXRpb25CYXNlAC5jdG9yAE1p
Y3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1dGVyAFN5c3RlbQBPYmplY3QALmNjdG9y
AGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0UHJvdmlkZXIAZ2V0X0FwcGxpY2F0aW9uAG1f
QXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNlcgBtX1VzZXJPYmplY3RQcm92aWRlcgBnZXRf
V2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2VzT2JqZWN0UHJvdmlkZXIAQXBwbGljYXRpb24AV2Vi
U2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENvZGUAVHlwZQBHZXRUeXBlAFRvU3RyaW5nAENyZWF0
ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERpc3Bvc2VfX0luc3RhbmNlX18AZ2V0X0dldEluc3Rh
bmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZpY2VzLkludGVybmFsAENvbnRleHRWYWx1
ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBNaWNyb3NvZnQuU3FsU2VydmVyLlNjcmlwdFRhc2sA
TWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuVGFza3MuU2NyaXB0VGFzawBWU1RBUlRTY3JpcHRPYmpl
Y3RNb2RlbEJhc2UATWFpbgBWYWxpZGF0ZQBlcnJNZXNzYWdlAEdldFByb3BlcnRpZXMAZ2V0X0h0
dHBDb25uZWN0aW9uAHNldF9IdHRwQ29ubmVjdGlvbgB2YWx1ZQBnZXRfSXNJbnB1dEZpbGVWYXJp
YWJsZQBzZXRfSXNJbnB1dEZpbGVWYXJpYWJsZQBnZXRfSW5wdXRGaWxlVmFyaWFibGUAc2V0X0lu
cHV0RmlsZVZhcmlhYmxlAGdldF9JbnB1dEZpbGUAc2V0X0lucHV0RmlsZQBnZXRfQ29udGVudFR5
cGUAc2V0X0NvbnRlbnRUeXBlAGdldF9BUzJGcm9tAHNldF9BUzJGcm9tAGdldF9BUzJUbwBzZXRf
QVMyVG8AZ2V0X1Jlc3VsdEZpbGUAc2V0X1Jlc3VsdEZpbGUAZ2V0X1NpZ24Ac2V0X1NpZ24AZ2V0
X0lzU2lnbmluZ0NlcnRpZmljYXRlVmFyaWFibGUAc2V0X0lzU2lnbmluZ0NlcnRpZmljYXRlVmFy
aWFibGUAZ2V0X1NpZ25pbmdDZXJ0aWZpY2F0ZVZhcmlhYmxlAHNldF9TaWduaW5nQ2VydGlmaWNh
dGVWYXJpYWJsZQBnZXRfU2lnbmluZ0NlcnRpZmljYXRlAHNldF9TaWduaW5nQ2VydGlmaWNhdGUA
Z2V0X1NpZ25pbmdDZXJ0aWZpY2F0ZVBhc3N3b3JkAHNldF9TaWduaW5nQ2VydGlmaWNhdGVQYXNz
d29yZABnZXRfRW5jcnlwdABzZXRfRW5jcnlwdABnZXRfSXNSZWNpcGllbnRDZXJ0aWZpY2F0ZVZh
cmlhYmxlAHNldF9Jc1JlY2lwaWVudENlcnRpZmljYXRlVmFyaWFibGUAZ2V0X1JlY2lwaWVudENl
cnRpZmljYXRlVmFyaWFibGUAc2V0X1JlY2lwaWVudENlcnRpZmljYXRlVmFyaWFibGUAZ2V0X1Jl
Y2lwaWVudENlcnRpZmljYXRlAHNldF9SZWNpcGllbnRDZXJ0aWZpY2F0ZQBnZXRfSHR0cENvbm5l
Y3Rpb25UeXBlAGdldF9GaWxlQ29ubmVjdGlvblR5cGUAR2V0VmFyaWFibGVfAG5hbWUAR2V0Rmls
ZU5hbWVfAGlzVmFyAFN5c3RlbS5OZXQASHR0cFdlYlJlcXVlc3QAU2V0dXBSZXF1ZXN0XwBDb25j
YXRCeXRlc18AaW5wdXRMaXN0AENyZWF0ZU1pbWVCb3VuZGFyeV8AQ3JlYXRlTWltZUhlYWRlcl8A
Y29udGVudFR5cGUAZW5jb2RpbmcAZGlzcG9zaXRpb24AQ3JlYXRlTWVzc2FnZV8AY29udGVudABT
aWduTWVzc2FnZV8AbWVzc2FnZQBjZXJ0RmlsZQBjZXJ0UGFzcwBDcmVhdGVTaWduYXR1cmVfAEVu
Y3J5cHRfAHJlY2lwaWVudENlcnQAYWxnb3JpdGhtAEh0dHBXZWJSZXNwb25zZQBTdG9yZVJlc3Vs
dF8AcmVzAG1fY29ubmVjdGlvbgBtX2lzSW5wdXRGaWxlVmFyAG1faW5wdXRGaWxlAG1fY29udGVu
dFR5cGUAbV9mcm9tAG1fdG8AbV9yZXN1bHRGaWxlAG1fc2lnbgBtX2lzU2lnbkNlcnRWYXIAbV9z
aWduQ2VydABtX3NpZ25QYXNzAG1fZW5jcnlwdGlvbgBtX2lzUmVjaXBpZW50Q2VydFZhcgBtX3Jl
Y2lwaWVudENlcnQASHR0cENvbm5lY3Rpb24ASXNJbnB1dEZpbGVWYXJpYWJsZQBJbnB1dEZpbGVW
YXJpYWJsZQBJbnB1dEZpbGUAQ29udGVudFR5cGUAQVMyRnJvbQBBUzJUbwBSZXN1bHRGaWxlAFNp
Z24ASXNTaWduaW5nQ2VydGlmaWNhdGVWYXJpYWJsZQBTaWduaW5nQ2VydGlmaWNhdGVWYXJpYWJs
ZQBTaWduaW5nQ2VydGlmaWNhdGUAU2lnbmluZ0NlcnRpZmljYXRlUGFzc3dvcmQARW5jcnlwdABJ
c1JlY2lwaWVudENlcnRpZmljYXRlVmFyaWFibGUAUmVjaXBpZW50Q2VydGlmaWNhdGVWYXJpYWJs
ZQBSZWNpcGllbnRDZXJ0aWZpY2F0ZQBIdHRwQ29ubmVjdGlvblR5cGUARmlsZUNvbm5lY3Rpb25U
eXBlAEVudW0AdmFsdWVfXwBTdWNjZXNzAEZhaWx1cmUARW5jcnlwdGlvbk5vbmUAU3lzdGVtLkNv
bXBvbmVudE1vZGVsAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVTdGF0
ZQBTeXN0ZW0uQ29kZURvbS5Db21waWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRlAFN5c3RlbS5E
aWFnbm9zdGljcwBEZWJ1Z2dlckhpZGRlbkF0dHJpYnV0ZQBNaWNyb3NvZnQuVmlzdWFsQmFzaWMu
Q29tcGlsZXJTZXJ2aWNlcwBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxlTmFtZUF0
dHJpYnV0ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAEhlbHBLZXl3b3JkQXR0cmlidXRl
AFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMAR2V0T2JqZWN0
VmFsdWUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAQWN0aXZhdG9yAENyZWF0
ZUluc3RhbmNlAE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRlAGdldF9WYWx1ZQBzZXRfVmFsdWUA
U3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzAENvbVZpc2libGVBdHRyaWJ1dGUAU3lzdGVt
LklPAFN0cmVhbQBFeGNlcHRpb24AV2ViSGVhZGVyQ29sbGVjdGlvbgBnZXRfSGVhZGVycwBTdHJp
bmcAQ29uY2F0AEFkZABGaWxlAFJlYWRBbGxCeXRlcwBPcGVyYXRvcnMAQ29tcGFyZVN0cmluZwBF
bXB0eQBzZXRfQ29udGVudExlbmd0aABHZXRSZXF1ZXN0U3RyZWFtAFdyaXRlAElEaXNwb3NhYmxl
AERpc3Bvc2UAV2ViUmVzcG9uc2UAR2V0UmVzcG9uc2UAUHJvamVjdERhdGEAU2V0UHJvamVjdEVy
cm9yAFNjcmlwdE9iamVjdE1vZGVsAGdldF9EdHMARXZlbnRzT2JqZWN0V3JhcHBlcgBnZXRfRXZl
bnRzAEZpcmVFcnJvcgBDbGVhclByb2plY3RFcnJvcgBzZXRfVGFza1Jlc3VsdABJc051bGxPckVt
cHR5AGdldF9NZXNzYWdlAFN5c3RlbS5Db2xsZWN0aW9ucwBBcnJheUxpc3QASW50ZXJhY3Rpb24A
SUlmAEFycmF5AFRvQXJyYXkATWljcm9zb2Z0LlNxbFNlcnZlci5NYW5hZ2VkRFRTAE1pY3Jvc29m
dC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUAVmFyaWFibGVzAFZhcmlhYmxlRGlzcGVuc2VyAGdldF9W
YXJpYWJsZURpc3BlbnNlcgBMb2NrT25lRm9yUmVhZABWYXJpYWJsZQBnZXRfSXRlbQBVbmxvY2sA
Q29ubmVjdGlvbnMAZ2V0X0Nvbm5lY3Rpb25zAENvbm5lY3Rpb25NYW5hZ2VyAEFjcXVpcmVDb25u
ZWN0aW9uAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUnVudGltZVdyYXAATWljcm9zb2Z0LlNxbFNl
cnZlci5EdHMuUnVudGltZS5XcmFwcGVyAElEVFNIdHRwQ2xpZW50Q29ubmVjdGlvbjEwMABEYXRl
VGltZQBnZXRfU2VydmVyVVJMAFdlYlJlcXVlc3QAQ3JlYXRlAGdldF9UaW1lb3V0AHNldF9UaW1l
b3V0AHNldF9NZXRob2QAc2V0X0FsbG93QXV0b1JlZGlyZWN0AHNldF9LZWVwQWxpdmUAc2V0X1By
ZUF1dGhlbnRpY2F0ZQBzZXRfU2VuZENodW5rZWQAc2V0X1VzZXJBZ2VudABnZXRfVXNlU2VydmVy
Q3JlZGVudGlhbHMAZ2V0X1NlcnZlclVzZXJOYW1lAEdldFNlcnZlclBhc3N3b3JkAGdldF9TZXJ2
ZXJEb21haW4ATmV0d29ya0NyZWRlbnRpYWwASUNyZWRlbnRpYWxzAHNldF9DcmVkZW50aWFscwBn
ZXRfVXNlUHJveHkAZ2V0X1Byb3h5VVJMAFdlYlByb3h5AElXZWJQcm94eQBzZXRfUHJveHkAZ2V0
X1VzZVByb3h5Q3JlZGVudGlhbHMAZ2V0X1Byb3h5AGdldF9Qcm94eVVzZXJOYW1lAEdldFByb3h5
UGFzc3dvcmQAZ2V0X1Byb3h5RG9tYWluAGdldF9Ob3cAQnl0ZQBDb3B5VG8AR3VpZABOZXdHdWlk
AEVudmlyb25tZW50AGdldF9OZXdMaW5lAFN5c3RlbS5UZXh0AEVuY29kaW5nAGdldF9BU0NJSQBH
ZXRCeXRlcwBDb252ZXJ0AFRvQmFzZTY0U3RyaW5nAFN5c3RlbS5TZWN1cml0eQBTeXN0ZW0uU2Vj
dXJpdHkuQ3J5cHRvZ3JhcGh5LlBrY3MAQ21zU2lnbmVyAFNpZ25lZENtcwBDb250ZW50SW5mbwBT
eXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5Llg1MDlDZXJ0aWZpY2F0ZXMAWDUwOUNlcnRpZmlj
YXRlMgBDb21wdXRlU2lnbmF0dXJlAEVuY29kZQBFbnZlbG9wZWRDbXMAQ21zUmVjaXBpZW50AFN5
c3RlbS5TZWN1cml0eS5DcnlwdG9ncmFwaHkAT2lkAEFsZ29yaXRobUlkZW50aWZpZXIAU3ViamVj
dElkZW50aWZpZXJUeXBlAEdldFJlc3BvbnNlU3RyZWFtAEZpbGVTdHJlYW0AT3BlbldyaXRlAFJl
YWQAQ0xTQ29tcGxpYW50QXR0cmlidXRlAFNTSVNTY3JpcHRUYXNrRW50cnlQb2ludEF0dHJpYnV0
ZQBDb3p5Um9jLlNTSVNQbHVzLjIwMTQAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUy5BdHRyaWJ1dGVz
AEZpbHRlclByb3BlcnRpZXNBdHRyaWJ1dGUAVmFsaWRhdGVQcm9wZXJ0aWVzQXR0cmlidXRlAFNv
cnRQcm9wZXJ0aWVzQXR0cmlidXRlAFZhcmlhYmxlQXR0cmlidXRlAERlc2NyaXB0aW9uQXR0cmli
dXRlAENhdGVnb3J5QXR0cmlidXRlAFJlZnJlc2hQcm9wZXJ0aWVzQXR0cmlidXRlAFJlZnJlc2hQ
cm9wZXJ0aWVzAERlZmF1bHRWYWx1ZUF0dHJpYnV0ZQBMaXN0QXR0cmlidXRlAE5vbkVzc2VudGlh
bEF0dHJpYnV0ZQBDb25uZWN0aW9uQXR0cmlidXRlAFBhc3N3b3JkUHJvcGVydHlUZXh0QXR0cmli
dXRlAFBhcmFtQXJyYXlBdHRyaWJ1dGUAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0ZQBS
dW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0ZQBTeXN0ZW0uUnVudGltZS5WZXJzaW9uaW5nAFRh
cmdldEZyYW1ld29ya0F0dHJpYnV0ZQBTY3JpcHRUYXNrX2Y3OGE3ZmU5NDFiNjRiZTRiNDhjODlk
ZWY4ZDAxZmE5LmRsbAAAAAAPUwB1AGIAagBlAGMAdAAAHSAAdAByAGEAbgBzAG0AaQBzAHMAaQBv
AG4ALgAACU4AbwBuAGUAADNDAG8AbgB0AGUAbgB0AC0AVAByAGEAbgBzAGYAZQByAC0ARQBuAGMA
bwBkAGkAbgBnAAENYgBpAG4AYQByAHkAACdDAG8AbgB0AGUAbgB0AC0ARABpAHMAcABvAHMAaQB0
AGkAbwBuAAElaQBuAGwAaQBuAGUAOwAgAGYAaQBsAGUAbgBhAG0AZQA9ACIAAAMiAAAfRQBEAEkA
SQBOAFQALQBGAGUAYQB0AHUAcgBlAHMAASltAHUAbAB0AGkAcABsAGUALQBhAHQAdABhAGMAaABt
AGUAbgB0AHMAAYCHYQBwAHAAbABpAGMAYQB0AGkAbwBuAC8AcABrAGMAcwA3AC0AbQBpAG0AZQA7
ACAAcwBtAGkAbQBlAC0AdAB5AHAAZQA9AGUAbgB2AGUAbABvAHAAZQBkAC0AZABhAHQAYQA7ACAA
bgBhAG0AZQA9ACIAcwBtAGkAbQBlAC4AcAA3AG0AIgABG0EAUwAyACAAUwBlAG4AZAAgAFQAYQBz
AGsAAC9TAGUAbABlAGMAdAAgAEgAVABUAFAAIABjAG8AbgBuAGUAYwB0AGkAbwBuAC4AACVTAGUA
bABlAGMAdAAgAGkAbgBwAHUAdAAgAGYAaQBsAGUALgAAI1MAcABlAGMAaQBmAHkAIABBAFMAMgAg
AGYAcgBvAG0ALgAAH1MAcABlAGMAaQBmAHkAIABBAFMAMgAgAHQAbwAuAABBUwBlAGwAZQBjAHQA
IABzAGkAZwBuAGkAbgBnACAAYwBlAHIAdABpAGYAaQBjAGEAdABlACAAZgBpAGwAZQAuAABLUwBw
AGUAYwBpAGYAeQAgAHMAaQBnAG4AaQBuAGcAIABjAGUAcgB0AGkAZgBpAGMAYQB0AGUAIABwAGEA
cwBzAHcAbwByAGQALgAARVMAZQBsAGUAYwB0ACAAcgBlAGMAaQBwAGkAZQBuAHQAIABjAGUAcgB0
AGkAZgBpAGMAYQB0AGUAIABmAGkAbABlAC4AAB1IAHQAdABwAEMAbwBuAG4AZQBjAHQAaQBvAG4A
ACdJAHMASQBuAHAAdQB0AEYAaQBsAGUAVgBhAHIAaQBhAGIAbABlAAAjSQBuAHAAdQB0AEYAaQBs
AGUAVgBhAHIAaQBhAGIAbABlAAATSQBuAHAAdQB0AEYAaQBsAGUAABdDAG8AbgB0AGUAbgB0AFQA
eQBwAGUAAA9BAFMAMgBGAHIAbwBtAAALQQBTADIAVABvAAAVUgBlAHMAdQBsAHQARgBpAGwAZQAA
CVMAaQBnAG4AADlJAHMAUwBpAGcAbgBpAG4AZwBDAGUAcgB0AGkAZgBpAGMAYQB0AGUAVgBhAHIA
aQBhAGIAbABlAAA1UwBpAGcAbgBpAG4AZwBDAGUAcgB0AGkAZgBpAGMAYQB0AGUAVgBhAHIAaQBh
AGIAbABlAAAlUwBpAGcAbgBpAG4AZwBDAGUAcgB0AGkAZgBpAGMAYQB0AGUAADVTAGkAZwBuAGkA
bgBnAEMAZQByAHQAaQBmAGkAYwBhAHQAZQBQAGEAcwBzAHcAbwByAGQAAA9FAG4AYwByAHkAcAB0
AAA9SQBzAFIAZQBjAGkAcABpAGUAbgB0AEMAZQByAHQAaQBmAGkAYwBhAHQAZQBWAGEAcgBpAGEA
YgBsAGUAADlSAGUAYwBpAHAAaQBlAG4AdABDAGUAcgB0AGkAZgBpAGMAYQB0AGUAVgBhAHIAaQBh
AGIAbABlAAApUgBlAGMAaQBwAGkAZQBuAHQAQwBlAHIAdABpAGYAaQBjAGEAdABlAAAJSABUAFQA
UAAACUYASQBMAEUAAAlQAE8AUwBUAAArQwBPAFoAWQBSAE8AQwAgAEEAUwAyACAAUwBlAG4AZAAg
AFQAYQBzAGsAABlNAGkAbQBlAC0AVgBlAHIAcwBpAG8AbgABBzEALgAwAAAXQQBTADIALQBWAGUA
cgBzAGkAbwBuAAERQQBTADIALQBGAHIAbwBtAAENQQBTADIALQBUAG8AARVNAGUAcwBzAGEAZwBl
AC0ASQBkAAEDPAAAE2gAaABtAG0AcwBzAGQAZABkAAALQABhAHMAMgA+AAADXwAAA04AAB1DAG8A
bgB0AGUAbgB0AC0AVAB5AHAAZQA6ACAAATdDAG8AbgB0AGUAbgB0AC0AVAByAGEAbgBzAGYAZQBy
AC0ARQBuAGMAbwBkAGkAbgBnADoAIAABK0MAbwBuAHQAZQBuAHQALQBEAGkAcwBwAG8AcwBpAHQA
aQBvAG4AOgAgAAGAp20AdQBsAHQAaQBwAGEAcgB0AC8AcwBpAGcAbgBlAGQAOwAgAHAAcgBvAHQA
bwBjAG8AbAA9ACIAYQBwAHAAbABpAGMAYQB0AGkAbwBuAC8AcABrAGMAcwA3AC0AcwBpAGcAbgBh
AHQAdQByAGUAIgA7ACAAbQBpAGMAYQBsAGcAPQAiAHMAaABhADEAIgA7ACAAYgBvAHUAbgBkAGEA
cgB5AD0AIgABBS0ALQABW2EAcABwAGwAaQBjAGEAdABpAG8AbgAvAHAAawBjAHMANwAtAHMAaQBn
AG4AYQB0AHUAcgBlADsAIABuAGEAbQBlAD0AIgBzAG0AaQBtAGUALgBwADcAcwAiAAENYgBhAHMA
ZQA2ADQAAD1hAHQAdABhAGMAaABtAGUAbgB0ADsAIABmAGkAbABlAG4AYQBtAGUAPQBzAG0AaQBt
AGUALgBwADcAcwAAAAAAvTwLAKSVF0C10MuoKkgZggAIt3pcVhk04IkIsD9ffxHVCjoDIAABAwAA
AQQAABIMBwYVEhgBEgwEAAASCAcGFRIYARIIBAAAEhEHBhUSGAESEQQAABIUBwYVEhgBEhQECAAS
DAQIABIIBAgAEhEECAASFAQgAQIcAyAACAQgABIVAyAADgIeAAcQAQEeAB4ABzABAQEQHgACEwAE
IAATAAcGFRIZARMABCgAEwAIiYRdzYCAzJEFIAECEA4EIAAdDgQgAQEOAyAAAgQgAQECBCABHA4F
IAIOAg4EIAASIQcgAR0FHR0FBiADDg4ODgggAx0FHQUODgogBB0FHQUODhAOBSABARIlAgYOAgYC
AygADgMoAAIEKAAdDgIGCAMGESAEAAAAAAQBAAAACE4AbwBuAGUABSABARExCAEAAQAAAAAABSAC
AQ4OGAEACk15VGVtcGxhdGUIMTAuMC4wLjAAAAYVEhgBEgwGFRIYARIIBhUSGAESEQYVEhgBEhQE
BwESDAQHARIIBAcBEhEEBwESFBMBAA5NeS5BcHBsaWNhdGlvbgAAEAEAC015LkNvbXB1dGVyAAAM
AQAHTXkuVXNlcgAAEwEADk15LldlYlNlcnZpY2VzAAAEAAEcHAMHAQIDBwEIBgABEhURTQQHARIV
AwcBDgUQAQAeAAQKAR4ABAcBHgAHIAQBDg4ODmEBADRTeXN0ZW0uV2ViLlNlcnZpY2VzLlByb3Rv
Y29scy5Tb2FwSHR0cENsaWVudFByb3RvY29sEkNyZWF0ZV9fSW5zdGFuY2VfXxNEaXNwb3NlX19J
bnN0YW5jZV9fAAAABhUSGAETAAYVEhkBEwAECgETAAUgAQETAAgHAxMAEwATAAUBAAAAAAQgABJl
BQACDg4OBQABHQUOBgADCA4OAgYAAw4ODg4EIAEBCgQgABJdByADAR0FCAgEIAASeQUAAQESYQUg
ABKAgQUgABKAhQggBQIIDg4OCAQgAQEIEQcKCB0FDg4SIRIlDg4SXRJhBAABAg4GBwMCAhJhBCAB
CBwGAAMcAhwcByABEoCREhUCHQ4HBwIdDhKAiQYHAh0OHQ4FIAASgJkIIAIBDhASgJUGIAESgJ0c
AyAAHAcHAxwcEoCVBSAAEoChBiABEoClHAQgARwcBgABEoCxDgYgAwEODg4GIAEBEoC5BiABARKA
wQUgABKAwQUAABGArQQgAQ4ODAcEEoCpEiESIRGArQcgAgESgJEIFAcKHQUICB0FHQUdBQgdHQUI
HR0FBQAAEYDJBgcCDhGAyQMAAA4HAAQODg4ODgQHAg4OBQAAEoDRBSABHQUOAh0FCQcDHQUdBR0d
BQUAAQ4dBRAHBx0FDh0FHQUdBR0FHR0FBSABAR0FByACARKA4QIGIAEBEoDlBiABARKA2QQgAB0F
CgcDEoDZHQUSgN0GIAEBEoDxCSACARKA4RKA9QkgAgERgPkSgOUGIAEBEoDtCgcDHQUSgOkSgO0G
AAESgP0OByADCB0FCAgKBwUOEl0SXR0FCAgWz0kLuAw06hIBAA1HZXRQcm9wZXJ0aWVzAAANAQAI
VmFsaWRhdGUAAAUgAQEdDoEwAQARAAAADkh0dHBDb25uZWN0aW9uE0lzSW5wdXRGaWxlVmFyaWFi
bGURSW5wdXRGaWxlVmFyaWFibGUJSW5wdXRGaWxlC0NvbnRlbnRUeXBlB0FTMkZyb20FQVMyVG8K
UmVzdWx0RmlsZQRTaWduHElzU2lnbmluZ0NlcnRpZmljYXRlVmFyaWFibGUaU2lnbmluZ0NlcnRp
ZmljYXRlVmFyaWFibGUSU2lnbmluZ0NlcnRpZmljYXRlGlNpZ25pbmdDZXJ0aWZpY2F0ZVBhc3N3
b3JkB0VuY3J5cHQeSXNSZWNpcGllbnRDZXJ0aWZpY2F0ZVZhcmlhYmxlHFJlY2lwaWVudENlcnRp
ZmljYXRlVmFyaWFibGUUUmVjaXBpZW50Q2VydGlmaWNhdGUAAEABADtTZWxlY3QgdmFyaWFibGUg
Y29udGFpbmluZyByZWNpcGllbnQgY2VydGlmaWNhdGUgZmlsZSBwYXRoLgAADwEACkVuY3J5cHRp
b24AAAYgAQERgSUnAQAiU3BlY2lmaWVzIGlmIGlucHV0IGZpbGUgaXMgc2lnbmVkLgAADgEACVNp
Z25hdHVyZQAACQEABE5vbmUAAAUgAQEdHBkBAAMAAAAOBE5vbmUOBDNERVMOA1JDMgAAHQEAGFNw
ZWNpZnkgZW5jcnlwdGlvbiB0eXBlLgAAMQEALFNwZWNpZmllcyBpZiBTaWduaW5nQ2VydGlmaWNh
dGUgaXMgdmFyaWFibGUuAAAXAQASRmlsZUNvbm5lY3Rpb25UeXBlAAAlAQAgU2VsZWN0IHNpZ25p
bmcgY2VydGlmaWNhdGUgZmlsZS4AAAUBAAEAACoBACVTcGVjaWZ5IHNpZ25pbmcgY2VydGlmaWNh
dGUgcGFzc3dvcmQuAAAzAQAuU3BlY2lmaWVzIGlmIFJlY2lwaWVudENlcnRpZmljYXRlIGlzIHZh
cmlhYmxlLgAAJwEAIlNlbGVjdCByZWNpcGllbnQgY2VydGlmaWNhdGUgZmlsZS4AABgBABNhcHBs
aWNhdGlvbi9FREktWDEyAAAHIAMBHRwCAkUBAAMAAAAOD2FwcGxpY2F0aW9uL3htbA4TYXBwbGlj
YXRpb24vRURJLVgxMg4TYXBwbGljYXRpb24vRURJRkFDVAABAAAaAQAVU3BlY2lmeSBjb250ZW50
IHR5cGUuAAAOAQAJCVNldHRpbmdzAAAXAQASSHR0cENvbm5lY3Rpb25UeXBlAAAcAQAXU2VsZWN0
IEhUVFAgY29ubmVjdGlvbi4AABYBABFTcGVjaWZ5IEFTMiBGcm9tLgAAFAEAD1NwZWNpZnkgQVMy
IFRvLgAAMAEAK1NlbGVjdCB2YXJpYWJsZSBjb250YWluaW5nIGlucHV0IGZpbGUgcGF0aC4AABgB
ABNTZWxlY3QgcmVzdWx0IGZpbGUuAAAXAQASU2VsZWN0IGlucHV0IGZpbGUuAAA+AQA5U2VsZWN0
IHZhcmlhYmxlIGNvbnRhaW5pbmcgc2lnbmluZyBjZXJ0aWZpY2F0ZSBmaWxlIHBhdGguAAAoAQAj
U3BlY2lmaWVzIGlmIElucHV0RmlsZSBpcyB2YXJpYWJsZS4AAAgBAAgAAAAAAB4BAAEAVAIWV3Jh
cE5vbkV4Y2VwdGlvblRocm93cwFHAQAaLk5FVEZyYW1ld29yayxWZXJzaW9uPXY0LjABAFQOFEZy
YW1ld29ya0Rpc3BsYXlOYW1lEC5ORVQgRnJhbWV3b3JrIDTEZQAAAAAAAAAAAADeZQAAACAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA0GUAAAAAAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAA
AAAA/yUAIAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAYAACAAAAAAAAAAAAAAAAA
AAABAAEAAAAwAACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWIAAANQCAAAAAAAAAAAAANQCNAAA
AFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+AAABAAAAAAAAAAAAAAAAAAAA
AAA/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBv
AAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAAsAQ0AgAAAQBTAHQAcgBpAG4A
ZwBGAGkAbABlAEkAbgBmAG8AAAAQAgAAAQAwADAAMAAwADAANABiADAAAAAsAAIAAQBGAGkAbABl
AEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAIAAAADAACAABAEYAaQBsAGUAVgBlAHIAcwBpAG8A
bgAAAAAAMAAuADAALgAwAC4AMAAAAIAAMAABAEkAbgB0AGUAcgBuAGEAbABOAGEAbQBlAAAAUwBj
AHIAaQBwAHQAVABhAHMAawBfAGYANwA4AGEANwBmAGUAOQA0ADEAYgA2ADQAYgBlADQAYgA0ADgA
YwA4ADkAZABlAGYAOABkADAAMQBmAGEAOQAuAGQAbABsAAAAKAACAAEATABlAGcAYQBsAEMAbwBw
AHkAcgBpAGcAaAB0AAAAIAAAAIgAMAABAE8AcgBpAGcAaQBuAGEAbABGAGkAbABlAG4AYQBtAGUA
AABTAGMAcgBpAHAAdABUAGEAcwBrAF8AZgA3ADgAYQA3AGYAZQA5ADQAMQBiADYANABiAGUANABi
ADQAOABjADgAOQBkAGUAZgA4AGQAMAAxAGYAYQA5AC4AZABsAGwAAAA0AAgAAQBQAHIAbwBkAHUA
YwB0AFYAZQByAHMAaQBvAG4AAAAwAC4AMAAuADAALgAwAAAAOAAIAAEAQQBzAHMAZQBtAGIAbAB5
ACAAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4AMAAuADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAABgAAAMAAAA8DUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA</BinaryItem>
</ScriptProject>