<component id="91" name="Dictionary Destination" componentClassID="{2E42D45B-F83C-400F-8D77-61DDE6A7DF29}" description="Executes a custom script." localeId="1033" usesDispositions="false" validateExternalMetadata="False" version="4" pipelineVersion="0" 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="95" name="SourceCode" dataType="System.String" state="cdata" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="18"><arrayElement dataType="System.String"><![CDATA[\my project\settings.designer.vb]]></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[\my project\assemblyinfo.vb]]></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_97afa04481c24c47a90d62be1702f1a9.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_97afa04481c24c47a90d62be1702f1a9.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2011")> 
<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("cda55326-a4a5-41b0-b5b8-bb55696592b0")> 

' 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[\my project\settings.settings]]></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[\scriptcomponent_97afa04481c24c47a90d62be1702f1a9.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<Project ToolsVersion="3.5" 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>{A860303F-1F3F-4691-B57E-529FC101A107};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Library</OutputType>
    <RootNamespace>ScriptComponent_97afa04481c24c47a90d62be1702f1a9.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_97afa04481c24c47a90d62be1702f1a9.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{0F6F7F7E-515D-4212-BEC2-B8A97A5BA704}</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</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</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="CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  </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="{A860303F-1F3F-4691-B57E-529FC101A107}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{C1B21C64-9E6F-4923-A89D-9F958503C1CE}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_ScriptComponent</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\bufferwrapper.vb]]></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)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        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\resources.designer.vb]]></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><arrayElement dataType="System.String"><![CDATA[\componentwrapper.vb]]></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 Buffer As PipelineBuffer)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer))
        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

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[\my project\resources.resx]]></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[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2010 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.Collections

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


<ValidateProperties("Validate")> _
<FilterProperties("GetProperties")> _
<SortProperties(New String() { _
    "KeyColumn", "ValueColumn", _
    "IsResultCache", "ResultVariable", "ResultCache"})> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim key As Object = Row.Buffer(m_keyIndex)

        Dim keyArray As Byte() = TryCast(key, Byte())
        If Not keyArray Is Nothing Then
            ' Key value is byte array. Transform to base64.
            key = Convert.ToBase64String(keyArray)
        End If

        Try
            Call m_dictionary.Add(key, Row.Buffer(m_valueIndex))
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try
    End Sub ' Input_ProcessInputRow


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

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

        ' Find key column index.
        m_keyIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.KeyColumn).LineageID)

        ' Find value column index.
        m_valueIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.ValueColumn).LineageID)

        If Me.IsResultCache Then
            ' Acquire distributed cache.
            m_connection = CType( _
                Me.ComponentMetaData.RuntimeConnectionCollection("Cache").ConnectionManager.AcquireConnection(Nothing),  _
                ICacheConnection)
            m_dictionary = CType(m_connection.Connect(), IDictionary)
        Else
            ' Setup dictionary object.
            Dim vars As IDTSVariables100
            Call Me.VariableDispenser.LockOneForWrite(Me.ResultVariable, vars)
            Try
                Try
                    m_dictionary = CType(vars(Me.ResultVariable).Value, IDictionary)
                Catch ex As Exception
                    ' Dictionary not yet initialized.
                    m_dictionary = New Hashtable()
                    vars(Me.ResultVariable).Value = m_dictionary
                End Try
            Finally
                Call vars.Unlock()
            End Try
        End If
    End Sub ' PreExecute


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

        m_keyIndex = -1
        m_valueIndex = -1
        m_dictionary = Nothing

        If Not m_connection Is Nothing Then
            Call m_connection.Close()
            m_connection = Nothing
        End If
    End Sub ' PostExecute


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

        Try
            If String.IsNullOrEmpty(Me.KeyColumn) Then
                Throw New Exception("Select key column.")
            ElseIf String.IsNullOrEmpty(Me.ValueColumn) Then
                Throw New Exception("Select value column.")
            ElseIf String.IsNullOrEmpty(m_result) Then
                Throw New Exception("Select result.")
            Else
                Dim managedComponent As CManagedComponentWrapper = Me.ComponentMetaData.Instantiate()
                Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
                Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()

                Call input.InputColumnCollection.RemoveAll()

                ' Setup selected key column.
                Dim keyColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                    input.ID, _
                    virtInput, _
                    virtInput.VirtualInputColumnCollection(Me.KeyColumn).LineageID, _
                    DTSUsageType.UT_READONLY)

                ' Setup selected value column.
                Dim valueColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                    input.ID, _
                    virtInput, _
                    virtInput.VirtualInputColumnCollection(Me.ValueColumn).LineageID, _
                    DTSUsageType.UT_READONLY)

                If Me.IsResultCache Then
                    Dim conn As IDTSRuntimeConnection100 = Me.ComponentMetaData.RuntimeConnectionCollection.[New]()
                    conn.Name = "Cache"
                    conn.ConnectionManagerID = Me.ResultCache
                Else
                    Call Me.ComponentMetaData.RuntimeConnectionCollection.RemoveAll()
                End If
            End If
        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("KeyColumn")
        Call result.Add("ValueColumn")
        Call result.Add("IsResultCache")

        Call result.Add(IIf(Me.IsResultCache, "ResultCache", "ResultVariable"))

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


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select key column.")> _
    <Category("Input")> _
    <InputVirtualColumn()> _
    Public Property KeyColumn() As String
        Get
            KeyColumn = m_keyColumn
        End Get
        Set(ByVal value As String)
            m_keyColumn = value
        End Set
    End Property    ' KeyColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select value column.")> _
    <Category("Input")> _
    <InputVirtualColumn()> _
    Public Property ValueColumn() As String
        Get
            ValueColumn = m_valueColumn
        End Get
        Set(ByVal value As String)
            m_valueColumn = value
        End Set
    End Property    ' ValueColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies if Result property references Distributed Cache.")> _
    <Category("Result")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property IsResultCache() As Boolean
        Get
            IsResultCache = m_isResultCache
        End Get
        Set(ByVal value As Boolean)
            m_isResultCache = value
            m_result = String.Empty
        End Set
    End Property    ' IsResultCache


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable with dictionary object.")> _
    <Category("Result")> _
    <Variable()> _
    Public Property ResultVariable() As String
        Get
            ResultVariable = m_result
        End Get
        Set(ByVal value As String)
            m_result = value
        End Set
    End Property    ' ResultVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select Distributed Cache.")> _
    <Category("Result")> _
    <Connection("CacheConnectionType")> _
    Public Property ResultCache() As String
        Get
            ResultCache = m_result
        End Get
        Set(ByVal value As String)
            m_result = value
        End Set
    End Property    ' ResultCache
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property CacheConnectionType() As String()
        Get
            CacheConnectionType = New String() {"CACHE+"}
        End Get
    End Property    ' CacheConnectionType


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


#Region "Attributes"
    Private m_keyColumn As String
    Private m_valueColumn As String
    Private m_isResultCache As Boolean
    Private m_result As String

    Private m_keyIndex As Integer
    Private m_valueIndex As Integer
    Private m_dictionary As IDictionary
    Private m_connection As ICacheConnection
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="96" name="BinaryCode" dataType="System.String" state="cdata" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[\bin\scriptcomponent_97afa04481c24c47a90d62be1702f1a9.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDACFRiU0AAAAAAAAAAOAAAiELAQgAADIAAAAMAAAAAAAAHlEA
AAAgAAAAYAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAMxQAABPAAAAAGAAALgJAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAJDEAAAAgAAAAMgAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAALgJAAAAYAAAAAoAAAA0AAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAAPgAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAAAA
UQAAAAAAAEgAAAACAAUAUCkAAHwnAAABAAAAAAAAAFAgAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291cmNlcy5S
ZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMuUnVudGlt
ZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAAAeAigBAAAKKh4CKAQAAAoqpnMGAAAK
gAEAAARzBwAACoACAAAEcwgAAAqAAwAABHMJAAAKgAQAAAQqAAATMAEACwAAAAEAABF+AQAABG8K
AAAKKgATMAEACwAAAAIAABF+AgAABG8LAAAKKgATMAEACwAAAAMAABF+AwAABG8MAAAKKgATMAEA
CwAAAAQAABF+BAAABG8NAAAKKgATMAIADQAAAAUAABECAygRAAAKKBIAAAoqAAAAEzABAAcAAAAG
AAARAigTAAAKKgATMAEACwAAAAcAABHQBQAAAigUAAAKKgATMAEABwAAAAgAABECKBUAAAoqABMw
AQAQAAAACQAAEQKMAQAAGy0GKAEAACsqAioTMAIAEAAAAAoAABEDEgD+FQIAABsGgQIAABsqHgIo
FwAACioTMAIAKAAAAAsAABECexkAAApvGgAACgsHjAMAABstEigCAAArCwJ7GQAACgdvGwAACgcq
SgIoFwAACgJzHAAACn0ZAAAKKgAyAgMEBQ4EKB4AAAoqAAAAEzABAAcAAAAMAAARFo0cAAABKgAT
MAEABwAAAA0AABEWjRwAAAEqABMwAQAJAAAADgAAEQIoHwAACgoGKgAAABMwAQAJAAAADwAAEQIo
IAAACgoGKgAAAH4CKCIAAAoCAnMaAAAGfQYAAAQCAnMbAAAGfQcAAAQqtgMCKCMAAApvJAAACnIB
AABwbyUAAApvJgAACjMPAgIDFwRzEQAABm8YAAAGKgAASisHAgNvGQAABgNvFAAABi3xKgAGKgAA
OgIoFwAACgIDfQgAAAQqADoCKBcAAAoCA30JAAAEKgAeAigWAAAGKhswBABsAAAAEAAAEQNvJwAA
CgJ7DgAABG8oAAAKKBEAAAoKBnUKAAAbCwcsBwcoKQAACgoCexAAAAQGKBEAAAoDbycAAAoCew8A
AARvKAAACigRAAAKbyoAAAreGiUoKwAACgwCCG8sAAAKby0AAAYoLQAACt4AKgEMAAAAACgAKVEA
GiIAAAEbMAUANQEAABEAABECKC4AAAoCbyMAAApvJAAAChaMJgAAAW8lAAAKCgICby8AAApvMAAA
CgZvMQAACgZvMgAACgJvIgAABm8zAAAKbzQAAApvNQAACn0OAAAEAgJvLwAACm8wAAAKBm8xAAAK
Bm8yAAAKAm8kAAAGbzMAAApvNAAACm81AAAKfQ8AAAQCbyYAAAYsQwICbyMAAApvNgAACnINAABw
bzcAAApvOAAAChRvOQAACnQMAAABfREAAAQCAnsRAAAEbzoAAAp0CwAAAX0QAAAEK2gCbzsAAAoC
bygAAAYSAW88AAAKAgcCbygAAAZvPQAACm8+AAAKdAsAAAF9EAAABN43JSgrAAAKDAJzPwAACn0Q
AAAEBwJvKAAABm89AAAKAnsQAAAEb0AAAAooLQAACt4HB29BAAAK3CoAAAABGAAAAADfAB79ADAi
AAABAgDfAE4tAQcAAAAB2gIoQgAACgIVfQ4AAAQCFX0PAAAEAhR9EAAABAJ7EQAABCwSAnsRAAAE
b0MAAAoCFH0RAAAEKgAbMAUANwEAABIAABEXCgJvIgAABihEAAAKLAtyGQAAcHNFAAAKegJvJAAA
BihEAAAKLAtyPwAAcHNFAAAKegJ7DQAABChEAAAKLAtyaQAAcHNFAAAKegJvIwAACm9GAAAKEwQC
byMAAApvJAAAChaMJgAAAW8lAAAKDAhvRwAAChMGCG8yAAAKb0gAAAoRBAhvJgAAChEGEQZvSQAA
CgJvIgAABm9KAAAKb0sAAAoWb0wAAAoNEQQIbyYAAAoRBhEGb0kAAAoCbyQAAAZvSgAACm9LAAAK
Fm9MAAAKEwUCbyYAAAYsLQJvIwAACm82AAAKb00AAAoTBxEHcg0AAHBvTgAAChEHAm8qAAAGb08A
AAorEAJvIwAACm82AAAKb1AAAAreGiUoKwAAChMIFgoDEQhvLAAAClEoLQAACt4ABgsHKgBBGAAA
AAAAAAIAAAAXAQAAGQEAABoAAAAiAAABEzAEAGEAAAATAAARc1EAAAoLB3KHAABwb1IAAAomB3Kb
AABwb1IAAAomB3KzAABwb1IAAAomBwJvJgAABnLPAABwcucAAHAoUwAACigRAAAKb1IAAAomB9Ac
AAABKBQAAApvVAAACnQLAAAbKgAAABMwAQAJAAAAFAAAEQJ7CgAABAoGKgAAACICA30KAAAEKgAA
ABMwAQAJAAAAFQAAEQJ7CwAABAoGKgAAACICA30LAAAEKgAAABMwAQAJAAAAFgAAEQJ7DAAABAoG
KgAAAE4CA30MAAAEAn5VAAAKfQ0AAAQqEzABAAkAAAAXAAARAnsNAAAECgYqAAAAIgIDfQ0AAAQq
AAAAEzABAAkAAAAYAAARAnsNAAAECgYqAAAAIgIDfQ0AAAQqAAAAEzADABMAAAAZAAARF40cAAAB
CwcWcgUBAHCiBwoGKgATMAcAHQAAABoAABEWCgIoIwAAChZyEwEAcAN+VQAAChYSAG9WAAAKKgAA
AB4CKBcAAAoqEzACAC0AAAAbAAARfhIAAAQtIHJBAQBw0AwAAAIoFAAACm9hAAAKc2IAAAoLB4AS
AAAEfhIAAAQqAAAAEzABAAYAAAAcAAARfhMAAAQqAAAeAoATAAAEKkJzFwAACigRAAAKgBUAAAQq
AAAAHgIoYwAACiobMAEAPwAAAB0AABF+FAAABC0yfhUAAAQoEQAACihkAAAKfhQAAAQtHHMzAAAG
gBQAAATeEH4VAAAEKBEAAAooZQAACtx+FAAABCoAAQwAAAIAHQAMKQAQAAAAAUJTSkIBAAEAAAAA
AAwAAAB2Mi4wLjUwNzI3AAAAAAUAbAAAAIANAAAjfgAA7A0AANwRAAAjU3RyaW5ncwAAAADIHwAA
dAEAACNVUwA8IQAAEAAAACNHVUlEAAAATCEAADAGAAAjQmxvYgAAAAAAAAACAAABVxWiCQkPAAAA
+gEzABYAAAEAAABRAAAADQAAABUAAAA0AAAAFgAAAHAAAABLAAAAHQAAAAYAAAAQAAAAFgAAAAsA
AAABAAAACAAAAAEAAAACAAAAAwAAAAIAAAAAAJ0RAQAAAAAACgCpAX8BCgDdAb8BBgDtAeYBCgBF
An8BBgDDAuYBCgBFAxsDDgCXA4ADEgDmA8UDFgAXBMUDDgCyBIADBgCGBnMGDgCfBoADBgAhBxAH
BgBOBzkHGgC1B6AHGgACCOwHGgAbCOwHGgBICDAIBgByCF8ICgCxCIoICgDJCBMAGgD+COEIBgAz
CRMJBgBRCeYBBgB1CeYBCgCOCRMABgDSCbMJBgDmCeYBEgDtCcUDBgD6CeYBHgBdCjQKHgCMCjQK
HgC3CjQKBgDUCuYBBgDpCuYBCgAEC4oIIgCJC2ELBgCaC+YBFgCgC8UDHgDECzQKHgDrCzQKHgAi
DDQKHgBZDDQKHgCcDDQKIgC1DGELIgD+DGELIgA9DWELBgBNDXMGHgBkDTQKHgB9DTQKHgDFDTQK
HgAKDjQKHgAkDjQKHgA/DjQKBgB+DnMGCgCIDhMABgCYDuYBEgC2DsUDDgD/Dt0ODgAXD90ODgAx
D90ODgBND90OGgBfD+wHGgBxD+wHDgCGD90OGgCiD+wHGgC9D+wHDgDPD90OBgD1D+MPBgAcEAsQ
BgAvEF8IBgCYEBMJBgC4EBMJBgDWEOMPBgDzELMJBgABEeMPBgAcEeMPBgA3EeMPBgBQEeMPBgBp
EeMPBgCGEeMPAAAAAAEAAAAAAAEAAQAAAAAAKQA3AAUAAQABAAAAAAByADcACQABAAIAAAEQAH0A
NwANAAEAAwAFAQAAhwAAAA0ABQAIAAUBAACVAAAADQAFAA8AAQAAALAAvAAdAAYAEQABAAAA9AC8
ACkABgAWAAEAAAACAbwADQAIABoAAQAAAA4BvAANAAkAGwABAAAAGAG8ACAACgAcAAAAAAAjAS8B
DQASAC4AAAEQAHQBvAA9ABQAMgAxAAgCIAAxADECLQAxAFMCOgAxAHgCRwAhAFQDkAAGAAIBxwAG
AA4BywABAAgF3AABAAgF3AABACgG9gABADQG9gABAEIG+QABAFIG9gABAFsG/AABAGYG/AABAJIG
/wABALAGAwERADEHDwERAFoHEwERAM0HMQERANUHNQEIIQAAAAAGGLkBEwABABAhAAAAAAYYuQET
AAEAGCEAAAAAERj0ARcAAQBEIQAAAAATCPsBGwABAFwhAAAAABMIIQIoAAEAdCEAAAAAEwhKAjUA
AQCMIQAAAAATCGgCQgABAKQhAAAAAEYCrgJjAAEAwCEAAAAARgK3AmgAAgDUIQAAAACDAMgCbAAC
AOwhAAAAAEYC0AJxAAIAACIAAAAAEQDZAngAAgAcIgAAAAABAPcCgAADADgiAAAAAAYYuQETAAQA
QCIAAAAAAwgLA4sABAB0IgAAAAAGGLkBEwAEAIgiAAAAAAYYuQGvAAQAmCIAAAAARgpIBLkACACs
IgAAAABGCl8EuQAIAMAiAAAAAIYAdwS+AAgA2CIAAAAAhgB/BL4ACADwIgAAAAAGGLkBEwAIABAj
AAAAAEYCxgTPAAgAQCMAAAAARgPbBNYACgBUIwAAAABGA+4E1gALAFgjAAAAAAYYuQHgAAwAaCMA
AAAABhi5AeAADQB4IwAAAAAGGLkBEwAOAIAjAAAAAEYC7gTWAA4ACCQAAAAARgIYBRMADwBoJQAA
AABGAiMFEwAPAKAlAAAAAAYALwXmAA8AACcAAAAABgBDBbkAEABwJwAAAAAGCFEFcQAQAIgnAAAA
AAYIXwXsABAAlCcAAAAABghzBXEAEQCsJwAAAAAGCIMF7AARALgnAAAAAAYIkwW+ABIA0CcAAAAA
BgilBfEAEgDkJwAAAAAGCLcFcQATAPwnAAAAAAYIygXsABMACCgAAAAABgjdBXEAFAAgKAAAAAAG
CO0F7AAUACwoAAAAAAEI/QW5ABUATCgAAAAAAQAVBuwAFQB4KAAAAAADGLkBEwAWAIAoAAAAABYI
ZgcXARYAvCgAAAAAFgh6BxwBFgDQKAAAAAAWCIYHIQEWANgoAAAAABEY9AEXABcA7CgAAAAABhi5
ARMAFwD0KAAAAAAWCOIHOAEXAAAAAQC1AgAAAQDuAgAAAQDuAgAAAQAmBAAAAgAwBAAAAwA5BAAA
BABBBAAAAQDTBAAAAgBBBAAAAQBBBAAAAQAEBQAAAQAmBAAAAQAmBAAAAQAEBQAAAQA4BQAAAQBt
BQAAAQBtBQAAAQBtBQAAAQBtBQAAAQBtBQAAAQAgBgAAAQCSBwkAuQETAIEAuQFCAZEAuQFRAREA
uQETAJkAuQETACQAuQETACwAuQETADQAuQETADwAuQETACQACwOLACwACwOLADQACwOLADwACwOL
AKEAuQETAKkAuQETALEAuQHsALkAQgnqARkArgJjABkAtwJoACkAYwn3ARkA0AJxAMkAfwkHAhkA
uQETANEAuQEXAkQAVAOQAEwA4geLAEwAqQmUAkwAuQETANkAuQHxADkAuQGvAOkAdwS+AOkAfwS+
APEAuQHxAFEAuQETAEEAdgqsAvkAowqxAgEBxAq3AgkBzQpoADkA3gq+AkkAxArDAhkB8QrLAlkA
AAvRAiEBEAvXAhEBIAtxACEBLAsXAEEAGAUTAFEAsgvnAjkB2QvtAgkB3gpoAAkBCAzzAkkBxAr5
AlEBNQxoAEEBQwwAA/kAfAwGA1kBxAoMA2EBzgwTA2kB5AwZA2EA9gweA0EAFw0iA3EBLQ0oAykB
xAoxA3kB4gceA4EBuQETAHkBqQk4AykBVw0TAEEAIwUTAGEAXg0TAOEAkQ1JAxEBuQHsAPkAnw1O
AwkBqw1UA0kBuw0TAJEB6Q1aA5kBxApgA6EBNQxoAKkBTA5nA1kBWQ51A2EBXQ7sAGEBZg7sAFkB
uw0TALkBuQETALkBAAuVA8EBlA6aA7kBng6hA+EApg72APkArA67A9EBuQETANkBuQHGA+EBuQHs
AOkBuQHsAPEBuQETAPkBuQHsAAECuQHsAAkCuQETABECuQGrBCECuQHsACkA/g8qBWkAuQEwBXkA
uQETADECJBBNBTECKhBNBTkCuQETAEECuQFXBUkCuQETAFECuQHsAFkCuQHsAGECuQHsAGkCuQHs
AHECuQHsAHkCuQHsAIECuQHsAIkCuQHsACkAgwC4AS4AcwMeBi4AawPhBS4AQwNlBS4ASwOEBS4A
YwPBBS4AgwPhBS4AOwNcBS4AewOhAi4AUwORBS4A6wChAi4ACwG7BS4AWwOhAkAAKwBvAUAAEwBI
AUMAEwBIAUMAGwBXAUkAgwDWAWMAEwBIAWMAGwBXAWkAgwDJAYAAKwBvAYMAcwBvAYMAGwBXAYMA
ewBvAYkAgwCkAaAAKwBvAaMAwwAfAqMAEwBIAcAAKwBvAcMAEwBIAcMA6wChAuAAKwBvAeMACwGh
AgABEwBIAQABKwBvAQMBCwGhAgkB4wJuBAkB6wJ5BAkB8wJvASABKwBvASABEwBIASkB8wJvASkB
4wJuBCkB6wKRBEABKwBvAUABEwBIAUkB4wI1BEkB+wJIAUkB6wKyBGABKwBvAWABEwBIAWMB0wIn
BGMBywIUBGMBuwJvAWMBwwLMA2MBCwGhAmkB2wJvAWkB4wI1BGkB6wJBBIABKwBvAYkB6wILBYkB
4wI1BIkBAwPyBKABKwBvAcABEwBIAcABKwBvAckBEwBEBeABKwBvAekBEwBEBQACKwBvAQACEwBI
AQkCMwNvAUADCwGhAmADCwGhApABlQGaAZ8B7wHzAf4BAwISAhICmgKnAqcC7wHvAd4CPQN7A6wD
AwIDAu8BAwIDArQD7wE4BT8FUgUEAAEABgAFAAcABgALAAgADAAOAA0AEAAAAN0BTwAAAJYCVAAA
AEUCWQAAAKICXgAAAF4DmAAAAIsEwgAAAJ4EwgAAAL0GBwEAAMcGBwEAANMGCwEAAOEGBwEAAPAG
BwEAAPwGwgAAACEHJwEAAJgHLAEAAJIHPQECAAQAAwACAAUABQACAAYABwACAAcACQACAA8ACwAC
ABIADQACABMADwACACIAEQABACMAEQABACUAEwACACQAEwABACcAFQACACYAFQACACgAFwABACkA
FwACACoAGQABACsAGQACACwAGwACAC8AHQACADAAHwABADEAHwACADQAIQB1AHUAiAB0AXsBggGJ
AYECiALIAqkDBIAAAAEAAAAAAAAAAAAAAAAAvAAAAAIAAAAAAAAAAAAAAAEACgAAAAAACAAAAAAA
AAAAAAAACgATAAAAAAABAAAAAAAAAAAAAACdAGoDAAAAAAoAAAAAAAAAAAAAAKYAqAMAAAAACgAA
AAAAAAAAAAAApgD2AwAAAAACAAAAAAAAAAAAAAABAOYBAAAAAAoAAAAAAAAAAAAAAKYAEAoAAAAA
CgAAAAAAAAAAAAAApgA+CwAAAAAAAAAAAQAAAEwQAAAFAAQABgAEAAAAEAAMAOwCAAAQABkA7AIA
AAAAGwDsAi0ADQItAI8CAAAAAAA8TW9kdWxlPgBtc2NvcmxpYgBNaWNyb3NvZnQuVmlzdWFsQmFz
aWMATXlBcHBsaWNhdGlvbgBTY3JpcHRDb21wb25lbnRfOTdhZmEwNDQ4MWMyNGM0N2E5MGQ2MmJl
MTcwMmYxYTkudmJwcm9qLk15AE15Q29tcHV0ZXIATXlQcm9qZWN0AE15V2ViU2VydmljZXMAVGhy
ZWFkU2FmZU9iamVjdFByb3ZpZGVyYDEASW5wdXRCdWZmZXIAU2NyaXB0Q29tcG9uZW50Xzk3YWZh
MDQ0ODFjMjRjNDdhOTBkNjJiZTE3MDJmMWE5LnZicHJvagBVc2VyQ29tcG9uZW50AENvbm5lY3Rp
b25zAFZhcmlhYmxlcwBTY3JpcHRNYWluAE15UmVzb3VyY2VzAFNjcmlwdENvbXBvbmVudF85N2Fm
YTA0NDgxYzI0YzQ3YTkwZDYyYmUxNzAyZjFhOS52YnByb2ouTXkuUmVzb3VyY2VzAE15U2V0dGlu
Z3MATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMAQXBwbGljYXRpb25C
YXNlAC5jdG9yAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1dGVyAFN5c3RlbQBP
YmplY3QALmNjdG9yAGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0UHJvdmlkZXIAZ2V0X0Fw
cGxpY2F0aW9uAG1fQXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNlcgBtX1VzZXJPYmplY3RQ
cm92aWRlcgBnZXRfV2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2VzT2JqZWN0UHJvdmlkZXIAQXBw
bGljYXRpb24AV2ViU2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENvZGUAVHlwZQBHZXRUeXBlAFRv
U3RyaW5nAENyZWF0ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERpc3Bvc2VfX0luc3RhbmNlX18A
Z2V0X0dldEluc3RhbmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZpY2VzLkludGVybmFs
AENvbnRleHRWYWx1ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBDb3p5Um9jLlNTSVNQbHVzLjIw
MDgAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUwBTY3JpcHRCdWZmZXJQbHVzAE1pY3Jvc29mdC5TcWxT
ZXJ2ZXIuVHhTY3JpcHQATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUAU2NyaXB0Q29t
cG9uZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuUGlwZWxpbmVIb3N0AFBpcGVsaW5lQnVmZmVyAENv
bXBvbmVudABPYmplY3RJRABJc0lucHV0AEJ1ZmZlcgBnZXRfU3RhdGljSW5wdXRDb2x1bW5zAGdl
dF9TdGF0aWNPdXRwdXRDb2x1bW5zAE5leHRSb3cARW5kT2ZSb3dzZXQAU3RhdGljSW5wdXRDb2x1
bW5zAFN0YXRpY091dHB1dENvbHVtbnMAU2NyaXB0Q29tcG9uZW50UGx1cwBQcm9jZXNzSW5wdXQA
SW5wdXRJRABJbnB1dF9Qcm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vzc0lucHV0Um93AFJvdwBQYXJl
bnRDb21wb25lbnQAUHJlRXhlY3V0ZQBQb3N0RXhlY3V0ZQBWYWxpZGF0ZQBlcnJNZXNzYWdlAEdl
dFByb3BlcnRpZXMAZ2V0X0tleUNvbHVtbgBzZXRfS2V5Q29sdW1uAHZhbHVlAGdldF9WYWx1ZUNv
bHVtbgBzZXRfVmFsdWVDb2x1bW4AZ2V0X0lzUmVzdWx0Q2FjaGUAc2V0X0lzUmVzdWx0Q2FjaGUA
Z2V0X1Jlc3VsdFZhcmlhYmxlAHNldF9SZXN1bHRWYXJpYWJsZQBnZXRfUmVzdWx0Q2FjaGUAc2V0
X1Jlc3VsdENhY2hlAGdldF9DYWNoZUNvbm5lY3Rpb25UeXBlAEZpcmVFcnJvcl8AbWVzc2FnZQBt
X2tleUNvbHVtbgBtX3ZhbHVlQ29sdW1uAG1faXNSZXN1bHRDYWNoZQBtX3Jlc3VsdABtX2tleUlu
ZGV4AG1fdmFsdWVJbmRleABTeXN0ZW0uQ29sbGVjdGlvbnMASURpY3Rpb25hcnkAbV9kaWN0aW9u
YXJ5AElDYWNoZUNvbm5lY3Rpb24AbV9jb25uZWN0aW9uAEtleUNvbHVtbgBWYWx1ZUNvbHVtbgBJ
c1Jlc3VsdENhY2hlAFJlc3VsdFZhcmlhYmxlAFJlc3VsdENhY2hlAENhY2hlQ29ubmVjdGlvblR5
cGUAU3lzdGVtLlJlc291cmNlcwBSZXNvdXJjZU1hbmFnZXIAX3Jlc01ncgBTeXN0ZW0uR2xvYmFs
aXphdGlvbgBDdWx0dXJlSW5mbwBfcmVzQ3VsdHVyZQBnZXRfUmVzb3VyY2VNYW5hZ2VyAGdldF9D
dWx0dXJlAHNldF9DdWx0dXJlAFZhbHVlAEN1bHR1cmUAU3lzdGVtLkNvbmZpZ3VyYXRpb24AQXBw
bGljYXRpb25TZXR0aW5nc0Jhc2UAbV9WYWx1ZQBtX1N5bmNPYmplY3QAZ2V0X1ZhbHVlAFN5c3Rl
bS5Db21wb25lbnRNb2RlbABFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUARWRpdG9yQnJvd3NhYmxl
U3RhdGUAU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIAR2VuZXJhdGVkQ29kZUF0dHJpYnV0ZQBTeXN0
ZW0uRGlhZ25vc3RpY3MARGVidWdnZXJIaWRkZW5BdHRyaWJ1dGUATWljcm9zb2Z0LlZpc3VhbEJh
c2ljLkNvbXBpbGVyU2VydmljZXMAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5h
bWVBdHRyaWJ1dGUAU3lzdGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbgBIZWxwS2V5d29yZEF0dHJp
YnV0ZQBTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzAFJ1bnRpbWVIZWxwZXJzAEdldE9i
amVjdFZhbHVlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAEFjdGl2YXRvcgBD
cmVhdGVJbnN0YW5jZQBNeUdyb3VwQ29sbGVjdGlvbkF0dHJpYnV0ZQBzZXRfVmFsdWUAU3lzdGVt
LlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzAENvbVZpc2libGVBdHRyaWJ1dGUAU3RyaW5nAFNjcmlw
dEJ1ZmZlcgBDTFNDb21wbGlhbnRBdHRyaWJ1dGUATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNQaXBl
bGluZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBlcgBJRFRTQ29t
cG9uZW50TWV0YURhdGExMDAAZ2V0X0NvbXBvbmVudE1ldGFEYXRhAElEVFNJbnB1dENvbGxlY3Rp
b24xMDAAZ2V0X0lucHV0Q29sbGVjdGlvbgBJRFRTSW5wdXQxMDAAZ2V0X0l0ZW0AZ2V0X0lEAEV4
Y2VwdGlvbgBnZXRfQnVmZmVyAENvbnZlcnQAVG9CYXNlNjRTdHJpbmcAQWRkAFByb2plY3REYXRh
AFNldFByb2plY3RFcnJvcgBnZXRfTWVzc2FnZQBDbGVhclByb2plY3RFcnJvcgBNaWNyb3NvZnQu
U3FsU2VydmVyLkRUU1J1bnRpbWVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUu
V3JhcHBlcgBJRFRTVmFyaWFibGVzMTAwAEludDMyAFBpcGVsaW5lQ29tcG9uZW50AGdldF9Ib3N0
Q29tcG9uZW50AElEVFNCdWZmZXJNYW5hZ2VyMTAwAGdldF9CdWZmZXJNYW5hZ2VyAElEVFNJbnB1
dENvbHVtbkNvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sdW1uQ29sbGVjdGlvbgBJRFRTSW5wdXRD
b2x1bW4xMDAAZ2V0X0xpbmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQASURUU1J1bnRpbWVD
b25uZWN0aW9uQ29sbGVjdGlvbjEwMABnZXRfUnVudGltZUNvbm5lY3Rpb25Db2xsZWN0aW9uAElE
VFNSdW50aW1lQ29ubmVjdGlvbjEwMABJRFRTQ29ubmVjdGlvbk1hbmFnZXIxMDAAZ2V0X0Nvbm5l
Y3Rpb25NYW5hZ2VyAEFjcXVpcmVDb25uZWN0aW9uAENvbm5lY3QASURUU1ZhcmlhYmxlRGlzcGVu
c2VyMTAwAGdldF9WYXJpYWJsZURpc3BlbnNlcgBMb2NrT25lRm9yV3JpdGUASURUU1ZhcmlhYmxl
MTAwAEhhc2h0YWJsZQBVbmxvY2sAQ2xvc2UAQ01hbmFnZWRDb21wb25lbnRXcmFwcGVyAElEVFNW
aXJ0dWFsSW5wdXQxMDAASXNOdWxsT3JFbXB0eQBJbnN0YW50aWF0ZQBHZXRWaXJ0dWFsSW5wdXQA
UmVtb3ZlQWxsAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9WaXJ0dWFs
SW5wdXRDb2x1bW5Db2xsZWN0aW9uAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW4xMDAASURUU0Rlc2ln
bnRpbWVDb21wb25lbnQxMDAARFRTVXNhZ2VUeXBlAFNldFVzYWdlVHlwZQBOZXcAc2V0X05hbWUA
c2V0X0Nvbm5lY3Rpb25NYW5hZ2VySUQAQXJyYXlMaXN0AEludGVyYWN0aW9uAElJZgBBcnJheQBU
b0FycmF5AEVtcHR5AEZpcmVFcnJvcgBTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJp
YnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAU29ydFByb3BlcnRpZXNBdHRy
aWJ1dGUARmlsdGVyUHJvcGVydGllc0F0dHJpYnV0ZQBWYWxpZGF0ZVByb3BlcnRpZXNBdHRyaWJ1
dGUAVmFyaWFibGVBdHRyaWJ1dGUAQ2F0ZWdvcnlBdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1
dGUASW5wdXRWaXJ0dWFsQ29sdW1uQXR0cmlidXRlAFJlZnJlc2hQcm9wZXJ0aWVzQXR0cmlidXRl
AFJlZnJlc2hQcm9wZXJ0aWVzAENvbm5lY3Rpb25BdHRyaWJ1dGUAU3lzdGVtLlJlZmxlY3Rpb24A
QXNzZW1ibHkAZ2V0X0Fzc2VtYmx5AFN5c3RlbS5UaHJlYWRpbmcATW9uaXRvcgBFbnRlcgBFeGl0
AERlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUAU2NyaXB0Q29tcG9uZW50Xzk3YWZhMDQ0ODFj
MjRjNDdhOTBkNjJiZTE3MDJmMWE5LnZicHJvai5SZXNvdXJjZXMucmVzb3VyY2VzAENvbXBpbGF0
aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAUnVudGltZUNvbXBhdGliaWxpdHlBdHRyaWJ1dGUAQXNz
ZW1ibHlGaWxlVmVyc2lvbkF0dHJpYnV0ZQBHdWlkQXR0cmlidXRlAEFzc2VtYmx5VHJhZGVtYXJr
QXR0cmlidXRlAEFzc2VtYmx5Q29weXJpZ2h0QXR0cmlidXRlAEFzc2VtYmx5UHJvZHVjdEF0dHJp
YnV0ZQBBc3NlbWJseUNvbXBhbnlBdHRyaWJ1dGUAQXNzZW1ibHlEZXNjcmlwdGlvbkF0dHJpYnV0
ZQBBc3NlbWJseVRpdGxlQXR0cmlidXRlAFNjcmlwdENvbXBvbmVudF85N2FmYTA0NDgxYzI0YzQ3
YTkwZDYyYmUxNzAyZjFhOS52YnByb2ouZGxsAAAAAAALSQBuAHAAdQB0AAALQwBhAGMAaABlAAAl
UwBlAGwAZQBjAHQAIABrAGUAeQAgAGMAbwBsAHUAbQBuAC4AAClTAGUAbABlAGMAdAAgAHYAYQBs
AHUAZQAgAGMAbwBsAHUAbQBuAC4AAB1TAGUAbABlAGMAdAAgAHIAZQBzAHUAbAB0AC4AABNLAGUA
eQBDAG8AbAB1AG0AbgAAF1YAYQBsAHUAZQBDAG8AbAB1AG0AbgAAG0kAcwBSAGUAcwB1AGwAdABD
AGEAYwBoAGUAABdSAGUAcwB1AGwAdABDAGEAYwBoAGUAAB1SAGUAcwB1AGwAdABWAGEAcgBpAGEA
YgBsAGUAAA1DAEEAQwBIAEUAKwAALUQAaQBjAHQAaQBvAG4AYQByAHkAIABEAGUAcwB0AGkAbgBh
AHQAaQBvAG4AADFNAHkALgBSAGUAcwBvAHUAcgBjAGUAcwAuAE0AeQBSAGUAcwBvAHUAcgBjAGUA
cwAAADAKT1hCEOtDr0adxd0PTVEACLd6XFYZNOCJCLA/X38R1Qo6AyAAAQMAAAEEAAASDAcGFRIY
ARIMBAAAEggHBhUSGAESCAQAABIRBwYVEhgBEhEEAAASFAcGFRIYARIUBAgAEgwECAASCAQIABIR
BAgAEhQEIAECHAMgAAgEIAASFQMgAA4CHgAHEAEBHgAeAAcwAQEBEB4AAhMABCAAEwAHBhUSGQET
AAQoABMACBbPSQu4DDTqCImEXc2AgMyRCSAEARIhCAISJQQgAB0OAyAAAgQoAB0OAwYSJAMGEigG
IAIBCBIlBSABARIcAwYSIQUgAQESIQUgAQIQDgQgAQEOBCABAQICBg4CBgICBggDBhItAwYSMQMo
AA4DKAACAwYSNQMGEjkEAAASNQQAABI5BQABARI5BAgAEjUECAASOQMGEjQCBhwEAAASNAQIABI0
BSABARFFCAEAAQAAAAAABSACAQ4OFwEACk15VGVtcGxhdGUHOC4wLjAuMAAABAEAAAAGFRIYARIM
BhUSGAESCAYVEhgBEhEGFRIYARIUBAcBEgwEBwESCAQHARIRBAcBEhQTAQAOTXkuV2ViU2Vydmlj
ZXMAABABAAtNeS5Db21wdXRlcgAADAEAB015LlVzZXIAABMBAA5NeS5BcHBsaWNhdGlvbgAABAAB
HBwDBwECAwcBCAYAARIVEWEEBwESFQMHAQ4FEAEAHgAECgEeAAQHAR4AByAEAQ4ODg5hAQA0U3lz
dGVtLldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMuU29hcEh0dHBDbGllbnRQcm90b2NvbBJDcmVhdGVf
X0luc3RhbmNlX18TRGlzcG9zZV9fSW5zdGFuY2VfXwAAAAYVEhgBEwAGFRIZARMABAoBEwAFIAEB
EwAGBwITABMABQEAAAAABAcBHQ4EIAASfQUgABKAgQYgARKAhRwEIAASJQQgARwIAh0FBQABDh0F
BSACARwcBgABARKAiQgHAxwdBRKAiQUgABKAnQUgABKAoQUgABKApQYgARKAqRwFIAIICAgFIAAS
gK0GIAESgLEcBSAAEoC1BCABHBwDIAAcBSAAEoC5CCACAQ4QEoCVBiABEoC9HAQgAQEcCwcDEoCF
EoCVEoCJBAABAg4FIAASgMUFIAASgMkFIAASgM0GIAESgNEcDSAEEoCpCBKAyQgRgNkFIAASgLEZ
BwkCAhKAhRKAqRKAxRKAqRKAyRKAsRKAiQQgAQgcBgADHAIcHAcgARKA5RIVAh0OBwcCHQ4SgN0G
BwIdDh0OCiAGAQgODg4IEAIFIAEBHQ5HAQAFAAAACUtleUNvbHVtbgtWYWx1ZUNvbHVtbg1Jc1Jl
c3VsdENhY2hlDlJlc3VsdFZhcmlhYmxlC1Jlc3VsdENhY2hlAAASAQANR2V0UHJvcGVydGllcwAA
DQEACFZhbGlkYXRlAAALAQAGUmVzdWx0AAAsAQAnU2VsZWN0IHZhcmlhYmxlIHdpdGggZGljdGlv
bmFyeSBvYmplY3QuAAAKAQAFSW5wdXQAABcBABJTZWxlY3Qga2V5IGNvbHVtbi4AABkBABRTZWxl
Y3QgdmFsdWUgY29sdW1uLgAABiABARGBDT8BADpTcGVjaWZpZXMgaWYgUmVzdWx0IHByb3BlcnR5
IHJlZmVyZW5jZXMgRGlzdHJpYnV0ZWQgQ2FjaGUuAAAYAQATQ2FjaGVDb25uZWN0aW9uVHlwZQAA
HgEAGVNlbGVjdCBEaXN0cmlidXRlZCBDYWNoZS4AAAUgABKBFQcgAgEOEoEVBgcCEjUSNQQHARI5
CAEAAgAAAAAABAABARwEBwESNAQgAQEICAEACAAAAAAAHgEAAQBUAhZXcmFwTm9uRXhjZXB0aW9u
VGhyb3dzAQwBAAcxLjAuMC4wAAApAQAkY2RhNTUzMjYtYTRhNS00MWIwLWI1YjgtYmI1NTY5NjU5
MmIwAAAFAQABAAAfAQAaQ29weXJpZ2h0IEAgTWljcm9zb2Z0IDIwMTEAADwBADdTY3JpcHRDb21w
b25lbnRfOTdhZmEwNDQ4MWMyNGM0N2E5MGQ2MmJlMTcwMmYxYTkudmJwcm9qAAAOAQAJTWljcm9z
b2Z0AAAAAAD0UAAAAAAAAAAAAAAOUQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAAAA
AAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAAAAAA/yUAIEAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwADAAAAKAAAgA4A
AABIAACAEAAAAGAAAIAAAAAAAAAAAAAAAAAAAAIAAgAAAHgAAIADAAAAkAAAgAAAAAAAAAAAAAAA
AAAAAQAAfwAAqAAAgAAAAAAAAAAAAAAAAAAAAQABAAAAwAAAgAAAAAAAAAAAAAAAAAAAAQAAAAAA
2AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA6AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA+AAAAAAAAAAA
AAAAAAAAAAAAAQAAAAAACAEAAIBlAADoAgAAAAAAAAAAAABoaAAAKAEAAAAAAAAAAAAAkGkAACIA
AAAAAAAAAAAAABhhAABoBAAAAAAAAAAAAABoBDQAAABWAFMAXwBWAEUAUgBTAEkATwBOAF8ASQBO
AEYATwAAAAAAvQTv/gAAAQAAAAEAAAAAAAAAAQAAAAAAPwAAAAAAAAAEAAAAAgAAAAAAAAAAAAAA
AAAAAEQAAAABAFYAYQByAEYAaQBsAGUASQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0
AGkAbwBuAAAAAAAAALAEyAMAAAEAUwB0AHIAaQBuAGcARgBpAGwAZQBJAG4AZgBvAAAApAMAAAEA
MAAwADAAMAAwADQAYgAwAAAANAAKAAEAQwBvAG0AcABhAG4AeQBOAGEAbQBlAAAAAABNAGkAYwBy
AG8AcwBvAGYAdAAAAJgAOAABAEYAaQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAABTAGMA
cgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADkANwBhAGYAYQAwADQANAA4ADEAYwAyADQAYwA0
ADcAYQA5ADAAZAA2ADIAYgBlADEANwAwADIAZgAxAGEAOQAuAHYAYgBwAHIAbwBqAAAAMAAIAAEA
RgBpAGwAZQBWAGUAcgBzAGkAbwBuAAAAAAAxAC4AMAAuADAALgAwAAAAmAA8AAEASQBuAHQAZQBy
AG4AYQBsAE4AYQBtAGUAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADkANwBhAGYA
YQAwADQANAA4ADEAYwAyADQAYwA0ADcAYQA5ADAAZAA2ADIAYgBlADEANwAwADIAZgAxAGEAOQAu
AHYAYgBwAHIAbwBqAC4AZABsAGwAAABcABsAAQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQA
AABDAG8AcAB5AHIAaQBnAGgAdAAgAEAAIABNAGkAYwByAG8AcwBvAGYAdAAgADIAMAAxADEAAAAA
AKAAPAABAE8AcgBpAGcAaQBuAGEAbABGAGkAbABlAG4AYQBtAGUAAABTAGMAcgBpAHAAdABDAG8A
bQBwAG8AbgBlAG4AdABfADkANwBhAGYAYQAwADQANAA4ADEAYwAyADQAYwA0ADcAYQA5ADAAZAA2
ADIAYgBlADEANwAwADIAZgAxAGEAOQAuAHYAYgBwAHIAbwBqAC4AZABsAGwAAACQADgAAQBQAHIA
bwBkAHUAYwB0AE4AYQBtAGUAAAAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AOQA3
AGEAZgBhADAANAA0ADgAMQBjADIANABjADQANwBhADkAMABkADYAMgBiAGUAMQA3ADAAMgBmADEA
YQA5AC4AdgBiAHAAcgBvAGoAAAA0AAgAAQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAx
AC4AMAAuADAALgAwAAAAOAAIAAEAQQBzAHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBpAG8AbgAAADEA
LgAwAC4AMAAuADAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA
////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAd3d3d3d3d3d3d3d3d3dwBEREREREREREREREREREcAT/////////////////
9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE////////
//////////RwBP/////////////////0cAT/////////////////9HAE//////////////////Rw
BP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////////
///////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/
////////////////9HAE//////////////////RwBP/////////////////0cASIiIiIiIiIiIiI
iIiIhHAERERERERERERERERERERwBExMTExMTExMTE7Ozkl0cATMzMzMzMzMzMzMzMzMxAAARERE
REREREREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAA/////////////////////8AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAA
A8AAAAf///////////////8oAAAAEAAAACAAAAABAAQAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD/
/wAA////AAAAAAAAAAAAB3d3d3d3d3dERERERERER0////////hHT///////+EdP///////4R0//
//////hHT///////+EdP///////4R0////////hHT///////+EdIiIiIiIiIR0zMzMzMzMxHxERE
RERERMAAAAAAAAAAAAAAAAAAAAAA//8AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAABAAD//wAA//8AAAAAAQACACAgEAABAAQA6AIAAAIAEBAQAAEABAAo
AQAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADAAAACAxAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></arrayElement></arrayElements></property>
<property id="103" name="UserComponentTypeName" dataType="System.String" state="default" isArray="false" description="" typeConverter="" UITypeEditor="" containsID="false" expressionType="None">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property>
<property id="934" name="VSTAProjectName" dataType="System.String" state="default" isArray="false" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None">ScriptComponent_97afa04481c24c47a90d62be1702f1a9</property>
<property id="935" name="ScriptLanguage" dataType="System.String" state="default" isArray="false" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" UITypeEditor="" containsID="false" expressionType="None">VisualBasic</property></properties>
<inputs>
<input id="93" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></input>
</inputs>
</component>