<component id="1" name="Script Component" componentClassID="{2E42D45B-F83C-400F-8D77-61DDE6A7DF29}" description="Executes a custom script" localeId="1033" usesDispositions="false" validateExternalMetadata="True" 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="5" 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_4ad745e01d2d4be9ba5d4d3a979724db.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_4ad745e01d2d4be9ba5d4d3a979724db.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2013")> 
<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("0894f19b-9db5-43cb-977c-c57138389841")> 

' 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[\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[\scriptcomponent_4ad745e01d2d4be9ba5d4d3a979724db.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_4ad745e01d2d4be9ba5d4d3a979724db.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_4ad745e01d2d4be9ba5d4d3a979724db.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{096F409E-5DF9-414A-ACC7-87D1710AA6CA}</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.Sforce, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL" />
    <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.Web.Services" />
    <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[\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

    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[\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-2013 COZYROC LLC
' 
' Permission is hereby granted, free of charge, to any person
' obtaining a copy of this software and associated documentation
' files (the "Software"), to deal in the Software without
' restriction, including without limitation the rights to use,
' copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following
' conditions:
' 
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
' OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
' HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
' WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
' OTHER DEALINGS IN THE SOFTWARE.

Imports System
Imports System.ComponentModel
Imports System.Collections
Imports System.Xml
Imports System.Web.Services.Protocols

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ColumnMappings()> _
<SortProperties(New String() {"Connection", "SalesforceObject", "KeyField", "ValueField", "UseCache"})> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const QueryTemplate_3P As String = "select {0} from {1} where {2}"
    Private Const ListDelimiter As String = "," + vbLf


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim valueList() As String

        If m_cache Is Nothing Then
            valueList = GetLookupRow_(Row)
        Else
            ' Cache is enabled.
            Dim cacheKey As String = GetCacheKey_(Row)

            If m_cache.Contains(cacheKey) Then
                valueList = CType(m_cache(cacheKey), String())
            Else
                valueList = GetLookupRow_(Row)
                m_cache(cacheKey) = valueList
            End If
        End If

        If Not valueList Is Nothing Then
            Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)

            ' Lookup row found.
            Dim colsCount As Integer = m_valueIdx.Length
            For colIndex As Integer = 0 To colsCount - 1
                Dim value As String = valueList(colIndex)
                Dim valueIndex As Integer = m_valueIdx(colIndex)

                If String.IsNullOrEmpty(value) Then
                    Call Row.Buffer.SetNull(valueIndex)
                    Continue For
                End If

                Try
                    Select Case m_valueType(colIndex)
                        Case DataType.DT_DBTIMESTAMP
                        Case DataType.DT_DATE
                        Case DataType.DT_FILETIME
                        Case DataType.DT_DBDATE
                            Row.Buffer(valueIndex) = Convert.ToDateTime(value)

                        Case DataType.DT_IMAGE
                            Row.Buffer(valueIndex) = Convert.FromBase64String(value)

                        Case Else
                            Row.Buffer(valueIndex) = value
                    End Select
                Catch ex As Exception
                    Call FireError_(String.Format( _
                        "Failed to process '{0}' for column '{1}'.", _
                        value, _
                        output.OutputColumnCollection(colIndex).Name))
                End Try
            Next
        End If
    End Sub ' Input_ProcessInputRow


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

        ' Setup connection.
        m_connection = CType( _
            Me.Connections.Connection.AcquireConnection(Nothing), _
            ISforceConnection)
        m_service = CType(m_connection.Connect(), SforceService)

        If Me.UseCache Then
            m_cache = New Hashtable()
        End If

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Dim colsCount As Integer = input.InputColumnCollection.Count

        ' Setup key index and where list.
        m_keyIdx = New Integer(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim inputCol As IDTSInputColumn100 = input.InputColumnCollection(colIndex)

            ' Set key index.
            m_keyIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                inputCol.LineageID)

            ' Set where list.
            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                inputCol.ExternalMetadataColumnID)

            If Not String.IsNullOrEmpty(m_whereTemplate_P) Then
                m_whereTemplate_P += " AND "
            End If

            m_whereTemplate_P += String.Format( _
                "{0} = {1}", _
                extCol.Name, _
                "{" + colIndex.ToString() + "}")
        Next

        Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
        colsCount = output.OutputColumnCollection.Count

        ' Setup value index and field list.
        m_valueIdx = New Integer(colsCount - 1) {}
        m_valueType = New DataType(colsCount - 1) {}
        Dim fieldList As String = String.Empty
        For colIndex As Integer = 0 To colsCount - 1
            Dim outputCol As IDTSOutputColumn100 = output.OutputColumnCollection(colIndex)

            ' Set value index and type.
            m_valueIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                outputCol.LineageID)
            m_valueType(colIndex) = outputCol.DataType

            ' Set field list.
            If Not String.IsNullOrEmpty(fieldList) Then
                fieldList += ", "
            End If

            fieldList += outputCol.Name
        Next

        ' Setup query template.
        m_queryTemplate_1P = String.Format( _
            QueryTemplate_3P, _
            fieldList, _
            Me.SalesforceObject, _
            "{0}")
    End Sub ' PreExecute


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

        Call m_connection.Close()
    End Sub ' PostExecute


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

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

            If String.IsNullOrEmpty(Me.SalesforceObject) Then
                Throw New ApplicationException("Select object.")
            End If

            If String.IsNullOrEmpty(Me.KeyField) Then
                Throw New ApplicationException("Specify key field(s).")
            End If

            If String.IsNullOrEmpty(Me.ValueField) Then
                Throw New ApplicationException("Select value field.")
            End If

            Dim keyList() As String = Me.KeyField.Split( _
                New String() {ListDelimiter}, _
                StringSplitOptions.None)

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

            Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
            If output.OutputColumnCollection.Count = 0 Then
                ' Setup collection output columns.
                Call SetupOutputColumns_()
            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 String.IsNullOrEmpty(Me.Connection) Then
            Exit Sub
        End If

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

        If String.IsNullOrEmpty(Me.KeyField) Then
            Throw New Exception("Key field(s) not selected.")
        End If

        ' Get object fields.
        Dim fieldList() As Field = GetFields_()

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

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

        ' Setup field metadata.
        Dim keyList() As String = Me.KeyField.Split( _
            New String() {ListDelimiter}, _
            StringSplitOptions.None)
        For Each key As String In keyList
            ' Find field.
            Dim field As Field = FindField_(fieldList, key)

            Dim dtsType As DataType
            Dim fieldLen, prec, scale, codePage As Integer
            Call GetDtsTypeFromField_(field, dtsType, fieldLen, prec, scale, codePage)

            ' Setup external column.
            Dim column As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.[New]()
            column.Name = field.name
            column.DataType = dtsType
            column.Length = fieldLen
            column.Precision = prec
            column.Scale = scale
            column.CodePage = codePage
        Next
    End Sub ' ReinitializeMetaData


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of objects in the currently selected Salesforce connection.
    Public Function GetObjectList() As String()
        Dim result As New ArrayList

        Dim connection As ISforceConnection = CType( _
            Me.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
            ISforceConnection)
        Dim service As SforceService = CType(connection.Connect(), SforceService)

        Try
            Dim dgr As DescribeGlobalResult = service.describeGlobal()

            For Each sobject As DescribeGlobalSObjectResult In dgr.sobjects
                If sobject.queryable Then
                    Call result.Add(sobject.name)
                End If
            Next

            Call result.Sort()
        Finally
            Call connection.Close()
        End Try

        GetObjectList = CType(result.ToArray(GetType(String)), String())
    End Function    ' GetObjectList


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of fields in the currently selected object.
    Public Function GetFieldList() As String()
        Dim result As ArrayList = New ArrayList()

        Dim fieldList() As Field = GetFields_()
        For Each field As Field In fieldList
            Call result.Add(field.name)
        Next

        Call result.Sort()

        GetFieldList = CType(result.ToArray(GetType(String)), String())
    End Function    ' GetFieldList


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select Salesforce Connection Manager.")> _
    <Connection("ConnectionType")> _
    Public Property Connection() As String
        Get
            Connection = m_sforceConnection
        End Get
        Set(ByVal value As String)
            m_sforceConnection = value
        End Set
    End Property    ' Connection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select lookup object.")> _
    <List("GetObjectList")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property SalesforceObject() As String
        Get
            SalesforceObject = m_object
        End Get
        Set(ByVal value As String)
            If m_object <> value Then
                m_object = value

                m_fields = Nothing
                Me.KeyField = String.Empty
                Me.ValueField = String.Empty
            End If
        End Set
    End Property    ' SalesforceObject


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify one or more key fields.")> _
    <List("GetFieldList", True, False)> _
    Public Property KeyField() As String
        Get
            KeyField = m_keyField
        End Get
        Set(ByVal value As String)
            If m_keyField <> value Then
                If Not String.IsNullOrEmpty(m_keyField) Then
                    ' Force external columns to be reloaded.
                    If Me.ComponentMetaData.InputCollection.Count > 0 Then
                        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
                        Call input.ExternalMetadataColumnCollection.RemoveAll()
                    End If
                End If

                m_keyField = value
            End If
        End Set
    End Property    ' KeyField


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify one or more lookup fields.")> _
    <List("GetFieldList", True, False)> _
    Public Property ValueField() As String
        Get
            ValueField = m_valueField
        End Get
        Set(ByVal value As String)
            If m_valueField <> value Then
                If Not String.IsNullOrEmpty(m_valueField) Then
                    ' Force output columns to be reloaded.
                    If Me.ComponentMetaData.OutputCollection.Count > 0 Then
                        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)
                        Call output.OutputColumnCollection.RemoveAll()
                    End If
                End If

                m_valueField = value
            End If
        End Set
    End Property    ' ValueField


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select whether memory cache is used.")> _
    <DefaultValue(True)> _
    Public Property UseCache() As Boolean
        Get
            UseCache = m_useCache
        End Get
        Set(ByVal value As Boolean)
            m_useCache = value
        End Set
    End Property    ' UseCache
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property ConnectionType() As String()
        Get
            ConnectionType = New String() {"SFORCE"}
        End Get
    End Property    ' ConnectionType


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function FindField_( _
        ByVal fieldList() As Field, _
        ByVal name As String) As Field

        Dim result As Field = Nothing

        For Each field As Field In fieldList
            If field.name.Equals(name, StringComparison.OrdinalIgnoreCase) Then
                ' Found.
                result = field
                Exit For
            End If
        Next

        If result Is Nothing Then
            Throw New Exception(String.Format("'{0}' field not found.", name))
        End If

        FindField_ = result
    End Function    ' FindField_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Setups cache key based on specified key attributes.
    Private Function GetCacheKey_(ByVal row As InputBuffer) As String
        Dim result As String = String.Empty

        For Each idx As Integer In m_keyIdx
            Dim key As String = String.Empty
            If Not row.Buffer.IsNull(idx) Then
                key = row.Buffer(idx).ToString() + "_"
            End If

            result += key
        Next

        GetCacheKey_ = result
    End Function    ' GetCacheKey_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Uses SOQL to retrieve required lookup row.
    Private Function GetLookupRow_(ByVal row As InputBuffer) As String()
        Dim result() As String = Nothing

        ' Setup fetch conditions.
        Dim colsCount As Integer = m_keyIdx.Length
        Dim whereList() As Object = New Object(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim keyIndex As Integer = m_keyIdx(colIndex)

            Dim key As String = String.Empty

            If row.Buffer.IsNull(keyIndex) Then
                key = "NULL"
            Else
                Dim keyObj As Object = row.Buffer(keyIndex)
                If TypeOf keyObj Is String Then
                    key = String.Format("'{0}'", keyObj)
                Else
                    key = keyObj.ToString()
                End If
            End If

            whereList(colIndex) = key
        Next

        ' Query data.
        Dim record As sObject = Nothing
        Dim query As String = String.Format( _
            m_queryTemplate_1P, _
            String.Format(m_whereTemplate_P, whereList))
        Try
            Dim qr As QueryResult = m_service.query(query)
            If Not qr.records Is Nothing AndAlso qr.records.Length > 0 Then
                record = qr.records(0)
            End If
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try

        If Not record Is Nothing Then
            Dim fieldsCount As Integer = m_valueIdx.Length
            result = New String(fieldsCount - 1) {}
            For fieldIndex As Integer = 0 To fieldsCount - 1
                Dim fieldNode As XmlElement = record.Any(fieldIndex)
                result(fieldIndex) = fieldNode.InnerText
            Next
        End If

        GetLookupRow_ = result
    End Function    ' GetLookupRow_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetFields_() As Field()
        Dim result() As Field = m_fields

        If result Is Nothing Then
            Dim connection As ISforceConnection = CType( _
                Me.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
                ISforceConnection)
            Dim service As SforceService = CType(connection.Connect(), SforceService)

            Try
                result = service.describeSObject(Me.SalesforceObject).fields
            Finally
                Call connection.Close()
            End Try

            m_fields = result
        End If

        GetFields_ = result
    End Function    ' GetFields_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub SetupOutputColumns_()
        ' Get entity attributes.
        Dim fieldList() As Field = GetFields_()

        Dim valueList() As String = Me.ValueField.Split( _
            New String() {ListDelimiter}, _
            StringSplitOptions.None)

        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)

        For Each value As String In valueList
            ' Find Salesforce field.
            Dim field As Field = FindField_(fieldList, value)

            Dim dtsType As DataType
            Dim fieldLen, prec, scale, codePage As Integer
            Call GetDtsTypeFromField_(field, dtsType, fieldLen, prec, scale, codePage)

            ' Setup output column.
            Dim column As IDTSOutputColumn100 = output.OutputColumnCollection.[New]()
            column.Name = field.name
            Call column.SetDataTypeProperties( _
                dtsType, _
                fieldLen, _
                prec, _
                scale, _
                codePage)
        Next
    End Sub ' SetupOutputColumns_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub GetDtsTypeFromField_( _
        ByVal field As Field, _
        ByRef DtsType As DataType, _
        ByRef fieldLen As Integer, _
        ByRef Precision As Integer, _
        ByRef Scale As Integer, _
        ByRef CodePage As Integer)

        fieldLen = field.length
        Precision = field.precision
        Scale = field.scale
        CodePage = 0

        Select Case field.soapType
            Case soapType.tnsID
                DtsType = DataType.DT_WSTR
            Case soapType.xsdbase64Binary
                DtsType = DataType.DT_IMAGE
            Case soapType.xsdboolean
                DtsType = DataType.DT_BOOL
            Case soapType.xsddouble
                DtsType = DataType.DT_NUMERIC
            Case soapType.xsdint
                DtsType = DataType.DT_BYREF_I4
            Case soapType.xsddate
                DtsType = DataType.DT_DBDATE
            Case soapType.xsddateTime
                DtsType = DataType.DT_DBTIMESTAMP
            Case soapType.xsdtime
                DtsType = DataType.DT_DBTIME
            Case soapType.xsdanyType
                DtsType = DataType.DT_WSTR

            Case soapType.xsdstring
                DtsType = DataType.DT_WSTR
                If fieldLen >= 4000 Then
                    ' DT_WSTR is limited to 4000.
                    DtsType = DataType.DT_NTEXT
                    fieldLen = 0
                End If

            Case Else
                Throw New Exception("Unhandled soap type.")
        End Select
    End Sub ' GetDtsTypeFromField_
#End Region ' Internals


#Region "Attributes"
    Private m_sforceConnection As String
    Private m_object As String
    Private m_keyField As String
    Private m_valueField As String
    Private m_useCache As Boolean

    Private m_connection As ISforceConnection
    Private m_service As SforceService
    Private m_cache As Hashtable
    Private m_queryTemplate_1P As String
    Private m_whereTemplate_P As String
    Private m_keyIdx() As Integer
    Private m_valueIdx() As Integer
    Private m_fields() As Field
    Private m_valueType() As DataType
#End Region ' Attributes

End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="6" 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_4ad745e01d2d4be9ba5d4d3a979724db.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
6AgiAGQJTwkiALEJmwkiAMoJmwkiAPcJ3wkGACEKDgoKAGAKOQoKAHgKEwAiAK0KkAoGAOIKwgoG
AAAL5gEGACQL5gEKAD0LEwAGAIELYgsGAJUL5gESAJwLxQMGAKkL5gEmAAwM4wsmADsM4wsmAGYM
4wsmAIMM4wsmAMYM4wsmAPUM4wsGAAMN5gEmAB8N4wsGAEwN5gEGAHMN5gEGAHsN5gEKAKANOQom
ALwN4wsmAPUN4wsmACsO4wsmAEkO4wsmAHYO4wsWALcOxQMmANsO4wsmACYP4wsGAL4P5gEGANMP
5gEGAIcQDwgeAJEQ1gYeAKYQ1gYqAAIB4RAqABcR4RAGAFwR5gEKAGoROQoGAIwR5gEeAKQR1gYe
AKwR1gYuAMMRuBEeAPYR1gYeAD0S1gYSAHYSxQMOAL8SnRIOANsSnRIOAPMSnRIiAAsTmwkiACET
mwkiADYTmwkiAEgTmwkiAGMTmwkOAHUTnRIOAIMTnRIGAKkTlxMGANATvxMGAOMTDgoGAEwUwgoG
AGwUwgoGAIoUlxMGAKcUYgsGALUUlxMGANAUlxMGAOsUlxMGAAQVlxMGAB0VlxMGADoVlxMAAAAA
AQAAAAAAAQABAAAAAAApADcABQABAAEAAAAAAHIANwAJAAEAAgAAARAAfQA3AA0AAQADAAUBAACH
AAAADQAFAAgABQEAAJUAAAANAAUADwABAAAAsAC8AB0ABgARAAEAAAD0ALwAKQAGABYAAQAAAAIB
vAANAAgAGgABAAAADgG8AA0ACQAcAAEAAAAYAbwAIAAKAB0AAAAAACMBLwENABoANwAAARAAdAG8
AE0AHAA7ADEACAIgADEAMQItADEAUwI6ADEAeAJHACEAVAOQAAYAAgHHAAYADgHLAAEACAXcAAEA
CAXcAFGAlgXwAFGApwXwAAEAmQfwAAEArAfwAAEAtQfwAAEAwAfwAAEAzQdwAQEA6gdzAQEABQh3
AQEALAh7AQEANAjwAAEARwjwAAEAWQh/AQEAYgh/AQEAbQiDAQEAdgiIAREA4AiVAREACQmZAREA
fAm3AREAhAm7AQghAAAAAAYYuQETAAEAECEAAAAABhi5ARMAAQAYIQAAAAARGPQBFwABAEQhAAAA
ABMI+wEbAAEAXCEAAAAAEwghAigAAQB0IQAAAAATCEoCNQABAIwhAAAAABMIaAJCAAEApCEAAAAA
RgKuAmMAAQDAIQAAAABGArcCaAACANQhAAAAAIMAyAJsAAIA7CEAAAAARgLQAnEAAgAAIgAAAAAR
ANkCeAACABwiAAAAAAEA9wKAAAMAOCIAAAAABhi5ARMABABAIgAAAAADCAsDiwAEAHQiAAAAAAYY
uQETAAQAiCIAAAAABhi5Aa8ABACYIgAAAABGCkgEuQAIAKwiAAAAAEYKXwS5AAgAwCIAAAAAhgB3
BL4ACADYIgAAAACGAH8EvgAIAPAiAAAAAAYYuQETAAgAECMAAAAARgLGBM8ACABAIwAAAABGA9sE
1gAKAFQjAAAAAEYD7gTWAAsAWCMAAAAABhi5AeAADABoIwAAAAAGCHwF5gANAJQjAAAAAAYYuQHg
AA0ApCMAAAAABhi5ARMADgCsIwAAAABGAu4E1gAOAEQlAAAAAEYCtQUTAA8AfCcAAAAARgLABRMA
DwCQJwAAAAAGAMwFMwEPAOQoAAAAAEYC4AUTABAAHCoAAAAABgD1BbkAEADQKgAAAAAGAAMGuQAQ
ADArAAAAAAYIfAVxABAASCsAAAAABggQBjkBEABUKwAAAAAGCCUGcQARAGwrAAAAAAYIOgY5AREA
pCsAAAAABghPBnEAEgC8KwAAAAAGCFwGOQESACQsAAAAAAYIaQZxABMAPCwAAAAABgh4BjkBEwCk
LAAAAAAGCIcGvgAUALwsAAAAAAYIlAY+ARQAyCwAAAAAAQihBrkAFQDoLAAAAAABALQGOQEVABQt
AAAAAAEA8wZDARYAZC0AAAAAAQANB0wBGADULQAAAAABAB4HUgEZAEAvAAAAAAEALAdZARoAuC8A
AAAAAQA3BxMAGgBoMAAAAAABAFQHXwEaAEAxAAAAAAMYuQETACAASDEAAAAAFggVCZ0BIACEMQAA
AAAWCCkJogEgAJgxAAAAABYINQmnASAAoDEAAAAAERj0ARcAIQC0MQAAAAAGGLkBEwAhALwxAAAA
ABYIkQm+ASEAAAABALUCAAABAO4CAAABAO4CAAABACYEAAACADAEAAADADkEAAAEAEEEAAABANME
AAACAEEEAAABAEEEAAABAAQFAAABACYEAAABACYEAAABAAQFAAABANUFAAABAB8GAAABAB8GAAAB
AB8GAAABAB8GAAABAB8GAAABAL8GAAABAP4GAAACAAgHAAABABoHAAABABoHAAABAGkHAAACAG8H
AAADAHcHAAAEAIAHAAAFAIoHAAAGAJAHAAABAEEJCQC5ARMAoQC5AcgBsQC5AdcBEQC5ARMAuQC5
ARMAJAC5ARMALAC5ARMANAC5ARMAPAC5ARMAJAALA4sALAALA4sANAALA4sAPAALA4sAwQC5ARMA
yQC5ARMA0QC5ATkB2QDxCnACGQCuAmMAGQC3AmgAKQASC30CGQDQAnEA6QAuC40CGQC5ARMA8QC5
AZ0CRABUA5AATACRCYsATABYCxoDTAC5ARMA+QC5AT4BOQC5Aa8ACQF3BL4ACQF/BL4AEQG5AT4B
UQC5ARMAQQAlDDIDGQFSDDgDIQFzDD4DKQF8DGgAGQGmDEUDMQFzDEsDOQHfDOYAgQANDWMAgQBz
DFcDgQAWDV8DGQE3DWUDUQFzDGsDAQFSDXIDOQBgDXcDSQBrDXwDYQGEDYEDSQAWDYgDYQGPDY4D
cQGsDZQDQQHaDZsDeQFzDKEDgQEJDnEAAQESDqgDcQEZDhcAQQC1BRMAWQBcDlcDcQBuDsIDgQC5
ARMAKQGTDsYDmQGtDmgAmQFzDMwDUQDJDtMDoQHwDtkDKQFgDWgAkQECD2gAqQEQD98DKQFOD+UD
kQFzD2gAsQGQD+sDAQGeD/IDiQEJDnEAWQHQAnEAAQGeD/gDeQGtDmgAAQGlD/AAgQECD2gAgQGr
D/8DAQESDgQEQQDABRMAcQC4DxMAuQG5ATkBAQHmDyQEKQHsD74ASQG5ATkBOQH7DzkBSQETEHEA
UQDgBRMAIQGtDmgAsQEfED4BmQEqEBMAsQEqEBMAsQE0EEAEYQA4EHEAiQFBEDkBiQFKEEYEiQFX
EHwDiQFiEHwDiQFwEHwDiQF6EHwDyQG5ARMAUQABEWgE4QFzDG4E6QFcDlcDeQApEXUE0QE4EXsE
2QFFEb4A2QE4EHEAyQFTEYIEyQFXERMAyQFiEYcE+QF0EbcEUQGtDmgAeQEqEBMAGQGCEdEEAQGu
AtwEAQESDuQESQCdEfcESQBzDPwEAQESDgsFeQDOERIFEQLUERkFCQLgESAFGQLoEXEAeQAMEkYF
IQIcElkBeQE0EFoFgQFBEDkBgQEnEmAFYQBGEmgAYQBREmgAYQBfEmgAYQBpEoYFMQK5ARMAOQK5
ATkBQQK5AaAFSQK5ARMAUQK5AT4BWQK5ATkBYQK5ATkBaQK5ASYGeQK5ATkBeQK5AVsGgQK5ATkB
KQCyEwIHiQC5AQgHmQC5ARMAkQLYEyUHkQLeEyUHmQK5ARMAoQK5AXwDqQK5ARMAsQK5ATkBuQK5
ATkBwQK5ATkByQK5ATkB0QK5ATkB2QK5ATkB4QK5ATkB6QK5ATkBDgAoAPMADgAsAC4BKQCDAD4C
LgADBa4HLgATBScDLgDzBCcDLgDTBC8HLgALAegFLgALBesHLgAbBa4HLgD7BI4HLgDbBDgHLgDj
BFcHLgDrBGQHLgDrACcDQAArAPUBQAATAM4BQwATAM4BQwAbAN0BSQCDACoCYwAbAN0BYwATAM4B
aQCDAE8CgAArAPUBgwBzAPUBgwAbAN0BgwB7APUBiQCDAFwCoAArAPUBowDDAKUCowATAM4BwAAr
APUBwwATAM4BwwDrACcD4AArAPUB4wALAScDAAETAM4BAAErAPUBAwELAScDIAErAPUBIAETAM4B
KQGbBMMGKQFzBNcGKQF7BBgGQAErAPUBQAETAM4BSQFzBEAGSQGDBM4BSQGLBC0GSQF7BBgGYAET
AM4BYAErAPUBYwELAScDYwFLBPUBYwFTBJIFYwFbBKYFYwFjBPUBaQGTBGIGaQF7BBgGaQFzBHYG
gAErAPUBiQFzBJsGiQGTBGIGiQF7BBgGoAErAPUBqQFzBO4FqQF7BBgGqQFrBOgFwAErAPUBwAET
AM4B4AErAPUB6QETABwHAAIrAPUBAAITAM4BCQITABwHKQLLBPUBQAMLAScDgAMLAScDFgIbAiAC
JQJ1AnkChAKJApgCmAIgAy0DLQN1AnUCUgOvAwwELgRMBI8EpgSJAokCiQK+BIkCxAR1AsoEdQLq
BAEFJwVNBWoFjAUQBxcHKgcEAAEABgAFAAcABgAJAAgACwAJAAwADwANABEAAADdAU8AAACWAlQA
AABFAlkAAACiAl4AAABeA5gAAACLBMIAAACeBMIAAACLBesAAACLBY0BAACCCI0BAACTCI0BAACc
CI0BAACnCJEBAACwCMIAAADQCK0BAABHCbIBAABBCcMBAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkA
AgAPAAsAAgASAA0AAgATAA8AAgAbABEAAgAlABMAAQAmABMAAQAoABUAAgAnABUAAQAqABcAAgAp
ABcAAgArABkAAQAsABkAAgAtABsAAQAuABsAAgAvAB0AAgA4AB8AAgA5ACEAAQA6ACEAAgA9ACMA
dQB1AIgA+gEBAggCDwIHAw4DXAMEgAAAAQAAAAAAAAAAAAAAAAC8AAAAAgAAAAAAAAAAAAAAAQAK
AAAAAAAIAAAAAAAAAAAAAAAKABMAAAAAAAEAAAAAAAAAAAAAAJ0AagMAAAAACgAAAAAAAAAAAAAA
pgCoAwAAAAAKAAAAAAAAAAAAAACmAPYDAAAAAAoAAAAAAAAAAAAAAKYAGAUAAAAAAQAAAAAAAAAA
AAAAnQDHBgAAAAACAAAAAAAAAAAAAAABAOYBAAAAAAoAAAAAAAAAAAAAAKYAvwsAAAAACgAAAAAA
AAAAAAAApgDCEAAAAAACAAAAAAAAAAAAAAABALgRAAAAAAAAAAABAAAAABQAAAUABAAGAAQAAAAQ
AAwA7AIAABAAGQDsAgAAAAAbAOwCLQCTAi0AFQMAAAA8TW9kdWxlPgBtc2NvcmxpYgBNaWNyb3Nv
ZnQuVmlzdWFsQmFzaWMATXlBcHBsaWNhdGlvbgBTY3JpcHRDb21wb25lbnRfNGFkNzQ1ZTAxZDJk
NGJlOWJhNWQ0ZDNhOTc5NzI0ZGIudmJwcm9qLk15AE15Q29tcHV0ZXIATXlQcm9qZWN0AE15V2Vi
U2VydmljZXMAVGhyZWFkU2FmZU9iamVjdFByb3ZpZGVyYDEASW5wdXRCdWZmZXIAU2NyaXB0Q29t
cG9uZW50XzRhZDc0NWUwMWQyZDRiZTliYTVkNGQzYTk3OTcyNGRiLnZicHJvagBVc2VyQ29tcG9u
ZW50AENvbm5lY3Rpb25zAFZhcmlhYmxlcwBTY3JpcHRNYWluAE15UmVzb3VyY2VzAFNjcmlwdENv
bXBvbmVudF80YWQ3NDVlMDFkMmQ0YmU5YmE1ZDRkM2E5Nzk3MjRkYi52YnByb2ouTXkuUmVzb3Vy
Y2VzAE15U2V0dGluZ3MATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMA
QXBwbGljYXRpb25CYXNlAC5jdG9yAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1
dGVyAFN5c3RlbQBPYmplY3QALmNjdG9yAGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0UHJv
dmlkZXIAZ2V0X0FwcGxpY2F0aW9uAG1fQXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNlcgBt
X1VzZXJPYmplY3RQcm92aWRlcgBnZXRfV2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2VzT2JqZWN0
UHJvdmlkZXIAQXBwbGljYXRpb24AV2ViU2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENvZGUAVHlw
ZQBHZXRUeXBlAFRvU3RyaW5nAENyZWF0ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERpc3Bvc2Vf
X0luc3RhbmNlX18AZ2V0X0dldEluc3RhbmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZp
Y2VzLkludGVybmFsAENvbnRleHRWYWx1ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBDb3p5Um9j
LlNTSVNQbHVzLjIwMDgAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUwBTY3JpcHRCdWZmZXJQbHVzAE1p
Y3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxp
bmUAU2NyaXB0Q29tcG9uZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuUGlwZWxpbmVIb3N0AFBpcGVs
aW5lQnVmZmVyAENvbXBvbmVudABPYmplY3RJRABJc0lucHV0AEJ1ZmZlcgBnZXRfU3RhdGljSW5w
dXRDb2x1bW5zAGdldF9TdGF0aWNPdXRwdXRDb2x1bW5zAE5leHRSb3cARW5kT2ZSb3dzZXQAU3Rh
dGljSW5wdXRDb2x1bW5zAFN0YXRpY091dHB1dENvbHVtbnMAU2NyaXB0Q29tcG9uZW50UGx1cwBQ
cm9jZXNzSW5wdXQASW5wdXRJRABJbnB1dF9Qcm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vzc0lucHV0
Um93AFJvdwBQYXJlbnRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNSdW50aW1lV3Jh
cABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lLldyYXBwZXIASURUU0Nvbm5lY3Rpb25N
YW5hZ2VyMTAwAGdldF9Db25uZWN0aW9uAENvbm5lY3Rpb24AUXVlcnlUZW1wbGF0ZV8zUABMaXN0
RGVsaW1pdGVyAFByZUV4ZWN1dGUAUG9zdEV4ZWN1dGUAVmFsaWRhdGUAZXJyTWVzc2FnZQBSZWlu
aXRpYWxpemVNZXRhRGF0YQBHZXRPYmplY3RMaXN0AEdldEZpZWxkTGlzdABzZXRfQ29ubmVjdGlv
bgB2YWx1ZQBnZXRfU2FsZXNmb3JjZU9iamVjdABzZXRfU2FsZXNmb3JjZU9iamVjdABnZXRfS2V5
RmllbGQAc2V0X0tleUZpZWxkAGdldF9WYWx1ZUZpZWxkAHNldF9WYWx1ZUZpZWxkAGdldF9Vc2VD
YWNoZQBzZXRfVXNlQ2FjaGUAZ2V0X0Nvbm5lY3Rpb25UeXBlAEZpcmVFcnJvcl8AbWVzc2FnZQBD
b3p5Um9jLlNmb3JjZQBDb3p5Um9jLlNmb3JjZS5TZXJ2aWNlAEZpZWxkAEZpbmRGaWVsZF8AZmll
bGRMaXN0AG5hbWUAR2V0Q2FjaGVLZXlfAHJvdwBHZXRMb29rdXBSb3dfAEdldEZpZWxkc18AU2V0
dXBPdXRwdXRDb2x1bW5zXwBEYXRhVHlwZQBHZXREdHNUeXBlRnJvbUZpZWxkXwBmaWVsZABEdHNU
eXBlAGZpZWxkTGVuAFByZWNpc2lvbgBTY2FsZQBDb2RlUGFnZQBtX3Nmb3JjZUNvbm5lY3Rpb24A
bV9vYmplY3QAbV9rZXlGaWVsZABtX3ZhbHVlRmllbGQAbV91c2VDYWNoZQBJU2ZvcmNlQ29ubmVj
dGlvbgBtX2Nvbm5lY3Rpb24AU2ZvcmNlU2VydmljZQBtX3NlcnZpY2UAU3lzdGVtLkNvbGxlY3Rp
b25zAEhhc2h0YWJsZQBtX2NhY2hlAG1fcXVlcnlUZW1wbGF0ZV8xUABtX3doZXJlVGVtcGxhdGVf
UABtX2tleUlkeABtX3ZhbHVlSWR4AG1fZmllbGRzAG1fdmFsdWVUeXBlAFNhbGVzZm9yY2VPYmpl
Y3QAS2V5RmllbGQAVmFsdWVGaWVsZABVc2VDYWNoZQBDb25uZWN0aW9uVHlwZQBTeXN0ZW0uUmVz
b3VyY2VzAFJlc291cmNlTWFuYWdlcgBfcmVzTWdyAFN5c3RlbS5HbG9iYWxpemF0aW9uAEN1bHR1
cmVJbmZvAF9yZXNDdWx0dXJlAGdldF9SZXNvdXJjZU1hbmFnZXIAZ2V0X0N1bHR1cmUAc2V0X0N1
bHR1cmUAVmFsdWUAQ3VsdHVyZQBTeXN0ZW0uQ29uZmlndXJhdGlvbgBBcHBsaWNhdGlvblNldHRp
bmdzQmFzZQBtX1ZhbHVlAG1fU3luY09iamVjdABnZXRfVmFsdWUAU3lzdGVtLkNvbXBvbmVudE1v
ZGVsAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVTdGF0ZQBTeXN0ZW0u
Q29kZURvbS5Db21waWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRlAFN5c3RlbS5EaWFnbm9zdGlj
cwBEZWJ1Z2dlckhpZGRlbkF0dHJpYnV0ZQBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQ29tcGlsZXJT
ZXJ2aWNlcwBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxlTmFtZUF0dHJpYnV0ZQBT
eXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAEhlbHBLZXl3b3JkQXR0cmlidXRlAFN5c3RlbS5S
dW50aW1lLkNvbXBpbGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMAR2V0T2JqZWN0VmFsdWUAUnVu
dGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAQWN0aXZhdG9yAENyZWF0ZUluc3RhbmNl
AE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRlAHNldF9WYWx1ZQBTeXN0ZW0uUnVudGltZS5JbnRl
cm9wU2VydmljZXMAQ29tVmlzaWJsZUF0dHJpYnV0ZQBTdHJpbmcAU2NyaXB0QnVmZmVyAENMU0Nv
bXBsaWFudEF0dHJpYnV0ZQBNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1BpcGVsaW5lV3JhcABNaWNy
b3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZS5XcmFwcGVyAElEVFNDb21wb25lbnRNZXRhRGF0
YTEwMABnZXRfQ29tcG9uZW50TWV0YURhdGEASURUU0lucHV0Q29sbGVjdGlvbjEwMABnZXRfSW5w
dXRDb2xsZWN0aW9uAElEVFNJbnB1dDEwMABnZXRfSXRlbQBnZXRfSUQASURUU1J1bnRpbWVDb25u
ZWN0aW9uQ29sbGVjdGlvbjEwMABnZXRfUnVudGltZUNvbm5lY3Rpb25Db2xsZWN0aW9uAElEVFNS
dW50aW1lQ29ubmVjdGlvbjEwMABnZXRfQ29ubmVjdGlvbk1hbmFnZXIASURUU091dHB1dDEwMABF
eGNlcHRpb24AQ29udGFpbnMAc2V0X0l0ZW0ASURUU091dHB1dENvbGxlY3Rpb24xMDAAZ2V0X091
dHB1dENvbGxlY3Rpb24ASW50MzIASXNOdWxsT3JFbXB0eQBnZXRfQnVmZmVyAFNldE51bGwAQ29u
dmVydABEYXRlVGltZQBUb0RhdGVUaW1lAEZyb21CYXNlNjRTdHJpbmcAUHJvamVjdERhdGEAU2V0
UHJvamVjdEVycm9yAElEVFNPdXRwdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9PdXRwdXRDb2x1
bW5Db2xsZWN0aW9uAElEVFNPdXRwdXRDb2x1bW4xMDAAZ2V0X05hbWUARm9ybWF0AENsZWFyUHJv
amVjdEVycm9yAElEVFNFeHRlcm5hbE1ldGFkYXRhQ29sdW1uMTAwAElEVFNJbnB1dENvbHVtbjEw
MABBY3F1aXJlQ29ubmVjdGlvbgBDb25uZWN0AElEVFNJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAA
Z2V0X0lucHV0Q29sdW1uQ29sbGVjdGlvbgBnZXRfQ291bnQAUGlwZWxpbmVDb21wb25lbnQAZ2V0
X0hvc3RDb21wb25lbnQASURUU0J1ZmZlck1hbmFnZXIxMDAAZ2V0X0J1ZmZlck1hbmFnZXIAZ2V0
X0xpbmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1
bW5Db2xsZWN0aW9uMTAwAGdldF9FeHRlcm5hbE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbgBnZXRf
RXh0ZXJuYWxNZXRhZGF0YUNvbHVtbklEAEdldE9iamVjdEJ5SUQAQ29uY2F0AEVtcHR5AGdldF9E
YXRhVHlwZQBDbG9zZQBBcHBsaWNhdGlvbkV4Y2VwdGlvbgBTdHJpbmdTcGxpdE9wdGlvbnMAU3Bs
aXQAZ2V0X0lzQXR0YWNoZWQAc2V0X0Nvbm5lY3Rpb25NYW5hZ2VySUQAZ2V0X01lc3NhZ2UAc2V0
X0lzVXNlZABSZW1vdmVBbGwATmV3AGdldF9uYW1lAHNldF9OYW1lAHNldF9EYXRhVHlwZQBzZXRf
TGVuZ3RoAHNldF9QcmVjaXNpb24Ac2V0X1NjYWxlAHNldF9Db2RlUGFnZQBBcnJheUxpc3QARGVz
Y3JpYmVHbG9iYWxSZXN1bHQARGVzY3JpYmVHbG9iYWxTT2JqZWN0UmVzdWx0AE1pY3Jvc29mdC5T
cWxTZXJ2ZXIuTWFuYWdlZERUUwBNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lAGdldF9E
ZXNpZ25Db25uZWN0aW9ucwBDb25uZWN0aW9uTWFuYWdlcgBkZXNjcmliZUdsb2JhbABnZXRfc29i
amVjdHMAZ2V0X3F1ZXJ5YWJsZQBBZGQAU29ydABBcnJheQBUb0FycmF5AE9wZXJhdG9ycwBDb21w
YXJlU3RyaW5nAEZpcmVFcnJvcgBTdHJpbmdDb21wYXJpc29uAElzTnVsbABzT2JqZWN0AFF1ZXJ5
UmVzdWx0AFN5c3RlbS5YbWwAWG1sRWxlbWVudABxdWVyeQBnZXRfcmVjb3JkcwBnZXRfQW55AGdl
dF9Jbm5lclRleHQARGVzY3JpYmVTT2JqZWN0UmVzdWx0AGRlc2NyaWJlU09iamVjdABnZXRfZmll
bGRzAFNldERhdGFUeXBlUHJvcGVydGllcwBzb2FwVHlwZQBnZXRfbGVuZ3RoAGdldF9wcmVjaXNp
b24AZ2V0X3NjYWxlAGdldF9zb2FwVHlwZQBTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0
dHJpYnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAVmFsaWRhdGVQcm9wZXJ0
aWVzQXR0cmlidXRlAFNvcnRQcm9wZXJ0aWVzQXR0cmlidXRlAENvbHVtbk1hcHBpbmdzQXR0cmli
dXRlAERlZmF1bHRWYWx1ZUF0dHJpYnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0ZQBDYXRlZ29yeUF0
dHJpYnV0ZQBSZWZyZXNoUHJvcGVydGllc0F0dHJpYnV0ZQBSZWZyZXNoUHJvcGVydGllcwBMaXN0
QXR0cmlidXRlAENvbm5lY3Rpb25BdHRyaWJ1dGUAU3lzdGVtLlJlZmxlY3Rpb24AQXNzZW1ibHkA
Z2V0X0Fzc2VtYmx5AFN5c3RlbS5UaHJlYWRpbmcATW9uaXRvcgBFbnRlcgBFeGl0AERlYnVnZ2Vy
Tm9uVXNlckNvZGVBdHRyaWJ1dGUAU2NyaXB0Q29tcG9uZW50XzRhZDc0NWUwMWQyZDRiZTliYTVk
NGQzYTk3OTcyNGRiLnZicHJvai5SZXNvdXJjZXMucmVzb3VyY2VzAENvbXBpbGF0aW9uUmVsYXhh
dGlvbnNBdHRyaWJ1dGUAUnVudGltZUNvbXBhdGliaWxpdHlBdHRyaWJ1dGUAQXNzZW1ibHlGaWxl
VmVyc2lvbkF0dHJpYnV0ZQBHdWlkQXR0cmlidXRlAEFzc2VtYmx5VHJhZGVtYXJrQXR0cmlidXRl
AEFzc2VtYmx5Q29weXJpZ2h0QXR0cmlidXRlAEFzc2VtYmx5UHJvZHVjdEF0dHJpYnV0ZQBBc3Nl
bWJseUNvbXBhbnlBdHRyaWJ1dGUAQXNzZW1ibHlEZXNjcmlwdGlvbkF0dHJpYnV0ZQBBc3NlbWJs
eVRpdGxlQXR0cmlidXRlAFNjcmlwdENvbXBvbmVudF80YWQ3NDVlMDFkMmQ0YmU5YmE1ZDRkM2E5
Nzk3MjRkYi52YnByb2ouZGxsAAAAAAALSQBuAHAAdQB0AAAVQwBvAG4AbgBlAGMAdABpAG8AbgAA
U0YAYQBpAGwAZQBkACAAdABvACAAcAByAG8AYwBlAHMAcwAgACcAewAwAH0AJwAgAGYAbwByACAA
YwBvAGwAdQBtAG4AIAAnAHsAMQB9ACcALgABCyAAQQBOAEQAIAAAE3sAMAB9ACAAPQAgAHsAMQB9
AAADewAAA30AAAUsACAAADtzAGUAbABlAGMAdAAgAHsAMAB9ACAAZgByAG8AbQAgAHsAMQB9ACAA
dwBoAGUAcgBlACAAewAyAH0AAAd7ADAAfQAAO1MAZQBsAGUAYwB0ACAAUwBhAGwAZQBzAGYAbwBy
AGMAZQAgAGMAbwBuAG4AZQBjAHQAaQBvAG4ALgAAHVMAZQBsAGUAYwB0ACAAbwBiAGoAZQBjAHQA
LgAAK1MAcABlAGMAaQBmAHkAIABrAGUAeQAgAGYAaQBlAGwAZAAoAHMAKQAuAAAnUwBlAGwAZQBj
AHQAIAB2AGEAbAB1AGUAIABmAGkAZQBsAGQALgAABSwACgAAJU0AYQBwACAAaQBuAHAAdQB0ACAA
YwBvAGwAdQBtAG4AcwAuAAAVTgBvACAAaQBuAHAAdQB0AHMALgAANUsAZQB5ACAAZgBpAGUAbABk
ACgAcwApACAAbgBvAHQAIABzAGUAbABlAGMAdABlAGQALgAADVMARgBPAFIAQwBFAAAjUwBhAGwA
ZQBzAGYAbwByAGMAZQAgAEwAbwBvAGsAdQBwAAAtJwB7ADAAfQAnACAAZgBpAGUAbABkACAAbgBv
AHQAIABmAG8AdQBuAGQALgABA18AAAlOAFUATABMAAALJwB7ADAAfQAnAAEpVQBuAGgAYQBuAGQA
bABlAGQAIABzAG8AYQBwACAAdAB5AHAAZQAuAAAxTQB5AC4AUgBlAHMAbwB1AHIAYwBlAHMALgBN
AHkAUgBlAHMAbwB1AHIAYwBlAHMAAAAAAAkxht8Dvq1OrLl8UW4QZdoACLd6XFYZNOCJCLA/X38R
1Qo6AyAAAQMAAAEEAAASDAcGFRIYARIMBAAAEggHBhUSGAESCAQAABIRBwYVEhgBEhEEAAASFAcG
FRIYARIUBAgAEgwECAASCAQIABIRBAgAEhQEIAECHAMgAAgEIAASFQMgAA4CHgAHEAEBHgAeAAcw
AQEBEB4AAhMABCAAEwAHBhUSGQETAAQoABMACBbPSQu4DDTqCImEXc2AgMyRCSAEARIhCAISJQQg
AB0OAyAAAgQoAB0OAwYSJAMGEigGIAIBCBIlBSABARIcAwYSIQUgAQESIQQgABItBCgAEi0CBg46
cwBlAGwAZQBjAHQAIAB7ADAAfQAgAGYAcgBvAG0AIAB7ADEAfQAgAHcAaABlAHIAZQAgAHsAMgB9
AAQsAAoABSABAhAOBCABAQ4EIAEBAgggAhIxHRIxDgUgAQ4SHAYgAR0OEhwFIAAdEjEQIAYBEjEQ
ETUQCBAIEAgQCAIGAgMGEjkDBhI9AwYSQQMGHQgEBh0SMQQGHRE1AygADgMoAAIDBhJFAwYSSQQA
ABJFBAAAEkkFAAEBEkkECAASRQQIABJJAwYSNAIGHAQAABI0BAgAEjQFIAEBEVUIAQABAAAAAAAF
IAIBDg4XAQAKTXlUZW1wbGF0ZQc4LjAuMC4wAAAEAQAAAAYVEhgBEgwGFRIYARIIBhUSGAESEQYV
EhgBEhQEBwESDAQHARIIBAcBEhEEBwESFBMBAA5NeS5BcHBsaWNhdGlvbgAAEAEAC015LkNvbXB1
dGVyAAAMAQAHTXkuVXNlcgAAEwEADk15LldlYlNlcnZpY2VzAAAEAAEcHAMHAQIDBwEIBgABEhUR
cQQHARIVAwcBDgUQAQAeAAQKAR4ABAcBHgAHIAQBDg4ODmEBADRTeXN0ZW0uV2ViLlNlcnZpY2Vz
LlByb3RvY29scy5Tb2FwSHR0cENsaWVudFByb3RvY29sEkNyZWF0ZV9fSW5zdGFuY2VfXxNEaXNw
b3NlX19JbnN0YW5jZV9fAAAABhUSGAETAAYVEhkBEwAECgETAAUgAQETAAYHAhMAEwAFAQAAAAAE
BwEdDgUgABKAjQUgABKAkQYgARKAlRwFIAASgJkGIAESgJ0cBAcBEi0EIAEcHAIdDgUgAgEcHAUg
ABKAqQYgARKAoRwEAAECDgQgABIlBCABAQgGAAERgLUOBSACAQgcBQABHQUOBgABARKApQUgABKA
vQYgARKAwRwGAAMODhwcEgcKHQ4OCBKAoQgOCBKApQgRNQMgABwFIAASgM0GIAESgMkcBSAAEoDR
BSAAEoDVBSACCAgIBSAAEoDZBiABEoDFCAUAAg4ODgYAAw4ODg4EIAARNQcABA4OHBwcFwcLCA4S
gJUSgKEIEoDFEoDJCBKAwQgICSACHQ4dDhGA4REHBwICEoCVHQ4SgKESgKUdDgUgABKAxQUgAQER
NRsHDh0SMRKAlR0OCBKAxRE1EjEIDggIHQ4IHQ4FIAASgPEGIAESgPUcBSAAEoDpBiAAHRKA7QQg
AQgcByABEoD5EhUWBwgSOR0OEoDlEj0SgOkSgO0IHRKA7RAHBh0SMR0OEoDlEjEIHRIxBgADCA4O
AgUHARKAlQUHARKAoQYHAh0OHQ4KIAYBCA4ODggQAgcgAgIOEYEBBQACDg4cDAcFEjESMRIxCB0S
MQQgAQIIBCABHAgJBwYODggOCB0IBgACDg4dHAYgARKBCQ4GIAAdEoEFBiAAHRKBDR4HEQgdDg4S
gQUdDh0cCA4IHBKBCRKApQgIEoENCAgGIAESgREODAcEHRIxHRIxEjkSPQUgABKAwQkgBQERNQgI
CAgbBw4dEjESgKEdDggSgMERNRIxCAgIDh0OCB0OBSAAEYEVBQcBEYEVDQEACFZhbGlkYXRlAAAF
IAEBHQ5BAQAFAAAACkNvbm5lY3Rpb24QU2FsZXNmb3JjZU9iamVjdAhLZXlGaWVsZApWYWx1ZUZp
ZWxkCFVzZUNhY2hlAAAFAQABAAApAQAkU2VsZWN0IHdoZXRoZXIgbWVtb3J5IGNhY2hlIGlzIHVz
ZWQuAAANAQAIU2V0dGluZ3MAAAYgAQERgTkSAQANR2V0T2JqZWN0TGlzdAAAGgEAFVNlbGVjdCBs
b29rdXAgb2JqZWN0LgAABiADAQ4CAhMBAAxHZXRGaWVsZExpc3QBAAAAJAEAH1NwZWNpZnkgb25l
IG9yIG1vcmUga2V5IGZpZWxkcy4AACcBACJTcGVjaWZ5IG9uZSBvciBtb3JlIGxvb2t1cCBmaWVs
ZHMuAAATAQAOQ29ubmVjdGlvblR5cGUAACoBACVTZWxlY3QgU2FsZXNmb3JjZSBDb25uZWN0aW9u
IE1hbmFnZXIuAAAFIAASgUUHIAIBDhKBRQYHAhJFEkUEBwESSQgBAAIAAAAAAAQAAQEcBAcBEjQI
AQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBDAEABzEuMC4wLjAAACkBACQw
ODk0ZjE5Yi05ZGI1LTQzY2ItOTc3Yy1jNTcxMzgzODk4NDEAAB8BABpDb3B5cmlnaHQgQCBNaWNy
b3NvZnQgMjAxMwAAPAEAN1NjcmlwdENvbXBvbmVudF80YWQ3NDVlMDFkMmQ0YmU5YmE1ZDRkM2E5
Nzk3MjRkYi52YnByb2oAAA4BAAlNaWNyb3NvZnQAAAAAiGMAAAAAAAAAAAAAnmMAAAAgAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAJBjAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAAAAAA/yUA
IEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwADAAAAKAAAgA4AAABIAACAEAAA
AGAAAIAAAAAAAAAAAAAAAAAAAAIAAgAAAHgAAIADAAAAkAAAgAAAAAAAAAAAAAAAAAAAAQAAfwAA
qAAAgAAAAAAAAAAAAAAAAAAAAQABAAAAwAAAgAAAAAAAAAAAAAAAAAAAAQAAAAAA2AAAAAAAAAAA
AAAAAAAAAAAAAQAAAAAA6AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA+AAAAAAAAAAAAAAAAAAAAAAA
AQAAAAAACAEAAICFAADoAgAAAAAAAAAAAABoiAAAKAEAAAAAAAAAAAAAkIkAACIAAAAAAAAAAAAA
ABiBAABoBAAAAAAAAAAAAABoBDQAAABWAFMAXwBWAEUAUgBTAEkATwBOAF8ASQBOAEYATwAAAAAA
vQTv/gAAAQAAAAEAAAAAAAAAAQAAAAAAPwAAAAAAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAEQAAAAB
AFYAYQByAEYAaQBsAGUASQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAA
AAAAALAEyAMAAAEAUwB0AHIAaQBuAGcARgBpAGwAZQBJAG4AZgBvAAAApAMAAAEAMAAwADAAMAAw
ADQAYgAwAAAANAAKAAEAQwBvAG0AcABhAG4AeQBOAGEAbQBlAAAAAABNAGkAYwByAG8AcwBvAGYA
dAAAAJgAOAABAEYAaQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAABTAGMAcgBpAHAAdABD
AG8AbQBwAG8AbgBlAG4AdABfADQAYQBkADcANAA1AGUAMAAxAGQAMgBkADQAYgBlADkAYgBhADUA
ZAA0AGQAMwBhADkANwA5ADcAMgA0AGQAYgAuAHYAYgBwAHIAbwBqAAAAMAAIAAEARgBpAGwAZQBW
AGUAcgBzAGkAbwBuAAAAAAAxAC4AMAAuADAALgAwAAAAmAA8AAEASQBuAHQAZQByAG4AYQBsAE4A
YQBtAGUAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADQAYQBkADcANAA1AGUAMAAx
AGQAMgBkADQAYgBlADkAYgBhADUAZAA0AGQAMwBhADkANwA5ADcAMgA0AGQAYgAuAHYAYgBwAHIA
bwBqAC4AZABsAGwAAABcABsAAQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAABDAG8AcAB5
AHIAaQBnAGgAdAAgAEAAIABNAGkAYwByAG8AcwBvAGYAdAAgADIAMAAxADMAAAAAAKAAPAABAE8A
cgBpAGcAaQBuAGEAbABGAGkAbABlAG4AYQBtAGUAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBl
AG4AdABfADQAYQBkADcANAA1AGUAMAAxAGQAMgBkADQAYgBlADkAYgBhADUAZAA0AGQAMwBhADkA
NwA5ADcAMgA0AGQAYgAuAHYAYgBwAHIAbwBqAC4AZABsAGwAAACQADgAAQBQAHIAbwBkAHUAYwB0
AE4AYQBtAGUAAAAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8ANABhAGQANwA0ADUA
ZQAwADEAZAAyAGQANABiAGUAOQBiAGEANQBkADQAZAAzAGEAOQA3ADkANwAyADQAZABiAC4AdgBi
AHAAcgBvAGoAAAA0AAgAAQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAxAC4AMAAuADAA
LgAwAAAAOAAIAAEAQQBzAHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBpAG8AbgAAADEALgAwAC4AMAAu
ADAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAA
AICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAd3d3d3d3d3d3d3d3d3dwBEREREREREREREREREREcAT/////////////////9HAE////////
//////////RwBP/////////////////0cAT/////////////////9HAE//////////////////Rw
BP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////////
///////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/
////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////
////9HAE//////////////////RwBP/////////////////0cASIiIiIiIiIiIiIiIiIhHAERERE
RERERERERERERERwBExMTExMTExMTE7Ozkl0cATMzMzMzMzMzMzMzMzMxAAARERERERERERERERE
REAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
/////////////8AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAA
AYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAA8AAAAf/////
//////////8oAAAAEAAAACAAAAABAAQAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAA
gAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
AAAAAAAAB3d3d3d3d3dERERERERER0////////hHT///////+EdP///////4R0////////hHT///
////+EdP///////4R0////////hHT///////+EdIiIiIiIiIR0zMzMzMzMxHxERERERERMAAAAAA
AAAAAAAAAAAAAAAA//8AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAABAAD//wAA//8AAAAAAQACACAgEAABAAQA6AIAAAIAEBAQAAEABAAoAQAAAwAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAYAAADAAAALAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAA==]]></arrayElement></arrayElements></property>
<property id="7" 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_4ad745e01d2d4be9ba5d4d3a979724db</property>
<property id="8" 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>
<property id="14" 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></properties>
<connections>
<connection id="15" name="Connection" description="" connectionManagerID="{7f5a9c16-d4a0-4beb-a40d-d15ddf499e9f}" /></connections>
<inputs>
<input id="16" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="True" /></input>
</inputs>
<outputs>
<output id="17" name="Output" description="" exclusionGroup="0" synchronousInputId="16" deleteOutputOnPathDetached="false" hasSideEffects="false" dangling="false" isErrorOut="false" isSorted="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></output>
</outputs>
</component>