<component id="16" name="Table Update Destination" componentClassID="{874F7595-FB5F-40FF-96AF-FBFF8250E3EF}" description="Executes a custom script." localeId="1033" version="7" contactInfo="Executes a custom script.;Microsoft Corporation;Microsoft SqlServer v9; © 2004 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;0"><properties><property id="17" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="30"><arrayElement dataType="System.String"><![CDATA[scriptcomponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-16"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This section defines project-level properties.

       Configuration - Specifies whether the default configuration is Release or Debug.
       Platform - Specifies what CPU the output of this project can run on.
       OutputType - Must be "Library" for VSTA.
       NoStandardLibraries - Set to "false" for VSTA.
       RootNamespace - In C#, this specifies the namespace given to new files.
                       In Visual Basic, all objects are wrapped in this namespace at runtime.
       AssemblyName - Name of the output assembly.
  -->
  <PropertyGroup>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Library</OutputType>
    <RootNamespace>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{0241DA19-8516-41A1-9BA8-F82E3331FF03}</ProjectGuid>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Debug" configuration is
       selected.

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>true</DebugSymbols>
    <Optimize>false</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032,42353,42354,42355</NoWarn>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Release" configuration is
       selected.

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032,42353,42354,42355</NoWarn>
  </PropertyGroup>
  <!-- This section enables pre- and post-build steps. However,
       it is recommended that MSBuild tasks be used instead of these properties.
  -->
  <PropertyGroup>
    <PreBuildEvent>
    </PreBuildEvent>
    <PostBuildEvent>
    </PostBuildEvent>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.ManagedDTS\v4.0_11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.ManagedDTS.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=16cf490bb80c34ea" />
  </ItemGroup>
  <!-- Visual Basic supports Importing namespaces (equivalent to using statements in C#).-->
  <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>
  <!-- This section defines the user source files that are part of the
       project.

       Compile - Specifies a source file to compile.
       EmbeddedResource - Specifies a .resx file for embedded resources.
       None - Specifies a file that is not to be passed to the compiler (for instance,
              a text file or XML file).
       AppDesigner - Specifies the directory where the application properties files can
                     be found.
  -->
  <ItemGroup>
    <AppDesigner Include="My Project\" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
    <Compile Include="main.vb" />
    <Compile Include="My Project\AssemblyInfo.vb">
      <SubType>Code</SubType>
    </Compile>
    <EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
    </EmbeddedResource>
    <Compile Include="My Project\Resources.Designer.vb">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <None Include="My Project\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
    </None>
    <Compile Include="My Project\Settings.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <!-- Include the default configuration information and metadata files for the add-in.
         These files are copied to the build output directory when the project is
         built, and the path to the configuration file is passed to add-in on the command
         line when debugging.
    -->
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" DebugInfoExeName="devenv.exe" DebugInfoCommandLine="/vstaHostDebugUri:&quot;vstadebugd41e1a24-676c-481c-b561-07976b192427/df7f7cf1-bb8f-4e01-b758-edab6e044b47&quot;" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC110</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <PropertyGroup>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
  </PropertyGroup>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\AssemblyInfo.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

' General Information about an assembly is controlled through the following 
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.

' Review the values of the assembly attributes

<Assembly: AssemblyTitle("ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2016")> 
<Assembly: AssemblyTrademark("")> 
<Assembly: CLSCompliant(True)> 

<Assembly: ComVisible(False)> 

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("948b84eb-be33-4bb7-b58e-b80a708b73c1")> 

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ComponentWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal InputName As String, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer, OutputMap))
        End If

    End Sub

    Public Overridable Sub Input_ProcessInput(ByVal Buffer As InputBuffer)

        While Buffer.NextRow()
            Input_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input_ProcessInputRow(ByVal Row As InputBuffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

    Public ReadOnly Property Connection() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("Connection").ConnectionManager
        End Get
    End Property

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2016 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.

Imports System
Imports System.ComponentModel
Imports System.Data
Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Collections
Imports System.Reflection
Imports System.Diagnostics

Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS.Attributes


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ColumnMappings()> _
<SortProperties(New String() { _
    "ConnectionType", "Connection", "Table", "Action", "PrimaryKeys", _
    "ErrorRowDisposition", _
    "InsertedVariable", "UpdatedVariable", "DeletedVariable"})> _
<FilterProperties("GetProperties")> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const ColumnSeparator As String = "," + vbLf
    Private Const Parameter_1P As String = "p{0}"


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Supported destination table actions.
    Public Enum ActionTypes
        Insert
        InsertUpdate    ' try an insert first, if it fails based on PK defined in the destination then update
        UpdateInsert    ' try an update first based on the PK, if it fails then insert
        Update
        Delete
    End Enum    ' ActionTypes


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        ' Setup command parameters.
        Dim colsCount As Integer = m_inputIndexes.Length
        For colIndex As Integer = 0 To colsCount - 1
            Dim bufIndex As Integer = m_inputIndexes(colIndex)
            Debug.Assert(bufIndex <> 0)
            Dim parameter As DbParameter = m_command.Parameters(colIndex)

            Dim value As Object = Row.Buffer(bufIndex)
            If TypeOf value Is BlobColumn Then
                If parameter.DbType = DbType.Binary Then
                    value = Row.Buffer.GetBlobData(bufIndex, 0, parameter.Size)
                Else
                    ' This is long string.
                    value = Row.Buffer.GetString(bufIndex)
                End If
            End If

            parameter.Value = value
        Next

        Try
            Select Case Me.Action
                Case ActionTypes.Insert
                    m_command.CommandText = m_insertSql
                    Call m_command.ExecuteNonQuery()
                    m_insertedCount += 1

                Case ActionTypes.InsertUpdate
                    Try
                        m_command.CommandText = m_insertSql
                        Call m_command.ExecuteNonQuery()
                        m_insertedCount += 1
                    Catch ex As Exception
                        ' Insert failed. Try update.
                        m_command.CommandText = m_updateSql
                        Call m_command.ExecuteNonQuery()
                        m_updatedCount += 1
                    End Try

                Case ActionTypes.UpdateInsert
                    m_command.CommandText = m_selectSql
                    Dim hasRow As Object = m_command.ExecuteScalar()
                    If hasRow Is Nothing Then
                        ' Row doesn't exist. Insert new one.
                        m_command.CommandText = m_insertSql
                        Call m_command.ExecuteNonQuery()
                        m_insertedCount += 1
                    Else
                        m_command.CommandText = m_updateSql
                        Call m_command.ExecuteNonQuery()
                        m_updatedCount += 1
                    End If

                Case ActionTypes.Update
                    m_command.CommandText = m_updateSql
                    Call m_command.ExecuteNonQuery()
                    m_updatedCount += 1

                Case ActionTypes.Delete
                    m_command.CommandText = m_selectSql
                    Dim hasRow As Object = m_command.ExecuteScalar()
                    If Not hasRow Is Nothing Then
                        ' Row exists. Delete it.
                        m_command.CommandText = m_deleteSql
                        Call m_command.ExecuteNonQuery()
                        m_deletedCount += 1
                    End If
            End Select
        Catch ex As Exception
            Select Case Me.ErrorRowDisposition
                Case DTSRowDisposition.RD_IgnoreFailure
                    ' Do nothing.

                Case DTSRowDisposition.RD_RedirectRow
                    Row.ErrorDescription = ex.Message
                    Call Row.DirectRowToErrorOutput()

                Case DTSRowDisposition.RD_FailComponent, DTSRowDisposition.RD_NotUsed
                    Call FireError_(ex.Message)
            End Select
        End Try
    End Sub ' Input_ProcessInputRow


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub PreExecute()
        Call MyBase.PreExecute()

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)

        ' Initialize command.
        Dim conn As DbConnection = GetConnection_(False)
        m_command = conn.CreateCommand()

        Dim primaryKeys As ArrayList = New ArrayList()
        If Not String.IsNullOrEmpty(Me.PrimaryKeys) Then
            primaryKeys = New ArrayList(Me.PrimaryKeys.Split( _
                New String() {ColumnSeparator}, _
                StringSplitOptions.None))
        End If
        Dim colsList As ArrayList = New ArrayList(primaryKeys)

        ' Include update columns (other than key).
        For Each inputCol As IDTSInputColumn100 In input.InputColumnCollection
            If inputCol.ExternalMetadataColumnID = 0 Then
                ' Column not selected. Skip it.
                Continue For
            End If

            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                inputCol.ExternalMetadataColumnID)

            If Not primaryKeys.Contains(extCol.Name) Then
                ' Key columns will be at the end.
                Call colsList.Insert(0, extCol.Name)
            End If
        Next

        ' Setup buffer indexes and command parameters.
        Dim colsCount As Integer = colsList.Count
        m_inputIndexes = New Integer(colsCount - 1) {}
        Dim parameters() As DbParameter = New DbParameter(colsCount - 1) {}
        For Each inputCol As IDTSInputColumn100 In input.InputColumnCollection
            If inputCol.ExternalMetadataColumnID = 0 Then
                ' Column not selected. Skip it.
                Continue For
            End If

            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                inputCol.ExternalMetadataColumnID)

            Dim colName As String = extCol.Name
            Dim paramIndex As Integer = colsList.IndexOf(colName)
            Call Debug.Assert(paramIndex <> -1)

            ' Setup parameter index.
            m_inputIndexes(paramIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                inputCol.LineageID)

            ' Setup command parameter.
            Dim parameter As DbParameter = m_command.CreateParameter()
            parameter.ParameterName = String.Format(Parameter_1P, 1 + paramIndex)
            Call SetupParameter_(inputCol, parameter)
            parameters(paramIndex) = parameter
        Next

        ' Include parameters to command.
        For paramIndex As Integer = 0 To colsCount - 1
            Call m_command.Parameters.Add(parameters(paramIndex))
        Next

        ' Setup SQL statements.
        Dim valueList As ArrayList = New ArrayList()
        Dim whereList As ArrayList = New ArrayList()
        Dim setList As ArrayList = New ArrayList()
        Dim selList As ArrayList = New ArrayList()
        For colIndex As Integer = 0 To colsCount - 1
            Dim colName As String = CStr(colsList(colIndex))
            Dim paramName As String = GetParameterName_( _
                conn, _
                parameters(colIndex).ParameterName)

            Call valueList.Add(paramName)

            Dim keyValue As String = String.Format("{0} = {1}", colName, paramName)

            If primaryKeys.Contains(colName) Then
                ' Key column.
                Call whereList.Add(keyValue)
            Else
                Call setList.Add(keyValue)
                Call selList.Add(paramName)
            End If
        Next

        Dim whereClause As String = String.Join( _
            " AND ", _
            CType(whereList.ToArray(GetType(String)), String()))

        m_selectSql = String.Format( _
            "SELECT {0} FROM {1} WHERE {2}", _
            String.Join(",", CType(primaryKeys.ToArray(GetType(String)), String())), _
            Me.Table, _
            whereClause)
        m_insertSql = String.Format( _
            "INSERT INTO {0} ({1}) VALUES({2})", _
            Me.Table, _
            String.Join(",", CType(colsList.ToArray(GetType(String)), String())), _
            String.Join(",", CType(valueList.ToArray(GetType(String)), String())))
        m_updateSql = String.Format( _
            "UPDATE {0} SET {1} WHERE {2}", _
            Me.Table, _
            String.Join(",", CType(setList.ToArray(GetType(String)), String())), _
            whereClause)
        m_deleteSql = String.Format( _
            "DELETE FROM {0} WHERE {1}", _
            Me.Table, _
            whereClause)
    End Sub ' PreExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub PostExecute()
        Call MyBase.PostExecute()

        If Not m_command Is Nothing Then
            Dim conn As DbConnection = m_command.Connection
            Call m_command.Dispose()
            m_command = Nothing
            Call conn.Dispose()
        End If

        ' Store diagnostics.
        Call SetVariable_(Me.InsertedVariable, m_insertedCount)
        Call SetVariable_(Me.UpdatedVariable, m_updatedCount)
        Call SetVariable_(Me.DeletedVariable, m_deletedCount)
    End Sub ' PostExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of current properties based on current state.
    Public Function GetProperties() As String()
        Dim result As New ArrayList

        ' Setup base properties.
        Call result.Add("ConnectionType")
        Call result.Add("Connection")
        Call result.Add("Table")
        Call result.Add("Action")
        Call result.Add("ErrorRowDisposition")
        Call result.Add("InsertedVariable")
        Call result.Add("UpdatedVariable")
        Call result.Add("DeletedVariable")

        Select Case Me.Action
            Case ActionTypes.InsertUpdate, ActionTypes.UpdateInsert, ActionTypes.Update, ActionTypes.Delete
                Call result.Add("PrimaryKeys")
        End Select

        Return CType(result.ToArray(GetType(String)), String())
    End Function    ' GetProperties


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function Validate(ByRef errMessage As String) As Boolean
        Dim result As Boolean

        Try
            If String.IsNullOrEmpty(Me.Connection) Then
                Throw New ApplicationException("Select connection.")
            End If

            If String.IsNullOrEmpty(Me.Table) Then
                Throw New ApplicationException("Select destination table.")
            End If

            If Me.Action <> ActionTypes.Insert AndAlso _
                String.IsNullOrEmpty(Me.PrimaryKeys) Then
                Throw New ApplicationException("Specify table primary keys.")
            End If

            Dim primaryKeys As String() = Me.PrimaryKeys.Split( _
                New String() {ColumnSeparator}, _
                StringSplitOptions.None)

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.IsAttached AndAlso _
                (input.InputColumnCollection.Count = 0 OrElse _
                input.InputColumnCollection.Count < primaryKeys.Length) Then
                Throw New Exception("Map input columns.")
            End If

            ' Store connection information in the runtime connection collection, too.
            ' Cannot directly use RuntimeConnectionCollection in the property get/set
            ' because of issues with multi-threading.
            Me.ComponentMetaData.RuntimeConnectionCollection("Connection").ConnectionManagerID = Me.Connection

            result = True
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub ReinitializeMetaData()
        Call MyBase.ReinitializeMetaData()

        If MyBase.ComponentMetaData.InputCollection.Count = 0 Then
            ' At least one input must exist.
            Throw New Exception("No inputs.")
        End If

        If String.IsNullOrEmpty(Me.Connection) Then
            Throw New Exception("Connection not selected.")
        End If

        If String.IsNullOrEmpty(Me.Table) Then
            Throw New Exception("Destination table not selected.")
        End If

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)

        Dim tblCols As DataTable = GetColumns_()

        ' Cleanup.
        input.ExternalMetadataColumnCollection.IsUsed = True
        Call input.InputColumnCollection.RemoveAll()
        Call input.ExternalMetadataColumnCollection.RemoveAll()

        ' Setup column metadata.
        Dim colsCount As Integer = tblCols.Rows.Count
        For colIndex As Integer = 0 To colsCount - 1
            Dim columnRow As DataRow = tblCols.Rows(colIndex)

            If Me.Action = ActionTypes.Delete AndAlso _
                Not CBool(columnRow("IsKey")) Then
                ' Include only key columns for Delete action.
                Continue For
            End If

            Dim column As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.NewAt( _
                colIndex)
            column.Name = CStr(columnRow("ColumnName"))

            ' Get type.
            Dim rawType As Type = CType(columnRow("DataType"), Type)
            Dim columnType As DataType = DataRecordTypeToBufferType_(rawType)
            If CBool(columnRow("IsLong")) Then
                ' This is extended type. Have to modify the column type a bit.
                Select Case columnType
                    Case DataType.DT_WSTR
                        columnType = DataType.DT_NTEXT

                    Case DataType.DT_STR
                        columnType = DataType.DT_TEXT

                    Case DataType.DT_BYTES
                        columnType = DataType.DT_IMAGE
                End Select
            End If

            ' Get length.
            Dim length As Integer = 0
            Select Case columnType
                Case DataType.DT_WSTR, DataType.DT_STR, DataType.DT_BYTES, _
                    DataType.DT_IMAGE, DataType.DT_NTEXT, DataType.DT_TEXT
                    length = CInt(columnRow("ColumnSize"))
            End Select

            ' Get code page.
            Dim codepage As Integer = 0
            If columnType = DataType.DT_STR Then
                codepage = -1
            End If

            ' Get precision and scale.
            Dim precision As Integer = 0
            Dim scale As Integer = 0
            If columnType = DataType.DT_NUMERIC OrElse columnType = DataType.DT_BYREF_DECIMAL Then
                If columnRow.IsNull("NumericPrecision") Then
                    precision = 29
                Else
                    precision = CInt(columnRow("NumericPrecision"))
                End If

                If columnRow.IsNull("NumericScale") Then
                    scale = 0
                Else
                    scale = CInt(columnRow("NumericScale"))
                End If

                If scale = 255 Then
                    scale = 0
                End If
            End If

            column.DataType = columnType
            column.Length = length
            column.Precision = precision
            column.Scale = scale
            column.CodePage = codepage
        Next
    End Sub ' ReinitializeMetaData


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of tables.
    Public Function GetTables() As Object()
        Dim result As ArrayList = New ArrayList()

        Try
            If String.IsNullOrEmpty(Me.Connection) Then
                Throw New Exception("Select connection.")
            End If

            ' Get tables.
            Using conn As DbConnection = GetConnection_(True)
                Dim tableType As String = "TABLE"
                If TypeOf conn Is SqlConnection Then
                    ' SQL uses different table type identifier.
                    tableType = "BASE TABLE"
                End If

                Dim tblTables As DataTable = conn.GetSchema( _
                    "Tables", _
                    New String() {Nothing, Nothing, Nothing, tableType})

                ' Get table schema column name.
                Dim schemaCol As String = tblTables.Columns(1).ColumnName

                For Each tableRow As DataRow In tblTables.Rows
                    Dim tableSchema As String = CStr(tableRow(schemaCol))
                    Dim tableName As String = CStr(tableRow("table_name"))

                    Call result.Add(String.Format("[{0}].[{1}]", tableSchema, tableName))
                Next

                Call result.Sort()
            End Using
        Catch ex As Exception
            Call MsgBox(ex.Message, MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation)
        End Try

        GetTables = result.ToArray()
    End Function    ' GetTables


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns selected destination table columns.
    Public Function GetColumns() As Object()
        Dim result As ArrayList = New ArrayList

        Try
            Dim tblCols As DataTable = GetColumns_()
            For Each columnRow As DataRow In tblCols.Rows
                Call result.Add(columnRow("ColumnName"))
            Next

            Call result.Sort()
        Catch ex As Exception
            Call MsgBox(ex.Message, MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation)
        End Try

        GetColumns = result.ToArray()
    End Function    ' GetColumns


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select connection type.")> _
    <Category("Destination")> _
    <List(New Object() {"ADO.NET", "OLEDB"})> _
    <DefaultValue("ADO.NET")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property ConnectionType() As String
        Get
            ConnectionType = m_connectionType
        End Get
        Set(ByVal value As String)
            If m_connectionType <> value Then
                m_connectionType = value
                Me.Connection = String.Empty
            End If
        End Set
    End Property    ' ConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select Connection Manager.")> _
    <Category("Destination")> _
    <Connection("ConnectionType")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Connection() As String
        Get
            Connection = m_connection
        End Get
        Set(ByVal value As String)
            If m_connection <> value Then
                m_connection = value
                Me.Table = String.Empty
            End If
        End Set
    End Property    ' Connection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select destination table.")> _
    <Category("Destination")> _
    <List("GetTables", False, True)> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Table() As String
        Get
            Table = m_table
        End Get
        Set(ByVal value As String)
            If m_table <> value Then
                m_table = value

                Me.PrimaryKeys = String.Empty
                If Me.Action <> ActionTypes.Insert Then
                    ' Initialize primary keys.
                    Me.PrimaryKeys = GetPrimaryKeys_()
                End If
            End If
        End Set
    End Property    ' Table


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select destination table action.")> _
    <Category("Destination")> _
    <DefaultValue(ActionTypes.InsertUpdate)> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Action() As ActionTypes
        Get
            Action = m_action
        End Get
        Set(ByVal value As ActionTypes)
            If m_action <> value Then
                m_action = value

                Me.PrimaryKeys = String.Empty
                If Me.Action <> ActionTypes.Insert Then
                    ' Initialize primary keys.
                    Me.PrimaryKeys = GetPrimaryKeys_()
                End If
            End If
        End Set
    End Property    ' Action


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify table primary keys.")> _
    <Category("Destination")> _
    <List("GetColumns", True, False)> _
    Public Property PrimaryKeys() As String
        Get
            PrimaryKeys = m_primaryKeys
        End Get
        Set(ByVal value As String)
            m_primaryKeys = value
        End Set
    End Property    ' PrimaryKeys


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify how to handle error rows.")> _
    <Category("Error")> _
    <DefaultValue(DTSRowDisposition.RD_FailComponent)> _
    Public Property ErrorRowDisposition() As DTSRowDisposition
        Get
            ErrorRowDisposition = m_errorRowDisposition
        End Get
        Set(ByVal value As DTSRowDisposition)
            m_errorRowDisposition = value
        End Set
    End Property    ' ErrorRowDisposition


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable to store number of rows inserted (optional).")> _
    <Category("Diagnostics")> _
    <Variable()> _
    Public Property InsertedVariable() As String
        Get
            InsertedVariable = m_insertedVar
        End Get
        Set(ByVal value As String)
            m_insertedVar = value
        End Set
    End Property    ' InsertedVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable to store number of rows updated (optional).")> _
    <Category("Diagnostics")> _
    <Variable()> _
    Public Property UpdatedVariable() As String
        Get
            UpdatedVariable = m_updatedVar
        End Get
        Set(ByVal value As String)
            m_updatedVar = value
        End Set
    End Property    ' UpdatedVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable to store number of rows deleted (optional).")> _
    <Category("Diagnostics")> _
    <Variable()> _
    Public Property DeletedVariable() As String
        Get
            DeletedVariable = m_deletedVar
        End Get
        Set(ByVal value As String)
            m_deletedVar = value
        End Set
    End Property    ' DeletedVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns selected destination table primary keys.
    Private Function GetPrimaryKeys_() As String
        Dim result As ArrayList = New ArrayList

        Try
            Dim tblCols As DataTable = GetColumns_()
            For Each columnRow As DataRow In tblCols.Rows
                If CBool(columnRow("IsKey")) Then
                    ' Key column.
                    Call result.Add(columnRow("ColumnName"))
                End If
            Next
        Catch ex As Exception
            ' Silently catch the error.
        End Try

        GetPrimaryKeys_ = String.Join( _
            ColumnSeparator, _
            CType(result.ToArray(GetType(String)), String()))
    End Function    ' GetPrimaryKeys_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetColumns_() As DataTable
        Dim result As DataTable

        Using conn As DbConnection = GetConnection_(True)
            Using cmd As DbCommand = conn.CreateCommand()
                cmd.CommandText = String.Format("SELECT * FROM {0}", Me.Table)
                Dim reader As DbDataReader = cmd.ExecuteReader( _
                    CommandBehavior.SchemaOnly Or CommandBehavior.KeyInfo)
                result = reader.GetSchemaTable()
            End Using
        End Using

        GetColumns_ = result
    End Function    ' GetColumns_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns SSIS data type from .NET type. Uses private PipelineComponent method.
    Private Function DataRecordTypeToBufferType_(ByVal type As Type) As DataType
        DataRecordTypeToBufferType_ = CType( _
            GetType(PipelineComponent).InvokeMember( _
                "DataRecordTypeToBufferType", _
                BindingFlags.InvokeMethod Or BindingFlags.NonPublic Or BindingFlags.Static, _
                Nothing, _
                Nothing, _
                New Object() {type}), _
            DataType)
    End Function    ' DataRecordTypeToBufferType_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Setup parameter data type.
    Private Sub SetupParameter_( _
        ByVal inputCol As IDTSInputColumn100, _
        ByVal parameter As DbParameter)

        parameter.DbType = GetDbType_(inputCol.DataType)
        parameter.Size = inputCol.Length
        If parameter.Size = 0 AndAlso parameter.DbType = DbType.Binary Then
            parameter.Size = 8000
        End If

        ' Get precision.
        Dim precision As Byte = CByte(inputCol.Precision)
        If parameter.DbType = DbType.Decimal AndAlso precision = 0 Then
            ' Decimal type has precision 29.
            ' http://msdn.microsoft.com/en-us/library/ms141036.aspx
            precision = 29
        End If

        Dim scale As Byte = CByte(inputCol.Scale)
        If parameter.DbType = DbType.DateTime AndAlso scale = 0 Then
            ' DateTime has maximum scale of 3.
            ' http://msdn.microsoft.com/en-us/library/ms141036%28v=sql.100%29.aspx
            scale = 3
        End If

        ' Setup precision and scale.
        Dim iDbDataParameter As IDbDataParameter = parameter
        iDbDataParameter.Precision = precision
        iDbDataParameter.Scale = scale
    End Sub ' SetupParameter_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Return ADO.NET data type from SSIS data type.
    Private Function GetDbType_(ByVal dt As DataType) As DbType
        Select Case dt
            Case DataType.DT_BOOL
                Return DbType.Boolean
            Case DataType.DT_STR, DataType.DT_WSTR, DataType.DT_TEXT, DataType.DT_NTEXT
                Return DbType.String
            Case DataType.DT_I1
                Return DbType.SByte
            Case DataType.DT_UI1
                Return DbType.Byte
            Case DataType.DT_I2
                Return DbType.Int16
            Case DataType.DT_UI2
                Return DbType.UInt16
            Case DataType.DT_I4
                Return DbType.Int32
            Case DataType.DT_UI4
                Return DbType.UInt32
            Case DataType.DT_I8
                Return DbType.Int64
            Case DataType.DT_UI8
                Return DbType.UInt64
            Case DataType.DT_R4
                Return DbType.Single
            Case DataType.DT_R8
                Return DbType.Double
            Case DataType.DT_NUMERIC, DataType.DT_DECIMAL
                Return DbType.Decimal
            Case DataType.DT_CY
                Return DbType.Currency
            Case DataType.DT_DBTIMESTAMP
                Return DbType.DateTime
            Case DataType.DT_DBDATE
                Return DbType.Date
            Case DataType.DT_DBTIME
                Return DbType.Time
            Case DataType.DT_BYTES, DataType.DT_IMAGE
                Return DbType.Binary
        End Select

        Throw New ArgumentException(String.Format("Unhandled type. {0}", dt))
    End Function    ' GetDbType_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns parameter name for specified connection type.
    Private Function GetParameterName_(ByVal conn As DbConnection, ByVal parameter As String) As String
        Dim result As String = parameter

        If TypeOf conn Is SqlConnection Then
            result = "@" + parameter
        Else
            ' Most probably ODBC or OLEDB
            result = "?"
        End If

        GetParameterName_ = result
    End Function    ' GetParameterName_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean = False
        Call MyBase.ComponentMetaData.FireError( _
            0, _
            "Table Update Destination", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Get connection object.
    Private Function GetConnection_(ByVal design As Boolean) As DbConnection
        Dim result As DbConnection

        If design Then
            If Me.ConnectionType = "OLEDB" Then
                Dim manager As ConnectionManager = MyBase.DesignConnections(Me.Connection)
                Dim managerParams As IDTSConnectionManagerDatabaseParameters100 = CType( _
                    manager.InnerObject, _
                    IDTSConnectionManagerDatabaseParameters100)
                result = CType(managerParams.GetConnectionForSchema(), DbConnection)
            Else
                result = CType( _
                    MyBase.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
                    DbConnection)
            End If
        Else
            If Me.ConnectionType = "OLEDB" Then
                Dim host As IDTSObjectHost100 = CType(MyBase.Connections.Connection, IDTSObjectHost100)
                Dim managerParams As IDTSConnectionManagerDatabaseParameters100 = CType( _
                    host.InnerObject, _
                    IDTSConnectionManagerDatabaseParameters100)
                result = CType(managerParams.GetConnectionForSchema(), DbConnection)
            Else
                result = CType( _
                    MyBase.Connections.Connection.AcquireConnection(Nothing), _
                    DbConnection)
            End If
        End If

        GetConnection_ = result
    End Function    ' GetConnection_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub SetVariable_(ByVal varName As String, ByVal value As Object)
        If String.IsNullOrEmpty(varName) Then
            ' Variable not set.
            Exit Sub
        End If

        Dim vars As IDTSVariables100 = Nothing
        Call MyBase.VariableDispenser.LockOneForWrite(varName, vars)
        Try
            vars(varName).Value = value
        Finally
            Call vars.Unlock()
        End Try
    End Sub ' SetVariable_
#End Region ' Internals


#Region "Attributes"
    Private m_connectionType As String
    Private m_connection As String
    Private m_table As String
    Private m_primaryKeys As String
    Private m_action As ActionTypes
    Private m_errorRowDisposition As DTSRowDisposition
    Private m_insertedVar As String
    Private m_updatedVar As String
    Private m_deletedVar As String

    Private m_command As DbCommand
    Private m_inputIndexes() As Integer
    Private m_selectSql As String
    Private m_insertSql As String
    Private m_updateSql As String
    Private m_deleteSql As String
    Private m_insertedCount As Integer
    Private m_updatedCount As Integer
    Private m_deletedCount As Integer
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[BufferWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)
        MyBase.New(Component, ObjectID, IsInput, Buffer, OutputMap)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public WriteOnly Property [ErrorDescription]() As String
        Set
            Me(0) = Value
        End Set
    End Property
    Public WriteOnly Property [ErrorDescription_IsNull] As Boolean
        Set
            If (value)
                SetNull(0)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public Sub DirectRowToErrorOutput()
        MyBase.DirectRow("Error Output")
    End Sub

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {"ErrorDescription"}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\Settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\Settings.Designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On



Partial Friend NotInheritable Class MySettings
    Inherits System.Configuration.ApplicationSettingsBase

    Private Shared m_Value As MySettings

    Private Shared m_SyncObject As Object = New Object

    <System.Diagnostics.DebuggerNonUserCode()> _
    Public Shared ReadOnly Property Value() As MySettings
        Get
            If (MySettings.m_Value Is Nothing) Then
                System.Threading.Monitor.Enter(MySettings.m_SyncObject)
                If (MySettings.m_Value Is Nothing) Then
                    Try
                        MySettings.m_Value = New MySettings
                    Finally
                        System.Threading.Monitor.Exit(MySettings.m_SyncObject)
                    End Try
                End If
            End If
            Return MySettings.m_Value
        End Get
    End Property
End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Project]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![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:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:ProjectId>{DDB85B03-781A-4AE2-A282-F5AF0F490BA9}</msb:ProjectId>
		<msb:DisplayName>scriptcomponent_2e3d4c56d0694f9bbd032f1e0950bec1</msb:DisplayName>
		<msb:CodeName>scriptcomponent_2e3d4c56d0694f9bbd032f1e0950bec1</msb:CodeName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="main.vb"/>
		<msb:File Include="My Project\AssemblyInfo.vb"/>
		<msb:File Include="My Project\Resources.Designer.vb"/>
		<msb:File Include="My Project\Settings.Designer.vb"/>
		<msb:File Include="My Project\Resources.resx"/>
		<msb:File Include="My Project\Settings.settings"/>
		<msb:Project Include="scriptcomponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\Resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\Resources.Designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


Namespace My.Resources
    
    '''<summary>
    '''   A strongly-typed resource class, for looking up localized strings, etc.
    '''</summary>
    'This class was auto-generated by the Strongly Typed Resource Builder
    'class via a tool like ResGen or Visual Studio.NET.
    'To add or remove a member, edit your .ResX file then rerun ResGen
    'with the /str option, or rebuild your VS project.
    Class MyResources
        
        Private Shared _resMgr As System.Resources.ResourceManager
        
        Private Shared _resCulture As System.Globalization.CultureInfo
        
        Friend Sub New()
            MyBase.New
        End Sub
        
        '''<summary>
        '''   Returns the cached ResourceManager instance used by this class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared ReadOnly Property ResourceManager() As System.Resources.ResourceManager
            Get
                If (_resMgr Is Nothing) Then
                    Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("My.Resources.MyResources", GetType(MyResources).Assembly)
                    _resMgr = temp
                End If
                Return _resMgr
            End Get
        End Property
        
        '''<summary>
        '''   Overrides the current thread's CurrentUICulture property for all
        '''   resource lookups using this strongly typed resource class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared Property Culture() As System.Globalization.CultureInfo
            Get
                Return _resCulture
            End Get
            Set
                _resCulture = value
            End Set
        End Property
    End Class
End Namespace
]]></arrayElement></arrayElements></property><property id="18" name="BinaryCode" state="cdata" dataType="System.String" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAL/YMVcAAAAAAAAAAOAAAiELAQsAAFgAAAAIAAAAAAAAvnYA
AAAgAAAAgAAAAAAAEAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAADAAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAHB2AABLAAAAAIAAAMAEAAAAAAAAAAAAAAAAAAAA
AAAAAKAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAxFYAAAAgAAAAWAAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAAMAEAAAAgAAAAAYAAABaAAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAKAAAAACAAAAYAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAACg
dgAAAAAAAEgAAAACAAUAtDgAALw9AAABAAAAAAAAAPw3AAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4CKAEAAAoqHgIoBAAACiqmcwYAAAqAAQAABHMHAAAKgAIA
AARzCAAACoADAAAEcwkAAAqABAAABCoAABMwAQALAAAAAQAAEX4BAAAEbwoAAAoqABMwAQALAAAA
AgAAEX4CAAAEbwsAAAoqABMwAQALAAAAAwAAEX4DAAAEbwwAAAoqABMwAQALAAAABAAAEX4EAAAE
bw0AAAoqABMwAgANAAAABQAAEQIDKBEAAAooEgAACioAAAATMAEABwAAAAYAABECKBMAAAoqABMw
AQALAAAABwAAEdAFAAACKBQAAAoqABMwAQAHAAAACAAAEQIoFQAACioAEzABABAAAAAJAAARAowB
AAAbLQYoAQAAKyoCKhMwAgAQAAAACgAAEQMSAP4VAgAAGwaBAgAAGyoeAigXAAAKKhMwAgAoAAAA
CwAAEQJ7GQAACm8aAAAKCweMAwAAGy0SKAIAACsLAnsZAAAKB28bAAAKBypKAigXAAAKAnMcAAAK
fRkAAAoqADoCAwQFDgQOBSgeAAAKKgATMAEABwAAAAwAABEWjSUAAAEqACYCFgNvHwAACioAAGID
LAkCFm8gAAAKKwtyAQAAcHMhAAAKeioAAAAyAnKeAABwKCIAAAoqAAAAEzADABEAAAANAAARF40l
AAABCwcWcrgAAHCiByoAAAATMAEACQAAAA4AABECKCMAAAoKBioAAAATMAEACQAAAA8AABECKCQA
AAoKBioAAAB+AigmAAAKAgJzHQAABn0GAAAEAgJzHwAABn0HAAAEKr4DAignAAAKbygAAApy2gAA
cG8pAAAKbyoAAAozEQICAxcFDgRzEQAABm8bAAAGKkorBwIDbxwAAAYDbxcAAAYt8SoABioAADoC
KBcAAAoCA30IAAAEKgATMAIAIAAAABAAABECewgAAARvJwAACm8rAAAKcuYAAHBvLAAACm8tAAAK
KjoCKBcAAAoCA30JAAAEKgAeAigZAAAGKhswBACuAgAAEQAAEQJ7FgAABI63ChYGF9oTCQwrdgJ7
FgAABAiUCwJ7FQAABG8uAAAKCG8vAAAKDQNvMAAACgdvMQAACigRAAAKEwQRBHUwAAABLC4JbzIA
AAoXMxcDbzAAAAoHFglvMwAACm80AAAKEwQrDgNvMAAACgdvNQAAChMECREEKBEAAApvNgAACggX
1gwIEQkxhQJvLwAABkUFAAAABQAAADUAAACiAAAAKQEAAFkBAADd/AEAAAJ7FQAABAJ7GAAABG83
AAAKAnsVAAAEbzgAAAomAgJ7GwAABBfWfRsAAATdzAEAAAJ7FQAABAJ7GAAABG83AAAKAnsVAAAE
bzgAAAomAgJ7GwAABBfWfRsAAATdnAEAACUoOQAAChMFAnsVAAAEAnsZAAAEbzcAAAoCexUAAARv
OAAACiYCAnscAAAEF9Z9HAAABCg6AAAK3V8BAAACexUAAAQCexcAAARvNwAACgJ7FQAABG87AAAK
KBEAAAoTBhEGLTACexUAAAQCexgAAARvNwAACgJ7FQAABG84AAAKJgICexsAAAQX1n0bAAAE3QgB
AAACexUAAAQCexkAAARvNwAACgJ7FQAABG84AAAKJgICexwAAAQX1n0cAAAE3dgAAAACexUAAAQC
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
b5wAAAoGA2+dAAAKBCgRAAAKb54AAAreBwZvnwAACtwqAAAAARAAAAIAGQAULQAHAAAAAB4CKBcA
AAoqEzACAC0AAAArAAARfiQAAAQtIHLyBQBw0A0AAAIoFAAACm+uAAAKc68AAAoLB4AkAAAEfiQA
AAQqAAAAEzABAAYAAAAsAAARfiUAAAQqAAAeAoAlAAAEKkJzFwAACigRAAAKgCcAAAQqAAAAHgIo
sAAACiobMAEAPwAAAC0AABF+JgAABC0yficAAAQoEQAACiixAAAKfiYAAAQtHHNJAAAGgCYAAATe
EH4nAAAEKBEAAAoosgAACtx+JgAABCoAARAAAAIAHQAMKQAQAAAAALQAAADOyu++AQAAAJEAAABs
U3lzdGVtLlJlc291cmNlcy5SZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAu
MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3Rl
bS5SZXNvdXJjZXMuUnVudGltZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAABCU0pC
AQABAAAAAAAMAAAAdjQuMC4zMDMxOQAAAAAFAGwAAAB8EwAAI34AAOgTAACMGQAAI1N0cmluZ3MA
AAAAdC0AACQGAAAjVVMAmDMAABAAAAAjR1VJRAAAAKgzAAAUCgAAI0Jsb2IAAAAAAAAAAgAAAVcd
ogkJDwAAAPolMwAWAAABAAAAcQAAAA4AAAAnAAAASgAAACgAAAC+AAAABwAAAF4AAAAtAAAABwAA
ABYAAAAgAAAACgAAAAEAAAAKAAAAAQAAAAMAAAADAAAAAgAAAAAAThkBAAAAAAAKALUBiwEKAOkB
ywEGAPkB8gEKAFECiwEGAM8C8gEKAFEDJwMOAKMDjAMSAPID0QMWACME0QMSADIE0QMOAE0FjAMa
AAgG4AUeAI0HZAciAGUIWQgaAHsI4AUeAKUIZAciAMsIuAgiAPoIWQgiAA8JuAgiAOwJuAgGANoK
8gEGACcLFgsGAFQLPwsmALULoAsmAAIM7AsmABsM7AsmAEgMMAwGAHIMXwwKALEMigwKAMkMEwAm
AP4M4QwGADMNEw0GAFEN8gEGAHUN8gEKAI4NEwAGANINsw0GAOYN8gEGAP4N8gESABgO0QMGAC8O
8gEeAEUOZAceAHQOZAceAJ8OZAceALwOZAceAP8OZAcGAC4P8gEiADgPuAgWAGgP0QMKAL0PigwG
ABgQBRAeACIQZAcGAEAQBRAGAEwQ8gEGAG4Q8gEGAIcQBRAeAJMQZAceAAERZAcGAHcR8gEWAJ0R
0QMeAMERZAcKADkSigwGAFcS8gEmAEAE7AsGAGoS8gEiAKYSWQgiAMMSWQgiAFsTRRMiAHMTWQgi
AJQTWQgKALMTEwAKAL8TEwAKAMwTEwAKAN8TigwiAP0TuAgiAAoUWQgGAEkUNxQGAFYUNxQiAGoU
WQgGAL8U8gEqACEVARUaADMV4AUaAF4V4AUqAAIBARUaAL8V4AUaANAV4AUaAA8W4AUSACYW0QMO
AG8WTRYOAIsWTRYOAKUWTRYOAL0WTRYmANUW7AsmAPAW7AsmAAIX7AsmABgX7AsmACoX7AsOAD8X
TRYOAE0XTRYOAF8XTRYGAHMXNxQGAJoXiRcGAK0XXwwGABYYEw0GADYYEw0GAG4YVBgGAIcYNxQG
AKQYsw0GALIYNxQGAM0YNxQGAOgYNxQGAAEZNxQGABoZNxQGADcZNxQAAAAAAQAAAAAAAQABAAAA
AAApADcABQABAAEAAAAAAHIANwAJAAEAAgAAARAAfQA3AA0AAQADAAUBAACHAAAADQAFAAgABQEA
AJUAAAANAAUADwABAAAAsAC8AB0ABgARAAEAAAD0ALwALQAGABkAAQAAAAIBvAANAAgAHQABAAAA
DgG8AA0ACQAfAAEAAAAYAbwAIAAKACAAAgEAACMBAABVAB4ARAAAAAAALwE7AQ0AJABEAAABEACA
AbwAYQAmAEgAMQAUAiAAMQA9Ai0AMQBfAjoAMQCEAkcAIQBgA5AABgACAdsABgAOAd8AAQCtBfMA
AQCtBfMAUYA7BgcBUYBLBgcBAQBxCQcBAQCCCQcBAQCPCQcBAQCXCQcBAQClCWcBAQCuCWsBAQDE
CQcBAQDSCQcBAQDfCQcBAQD2CW8BAQAACnMBAQAPCgcBAQAbCgcBAQAnCgcBAQAzCgcBAQA/CncB
AQBPCncBAQBeCncBBgbfCncBVoDnCmcBVoDuCmcBVoD7CmcBVoAIC2cBVoAPC2cBEQA3C50BEQBg
C6EBEQDNC78BEQDVC8MBUCAAAAAABhjFARMAAQBYIAAAAAAGGMUBEwABAGAgAAAAABEYAAIXAAEA
jCAAAAAAEwgHAhsAAQCkIAAAAAATCC0CKAABALwgAAAAABMIVgI1AAEA1CAAAAAAEwh0AkIAAQDs
IAAAAABGAroCYwABAAghAAAAAEYCwwJoAAIAHCEAAAAAgwDUAmwAAgA0IQAAAABGAtwCcQACAEgh
AAAAABEA5QJ4AAIAZCEAAAAAAQADA4AAAwCAIQAAAAAGGMUBEwAEAIghAAAAAAMIFwOLAAQAvCEA
AAAABhjFARMABADQIQAAAAAGGMUBrwAEAOAhAAAAAEYKbAS7AAkA9CEAAAAABgiDBMAACQAAIgAA
AAAGCJ4ExQAKABwiAAAAAAYAugQTAAsALCIAAAAARgrRBLsACwBMIgAAAACGAOkEygALAGQiAAAA
AIYA8QTKAAsAfCIAAAAABhjFARMACwCcIgAAAABGAmEF4wALAMwiAAAAAEYDgAXtAA8A4CIAAAAA
RgOTBe0AEADkIgAAAAAGGMUB9wARAPQiAAAAAAYIIQb9ABIAICMAAAAABhjFAfcAEgAwIwAAAAAG
GMUBEwATADgjAAAAAEYCkwXtABMAKCYAAAAARgJYBhMAFAD8KQAAAABGAmMGEwAUAIAqAAAAAAYA
bwa7ABQANCsAAAAABgB9BhgBFABMLAAAAABGApEGEwAVAMwuAAAAAAYApgYeARUAMDAAAAAABgCw
Bh4BFQDsMAAAAAAGCLsGcQAVAAQxAAAAAAYIzgbAABUAKDEAAAAABgghBnEAFgBAMQAAAAAGCOcG
wAAWAGQxAAAAAAYI9gZxABcAfDEAAAAABggAB8AAFwC4MQAAAAAGCAoHIwEYANAxAAAAAAYIFQco
ARgABDIAAAAABgggB3EAGQAcMgAAAAAGCDAHwAAZACgyAAAAAAYInwcuARoAQDIAAAAABgi3BzMB
GgBMMgAAAAAGCM8HcQAbAGQyAAAAAAYI5AfAABsAcDIAAAAABgj5B3EAHACIMgAAAAAGCA0IwAAc
AJQyAAAAAAYIIQhxAB0ArDIAAAAABgg1CMAAHQC4MgAAAAABAEkIcQAeAIgzAAAAAAEAbwg5AR4A
BDQAAAAAAQCECD4BHgBANAAAAAABANcIRQEfAMg0AAAAAAEAAQlNASEAqDUAAAAAAQAcCVQBIgDY
NQAAAAABADMJwAAkAAQ2AAAAAAEARglbASUA0DYAAAAAAQBcCWEBJgAkNwAAAAADGMUBEwAoACw3
AAAAABYIbAulASgAaDcAAAAAFgiAC6oBKAB8NwAAAAAWCIwLrwEoAIQ3AAAAABEYAAIXACkAmDcA
AAAABhjFARMAKQCgNwAAAAAWCOILxgEpAAAAAQDBAgAAAQD6AgAAAQD6AgAAAQBABAAAAgBKBAAA
AwBTBAAABABbBAAABQBiBAAAAQCYBAAAAQCYBAAAAQBuBQAAAgB2BQAAAwBbBAAABABiBAAAAQBb
BAAAAQCpBQAAAQBABAAAAQBABAAAAQCpBQAAAQCGBgAAAQDhBgAAAQDhBgAAAQDhBgAAAQDhBgAA
AQDhBgAAAQDhBgAAAQDhBgAAAQDhBgAAAQDhBgAAAQCgCAAAAQDnCAAAAgDwCAAAAQAMCQAAAQAu
CQAAAgDwCAAAAQA+CQAAAQBVCQAAAQBpCQAAAgDhBgAAAQCYBAkAxQETAMkAxQHQAdkAxQHfAREA
xQETAOEAxQETACQAxQETACwAxQETADQAxQETADwAxQETACQAFwOLACwAFwOLADQAFwOLADwAFwOL
AOkAxQETAPEAxQETAPkAxQHAAAEBQg10AhkAugJjABkAwwJoACkAYw2BAhkA3AJxABEBfw2SAhkA
xQETABkBxQGiAkQAYAOQAEwA4guLAEwAqQ0fA0wAxQETACEBxQHFADkAxQGvADkA7Q05AzkA9g0/
AzEBxQHAADkBJQ7AADkB6QTKADkB8QTKAEEBxQHFAFkAxQETAEEAXg5LA0kBiw5RA1EBrA5XA1kB
tQ5oAEkB3w5eA2EBrA5kA2kBGA/9AKEATg9wA3kBrA52AzkAXQ98A0kArA6BA4kAcw+GA4kAfg9o
AEkAhw+LA0kAkw+TA4kAqQ2YA6EAnQ/AAKEArQ9oAIkByQ+dA4kB2Q8XAKEA6w+kA3EB+Q9xAEEA
WAYTAJkAUhC+A5EBxQETACkBYBDDAykBgRDIA5EBxQHSA1kBsBDZA8EByhDfA6EB2BCkA4EA5BBo
AFkBKRHlA8kBThHrA5kBXBFxAJEBZRFjAJEB5wo5A6EBbhHKANEBgxETAJEBixFoAJEBlRHyA1kA
rxH3A9kB1hH9A1kBXQ9oAIEA6BFoAOEB9hEDBKEADBIJBCkBHBIOBIkAIxLAAHkBNRLyA5EBrA6B
A+kB3AIUBIkARRJxAJEBNRLyAykBHBIZBJEBXRIgBCkBZRIrBCkBHBIyBEEAYwYTAKEAIQZ2BPkB
gxETAAECxQHAAFkBfxLKAMEBixFoAHEBxQHAAGkBjhLAAFkAkQYTAFEBixFoAMkBrhLFAMEBuRIT
AMkBuRITAHEA1RKZBBECixFoABECrA6fBAkCrA6mBOkB3hKrBMkB6BLrA5kB7hLAAOkB9xKwBAkC
ARO1BJkBCBO6BJkBFRM/A5kBIBM/A5kBLhM/A5kBOBM/A5kAaRPdBHEAiBPlBCECrA7rBCkCnxNx
ABECyhDfA5EBrhMTADEC2BPyBJEBXRIeAUkC6RMrBSkB9xMHAaEAGhROBVECKBQ5ASkAXRRlBYEA
exR6BYkAiBR/BYEAkxRoAIkAnhQ/A4EApxRoAIEAtRRoAHECIBOFBXECLhOFBXkCxQHAACkB0RSZ
BUkB2BSkBVkAcBWvBZkCrA61BYEChhWkA4kClhWkA4ECrRW8BZEChhWkA2EArRW8BUEA6RXUBakC
/xXaBaECrA7jBbECqQ2YA6ECHxYTALkCxQETAMECxQHAAMkCxQHAANECxQERBtkCxQETAOECxQGZ
BvECxQE/A/kCxQHAAAEDxQHAAAkDxQHXBvECxQHAAAkDxQEbBxEDxQETABkDxQHAACkAfBfOCLEA
xQHUCMEAxQETACkDohfxCCkDqBfxCDEDxQETADkDxQE/A0EDxQETAEkDxQHAAFEDxQHAAFkDxQHA
AGEDxQHAAGkDxQHAAHEDxQHAAHkDxQHAAIEDxQHAAIkDxQHAAA4AKAAKAQ4ALAAPAQgAfACEAQgA
gACJAQgAhACOAQgAiACTAQgAjACYASkAgwAuAi4A0wWoCS4A6wUuAy4A8wXICS4AKwGiCS4AowX7
CC4A6wAuAy4A4wUFCi4AywUuAy4A2wXICS4AqwUECS4AswUjCS4AuwVrCS4AwwV4CUAAKwCJAUAA
EwDWAUMAEwDWAUMAGwDlAUkAgwA/AmMAGwDlAWMAEwDWAWkAgwBTAoAAKwCJAYMAGwDlAYMAewCJ
AYMAcwCJAYkAgwBgAqAAKwCJAaMAwwCqAqMAEwDWAcAAKwCJAcMA6wAuA8MAEwDWAeAAKwCJAeMA
KwEuAwABKwCJAQABEwDWAQMBKwEuAyABKwCJASABEwDWAUABKwCJAUABEwDWAWABEwDWAWABKwCJ
AWMBKwEuA2MBIwWJAWMBAwWJAWMBCwXwBWMBEwX+BWMBGwUXBmkBQwU6B2kBOwWgBmkBKwXWAWkB
UwUOB2kBWwUhB4ABKwCJAYkBawVnCIkBQwV7CIkBOwWgBokBKwXWAaABKwCJAakBKwXWAakBOwWg
BqkBQwXvBqkBSwXeBsABEwDWAcABKwCJAckBKwXWAckBMwXWAckBOwWgBskBQwWxBuABKwCJAekB
SwWbCOkBOwWgBukBQwWtCAACEwDWAQACKwCJAQkCOwU1CAkCQwVACAkCMwUsCCkCYwWJASkCQwVo
BykCOwVXB0kCQwWqB0kCYwWJAUkCOwVXB2kCQwXrB2kCOwVXB2kCYwWJAYkCEwDoCKkCEwDoCMkC
mwWJAaADKwEuA+ADKwEuAxoCHwIkAikCeQJ9AokCjgKdAp0CJQM0A0QDeQJ5AmsDqAM6BHsEgASK
BMAE/QQYBY4CjgKOAjIFjgI3BY4CjgKOAjwFVwVzBYoFkgWfBXkCwQXqBdwI4wj2CAQAAQAGAAUA
BwAGAAkACgALAAsADQAUAA4AFgAAAOkBTwAAAKICVAAAAFECWQAAAK4CXgAAAGoDmAAAAP0EzgAA
ABAF0wAAACEF1wAAADkFzgAAADAGAgEAAG0K0wAAADAG0wAAAHwK0wAAAIIKegEAAIkK0wAAAJUK
fwEAAKkK0wAAALoK0wAAAMoK0wAAACcLtQEAAJgLugEAAJgEywECAAQAAwACAAUABQACAAYABwAC
AAcACQACAA8ACwACABIADQABABMADwABABQAEQACABYAEwACAB4AFQACACkAFwABACoAFwACACsA
GQABACwAGQABAC4AGwACAC0AGwACAC8AHQABADAAHQACADEAHwABADIAHwACADMAIQABADQAIQAB
ADYAIwACADUAIwACADcAJQABADgAJQABADoAJwACADkAJwACAEUAKQACAEYAKwABAEcAKwACAEoA
LQB1AHUAiAD+AQUCDAITAgwDEwMoBASAAAABAAAAAAAAAAAAAAAAALwAAAAEAAAAAAAAAAAAAAAB
AAoAAAAAAAoAAAAAAAAAAAAAAAoAEwAAAAAAAQAAAAAAAAAAAAAAnQB2AwAAAAALAAAAAAAAAAAA
AACmALQDAAAAAAsAAAAAAAAAAAAAAKYAAgQAAAAACwAAAAAAAAAAAAAApgC9BQAAAAALAAAAAAAA
AAAAAACmAEAHAAAAAAQAAAAAAAAAAAAAAAEAWQgAAAAABAAAAAAAAAAAAAAAAQDyAQAAAAALAAAA
AAAAAAAAAACmAOIUAAAAAAAAAAABAAAAyhcAAAUABAAGAAQADAALAAAAEAAMAPgCAAAQABkA+AIA
AAAAGwD4Ai0AmAItABoDAAAAAAA8TW9kdWxlPgBtc2NvcmxpYgBNaWNyb3NvZnQuVmlzdWFsQmFz
aWMATXlBcHBsaWNhdGlvbgBTY3JpcHRDb21wb25lbnRfMmUzZDRjNTZkMDY5NGY5YmJkMDMyZjFl
MDk1MGJlYzEudmJwcm9qLk15AE15Q29tcHV0ZXIATXlQcm9qZWN0AE15V2ViU2VydmljZXMAVGhy
ZWFkU2FmZU9iamVjdFByb3ZpZGVyYDEASW5wdXRCdWZmZXIAU2NyaXB0Q29tcG9uZW50XzJlM2Q0
YzU2ZDA2OTRmOWJiZDAzMmYxZTA5NTBiZWMxLnZicHJvagBVc2VyQ29tcG9uZW50AENvbm5lY3Rp
b25zAFZhcmlhYmxlcwBTY3JpcHRNYWluAEFjdGlvblR5cGVzAE15UmVzb3VyY2VzAFNjcmlwdENv
bXBvbmVudF8yZTNkNGM1NmQwNjk0ZjliYmQwMzJmMWUwOTUwYmVjMS52YnByb2ouTXkuUmVzb3Vy
Y2VzAE15U2V0dGluZ3MATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMA
QXBwbGljYXRpb25CYXNlAC5jdG9yAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1
dGVyAFN5c3RlbQBPYmplY3QALmNjdG9yAGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0UHJv
dmlkZXIAZ2V0X0FwcGxpY2F0aW9uAG1fQXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNlcgBt
X1VzZXJPYmplY3RQcm92aWRlcgBnZXRfV2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2VzT2JqZWN0
UHJvdmlkZXIAQXBwbGljYXRpb24AV2ViU2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENvZGUAVHlw
ZQBHZXRUeXBlAFRvU3RyaW5nAENyZWF0ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERpc3Bvc2Vf
X0luc3RhbmNlX18AZ2V0X0dldEluc3RhbmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZp
Y2VzLkludGVybmFsAENvbnRleHRWYWx1ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBDb3p5Um9j
LlNTSVNQbHVzLjIwMTIAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUwBTY3JpcHRCdWZmZXJQbHVzAE1p
Y3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxp
bmUAU2NyaXB0Q29tcG9uZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuUGlwZWxpbmVIb3N0AFBpcGVs
aW5lQnVmZmVyAE91dHB1dE5hbWVNYXAAQ29tcG9uZW50AE9iamVjdElEAElzSW5wdXQAQnVmZmVy
AE91dHB1dE1hcABnZXRfU3RhdGljSW5wdXRDb2x1bW5zAHNldF9FcnJvckRlc2NyaXB0aW9uAFZh
bHVlAHNldF9FcnJvckRlc2NyaXB0aW9uX0lzTnVsbABEaXJlY3RSb3dUb0Vycm9yT3V0cHV0AGdl
dF9TdGF0aWNPdXRwdXRDb2x1bW5zAE5leHRSb3cARW5kT2ZSb3dzZXQAU3RhdGljSW5wdXRDb2x1
bW5zAEVycm9yRGVzY3JpcHRpb24ARXJyb3JEZXNjcmlwdGlvbl9Jc051bGwAU3RhdGljT3V0cHV0
Q29sdW1ucwBTY3JpcHRDb21wb25lbnRQbHVzAFByb2Nlc3NJbnB1dABJbnB1dElEAElucHV0TmFt
ZQBJbnB1dF9Qcm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vzc0lucHV0Um93AFJvdwBQYXJlbnRDb21w
b25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNSdW50aW1lV3JhcABNaWNyb3NvZnQuU3FsU2Vy
dmVyLkR0cy5SdW50aW1lLldyYXBwZXIASURUU0Nvbm5lY3Rpb25NYW5hZ2VyMTAwAGdldF9Db25u
ZWN0aW9uAENvbm5lY3Rpb24AQ29sdW1uU2VwYXJhdG9yAFBhcmFtZXRlcl8xUABQcmVFeGVjdXRl
AFBvc3RFeGVjdXRlAEdldFByb3BlcnRpZXMAVmFsaWRhdGUAZXJyTWVzc2FnZQBSZWluaXRpYWxp
emVNZXRhRGF0YQBHZXRUYWJsZXMAR2V0Q29sdW1ucwBnZXRfQ29ubmVjdGlvblR5cGUAc2V0X0Nv
bm5lY3Rpb25UeXBlAHZhbHVlAHNldF9Db25uZWN0aW9uAGdldF9UYWJsZQBzZXRfVGFibGUAZ2V0
X0FjdGlvbgBzZXRfQWN0aW9uAGdldF9QcmltYXJ5S2V5cwBzZXRfUHJpbWFyeUtleXMATWljcm9z
b2Z0LlNxbFNlcnZlci5EVFNQaXBlbGluZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlw
ZWxpbmUuV3JhcHBlcgBEVFNSb3dEaXNwb3NpdGlvbgBnZXRfRXJyb3JSb3dEaXNwb3NpdGlvbgBz
ZXRfRXJyb3JSb3dEaXNwb3NpdGlvbgBnZXRfSW5zZXJ0ZWRWYXJpYWJsZQBzZXRfSW5zZXJ0ZWRW
YXJpYWJsZQBnZXRfVXBkYXRlZFZhcmlhYmxlAHNldF9VcGRhdGVkVmFyaWFibGUAZ2V0X0RlbGV0
ZWRWYXJpYWJsZQBzZXRfRGVsZXRlZFZhcmlhYmxlAEdldFByaW1hcnlLZXlzXwBTeXN0ZW0uRGF0
YQBEYXRhVGFibGUAR2V0Q29sdW1uc18ARGF0YVR5cGUARGF0YVJlY29yZFR5cGVUb0J1ZmZlclR5
cGVfAHR5cGUASURUU0lucHV0Q29sdW1uMTAwAFN5c3RlbS5EYXRhLkNvbW1vbgBEYlBhcmFtZXRl
cgBTZXR1cFBhcmFtZXRlcl8AaW5wdXRDb2wAcGFyYW1ldGVyAERiVHlwZQBHZXREYlR5cGVfAGR0
AERiQ29ubmVjdGlvbgBHZXRQYXJhbWV0ZXJOYW1lXwBjb25uAEZpcmVFcnJvcl8AbWVzc2FnZQBH
ZXRDb25uZWN0aW9uXwBkZXNpZ24AU2V0VmFyaWFibGVfAHZhck5hbWUAbV9jb25uZWN0aW9uVHlw
ZQBtX2Nvbm5lY3Rpb24AbV90YWJsZQBtX3ByaW1hcnlLZXlzAG1fYWN0aW9uAG1fZXJyb3JSb3dE
aXNwb3NpdGlvbgBtX2luc2VydGVkVmFyAG1fdXBkYXRlZFZhcgBtX2RlbGV0ZWRWYXIARGJDb21t
YW5kAG1fY29tbWFuZABtX2lucHV0SW5kZXhlcwBtX3NlbGVjdFNxbABtX2luc2VydFNxbABtX3Vw
ZGF0ZVNxbABtX2RlbGV0ZVNxbABtX2luc2VydGVkQ291bnQAbV91cGRhdGVkQ291bnQAbV9kZWxl
dGVkQ291bnQAQ29ubmVjdGlvblR5cGUAVGFibGUAQWN0aW9uAFByaW1hcnlLZXlzAEVycm9yUm93
RGlzcG9zaXRpb24ASW5zZXJ0ZWRWYXJpYWJsZQBVcGRhdGVkVmFyaWFibGUARGVsZXRlZFZhcmlh
YmxlAEVudW0AdmFsdWVfXwBJbnNlcnQASW5zZXJ0VXBkYXRlAFVwZGF0ZUluc2VydABVcGRhdGUA
RGVsZXRlAFN5c3RlbS5SZXNvdXJjZXMAUmVzb3VyY2VNYW5hZ2VyAF9yZXNNZ3IAU3lzdGVtLkds
b2JhbGl6YXRpb24AQ3VsdHVyZUluZm8AX3Jlc0N1bHR1cmUAZ2V0X1Jlc291cmNlTWFuYWdlcgBn
ZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQBDdWx0dXJlAFN5c3RlbS5Db25maWd1cmF0aW9uAEFwcGxp
Y2F0aW9uU2V0dGluZ3NCYXNlAG1fVmFsdWUAbV9TeW5jT2JqZWN0AGdldF9WYWx1ZQBTeXN0ZW0u
Q29tcG9uZW50TW9kZWwARWRpdG9yQnJvd3NhYmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJsZVN0
YXRlAFN5c3RlbS5Db2RlRG9tLkNvbXBpbGVyAEdlbmVyYXRlZENvZGVBdHRyaWJ1dGUAU3lzdGVt
LkRpYWdub3N0aWNzAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAE1pY3Jvc29mdC5WaXN1YWxCYXNp
Yy5Db21waWxlclNlcnZpY2VzAFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhpZGVNb2R1bGVOYW1l
QXR0cmlidXRlAFN5c3RlbS5Db21wb25lbnRNb2RlbC5EZXNpZ24ASGVscEtleXdvcmRBdHRyaWJ1
dGUAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBSdW50aW1lSGVscGVycwBHZXRPYmpl
Y3RWYWx1ZQBSdW50aW1lVHlwZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBBY3RpdmF0b3IAQ3Jl
YXRlSW5zdGFuY2UATXlHcm91cENvbGxlY3Rpb25BdHRyaWJ1dGUAc2V0X1ZhbHVlAFN5c3RlbS5S
dW50aW1lLkludGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAFN0cmluZwBzZXRfSXRl
bQBTZXROdWxsAEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24AU2NyaXB0QnVmZmVyAERpcmVjdFJv
dwBDTFNDb21wbGlhbnRBdHRyaWJ1dGUASURUU0NvbXBvbmVudE1ldGFEYXRhMTAwAGdldF9Db21w
b25lbnRNZXRhRGF0YQBJRFRTSW5wdXRDb2xsZWN0aW9uMTAwAGdldF9JbnB1dENvbGxlY3Rpb24A
SURUU0lucHV0MTAwAGdldF9JdGVtAGdldF9JRABJRFRTUnVudGltZUNvbm5lY3Rpb25Db2xsZWN0
aW9uMTAwAGdldF9SdW50aW1lQ29ubmVjdGlvbkNvbGxlY3Rpb24ASURUU1J1bnRpbWVDb25uZWN0
aW9uMTAwAGdldF9Db25uZWN0aW9uTWFuYWdlcgBFeGNlcHRpb24ARGJQYXJhbWV0ZXJDb2xsZWN0
aW9uAGdldF9QYXJhbWV0ZXJzAGdldF9CdWZmZXIAQmxvYkNvbHVtbgBnZXRfRGJUeXBlAGdldF9T
aXplAEdldEJsb2JEYXRhAEdldFN0cmluZwBzZXRfQ29tbWFuZFRleHQARXhlY3V0ZU5vblF1ZXJ5
AFByb2plY3REYXRhAFNldFByb2plY3RFcnJvcgBDbGVhclByb2plY3RFcnJvcgBFeGVjdXRlU2Nh
bGFyAGdldF9NZXNzYWdlAFN5c3RlbS5Db2xsZWN0aW9ucwBBcnJheUxpc3QASURUU0V4dGVybmFs
TWV0YWRhdGFDb2x1bW4xMDAASUVudW1lcmF0b3IASW50MzIAQ3JlYXRlQ29tbWFuZABJc051bGxP
ckVtcHR5AFN0cmluZ1NwbGl0T3B0aW9ucwBTcGxpdABJQ29sbGVjdGlvbgBJRFRTSW5wdXRDb2x1
bW5Db2xsZWN0aW9uMTAwAGdldF9JbnB1dENvbHVtbkNvbGxlY3Rpb24AR2V0RW51bWVyYXRvcgBn
ZXRfQ3VycmVudABnZXRfRXh0ZXJuYWxNZXRhZGF0YUNvbHVtbklEAElEVFNFeHRlcm5hbE1ldGFk
YXRhQ29sdW1uQ29sbGVjdGlvbjEwMABnZXRfRXh0ZXJuYWxNZXRhZGF0YUNvbHVtbkNvbGxlY3Rp
b24AR2V0T2JqZWN0QnlJRABnZXRfTmFtZQBDb250YWlucwBNb3ZlTmV4dABJRGlzcG9zYWJsZQBE
aXNwb3NlAGdldF9Db3VudABJbmRleE9mAFBpcGVsaW5lQ29tcG9uZW50AGdldF9Ib3N0Q29tcG9u
ZW50AElEVFNCdWZmZXJNYW5hZ2VyMTAwAGdldF9CdWZmZXJNYW5hZ2VyAGdldF9MaW5lYWdlSUQA
RmluZENvbHVtbkJ5TGluZWFnZUlEAENyZWF0ZVBhcmFtZXRlcgBGb3JtYXQAc2V0X1BhcmFtZXRl
ck5hbWUAQWRkAENvbnZlcnNpb25zAGdldF9QYXJhbWV0ZXJOYW1lAEFycmF5AFRvQXJyYXkASm9p
bgBBcHBsaWNhdGlvbkV4Y2VwdGlvbgBnZXRfSXNBdHRhY2hlZABzZXRfQ29ubmVjdGlvbk1hbmFn
ZXJJRABEYXRhUm93AHNldF9Jc1VzZWQAUmVtb3ZlQWxsAERhdGFSb3dDb2xsZWN0aW9uAGdldF9S
b3dzAFRvQm9vbGVhbgBOZXdBdABzZXRfTmFtZQBUb0ludGVnZXIASXNOdWxsAHNldF9EYXRhVHlw
ZQBzZXRfTGVuZ3RoAHNldF9QcmVjaXNpb24Ac2V0X1NjYWxlAHNldF9Db2RlUGFnZQBTeXN0ZW0u
RGF0YS5TcWxDbGllbnQAU3FsQ29ubmVjdGlvbgBHZXRTY2hlbWEARGF0YUNvbHVtbkNvbGxlY3Rp
b24AZ2V0X0NvbHVtbnMARGF0YUNvbHVtbgBnZXRfQ29sdW1uTmFtZQBTb3J0AEludGVyYWN0aW9u
AE1zZ0JveFJlc3VsdABNc2dCb3hTdHlsZQBNc2dCb3gAT3BlcmF0b3JzAENvbXBhcmVTdHJpbmcA
RW1wdHkARGJEYXRhUmVhZGVyAENvbW1hbmRCZWhhdmlvcgBFeGVjdXRlUmVhZGVyAEdldFNjaGVt
YVRhYmxlAFN5c3RlbS5SZWZsZWN0aW9uAEJpbmRpbmdGbGFncwBCaW5kZXIASW52b2tlTWVtYmVy
AElEYkRhdGFQYXJhbWV0ZXIAZ2V0X0RhdGFUeXBlAHNldF9EYlR5cGUAZ2V0X0xlbmd0aABzZXRf
U2l6ZQBnZXRfUHJlY2lzaW9uAGdldF9TY2FsZQBBcmd1bWVudEV4Y2VwdGlvbgBDb25jYXQARmly
ZUVycm9yAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuTWFuYWdlZERUUwBNaWNyb3NvZnQuU3FsU2VydmVy
LkR0cy5SdW50aW1lAENvbm5lY3Rpb25NYW5hZ2VyAElEVFNDb25uZWN0aW9uTWFuYWdlckRhdGFi
YXNlUGFyYW1ldGVyczEwMABJRFRTT2JqZWN0SG9zdDEwMABnZXRfRGVzaWduQ29ubmVjdGlvbnMA
Z2V0X0lubmVyT2JqZWN0AEdldENvbm5lY3Rpb25Gb3JTY2hlbWEAQWNxdWlyZUNvbm5lY3Rpb24A
SURUU1ZhcmlhYmxlczEwMABJRFRTVmFyaWFibGVEaXNwZW5zZXIxMDAAZ2V0X1ZhcmlhYmxlRGlz
cGVuc2VyAExvY2tPbmVGb3JXcml0ZQBJRFRTVmFyaWFibGUxMDAAVW5sb2NrAFNTSVNTY3JpcHRD
b21wb25lbnRFbnRyeVBvaW50QXR0cmlidXRlAENvenlSb2MuU3FsU2VydmVyLlNTSVMuQXR0cmli
dXRlcwBWYWxpZGF0ZVByb3BlcnRpZXNBdHRyaWJ1dGUARmlsdGVyUHJvcGVydGllc0F0dHJpYnV0
ZQBTb3J0UHJvcGVydGllc0F0dHJpYnV0ZQBDb2x1bW5NYXBwaW5nc0F0dHJpYnV0ZQBSZWZyZXNo
UHJvcGVydGllc0F0dHJpYnV0ZQBSZWZyZXNoUHJvcGVydGllcwBEZWZhdWx0VmFsdWVBdHRyaWJ1
dGUAQ2F0ZWdvcnlBdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1dGUATGlzdEF0dHJpYnV0ZQBW
YXJpYWJsZUF0dHJpYnV0ZQBDb25uZWN0aW9uQXR0cmlidXRlAEFzc2VtYmx5AGdldF9Bc3NlbWJs
eQBTeXN0ZW0uVGhyZWFkaW5nAE1vbml0b3IARW50ZXIARXhpdABEZWJ1Z2dlck5vblVzZXJDb2Rl
QXR0cmlidXRlAFNjcmlwdENvbXBvbmVudF8yZTNkNGM1NmQwNjk0ZjliYmQwMzJmMWUwOTUwYmVj
MS52YnByb2ouUmVzb3VyY2VzLnJlc291cmNlcwBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmli
dXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAFN5c3RlbS5SdW50aW1lLlZlcnNpb25p
bmcAVGFyZ2V0RnJhbWV3b3JrQXR0cmlidXRlAEFzc2VtYmx5RmlsZVZlcnNpb25BdHRyaWJ1dGUA
R3VpZEF0dHJpYnV0ZQBBc3NlbWJseVRyYWRlbWFya0F0dHJpYnV0ZQBBc3NlbWJseUNvcHlyaWdo
dEF0dHJpYnV0ZQBBc3NlbWJseVByb2R1Y3RBdHRyaWJ1dGUAQXNzZW1ibHlDb21wYW55QXR0cmli
dXRlAEFzc2VtYmx5RGVzY3JpcHRpb25BdHRyaWJ1dGUAQXNzZW1ibHlUaXRsZUF0dHJpYnV0ZQBT
Y3JpcHRDb21wb25lbnRfMmUzZDRjNTZkMDY5NGY5YmJkMDMyZjFlMDk1MGJlYzEudmJwcm9qLmRs
bAAAAACAm0kAcwBOAHUAbABsACAAcAByAG8AcABlAHIAdAB5ACAAYwBhAG4AbgBvAHQAIABiAGUA
IABzAGUAdAAgAHQAbwAgAEYAYQBsAHMAZQAuACAAQQBzAHMAaQBnAG4AIABhACAAdgBhAGwAdQBl
ACAAdABvACAAdABoAGUAIABjAG8AbAB1AG0AbgAgAGkAbgBzAHQAZQBhAGQALgAAGUUAcgByAG8A
cgAgAE8AdQB0AHAAdQB0AAAhRQByAHIAbwByAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAC0kAbgBw
AHUAdAAAFUMAbwBuAG4AZQBjAHQAaQBvAG4AAAUsAAoAAAlwAHsAMAB9AAATewAwAH0AIAA9ACAA
ewAxAH0AAAsgAEEATgBEACAAADtTAEUATABFAEMAVAAgAHsAMAB9ACAARgBSAE8ATQAgAHsAMQB9
ACAAVwBIAEUAUgBFACAAewAyAH0AAAMsAABDSQBOAFMARQBSAFQAIABJAE4AVABPACAAewAwAH0A
IAAoAHsAMQB9ACkAIABWAEEATABVAEUAUwAoAHsAMgB9ACkAADlVAFAARABBAFQARQAgAHsAMAB9
ACAAUwBFAFQAIAB7ADEAfQAgAFcASABFAFIARQAgAHsAMgB9AAAzRABFAEwARQBUAEUAIABGAFIA
TwBNACAAewAwAH0AIABXAEgARQBSAEUAIAB7ADEAfQAAHUMAbwBuAG4AZQBjAHQAaQBvAG4AVAB5
AHAAZQAAC1QAYQBiAGwAZQAADUEAYwB0AGkAbwBuAAAnRQByAHIAbwByAFIAbwB3AEQAaQBzAHAA
bwBzAGkAdABpAG8AbgAAIUkAbgBzAGUAcgB0AGUAZABWAGEAcgBpAGEAYgBsAGUAAB9VAHAAZABh
AHQAZQBkAFYAYQByAGkAYQBiAGwAZQAAH0QAZQBsAGUAdABlAGQAVgBhAHIAaQBhAGIAbABlAAAX
UAByAGkAbQBhAHIAeQBLAGUAeQBzAAAlUwBlAGwAZQBjAHQAIABjAG8AbgBuAGUAYwB0AGkAbwBu
AC4AADNTAGUAbABlAGMAdAAgAGQAZQBzAHQAaQBuAGEAdABpAG8AbgAgAHQAYQBiAGwAZQAuAAA3
UwBwAGUAYwBpAGYAeQAgAHQAYQBiAGwAZQAgAHAAcgBpAG0AYQByAHkAIABrAGUAeQBzAC4AACVN
AGEAcAAgAGkAbgBwAHUAdAAgAGMAbwBsAHUAbQBuAHMALgAAFU4AbwAgAGkAbgBwAHUAdABzAC4A
ADFDAG8AbgBuAGUAYwB0AGkAbwBuACAAbgBvAHQAIABzAGUAbABlAGMAdABlAGQALgAAP0QAZQBz
AHQAaQBuAGEAdABpAG8AbgAgAHQAYQBiAGwAZQAgAG4AbwB0ACAAcwBlAGwAZQBjAHQAZQBkAC4A
AAtJAHMASwBlAHkAABVDAG8AbAB1AG0AbgBOAGEAbQBlAAARRABhAHQAYQBUAHkAcABlAAANSQBz
AEwAbwBuAGcAABVDAG8AbAB1AG0AbgBTAGkAegBlAAAhTgB1AG0AZQByAGkAYwBQAHIAZQBjAGkA
cwBpAG8AbgAAGU4AdQBtAGUAcgBpAGMAUwBjAGEAbABlAAALVABBAEIATABFAAAVQgBBAFMARQAg
AFQAQQBCAEwARQAADVQAYQBiAGwAZQBzAAAVdABhAGIAbABlAF8AbgBhAG0AZQAAF1sAewAwAH0A
XQAuAFsAewAxAH0AXQAAI1MARQBMAEUAQwBUACAAKgAgAEYAUgBPAE0AIAB7ADAAfQAANUQAYQB0
AGEAUgBlAGMAbwByAGQAVAB5AHAAZQBUAG8AQgB1AGYAZgBlAHIAVAB5AHAAZQAAJ1UAbgBoAGEA
bgBkAGwAZQBkACAAdAB5AHAAZQAuACAAewAwAH0AAANAAAADPwAAMVQAYQBiAGwAZQAgAFUAcABk
AGEAdABlACAARABlAHMAdABpAG4AYQB0AGkAbwBuAAALTwBMAEUARABCAAAxTQB5AC4AUgBlAHMA
bwB1AHIAYwBlAHMALgBNAHkAUgBlAHMAbwB1AHIAYwBlAHMAAMyKo9FCrvdLiiyp4i8T3/gACLd6
XFYZNOCJCLA/X38R1Qo6AyAAAQMAAAEEAAASDAcGFRIYARIMBAAAEggHBhUSGAESCAQAABIRBwYV
EhgBEhEEAAASFAcGFRIYARIUBAgAEgwECAASCAQIABIRBAgAEhQEIAECHAMgAAgEIAASFQMgAA4C
HgAHEAEBHgAeAAcwAQEBEB4AAhMABCAAEwAHBhUSGQETAAQoABMACBbPSQu4DDTqCImEXc2AgMyR
CyAFARIhCAISJRIpBCAAHQ4EIAEBDgQgAQECAyAAAgQoAB0OAygADgMoAAIDBhIkAwYSKAkgBAEI
DhIlEikFIAEBEhwDBhIhBSABARIhBCAAEjEEKAASMQIGDgQsAAoACHAAewAwAH0ABSABAhAOBCAA
HRwEIAARMAUgAQERMAQgABE1BSABARE1BCAAEjkGIAERPRIVByACARJBEkUGIAERSRE9BiACDhJN
DgUgARJNAgUgAgEOHAMGETADBhE1AwYSUQMGHQgCBggEKAARMAQoABE1BAAAAAAEAQAAAAQCAAAA
BAMAAAAEBAAAAAMGElkDBhJdBAAAElkEAAASXQUAAQESXQQIABJZBAgAEl0DBhI4AgYcBAAAEjgE
CAASOAUgAQERaQgBAAEAAAAAAAUgAgEODhgBAApNeVRlbXBsYXRlCDEwLjAuMC4wAAAGFRIYARIM
BhUSGAESCAYVEhgBEhEGFRIYARIUBAcBEgwEBwESCAQHARIRBAcBEhQQAQALTXkuQ29tcHV0ZXIA
ABMBAA5NeS5BcHBsaWNhdGlvbgAADAEAB015LlVzZXIAABMBAA5NeS5XZWJTZXJ2aWNlcwAABAAB
HBwDBwECAwcBCAcAARIVEYCFBAcBEhUDBwEOBRABAB4ABAoBHgAEBwEeAAcgBAEODg4OYQEANFN5
c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRwQ2xpZW50UHJvdG9jb2wSQ3JlYXRl
X19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAAGFRIYARMABhUSGQETAAQKARMABSAB
ARMACAcDEwATABMABQEAAAAABAcBHQ4FIAIBCBwEIAEBCAYHAh0OHQ4FIAASgKUFIAASgKkGIAES
gK0cBSAAEoCxBiABEoC1HAQHARIxBSAAEoC9BSABEkUIBCAAEiUEIAEcCAQgABFJByADHQUICAgE
IAEOCAQgAQEcBgABARKAuQMgABwVBwwICAgSRRwSgLkcHBKAuQgRMBE1BCAAElEEAAECDgkgAh0O
HQ4RgNkGIAEBEoDdBSAAEoDhBSAAEoDRBSAAEoDlBiABEoDNCAQgAQgcBSAAEoDtBSAAEoDxBSAC
CAgIBCAAEkUFAAIODhwEAAEOHAYAAw4OHBwHIAESgPkSFQIdDgYAAg4OHQ4HAAQODhwcHDsHHAgS
gMkSTRKArR0SRRKAyRKAyRKAyRKAyQ4SgMkSgM0SQQ4SgM0SQRJFCAgIDg4OHQ4SgNESgNEICAQg
ABJNBAcBEk0JBwMdDhKAyREwDgcGAgISgK0dDhKAuR0OBSAAEoEJBiABEoEFCAQgARwOBAABAhwE
AAEIHAQgAQIOBSABARE9HAcPCBKArRI5CAgSgM0SgQURPQgIEhUICBE9ET0HIAISOQ4dDgUgABKB
EQYgARKBFQgKAAMRgR0cEYEhHBoHDB0cEoDJEk0ODhI5DhKBBQ4SgLkdDhKA0RIHBh0cEoDJEjkS
gQUSgLkSgNEGAAMIDg4CBAcBETAEBwERNREHBg4SgMkSORKBBRKAuRKA0QggARKBKRGBLQ0HBRI5
EjkSTRJREoEpDSAFHA4RgTESgTUcHRwGBwIRPR0cBCAAET0FIAEBEUkEIAEBBQcHAxKBOQUFBgcC
EUkRPQUAAg4ODgQHAg4OCiAGAQgODg4IEAIFIAASgU0GIAESgUEcBCABHBwSBwYSTRJNEoFBEoFF
EoFJEoFFBSAAEoFVCCACAQ4QEoFRBiABEoFZHAUHARKBUQ0BAAhWYWxpZGF0ZQAAEgEADUdldFBy
b3BlcnRpZXMAAAUgAQEdDoCAAQAJAAAADkNvbm5lY3Rpb25UeXBlCkNvbm5lY3Rpb24FVGFibGUG
QWN0aW9uC1ByaW1hcnlLZXlzE0Vycm9yUm93RGlzcG9zaXRpb24QSW5zZXJ0ZWRWYXJpYWJsZQ9V
cGRhdGVkVmFyaWFibGUPRGVsZXRlZFZhcmlhYmxlAAAGIAEBEYF1EAEAC0Rlc3RpbmF0aW9uAAAl
AQAgU2VsZWN0IGRlc3RpbmF0aW9uIHRhYmxlIGFjdGlvbi4AAAYgAwEOAgIQAQAJR2V0VGFibGVz
AAEAAB4BABlTZWxlY3QgZGVzdGluYXRpb24gdGFibGUuAAAMAQAHQURPLk5FVAAABSABAR0cGAEA
AgAAAA4HQURPLk5FVA4FT0xFREIAABwBABdTZWxlY3QgY29ubmVjdGlvbiB0eXBlLgAAEAEAC0Rp
YWdub3N0aWNzAABBAQA8U2VsZWN0IHZhcmlhYmxlIHRvIHN0b3JlIG51bWJlciBvZiByb3dzIGlu
c2VydGVkIChvcHRpb25hbCkuAABAAQA7U2VsZWN0IHZhcmlhYmxlIHRvIHN0b3JlIG51bWJlciBv
ZiByb3dzIHVwZGF0ZWQgKG9wdGlvbmFsKS4AAEABADtTZWxlY3QgdmFyaWFibGUgdG8gc3RvcmUg
bnVtYmVyIG9mIHJvd3MgZGVsZXRlZCAob3B0aW9uYWwpLgAACAEABAAAAAAACgEABUVycm9yAAAm
AQAhU3BlY2lmeSBob3cgdG8gaGFuZGxlIGVycm9yIHJvd3MuAAATAQAOQ29ubmVjdGlvblR5cGUA
AB8BABpTZWxlY3QgQ29ubmVjdGlvbiBNYW5hZ2VyLgAAEQEACkdldENvbHVtbnMBAAAAIAEAG1Nw
ZWNpZnkgdGFibGUgcHJpbWFyeSBrZXlzLgAABSAAEoGRByACAQ4SgZEGBwISWRJZBAcBEl0IAQAC
AAAAAAAEAAEBHAQHARI4CAEACAAAAAAAHgEAAQBUAhZXcmFwTm9uRXhjZXB0aW9uVGhyb3dzAUcB
ABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuMAEAVA4URnJhbWV3b3JrRGlzcGxheU5hbWUQLk5F
VCBGcmFtZXdvcmsgNAwBAAcxLjAuMC4wAAApAQAkOTQ4Yjg0ZWItYmUzMy00YmI3LWI1OGUtYjgw
YTcwOGI3M2MxAAAFAQABAAAfAQAaQ29weXJpZ2h0IEAgTWljcm9zb2Z0IDIwMTYAADwBADdTY3Jp
cHRDb21wb25lbnRfMmUzZDRjNTZkMDY5NGY5YmJkMDMyZjFlMDk1MGJlYzEudmJwcm9qAAAOAQAJ
TWljcm9zb2Z0AACYdgAAAAAAAAAAAACudgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHYAAAAA
AAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxsAAAAAAD/JQAgABAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAYAACAAAAAAAAAAAAAAAAAAAABAAEAAAAw
AACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWIAAAGgEAAAAAAAAAAAAAGgENAAAAFYAUwBfAFYA
RQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+AAABAAAAAQAAAAAAAAABAAAAAAA/AAAAAAAA
AAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBvAAAAAAAkAAQA
AABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAAsATIAwAAAQBTAHQAcgBpAG4AZwBGAGkAbABl
AEkAbgBmAG8AAACkAwAAAQAwADAAMAAwADAANABiADAAAAA0AAoAAQBDAG8AbQBwAGEAbgB5AE4A
YQBtAGUAAAAAAE0AaQBjAHIAbwBzAG8AZgB0AAAAmAA4AAEARgBpAGwAZQBEAGUAcwBjAHIAaQBw
AHQAaQBvAG4AAAAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgBlADMAZAA0AGMA
NQA2AGQAMAA2ADkANABmADkAYgBiAGQAMAAzADIAZgAxAGUAMAA5ADUAMABiAGUAYwAxAC4AdgBi
AHAAcgBvAGoAAAAwAAgAAQBGAGkAbABlAFYAZQByAHMAaQBvAG4AAAAAADEALgAwAC4AMAAuADAA
AACYADwAAQBJAG4AdABlAHIAbgBhAGwATgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBu
AGUAbgB0AF8AMgBlADMAZAA0AGMANQA2AGQAMAA2ADkANABmADkAYgBiAGQAMAAzADIAZgAxAGUA
MAA5ADUAMABiAGUAYwAxAC4AdgBiAHAAcgBvAGoALgBkAGwAbAAAAFwAGwABAEwAZQBnAGEAbABD
AG8AcAB5AHIAaQBnAGgAdAAAAEMAbwBwAHkAcgBpAGcAaAB0ACAAQAAgAE0AaQBjAHIAbwBzAG8A
ZgB0ACAAMgAwADEANgAAAAAAoAA8AAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAA
AFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgBlADMAZAA0AGMANQA2AGQAMAA2ADkA
NABmADkAYgBiAGQAMAAzADIAZgAxAGUAMAA5ADUAMABiAGUAYwAxAC4AdgBiAHAAcgBvAGoALgBk
AGwAbAAAAJAAOAABAFAAcgBvAGQAdQBjAHQATgBhAG0AZQAAAAAAUwBjAHIAaQBwAHQAQwBvAG0A
cABvAG4AZQBuAHQAXwAyAGUAMwBkADQAYwA1ADYAZAAwADYAOQA0AGYAOQBiAGIAZAAwADMAMgBm
ADEAZQAwADkANQAwAGIAZQBjADEALgB2AGIAcAByAG8AagAAADQACAABAFAAcgBvAGQAdQBjAHQA
VgBlAHIAcwBpAG8AbgAAADEALgAwAC4AMAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABW
AGUAcgBzAGkAbwBuAAAAMQAuADAALgAwAC4AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHAAAAwAAADANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAA=]]></arrayElement></arrayElements></property><property id="23" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="25" name="VSTAProjectName" dataType="System.String" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE">ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1</property><property id="26" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><connections><connection id="28" name="Connection" connectionManagerID="{E4A11839-3BCB-400D-9D9E-169D0026568D}" /></connections><inputs><input id="29" name="Input" hasSideEffects="true"><externalMetadataColumns isUsed="True"><externalMetadataColumn id="41" name="COL1" dataType="i4" /></externalMetadataColumns></input></inputs><outputs><output id="32" name="Error Output" exclusionGroup="1" synchronousInputId="29"><outputColumns><outputColumn id="33" name="ErrorDescription" lineageId="33" length="250" dataType="wstr" /></outputColumns><externalMetadataColumns /></output></outputs></component>