<component id="89" name="Null" 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="93" 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[\scriptcomponent_6f8c63a6cfd340e996bb7f81af484e88.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_6f8c63a6cfd340e996bb7f81af484e88.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_6f8c63a6cfd340e996bb7f81af484e88.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{75913364-00BF-421A-BBF3-662D771EA390}</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[\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_6f8c63a6cfd340e996bb7f81af484e88.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_6f8c63a6cfd340e996bb7f81af484e88.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("88d350e6-d740-4088-8a8d-caa9442d71e6")> 

' 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[\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\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-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.Text.RegularExpressions
Imports System.Collections

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() { _
    "InputColumns", "Action", _
    "IsReplaceValueVariable", "ReplaceValue", "ReplaceValueVariable", _
    "IsMatchValueVariable", "MatchValue", "MatchValueVariable"})> _
<ValidateProperties("Validate")> _
<FilterProperties("GetProperties")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const ColumnSeparator As String = "," + vbLf


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Try
            Dim colsCount As Integer = m_inputIdx.Length
            For colIndex As Integer = 0 To colsCount - 1
                Dim bufIndex As Integer = m_inputIdx(colIndex)
                Dim dt As DataType = m_inputTypes(colIndex)

                ' Get input value.
                Dim inputValue As String = Nothing
                If Not Row.Buffer.IsNull(bufIndex) Then
                    Select Case dt
                        Case DataType.DT_TEXT, DataType.DT_NTEXT
                            inputValue = Row.Buffer.GetString(bufIndex).Trim()

                        Case Else
                            inputValue = Row.Buffer(bufIndex).ToString().Trim()
                    End Select
                End If

                Dim outputValue As String = inputValue
                Select Case Me.Action
                    Case ActionTypes.IsNull
                        If inputValue Is Nothing Then
                            ' NULL value. Replace with value.
                            outputValue = m_replaceValue
                        End If

                    Case ActionTypes.SetNull
                        If Not inputValue Is Nothing AndAlso _
                            m_matchValue.Contains(inputValue) Then
                            ' Value match. Replace with NULL.
                            outputValue = Nothing
                        End If
                End Select

                If outputValue = inputValue Then
                    ' No need to replace.
                    Continue For
                End If

                ' Replace value.
                If outputValue Is Nothing Then
                    Call Row.Buffer.SetNull(bufIndex)
                Else
                    Select Case dt
                        Case DataType.DT_TEXT, DataType.DT_NTEXT
                            Call Row.Buffer.SetString(bufIndex, outputValue)

                        Case DataType.DT_DATE
                            Row.Buffer(bufIndex) = Convert.ToDateTime(outputValue)

                        Case DataType.DT_GUID
                            Row.Buffer(bufIndex) = New Guid(outputValue)

                        Case Else
                            Row.Buffer(bufIndex) = outputValue
                    End Select
                End If
            Next
        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)

        ' Setup dynamic input columns indexes.
        Dim colsCount As Integer = input.InputColumnCollection.Count
        m_inputIdx = New Integer(colsCount - 1) {}
        m_inputTypes = New DataType(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim inputCol As IDTSInputColumn100 = input.InputColumnCollection(colIndex)
            m_inputIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                inputCol.LineageID)
            m_inputTypes(colIndex) = inputCol.DataType
        Next

        Dim actionValue As String = m_value
        If m_isValueVar Then
            ' Action value is contained in variable.
            actionValue = GetVariable_(actionValue).ToString()
        End If

        If Me.Action = ActionTypes.IsNull Then
            ' Setup replace value.
            m_replaceValue = Regex.Unescape(actionValue)
        Else
            ' Setup match value.
            m_matchValue = New Hashtable()
            Dim valueList() As String = CStr(actionValue).Split( _
                New String() {vbLf}, _
                StringSplitOptions.None)
            For Each matchValue As String In valueList
                If Not String.IsNullOrEmpty(matchValue) Then
                    matchValue = Regex.Unescape(matchValue)
                End If

                m_matchValue(matchValue) = Nothing
            Next
        End If
    End Sub ' PreExecute


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

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

            ' Setup input columns based on selection.
            Dim selectedCols() As String = CStr(Me.InputColumns).Split( _
                New String() {ColumnSeparator}, _
                StringSplitOptions.RemoveEmptyEntries)
            Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()

            Call input.InputColumnCollection.RemoveAll()

            For Each col As String In selectedCols
                Dim virtColumn As IDTSVirtualInputColumn100 = virtInput.VirtualInputColumnCollection(col)
                Call virtInput.SetUsageType(virtColumn.LineageID, DTSUsageType.UT_READWRITE)
            Next

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

        Validate = result
    End Function    'Validate


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

        ' Setup static.
        Call result.Add("InputColumns")
        Call result.Add("Action")

        ' Setup dynamic.
        Select Case Me.Action
            Case ActionTypes.IsNull
                Call result.Add("IsReplaceValueVariable")
                Call result.Add(IIf(Me.IsReplaceValueVariable, "ReplaceValueVariable", "ReplaceValue"))

            Case ActionTypes.SetNull
                Call result.Add("IsMatchValueVariable")
                Call result.Add(IIf(Me.IsMatchValueVariable, "MatchValueVariable", "MatchValue"))
        End Select

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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub OnInputPathAttached(ByVal inputID As Integer)
        Call MyBase.OnInputPathAttached(inputID)

        ' Initialize with all string columns selected.
        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()
        For Each column As IDTSVirtualInputColumn100 In virtInput.VirtualInputColumnCollection
            If column.DataType <> DataType.DT_STR AndAlso _
                column.DataType <> DataType.DT_WSTR AndAlso _
                column.DataType <> DataType.DT_TEXT AndAlso _
                column.DataType <> DataType.DT_NTEXT Then

                Continue For
            End If

            ' String column.
            Call virtInput.SetUsageType(column.LineageID, DTSUsageType.UT_READWRITE)
        Next
    End Sub ' OnInputPathAttached


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub OnInputPathDetached(ByVal inputID As Integer)
        MyBase.OnInputPathDetached(inputID)

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Call input.InputColumnCollection.RemoveAll()
    End Sub


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select input columns you want to process.")> _
    <InputVirtualColumn("", False)> _
    Public Property InputColumns() As String
        Get
            InputColumns = m_inputCols
        End Get
        Set(ByVal value As String)
            Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
            If input.IsAttached Then
                If String.IsNullOrEmpty(value) Then
                    ' Setup based on input columns collection.
                    value = GetInputCols_()
                End If
            Else
                ' Reset when no input is attached.
                value = String.Empty
            End If

            m_inputCols = value
        End Set
    End Property    ' InputColumns


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select action.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Action() As ActionTypes
        Get
            Action = m_action
        End Get
        Set(ByVal value As ActionTypes)
            If m_action <> value Then
                m_action = value
                m_value = String.Empty
            End If
        End Set
    End Property    ' Action


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies if ReplaceValue property references package variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    <NonEssential()> _
    Public Property IsReplaceValueVariable() As Boolean
        Get
            IsReplaceValueVariable = m_isValueVar
        End Get
        Set(ByVal value As Boolean)
            If m_isValueVar <> value Then
                m_isValueVar = value
                m_value = String.Empty
            End If
        End Set
    End Property    ' IsReplaceValueVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify replace value when input is NULL.")> _
    Public Property ReplaceValue() As String
        Get
            ReplaceValue = m_value
        End Get
        Set(ByVal value As String)
            m_value = value
        End Set
    End Property    ' ReplaceValue


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies variable containing replace value.")> _
    <Variable()> _
    Public Property ReplaceValueVariable() As String
        Get
            ReplaceValueVariable = m_value
        End Get
        Set(ByVal value As String)
            m_value = value
        End Set
    End Property    ' ReplaceValueVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies if MatchValue property references package variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    <NonEssential()> _
    Public Property IsMatchValueVariable() As Boolean
        Get
            IsMatchValueVariable = m_isValueVar
        End Get
        Set(ByVal value As Boolean)
            If m_isValueVar <> value Then
                m_isValueVar = value
                m_value = String.Empty
            End If
        End Set
    End Property    ' IsMatchValueVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify match value to replace with NULL. Multiple match values are separated with newline.")> _
    <TextDialog("Specify match value.")> _
    Public Property MatchValue() As String
        Get
            MatchValue = m_value
        End Get
        Set(ByVal value As String)
            m_value = value
        End Set
    End Property    ' MatchValue


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies variable containing match value.")> _
    <Variable()> _
    Public Property MatchValueVariable() As String
        Get
            MatchValueVariable = m_value
        End Get
        Set(ByVal value As String)
            m_value = value
        End Set
    End Property    ' MatchValueVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean
        Call Me.ComponentMetaData.FireError( _
            0, _
            "Null Transformation", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetVariable_(ByVal varName As String) As Object
        Dim result As Object
        Dim vars As IDTSVariables100 = Nothing

        Call Me.VariableDispenser.LockOneForRead(varName, vars)
        Try
            result = vars(varName).Value
        Finally
            Call vars.Unlock()
        End Try

        GetVariable_ = result
    End Function    ' GetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetInputCols_() As String
        Dim result As String = String.Empty

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        For Each column As IDTSInputColumn100 In input.InputColumnCollection
            If Not String.IsNullOrEmpty(result) Then
                result += ColumnSeparator
            End If

            result += column.Name
        Next

        GetInputCols_ = result
    End Function    ' GetInputCols_
#End Region ' Internals


#Region "Attributes"
    Public Enum ActionTypes
        IsNull
        SetNull
    End Enum    ' ActionTypes

    Private m_inputCols As String = String.Empty
    Private m_action As ActionTypes = ActionTypes.IsNull
    Private m_isValueVar As Boolean
    Private m_value As String
    Private m_inputIdx() As Integer
    Private m_inputTypes() As DataType
    Private m_replaceValue As String
    Private m_matchValue As Hashtable
#End Region ' Attributes

End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="94" 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_6f8c63a6cfd340e996bb7f81af484e88.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDABLDHVEAAAAAAAAAAOAAAiELAQgAADoAAAAMAAAAAAAAXlgA
AAAgAAAAYAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAABBYAABLAAAAAGAAALgJAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAZDgAAAAgAAAAOgAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAALgJAAAAYAAAAAoAAAA8AAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAARgAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAABA
WAAAAAAAAEgAAAACAAUAfCwAAJQrAAABAAAAAAAAAFAgAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291cmNlcy5S
ZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMuUnVudGlt
ZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAAAeAigBAAAKKh4CKAQAAAoqpnMGAAAK
gAEAAARzBwAACoACAAAEcwgAAAqAAwAABHMJAAAKgAQAAAQqAAATMAEACwAAAAEAABF+AQAABG8K
AAAKKgATMAEACwAAAAIAABF+AgAABG8LAAAKKgATMAEACwAAAAMAABF+AwAABG8MAAAKKgATMAEA
CwAAAAQAABF+BAAABG8NAAAKKgATMAIADQAAAAUAABECAygRAAAKKBIAAAoqAAAAEzABAAcAAAAG
AAARAigTAAAKKgATMAEACwAAAAcAABHQBQAAAigUAAAKKgATMAEABwAAAAgAABECKBUAAAoqABMw
AQAQAAAACQAAEQKMAQAAGy0GKAEAACsqAioTMAIAEAAAAAoAABEDEgD+FQIAABsGgQIAABsqHgIo
FwAACioTMAIAKAAAAAsAABECexkAAApvGgAACgsHjAMAABstEigCAAArCwJ7GQAACgdvGwAACgcq
SgIoFwAACgJzHAAACn0ZAAAKKgAyAgMEBQ4EKB4AAAoqAAAAEzABAAcAAAAMAAARFo0dAAABKgAT
MAEABwAAAA0AABEWjR0AAAEqABMwAQAJAAAADgAAEQIoHwAACgoGKgAAABMwAQAJAAAADwAAEQIo
IAAACgoGKgAAAH4CKCIAAAoCAnMaAAAGfQYAAAQCAnMbAAAGfQcAAAQqtgMCKCMAAApvJAAACnIB
AABwbyUAAApvJgAACjMPAgIDFwRzEQAABm8YAAAGKgAASisHAgNvGQAABgNvFAAABi3xKgAGKgAA
OgIoFwAACgIDfQgAAAQqADoCKBcAAAoCA30JAAAEKgBmAigWAAAGAn4nAAAKfQsAAAQCFn0MAAAE
KgAAGzAEAH0BAAAQAAARAnsPAAAEjrcKFgYX2hMHDDhBAQAAAnsPAAAECJQLAnsQAAAECJQNFBME
A28oAAAKB28pAAAKLUMJIC4BAABZRQIAAAACAAAAAgAAACsVA28oAAAKB28qAAAKbysAAAoTBCsY
A28oAAAKB28sAAAKbxUAAApvKwAAChMEEQQTBQJvJQAABkUCAAAAAgAAABAAAAArJBEELSACexEA
AAQTBSsWEQQsEgJ7EgAABBEEby0AAAosAxQTBREFEQQWKC4AAAoWMwU4iAAAABEFLQ4DbygAAAoH
by8AAAordgkTChEKIC4BAAAuCREKIC8BAAAzEANvKAAACgcRBW8wAAAKK1ERCh0zGgNvKAAACgcR
BSgxAAAKjCcAAAFvMgAACisyEQofSDMeA28oAAAKBxILEQUoMwAAChELjCQAAAFvMgAACisOA28o
AAAKBxEFbzIAAAoIF9YMCBEHPrf+///eHCUoNAAAChMGAhEGbzUAAApvMwAABig2AAAK3gAqAAAA
QRgAAAAAAAAAAAAAYAEAAGABAAAcAAAAIwAAARMwBQA7AQAAEQAAEQIoNwAACgJvIwAACm8kAAAK
FowqAAABbyUAAAoMCG84AAAKbzkAAAoLAgcX2hfWjSoAAAF9DwAABAIHF9oX1o0LAAABfRAAAAQW
BxfaEwcNK0sIbzgAAAoJjCoAAAFvOgAAChMEAnsPAAAECQJvOwAACm88AAAKCG89AAAKEQRvPgAA
Cm8/AAAKngJ7EAAABAkRBG9AAAAKngkX1g0JEQcxsAJ7DgAABAoCew0AAAQsDQIGbzQAAAZvFQAA
CgoCbyUAAAYWMw4CBihBAAAKfREAAAQrZQJzQgAACn0SAAAEBheNHQAAARMIEQgWcg0AAHCiEQgW
b0MAAAoTBREFEwoWEwkrLREKEQmaEwYRBihEAAAKLQkRBihBAAAKEwYCexIAAAQRBhRvRQAAChEJ
F9YTCREJEQqOtzLLKgAbMAQAqQAAABIAABECbyMAAApvJAAAChaMKgAAAW8lAAAKDAJvIwAABheN
HQAAARMIEQgWchEAAHCiEQgXb0MAAAoNCG9GAAAKEwQIbzgAAApvRwAACgkTChYTCSstEQoRCZoT
BREEb0gAAAoRBW9JAAAKEwYRBBEGb0oAAAoXb0sAAAomEQkX1hMJEQkRCo63MssXCt4aJSg0AAAK
EwcWCgMRB281AAAKUSg2AAAK3gAGCwcqAAAAAQwAAAAAAACLiwAaIwAAARMwBAClAAAAEwAAEXNM
AAAKCwdyFwAAcG9NAAAKJgdyMQAAcG9NAAAKJgJvJQAABkUCAAAAAgAAADEAAAArXAdyPwAAcG9N
AAAKJgcCbycAAAZybQAAcHKXAABwKE4AAAooEQAACm9NAAAKJistB3KxAABwb00AAAomBwJvLQAA
BnLbAABwcgEBAHAoTgAACigRAAAKb00AAAomB9AdAAABKBQAAApvTwAACnQKAAAbKgAAABswAwCg
AAAAFAAAEQIDKFAAAAoCKCMAAApvJAAAChaMKgAAAW8lAAAKCgZvRgAACgsHb0gAAApvUQAACg0r
TglvUgAACnQxAAABDAhvUwAACiCBAAAALicIb1MAAAogggAAAC4aCG9TAAAKIC4BAAAuDQhvUwAA
CiAvAQAAMw4HCG9KAAAKF29LAAAKJglvVAAACi2q3hQJdTgAAAEsCwl1OAAAAW9VAAAK3CoBDAAA
AgAlAGaLABQAAAABEzACACoAAAAVAAARAgMoVgAACgIoIwAACm8kAAAKFowqAAABbyUAAAoKBm84
AAAKb0cAAAoqAAATMAEACQAAABYAABECewsAAAQKBioAAAATMAIAQAAAABcAABECKCMAAApvJAAA
ChaMKgAAAW8lAAAKCgZvVwAACiwSAyhEAAAKLBECbzUAAAYQASsHficAAAoQAQIDfQsAAAQqEzAB
AAkAAAAYAAARAnsMAAAECgYqAAAAcgJ7DAAABAMuEgIDfQwAAAQCficAAAp9DgAABCoAAAATMAEA
CQAAABkAABECew0AAAQKBioAAAByAnsNAAAEAy4SAgN9DQAABAJ+JwAACn0OAAAEKgAAABMwAQAJ
AAAAGgAAEQJ7DgAABAoGKgAAACICA30OAAAEKgAAABMwAQAJAAAAGwAAEQJ7DgAABAoGKgAAACIC
A30OAAAEKgAAABMwAQAJAAAAHAAAEQJ7DQAABAoGKgAAAHICew0AAAQDLhICA30NAAAEAn4nAAAK
fQ4AAAQqAAAAEzABAAkAAAAdAAARAnsOAAAECgYqAAAAIgIDfQ4AAAQqAAAAEzABAAkAAAAeAAAR
AnsOAAAECgYqAAAAIgIDfQ4AAAQqAAAAEzAHABsAAAAfAAARAm8jAAAKFnIXAQBwA34nAAAKFhIA
b1gAAAoqABswAwA0AAAAIAAAERQMAm9ZAAAKAxICb1oAAAoIA29bAAAKb1wAAAooEQAACgveBwhv
XQAACtwHKBEAAAoKBioBDAAAAgAQABQkAAcAAAABGzACAH8AAAAhAAARficAAAoMAigjAAAKbyQA
AAoWjCoAAAFvJQAACgsHbzgAAApvXgAAChMEKy4RBG9SAAAKdCkAAAENCChEAAAKLQwIchEAAHAo
XwAACgwICW9gAAAKKF8AAAoMEQRvVAAACi3J3hYRBHU4AAABLAwRBHU4AAABb1UAAArcCAoGKgAB
DAAAAgAdAEhlABYAAAABHgIoFwAACioTMAIALQAAACIAABF+FgAABC0gcj8BAHDQDQAAAigUAAAK
b2sAAApzbAAACgsHgBYAAAR+FgAABCoAAAATMAEABgAAACMAABF+FwAABCoAAB4CgBcAAAQqQnMX
AAAKKBEAAAqAGQAABCoAAAAeAihtAAAKKhswAQA/AAAAJAAAEX4YAAAELTJ+GQAABCgRAAAKKG4A
AAp+GAAABC0cczsAAAaAGAAABN4QfhkAAAQoEQAACihvAAAK3H4YAAAEKgABDAAAAgAdAAwpABAA
AAABQlNKQgEAAQAAAAAADAAAAHYyLjAuNTA3MjcAAAAABQBsAAAA3A4AACN+AABIDwAA7BIAACNT
dHJpbmdzAAAAADQiAAB0AQAAI1VTAKgjAAAQAAAAI0dVSUQAAAC4IwAA3AcAACNCbG9iAAAAAAAA
AAIAAAFXHaIJCQ8AAAD6ATMAFgAAAQAAAFMAAAAOAAAAGQAAADwAAAAcAAAAegAAAAMAAABNAAAA
JAAAAAYAAAASAAAAGwAAAAoAAAABAAAACAAAAAEAAAADAAAAAwAAAAIAAAAAALASAQAAAAAACgC1
AYsBCgDpAcsBBgD5AfIBCgBRAosBBgDPAvIBCgBRAycDDgCjA4wDEgDyA9EDFgAjBNEDDgC+BIwD
GgCNB2UHBgDFB7IHBgBcCPIBBgCJCHgIBgC2CKEIHgAdCQgJHgBqCVQJHgCDCVQJHgCwCZgJBgDa
CccJCgAZCvIJCgAxChMAHgBmCkkKBgCbCnsKBgC5CvIBBgDdCvIBCgD2ChMABgA6CxsLBgBOC/IB
EgBVC9EDBgBiC/IBIgDFC5wLIgD0C5wLIgAfDJwLBgBCDPIBBgBMDPIBCgB0DPIJBgCWDPIBBgCe
DPIBCgC7DPIJIgD1DJwLBgAIDfIBIgAODZwLFgBPDdEDIgBzDZwLHgDqDcsNBgD5DfIBIgAgDpwL
IgA0DpwLIgBoDpwLIgCtDpwLBgDHDrIHCgDVDhMABgDlDvIBBgDzDrIHBgAiD/IBGgBPD2UHGgBg
D2UHGgCeD2UHEgDFD9EDDgAOEOwPDgAoEOwPDgBEEOwPDgBcEOwPHgBwEFQJHgCFEFQJHgCgEFQJ
DgCyEOwPDgDEEOwPDgDgEOwPBgAIEfYQBgAvER4RBgBCEccJBgCrEXsKBgDLEXsKBgDpEfYQBgAG
EhsLBgAUEvYQBgAvEvYQBgBKEvYQBgBjEvYQBgB8EvYQBgCZEvYQAAAAAAEAAAAAAAEAAQAAAAAA
KQA3AAUAAQABAAAAAAByADcACQABAAIAAAEQAH0ANwANAAEAAwAFAQAAhwAAAA0ABQAIAAUBAACV
AAAADQAFAA8AAQAAALAAvAAdAAYAEQABAAAA9AC8ACkABgAWAAEAAAACAbwADQAIABoAAQAAAA4B
vAANAAkAGwABAAAAGAG8ACAACgAcAAIBAAAjAQAANQATADYAAAAAAC8BOwENABYANgAAARAAgAG8
AEEAGAA6ADEAFAIgADEAPQItADEAXwI6ADEAhAJHACEAYAOQAAYAAgHHAAYADgHLAAEAFAXcAAEA
FAXcAFGAJAXmAAEADQfmAAEAGQcTAQEAIgcXAQEALwfmAAEANwcaAQEAlgceAQEAowfmAAEAzwcj
AQYGYQg0AVaAaQgTAVaAcAgTAREAmQhBAREAwghFAREANQljAREAPQlnAQghAAAAAAYYxQETAAEA
ECEAAAAABhjFARMAAQAYIQAAAAARGAACFwABAEQhAAAAABMIBwIbAAEAXCEAAAAAEwgtAigAAQB0
IQAAAAATCFYCNQABAIwhAAAAABMIdAJCAAEApCEAAAAARgK6AmMAAQDAIQAAAABGAsMCaAACANQh
AAAAAIMA1AJsAAIA7CEAAAAARgLcAnEAAgAAIgAAAAARAOUCeAACABwiAAAAAAEAAwOAAAMAOCIA
AAAABhjFARMABABAIgAAAAADCBcDiwAEAHQiAAAAAAYYxQETAAQAiCIAAAAABhjFAa8ABACYIgAA
AABGClQEuQAIAKwiAAAAAEYKawS5AAgAwCIAAAAAhgCDBL4ACADYIgAAAACGAIsEvgAIAPAiAAAA
AAYYxQETAAgAECMAAAAARgLSBM8ACABAIwAAAABGA+cE1gAKAFQjAAAAAEYD+gTWAAsAWCMAAAAA
BhjFAeAADABoIwAAAAAGGMUB4AANAHgjAAAAAAYYxQETAA4AlCMAAAAARgL6BNYADgA8JQAAAABG
AjQFEwAPAIQmAAAAAAYAPwXuAA8ATCcAAAAABgBTBbkAEAAAKAAAAABGAmEF9AAQALwoAAAAAEYC
fQX0ABEA9CgAAAAABgiRBXEAEgAMKQAAAAAGCKIF+QASAFgpAAAAAAYIuQX+ABMAcCkAAAAABgjE
BQMBEwCQKQAAAAAGCM8FvgAUAKgpAAAAAAYI6gUJARQAyCkAAAAABggFBnEAFQDgKQAAAAAGCBYG
+QAVAOwpAAAAAAYIJwZxABYABCoAAAAABghABvkAFgAQKgAAAAAGCFkGvgAXACgqAAAAAAYIcgYJ
ARcASCoAAAAABgiLBnEAGABgKgAAAAAGCJoG+QAYAGwqAAAAAAYIqQZxABkAhCoAAAAABgjABvkA
GQCQKgAAAAABANcG+QAaALgqAAAAAAEA6gYOARsACCsAAAAAAQD/BnEAHACkKwAAAAADGMUBEwAc
AKwrAAAAABYIzghJARwA6CsAAAAAFgjiCE4BHAD8KwAAAAAWCO4IUwEcAAQsAAAAABEYAAIXAB0A
GCwAAAAABhjFARMAHQAgLAAAAAAWCEoJagEdAAAAAQDBAgAAAQD6AgAAAQD6AgAAAQAyBAAAAgA8
BAAAAwBFBAAABABNBAAAAQDfBAAAAgBNBAAAAQBNBAAAAQAQBQAAAQAyBAAAAQAyBAAAAQAQBQAA
AQBIBQAAAQB1BQAAAQB1BQAAAQCzBQAAAQCzBQAAAQCzBQAAAQCzBQAAAQCzBQAAAQCzBQAAAQCz
BQAAAQCzBQAAAQDiBgAAAQD3BgAAAQD6CAkAxQETAIkAxQF0AZkAxQGDAREAxQETAKEAxQETACQA
xQETACwAxQETADQAxQETADwAxQETACQAFwOLACwAFwOLADQAFwOLADwAFwOLAKkAxQETALEAxQET
ALkAxQH5AMEAqgoXAhkAugJjABkAwwJoACkAywokAhkA3AJxANEA5wo0AhkAxQETANkAxQFEAkQA
YAOQAEwASgmLAEwAEQvBAkwAxQETAOEAxQEJATkAxQGvAPEAgwS+APEAiwS+APkAxQEJAVEAxQET
AEEA3gvZAgEBCwzfAgkBLAzlAhEBNQxoAOkAPAzmADkAUQzsAkkAaQjxAkkAXAz2AukAZgxxAEkA
LAz7AmEAawxjACkBfgwAA0kAcAj0AEkAjAwHAzEBpwwNA0kAsgwUAyEBxQH5AEEBxwwaAxkB1wxx
AEEB4wwXAEEANAUTABEBKw04A1kBRQ1oAFkBLAw+A1EAYQ1FA2EBiA1LAxEBUQxoAEkBmg1oAGkB
qA1RA0kBvg1XA3EB8A1cA2EAxQETAOkADA5hA+kAEg5rA2EAsgxwAxEBTg6LA1kBXg4TAIEBjA6R
A5EBLAyXA4kBmg1oAIEBug6eA6EBxQETAKEB0Q6/A6kB4Q7EA6EB6w7LA1EAYQX0AJEB/w7gA7kB
DQ/mA4kBvg1XA7kBGQ++AMEBLg8TAFEAfQX0ABEBNg++AAEBRQ8EBEEAeQ8PBNEBjw8VBMkBLAwe
BNkBSgnmA8kBrg8TAFkB/w7gA+kAtQ8tBEkBvA9xAOEBxQETAOkBxQH5APEBxQH5APkBxQFiBAEC
xQH5AAkCxQH5ABECxQFtBSECxQETACkCxQEZBjECxQETACkAERHdBnEAxQHjBoEAxQETAEECNxEA
B0ECPREAB0kCxQETAFECxQH0AFkCxQETAGECxQH5AGkCxQH5AHECxQH5AHkCxQH5AIECxQH5AIkC
xQH5AJECxQH5AJkCxQH5AA4AKADpAAgAUAA3AQgAVAA8ASkAgwD5AS4AuwOPBy4A0wOPBy4AqwPO
Ai4AiwMKBy4ACwFpBy4AwwPMBy4AywPOAi4AswNvBy4AkwMTBy4AmwMyBy4AowM/By4A6wDOAkAA
KwA8AUAAEwB6AUMAEwB6AUMAGwCJAUkAgwDRAWMAGwCJAWMAEwB6AWkAgwAKAoAAKwA8AYMAGwCJ
AYMAcwA8AYMAewA8AYkAgwDlAaAAKwA8AaMAwwBMAqMAEwB6AcAAKwA8AcMAEwB6AcMA6wDOAuAA
KwA8AeMACwHOAgABEwB6AQABKwA8AQMBCwHOAgkBSwMfBgkBMwMmBiABEwB6ASABKwA8ASkBMwN0
BSkBOwN6AUABEwB6AUABKwA8AUkBUwM8AUkBMwNVBkkBOwN6AWABKwA8AWABEwB6AWMBEwNBBGMB
IwNoBGMBCwM8AWMBGwNUBGMBCwHOAmkBMwOIBYABKwA8AYkBQwM8AYkBMwO3BaABKwA8AakBMwOa
BqkBUwM8AakBOwN6AcABEwB6AcABKwA8AckBKwPyBMkBMwMMBeABKwA8AekBQwM8AekBMwPpBQAC
EwB6AQACKwA8AQkCEwD3BikCEwD3BkkCgwM8AUADCwHOAmADCwHOAr0BwgHHAcwBHAIgAisCMAI/
Aj8CxwLUAtQCHAIcAiEDdgOmA9YD6gP5AzAC+QP/AxwCMAIwAhwCMAIwAhwCJQQzBOsG8gYFBwQA
AQAGAAUABwAGAAsACAANABAADgASAAAA6QFPAAAAogJUAAAAUQJZAAAArgJeAAAAagOYAAAAlwTC
AAAAqgTCAAAA3AcnAQAA6QcrAQAA8AcwAQAABwgnAQAAFAgnAQAAKQgwAQAAPggnAQAASQgnAQAA
iQhZAQAAAAleAQAA+ghvAQIABAADAAIABQAFAAIABgAHAAIABwAJAAIADwALAAIAEgANAAIAEwAP
AAIAIwARAAEAJAARAAIAJQATAAEAJgATAAIAJwAVAAEAKAAVAAIAKQAXAAEAKgAXAAEALAAZAAIA
KwAZAAIALQAbAAEALgAbAAEAMAAdAAIALwAdAAIAMQAfAAEAMgAfAAIANwAhAAIAOAAjAAEAOQAj
AAIAPAAlAHUAdQCIAKEBqAGvAbYBrgK1AtMDBIAAAAEAAAAAAAAAAAAAAAAAvAAAAAIAAAAAAAAA
AAAAAAEACgAAAAAACAAAAAAAAAAAAAAACgATAAAAAAABAAAAAAAAAAAAAACdAHYDAAAAAAoAAAAA
AAAAAAAAAKYAtAMAAAAACgAAAAAAAAAAAAAApgACBAAAAAAKAAAAAAAAAAAAAACmAEIHAAAAAAIA
AAAAAAAAAAAAAAEA8gEAAAAACgAAAAAAAAAAAAAApgB4CwAAAAAAAAAAAQAAAF8RAAAFAAQABgAE
AAwACwAAABAADAD4AgAAEAAZAPgCAAAAABsA+AItADoCLQC8AgAAADxNb2R1bGU+AG1zY29ybGli
AE1pY3Jvc29mdC5WaXN1YWxCYXNpYwBNeUFwcGxpY2F0aW9uAFNjcmlwdENvbXBvbmVudF82Zjhj
NjNhNmNmZDM0MGU5OTZiYjdmODFhZjQ4NGU4OC52YnByb2ouTXkATXlDb21wdXRlcgBNeVByb2pl
Y3QATXlXZWJTZXJ2aWNlcwBUaHJlYWRTYWZlT2JqZWN0UHJvdmlkZXJgMQBJbnB1dEJ1ZmZlcgBT
Y3JpcHRDb21wb25lbnRfNmY4YzYzYTZjZmQzNDBlOTk2YmI3ZjgxYWY0ODRlODgudmJwcm9qAFVz
ZXJDb21wb25lbnQAQ29ubmVjdGlvbnMAVmFyaWFibGVzAFNjcmlwdE1haW4AQWN0aW9uVHlwZXMA
TXlSZXNvdXJjZXMAU2NyaXB0Q29tcG9uZW50XzZmOGM2M2E2Y2ZkMzQwZTk5NmJiN2Y4MWFmNDg0
ZTg4LnZicHJvai5NeS5SZXNvdXJjZXMATXlTZXR0aW5ncwBNaWNyb3NvZnQuVmlzdWFsQmFzaWMu
QXBwbGljYXRpb25TZXJ2aWNlcwBBcHBsaWNhdGlvbkJhc2UALmN0b3IATWljcm9zb2Z0LlZpc3Vh
bEJhc2ljLkRldmljZXMAQ29tcHV0ZXIAU3lzdGVtAE9iamVjdAAuY2N0b3IAZ2V0X0NvbXB1dGVy
AG1fQ29tcHV0ZXJPYmplY3RQcm92aWRlcgBnZXRfQXBwbGljYXRpb24AbV9BcHBPYmplY3RQcm92
aWRlcgBVc2VyAGdldF9Vc2VyAG1fVXNlck9iamVjdFByb3ZpZGVyAGdldF9XZWJTZXJ2aWNlcwBt
X015V2ViU2VydmljZXNPYmplY3RQcm92aWRlcgBBcHBsaWNhdGlvbgBXZWJTZXJ2aWNlcwBFcXVh
bHMAbwBHZXRIYXNoQ29kZQBUeXBlAEdldFR5cGUAVG9TdHJpbmcAQ3JlYXRlX19JbnN0YW5jZV9f
AFQAaW5zdGFuY2UARGlzcG9zZV9fSW5zdGFuY2VfXwBnZXRfR2V0SW5zdGFuY2UATWljcm9zb2Z0
LlZpc3VhbEJhc2ljLk15U2VydmljZXMuSW50ZXJuYWwAQ29udGV4dFZhbHVlYDEAbV9Db250ZXh0
AEdldEluc3RhbmNlAENvenlSb2MuU1NJU1BsdXMuMjAwOABDb3p5Um9jLlNxbFNlcnZlci5TU0lT
AFNjcmlwdEJ1ZmZlclBsdXMATWljcm9zb2Z0LlNxbFNlcnZlci5UeFNjcmlwdABNaWNyb3NvZnQu
U3FsU2VydmVyLkR0cy5QaXBlbGluZQBTY3JpcHRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZl
ci5QaXBlbGluZUhvc3QAUGlwZWxpbmVCdWZmZXIAQ29tcG9uZW50AE9iamVjdElEAElzSW5wdXQA
QnVmZmVyAGdldF9TdGF0aWNJbnB1dENvbHVtbnMAZ2V0X1N0YXRpY091dHB1dENvbHVtbnMATmV4
dFJvdwBFbmRPZlJvd3NldABTdGF0aWNJbnB1dENvbHVtbnMAU3RhdGljT3V0cHV0Q29sdW1ucwBT
Y3JpcHRDb21wb25lbnRQbHVzAFByb2Nlc3NJbnB1dABJbnB1dElEAElucHV0X1Byb2Nlc3NJbnB1
dABJbnB1dF9Qcm9jZXNzSW5wdXRSb3cAUm93AFBhcmVudENvbXBvbmVudABDb2x1bW5TZXBhcmF0
b3IAUHJlRXhlY3V0ZQBWYWxpZGF0ZQBlcnJNZXNzYWdlAEdldFByb3BlcnRpZXMAT25JbnB1dFBh
dGhBdHRhY2hlZABpbnB1dElEAE9uSW5wdXRQYXRoRGV0YWNoZWQAZ2V0X0lucHV0Q29sdW1ucwBz
ZXRfSW5wdXRDb2x1bW5zAHZhbHVlAGdldF9BY3Rpb24Ac2V0X0FjdGlvbgBnZXRfSXNSZXBsYWNl
VmFsdWVWYXJpYWJsZQBzZXRfSXNSZXBsYWNlVmFsdWVWYXJpYWJsZQBnZXRfUmVwbGFjZVZhbHVl
AHNldF9SZXBsYWNlVmFsdWUAZ2V0X1JlcGxhY2VWYWx1ZVZhcmlhYmxlAHNldF9SZXBsYWNlVmFs
dWVWYXJpYWJsZQBnZXRfSXNNYXRjaFZhbHVlVmFyaWFibGUAc2V0X0lzTWF0Y2hWYWx1ZVZhcmlh
YmxlAGdldF9NYXRjaFZhbHVlAHNldF9NYXRjaFZhbHVlAGdldF9NYXRjaFZhbHVlVmFyaWFibGUA
c2V0X01hdGNoVmFsdWVWYXJpYWJsZQBGaXJlRXJyb3JfAG1lc3NhZ2UAR2V0VmFyaWFibGVfAHZh
ck5hbWUAR2V0SW5wdXRDb2xzXwBtX2lucHV0Q29scwBtX2FjdGlvbgBtX2lzVmFsdWVWYXIAbV92
YWx1ZQBtX2lucHV0SWR4AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUnVudGltZVdyYXAATWljcm9z
b2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZS5XcmFwcGVyAERhdGFUeXBlAG1faW5wdXRUeXBlcwBt
X3JlcGxhY2VWYWx1ZQBTeXN0ZW0uQ29sbGVjdGlvbnMASGFzaHRhYmxlAG1fbWF0Y2hWYWx1ZQBJ
bnB1dENvbHVtbnMAQWN0aW9uAElzUmVwbGFjZVZhbHVlVmFyaWFibGUAUmVwbGFjZVZhbHVlAFJl
cGxhY2VWYWx1ZVZhcmlhYmxlAElzTWF0Y2hWYWx1ZVZhcmlhYmxlAE1hdGNoVmFsdWUATWF0Y2hW
YWx1ZVZhcmlhYmxlAEVudW0AdmFsdWVfXwBJc051bGwAU2V0TnVsbABTeXN0ZW0uUmVzb3VyY2Vz
AFJlc291cmNlTWFuYWdlcgBfcmVzTWdyAFN5c3RlbS5HbG9iYWxpemF0aW9uAEN1bHR1cmVJbmZv
AF9yZXNDdWx0dXJlAGdldF9SZXNvdXJjZU1hbmFnZXIAZ2V0X0N1bHR1cmUAc2V0X0N1bHR1cmUA
VmFsdWUAQ3VsdHVyZQBTeXN0ZW0uQ29uZmlndXJhdGlvbgBBcHBsaWNhdGlvblNldHRpbmdzQmFz
ZQBtX1ZhbHVlAG1fU3luY09iamVjdABnZXRfVmFsdWUAU3lzdGVtLkNvbXBvbmVudE1vZGVsAEVk
aXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVTdGF0ZQBTeXN0ZW0uQ29kZURv
bS5Db21waWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRlAFN5c3RlbS5EaWFnbm9zdGljcwBEZWJ1
Z2dlckhpZGRlbkF0dHJpYnV0ZQBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQ29tcGlsZXJTZXJ2aWNl
cwBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxlTmFtZUF0dHJpYnV0ZQBTeXN0ZW0u
Q29tcG9uZW50TW9kZWwuRGVzaWduAEhlbHBLZXl3b3JkQXR0cmlidXRlAFN5c3RlbS5SdW50aW1l
LkNvbXBpbGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMAR2V0T2JqZWN0VmFsdWUAUnVudGltZVR5
cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAQWN0aXZhdG9yAENyZWF0ZUluc3RhbmNlAE15R3Jv
dXBDb2xsZWN0aW9uQXR0cmlidXRlAHNldF9WYWx1ZQBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2Vy
dmljZXMAQ29tVmlzaWJsZUF0dHJpYnV0ZQBTdHJpbmcAU2NyaXB0QnVmZmVyAENMU0NvbXBsaWFu
dEF0dHJpYnV0ZQBNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1BpcGVsaW5lV3JhcABNaWNyb3NvZnQu
U3FsU2VydmVyLkR0cy5QaXBlbGluZS5XcmFwcGVyAElEVFNDb21wb25lbnRNZXRhRGF0YTEwMABn
ZXRfQ29tcG9uZW50TWV0YURhdGEASURUU0lucHV0Q29sbGVjdGlvbjEwMABnZXRfSW5wdXRDb2xs
ZWN0aW9uAElEVFNJbnB1dDEwMABnZXRfSXRlbQBnZXRfSUQARW1wdHkARXhjZXB0aW9uAEd1aWQA
Z2V0X0J1ZmZlcgBHZXRTdHJpbmcAVHJpbQBDb250YWlucwBPcGVyYXRvcnMAQ29tcGFyZVN0cmlu
ZwBTZXRTdHJpbmcAQ29udmVydABEYXRlVGltZQBUb0RhdGVUaW1lAHNldF9JdGVtAFByb2plY3RE
YXRhAFNldFByb2plY3RFcnJvcgBnZXRfTWVzc2FnZQBDbGVhclByb2plY3RFcnJvcgBJRFRTSW5w
dXRDb2x1bW4xMDAASW50MzIASURUU0lucHV0Q29sdW1uQ29sbGVjdGlvbjEwMABnZXRfSW5wdXRD
b2x1bW5Db2xsZWN0aW9uAGdldF9Db3VudABQaXBlbGluZUNvbXBvbmVudABnZXRfSG9zdENvbXBv
bmVudABJRFRTQnVmZmVyTWFuYWdlcjEwMABnZXRfQnVmZmVyTWFuYWdlcgBnZXRfTGluZWFnZUlE
AEZpbmRDb2x1bW5CeUxpbmVhZ2VJRABnZXRfRGF0YVR5cGUAU3lzdGVtLlRleHQuUmVndWxhckV4
cHJlc3Npb25zAFJlZ2V4AFVuZXNjYXBlAFN0cmluZ1NwbGl0T3B0aW9ucwBTcGxpdABJc051bGxP
ckVtcHR5AElEVFNWaXJ0dWFsSW5wdXQxMDAASURUU1ZpcnR1YWxJbnB1dENvbHVtbjEwMABHZXRW
aXJ0dWFsSW5wdXQAUmVtb3ZlQWxsAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAw
AGdldF9WaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uAERUU1VzYWdlVHlwZQBTZXRVc2FnZVR5
cGUAQXJyYXlMaXN0AEFkZABJbnRlcmFjdGlvbgBJSWYAQXJyYXkAVG9BcnJheQBJRW51bWVyYXRv
cgBHZXRFbnVtZXJhdG9yAGdldF9DdXJyZW50AE1vdmVOZXh0AElEaXNwb3NhYmxlAERpc3Bvc2UA
Z2V0X0lzQXR0YWNoZWQARmlyZUVycm9yAElEVFNWYXJpYWJsZXMxMDAASURUU1ZhcmlhYmxlRGlz
cGVuc2VyMTAwAGdldF9WYXJpYWJsZURpc3BlbnNlcgBMb2NrT25lRm9yUmVhZABJRFRTVmFyaWFi
bGUxMDAAVW5sb2NrAENvbmNhdABnZXRfTmFtZQBTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2lu
dEF0dHJpYnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMARmlsdGVyUHJvcGVy
dGllc0F0dHJpYnV0ZQBWYWxpZGF0ZVByb3BlcnRpZXNBdHRyaWJ1dGUAU29ydFByb3BlcnRpZXNB
dHRyaWJ1dGUAVGV4dERpYWxvZ0F0dHJpYnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0ZQBSZWZyZXNo
UHJvcGVydGllc0F0dHJpYnV0ZQBSZWZyZXNoUHJvcGVydGllcwBWYXJpYWJsZUF0dHJpYnV0ZQBJ
bnB1dFZpcnR1YWxDb2x1bW5BdHRyaWJ1dGUATm9uRXNzZW50aWFsQXR0cmlidXRlAFN5c3RlbS5S
ZWZsZWN0aW9uAEFzc2VtYmx5AGdldF9Bc3NlbWJseQBTeXN0ZW0uVGhyZWFkaW5nAE1vbml0b3IA
RW50ZXIARXhpdABEZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlAFNjcmlwdENvbXBvbmVudF82
ZjhjNjNhNmNmZDM0MGU5OTZiYjdmODFhZjQ4NGU4OC52YnByb2ouUmVzb3VyY2VzLnJlc291cmNl
cwBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0
cmlidXRlAEFzc2VtYmx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAR3VpZEF0dHJpYnV0ZQBBc3NlbWJs
eVRyYWRlbWFya0F0dHJpYnV0ZQBBc3NlbWJseUNvcHlyaWdodEF0dHJpYnV0ZQBBc3NlbWJseVBy
b2R1Y3RBdHRyaWJ1dGUAQXNzZW1ibHlDb21wYW55QXR0cmlidXRlAEFzc2VtYmx5RGVzY3JpcHRp
b25BdHRyaWJ1dGUAQXNzZW1ibHlUaXRsZUF0dHJpYnV0ZQBTY3JpcHRDb21wb25lbnRfNmY4YzYz
YTZjZmQzNDBlOTk2YmI3ZjgxYWY0ODRlODgudmJwcm9qLmRsbAAAC0kAbgBwAHUAdAAAAwoAAAUs
AAoAABlJAG4AcAB1AHQAQwBvAGwAdQBtAG4AcwAADUEAYwB0AGkAbwBuAAAtSQBzAFIAZQBwAGwA
YQBjAGUAVgBhAGwAdQBlAFYAYQByAGkAYQBiAGwAZQAAKVIAZQBwAGwAYQBjAGUAVgBhAGwAdQBl
AFYAYQByAGkAYQBiAGwAZQAAGVIAZQBwAGwAYQBjAGUAVgBhAGwAdQBlAAApSQBzAE0AYQB0AGMA
aABWAGEAbAB1AGUAVgBhAHIAaQBhAGIAbABlAAAlTQBhAHQAYwBoAFYAYQBsAHUAZQBWAGEAcgBp
AGEAYgBsAGUAABVNAGEAdABjAGgAVgBhAGwAdQBlAAAnTgB1AGwAbAAgAFQAcgBhAG4AcwBmAG8A
cgBtAGEAdABpAG8AbgAAMU0AeQAuAFIAZQBzAG8AdQByAGMAZQBzAC4ATQB5AFIAZQBzAG8AdQBy
AGMAZQBzAAAAAABKAaDeLhkTR6tljHw7dyzlAAi3elxWGTTgiQiwP19/EdUKOgMgAAEDAAABBAAA
EgwHBhUSGAESDAQAABIIBwYVEhgBEggEAAASEQcGFRIYARIRBAAAEhQHBhUSGAESFAQIABIMBAgA
EggECAASEQQIABIUBCABAhwDIAAIBCAAEhUDIAAOAh4ABxABAR4AHgAHMAEBARAeAAITAAQgABMA
BwYVEhkBEwAEKAATAAgWz0kLuAw06giJhF3NgIDMkQkgBAESIQgCEiUEIAAdDgMgAAIEKAAdDgMG
EiQDBhIoBiACAQgSJQUgAQESHAMGEiEFIAEBEiECBg4ELAAKAAUgAQIQDgQgAQEIBCABAQ4EIAAR
MAUgAQERMAQgAQECBCABHA4DBhEwAgYCAwYdCAQGHREtAwYSMQMoAA4EKAARMAMoAAICBggEAAAA
AAQBAAAAAwYSOQMGEj0EAAASOQQAABI9BQABARI9BAgAEjkECAASPQMGEjgCBhwEAAASOAQIABI4
BSABARFJCAEAAQAAAAAABSACAQ4OFwEACk15VGVtcGxhdGUHOC4wLjAuMAAABhUSGAESDAYVEhgB
EggGFRIYARIRBhUSGAESFAQHARIMBAcBEggEBwESEQQHARIUEwEADk15LkFwcGxpY2F0aW9uAAAT
AQAOTXkuV2ViU2VydmljZXMAABABAAtNeS5Db21wdXRlcgAADAEAB015LlVzZXIAAAQAARwcAwcB
AgMHAQgGAAESFRFlBAcBEhUDBwEOBRABAB4ABAoBHgAEBwEeAAcgBAEODg4OYQEANFN5c3RlbS5X
ZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRwQ2xpZW50UHJvdG9jb2wSQ3JlYXRlX19JbnN0
YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAAGFRIYARMABhUSGQETAAQKARMABSABARMABgcC
EwATAAUBAAAAAAQHAR0OBSAAEoCBBSAAEoCFBiABEoCJHAQgABIlBCABAggEIAEOCAQgARwIBgAD
CA4OAgUgAgEIDgYAARGAnQ4FIAIBCBwGAAEBEoCNFgcMCAgIES0ODhKAjQgRLREwES0RgJEFIAAS
gK0GIAESgKUcBSAAEoCxBSAAEoC1BSACCAgIBCAAES0EAAEODgkgAh0OHQ4RgL0EAAECDgUgAgEc
HBQHCw4IEoCJCBKApR0ODggdDggdDgUgABKAwQUgABKAyQYgARKAxRwHIAIICBGAzRgHCwICEoCJ
HQ4SgMEOEoDFEoCNHQ4IHQ4EIAEIHAYAAxwCHBwHIAESgNkSFQIdDgkHAx0OEoDRETAFIAASgN0D
IAAcDgcEEoCJEoDBEoDFEoDdBQcBEoCJBAcBETAKIAYBCA4ODggQAgUgABKA6QggAgEOEBKA5QYg
ARKA7RwHBwMcHBKA5QUAAg4ODg0HBQ4SgIkOEoClEoDdEgEADUdldFByb3BlcnRpZXMAAA0BAAhW
YWxpZGF0ZQAABSABAR0OgIgBAAgAAAAMSW5wdXRDb2x1bW5zBkFjdGlvbhZJc1JlcGxhY2VWYWx1
ZVZhcmlhYmxlDFJlcGxhY2VWYWx1ZRRSZXBsYWNlVmFsdWVWYXJpYWJsZRRJc01hdGNoVmFsdWVW
YXJpYWJsZQpNYXRjaFZhbHVlEk1hdGNoVmFsdWVWYXJpYWJsZQAAGQEAFFNwZWNpZnkgbWF0Y2gg
dmFsdWUuAABgAQBbU3BlY2lmeSBtYXRjaCB2YWx1ZSB0byByZXBsYWNlIHdpdGggTlVMTC4gTXVs
dGlwbGUgbWF0Y2ggdmFsdWVzIGFyZSBzZXBhcmF0ZWQgd2l0aCBuZXdsaW5lLgAABiABARGBDRMB
AA5TZWxlY3QgYWN0aW9uLgAALgEAKVNwZWNpZnkgcmVwbGFjZSB2YWx1ZSB3aGVuIGlucHV0IGlz
IE5VTEwuAAAxAQAsU3BlY2lmaWVzIHZhcmlhYmxlIGNvbnRhaW5pbmcgcmVwbGFjZSB2YWx1ZS4A
AC8BACpTcGVjaWZpZXMgdmFyaWFibGUgY29udGFpbmluZyBtYXRjaCB2YWx1ZS4AAAUgAgEOAgYB
AAAAAAAuAQApU2VsZWN0IGlucHV0IGNvbHVtbnMgeW91IHdhbnQgdG8gcHJvY2Vzcy4AAEQBAD9T
cGVjaWZpZXMgaWYgUmVwbGFjZVZhbHVlIHByb3BlcnR5IHJlZmVyZW5jZXMgcGFja2FnZSB2YXJp
YWJsZS4AAEIBAD1TcGVjaWZpZXMgaWYgTWF0Y2hWYWx1ZSBwcm9wZXJ0eSByZWZlcmVuY2VzIHBh
Y2thZ2UgdmFyaWFibGUuAAAFIAASgR0HIAIBDhKBHQYHAhI5EjkEBwESPQgBAAIAAAAAAAQAAQEc
BAcBEjgIAQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBDAEABzEuMC4wLjAA
ACkBACQ4OGQzNTBlNi1kNzQwLTQwODgtOGE4ZC1jYWE5NDQyZDcxZTYAAAUBAAEAAB8BABpDb3B5
cmlnaHQgQCBNaWNyb3NvZnQgMjAxMwAAPAEAN1NjcmlwdENvbXBvbmVudF82ZjhjNjNhNmNmZDM0
MGU5OTZiYjdmODFhZjQ4NGU4OC52YnByb2oAAA4BAAlNaWNyb3NvZnQAAAA4WAAAAAAAAAAAAABO
WAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFgAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUu
ZGxsAAAAAAD/JQAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMAAAAoAACADgAAAEgA
AIAQAAAAYAAAgAAAAAAAAAAAAAAAAAAAAgACAAAAeAAAgAMAAACQAACAAAAAAAAAAAAAAAAAAAAB
AAB/AACoAACAAAAAAAAAAAAAAAAAAAABAAEAAADAAACAAAAAAAAAAAAAAAAAAAABAAAAAADYAAAA
AAAAAAAAAAAAAAAAAAABAAAAAADoAAAAAAAAAAAAAAAAAAAAAAABAAAAAAD4AAAAAAAAAAAAAAAA
AAAAAAABAAAAAAAIAQAAgGUAAOgCAAAAAAAAAAAAAGhoAAAoAQAAAAAAAAAAAACQaQAAIgAAAAAA
AAAAAAAAGGEAAGgEAAAAAAAAAAAAAGgENAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBP
AAAAAAC9BO/+AAABAAAAAQAAAAAAAAABAAAAAAA/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAA
RAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBv
AG4AAAAAAAAAsATIAwAAAQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAACkAwAAAQAwADAA
MAAwADAANABiADAAAAA0AAoAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAE0AaQBjAHIAbwBz
AG8AZgB0AAAAmAA4AAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFMAYwByAGkA
cAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8ANgBmADgAYwA2ADMAYQA2AGMAZgBkADMANAAwAGUAOQA5
ADYAYgBiADcAZgA4ADEAYQBmADQAOAA0AGUAOAA4AC4AdgBiAHAAcgBvAGoAAAAwAAgAAQBGAGkA
bABlAFYAZQByAHMAaQBvAG4AAAAAADEALgAwAC4AMAAuADAAAACYADwAAQBJAG4AdABlAHIAbgBh
AGwATgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8ANgBmADgAYwA2ADMA
YQA2AGMAZgBkADMANAAwAGUAOQA5ADYAYgBiADcAZgA4ADEAYQBmADQAOAA0AGUAOAA4AC4AdgBi
AHAAcgBvAGoALgBkAGwAbAAAAFwAGwABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAAEMA
bwBwAHkAcgBpAGcAaAB0ACAAQAAgAE0AaQBjAHIAbwBzAG8AZgB0ACAAMgAwADEAMwAAAAAAoAA8
AAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAA
bwBuAGUAbgB0AF8ANgBmADgAYwA2ADMAYQA2AGMAZgBkADMANAAwAGUAOQA5ADYAYgBiADcAZgA4
ADEAYQBmADQAOAA0AGUAOAA4AC4AdgBiAHAAcgBvAGoALgBkAGwAbAAAAJAAOAABAFAAcgBvAGQA
dQBjAHQATgBhAG0AZQAAAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwA2AGYAOABj
ADYAMwBhADYAYwBmAGQAMwA0ADAAZQA5ADkANgBiAGIANwBmADgAMQBhAGYANAA4ADQAZQA4ADgA
LgB2AGIAcAByAG8AagAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADEALgAw
AC4AMAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMQAuADAA
LgAwAC4AMAAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA
AACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAB3d3d3d3d3d3d3d3d3d3AERERERERERERERERERERwBP/////////////////0cAT/
////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////
////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE////
//////////////RwBP/////////////////0cAT/////////////////9HAE////////////////
//RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////
///////////0cAT/////////////////9HAE//////////////////RwBIiIiIiIiIiIiIiIiIiE
cARERERERERERERERERERHAETExMTExMTExMTs7OSXRwBMzMzMzMzMzMzMzMzMzEAABERERERERE
REREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/
////////////////////wAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAADwAAA
B////////////////ygAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD/
//8AAAAAAAAAAAAHd3d3d3d3d0RERERERERHT///////+EdP///////4R0////////hHT///////
+EdP///////4R0////////hHT///////+EdP///////4R0iIiIiIiIhHTMzMzMzMzEfERERERERE
wAAAAAAAAAAAAAAAAAAAAAD//wAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAEAAP//AAD//wAAAAABAAIAICAQAAEABADoAgAAAgAQEBAAAQAEACgBAAAD
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAMAAAAYDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA]]></arrayElement></arrayElements></property>
<property id="101" 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="299" 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_6f8c63a6cfd340e996bb7f81af484e88</property>
<property id="300" 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="91" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"></input>
</inputs>
<outputs>
<output id="92" name="Output" description="" exclusionGroup="0" synchronousInputId="91" deleteOutputOnPathDetached="false" hasSideEffects="false" dangling="false" isErrorOut="false" isSorted="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></output>
</outputs>
</component>