<component id="125" name="Column Encryption" 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="129" 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_3d2264e1d41345ed8285b6454247d735.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_3d2264e1d41345ed8285b6454247d735.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("fb12c2fe-f991-4db6-9a41-c0ac23fc40b1")> 

' 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_3d2264e1d41345ed8285b6454247d735.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_3d2264e1d41345ed8285b6454247d735.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_3d2264e1d41345ed8285b6454247d735.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{690A63FC-9E11-4F3D-95E8-A6864D3F9D73}</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.Design" />
    <Reference Include="System.Drawing" />
    <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

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.Drawing.Design
Imports System.Windows.Forms.Design
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Imports System.Text
Imports System.IO

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", "EncryptionType", _
    "IsCertificateFileVariable", "CertificateFile", "CertificateFileVariable", _
    "IsPasswordVariable", "Password", "PasswordVariable"})> _
<ValidateProperties("Validate")> _
<FilterProperties("GetProperties")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const ColumnSeparator As String = "," + vbLf
    Private Const Salt As String = "7ADC83D055D6459c8C1793C8D41A36FE"


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim colsCount As Integer = m_inputIdx.Length

        For colIndex As Integer = 0 To colsCount - 1
            Dim bufIndex As Integer = m_inputIdx(colIndex)

            If Row.Buffer.IsNull(bufIndex) Then
                Continue For
            End If

            Dim blob As BlobColumn = CType(Row.Buffer(bufIndex), BlobColumn)
            Dim data() As Byte = blob.GetBlobData(0, CInt(blob.Length))

            Select Case Me.EncryptionType
                Case EncryptionTypes.AES, EncryptionTypes.TripleDES, _
                    EncryptionTypes.DES, EncryptionTypes.RC2

                    ' Setup crypto stream.
                    Dim cs As CryptoStream
                    Dim ms As New MemoryStream
                    Dim sAlg As SymmetricAlgorithm = CType(m_encryptor, SymmetricAlgorithm)
                    If Me.Action = ActionTypes.Encryption Then
                        cs = New CryptoStream(ms, sAlg.CreateEncryptor(), CryptoStreamMode.Write)
                    Else
                        cs = New CryptoStream(ms, sAlg.CreateDecryptor(), CryptoStreamMode.Read)
                    End If

                    Try
                        Call cs.Write(data, 0, data.Length)
                    Finally
                        Call cs.Dispose()
                    End Try

                    data = ms.ToArray()

                Case EncryptionTypes.RSA
                    Dim rsaCer As X509Certificate2 = CType(m_encryptor, X509Certificate2)

                    Dim rsaCsp As RSACryptoServiceProvider
                    If Me.Action = ActionTypes.Encryption Then
                        rsaCsp = CType(rsaCer.PublicKey.Key, RSACryptoServiceProvider)
                        data = rsaCsp.Encrypt(data, True)
                    Else
                        rsaCsp = CType(rsaCer.PrivateKey, RSACryptoServiceProvider)
                        data = rsaCsp.Decrypt(data, True)
                    End If

                    ' RSACryptoServiceProvider reverses the order of encrypted bytes.
                    ' Reverse back to make the data compatible with CAPI.
                    Call Array.Reverse(data)
            End Select

            ' Set new column data.
            Call blob.ResetBlobData()
            Call blob.AddBlobData(data)
        Next
    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) {}
        For colIndex As Integer = 0 To colsCount - 1
            m_inputIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                input.InputColumnCollection(colIndex).LineageID)
        Next

        m_encryptor = CreateEncryptor_()
    End Sub ' PreExecute


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

        Try
            If Me.EncryptionType <> EncryptionTypes.RSA AndAlso _
                String.IsNullOrEmpty(Me.Password) Then
                Throw New Exception("Specify password.")
            End If

            If Me.EncryptionType = EncryptionTypes.RSA AndAlso _
                String.IsNullOrEmpty(Me.CertificateFile) Then

                Throw New Exception("Specify certificate file.")
            End If

            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.None)
            Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()

            Call input.InputColumnCollection.RemoveAll()

            For Each col As String In selectedCols
                If Not String.IsNullOrEmpty(col) Then
                    Dim virtColumn As IDTSVirtualInputColumn100 = virtInput.VirtualInputColumnCollection(col)
                    Call virtInput.SetUsageType(virtColumn.LineageID, DTSUsageType.UT_READWRITE)
                End If
            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")
        Call result.Add("EncryptionType")
        Call result.Add("IsPasswordVariable")

        ' Setup dynamic.
        Call result.Add(IIf(Me.IsPasswordVariable, "PasswordVariable", "Password"))

        If Me.EncryptionType = EncryptionTypes.RSA Then
            Call result.Add("IsCertificateFileVariable")
            Call result.Add(IIf( _
                Me.IsCertificateFileVariable, _
                "CertificateFileVariable", _
                "CertificateFile"))
        End If

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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns only columns with type DT_IMAGE.
    Public Function GetInputColumns() As Object()
        Dim result As New ArrayList

        Dim virtInput As IDTSVirtualInput100 = MyBase.ComponentMetaData.InputCollection(0).GetVirtualInput()
        For Each virtColumn As IDTSVirtualInputColumn100 In virtInput.VirtualInputColumnCollection
            If virtColumn.DataType = DataType.DT_IMAGE Then
                Call result.Add(virtColumn.Name)
            End If
        Next

        Call result.Sort()

        GetInputColumns = result.ToArray()
    End Function    ' GetInputColumns


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select input columns you want to process.")> _
    <List("GetInputColumns", True, 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 Not input.IsAttached Then
                ' Reset when no input is attached.
                value = String.Empty
            End If

            m_inputCols = value
        End Set
    End Property    ' InputColumns


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select action.")> _
    Public Property Action() As ActionTypes
        Get
            Action = m_action
        End Get
        Set(ByVal value As ActionTypes)
            m_action = value
        End Set
    End Property    ' Action


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select encryption type.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property EncryptionType() As EncryptionTypes
        Get
            EncryptionType = m_type
        End Get
        Set(ByVal value As EncryptionTypes)
            m_type = value
        End Set
    End Property    ' EncryptionType


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify password.")> _
    <PasswordPropertyText(True)> _
    Public Property Password() As String
        Get
            Password = m_password
        End Get
        Set(ByVal value As String)
            m_password = value
        End Set
    End Property    ' Password


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies variable containing password.")> _
    <Variable()> _
    Public Property PasswordVariable() As String
        Get
            PasswordVariable = m_password
        End Get
        Set(ByVal value As String)
            m_password = value
        End Set
    End Property    ' PasswordVariable


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select certificate file (.cer|.pem)")> _
    <Editor(GetType(FileNameEditor), GetType(UITypeEditor))> _
    Public Property CertificateFile() As String
        Get
            CertificateFile = m_certificate
        End Get
        Set(ByVal value As String)
            m_certificate = value
        End Set
    End Property    ' CertificateFile


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies variable containing certificate file.")> _
    <Variable()> _
    Public Property CertificateFileVariable() As String
        Get
            CertificateFileVariable = m_certificate
        End Get
        Set(ByVal value As String)
            m_certificate = value
        End Set
    End Property    ' CertificateFileVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    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 CreateEncryptor_() As Object
        Dim result As Object

        ' Get password.
        Dim password As String = Me.Password
        If Me.IsPasswordVariable AndAlso _
            Not String.IsNullOrEmpty(Me.PasswordVariable) Then

            password = GetVariable_(Me.PasswordVariable).ToString()
        End If

        If password = "" Then
            password = Nothing
        End If

        ' Setup key derivation from password.
        Dim der As New Rfc2898DeriveBytes( _
            Me.Password, _
            Encoding.ASCII.GetBytes(Salt))

        Select Case Me.EncryptionType
            Case EncryptionTypes.AES
                Dim aes As Rijndael = Rijndael.Create()
                aes.Key = der.GetBytes(32)
                aes.IV = der.GetBytes(16)
                result = aes

            Case EncryptionTypes.RSA
                ' Get certificate file.
                Dim cerFile As String = Me.CertificateFile
                If Me.IsCertificateFileVariable AndAlso _
                    Not String.IsNullOrEmpty(Me.CertificateFileVariable) Then

                    cerFile = GetVariable_(Me.CertificateFileVariable).ToString()
                End If

                Dim cer As X509Certificate2 = New X509Certificate2(cerFile, password)
                If Me.Action = ActionTypes.Decryption AndAlso cer.PrivateKey Is Nothing Then
                    Throw New Exception("Private key not found.")
                End If

                result = cer

            Case EncryptionTypes.TripleDES
                Dim tripleDes As TripleDES = TripleDESCryptoServiceProvider.Create()
                tripleDes.Key = der.GetBytes(24)
                tripleDes.IV = der.GetBytes(8)
                result = tripleDes

            Case EncryptionTypes.DES
                Dim des As DES = des.Create()
                des.Key = der.GetBytes(8)
                des.IV = der.GetBytes(8)
                result = des

            Case EncryptionTypes.RC2
                Dim rc2 As RC2 = rc2.Create()
                rc2.Key = der.GetBytes(16)
                rc2.IV = der.GetBytes(8)
                result = rc2

            Case Else
                Throw New Exception("Unhandled encryption type.")
        End Select

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


#Region "Attributes"
    Public Enum ActionTypes
        Encryption
        Decryption
    End Enum    ' ActionTypes

    Public Enum EncryptionTypes
        AES
        RSA
        TripleDES
        DES
        RC2
    End Enum    ' EncryptionTypes

    Private m_inputCols As String = String.Empty
    Private m_action As ActionTypes = ActionTypes.Encryption
    Private m_type As EncryptionTypes = EncryptionTypes.AES
    Private m_isPasswordVar As Boolean
    Private m_password As String
    Private m_isCertificateVar As Boolean
    Private m_certificate As String

    Private m_inputIdx() As Integer
    Private m_encryptor As Object
#End Region ' Attributes

End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="130" 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_3d2264e1d41345ed8285b6454247d735.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAM2+HVEAAAAAAAAAAOAAAiELAQgAAEAAAAAMAAAAAAAADl4A
AAAgAAAAYAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAMBdAABLAAAAAGAAALgJAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAFD4AAAAgAAAAQAAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAALgJAAAAYAAAAAoAAABCAAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAATAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAADw
XQAAAAAAAEgAAAACAAUAcCwAAFAxAAABAAAAAAAAAFAgAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291cmNlcy5S
ZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMuUnVudGlt
ZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAAAeAigBAAAKKh4CKAQAAAoqpnMGAAAK
gAEAAARzBwAACoACAAAEcwgAAAqAAwAABHMJAAAKgAQAAAQqAAATMAEACwAAAAEAABF+AQAABG8K
AAAKKgATMAEACwAAAAIAABF+AgAABG8LAAAKKgATMAEACwAAAAMAABF+AwAABG8MAAAKKgATMAEA
CwAAAAQAABF+BAAABG8NAAAKKgATMAIADQAAAAUAABECAygRAAAKKBIAAAoqAAAAEzABAAcAAAAG
AAARAigTAAAKKgATMAEACwAAAAcAABHQBQAAAigUAAAKKgATMAEABwAAAAgAABECKBUAAAoqABMw
AQAQAAAACQAAEQKMAQAAGy0GKAEAACsqAioTMAIAEAAAAAoAABEDEgD+FQIAABsGgQIAABsqHgIo
FwAACioTMAIAKAAAAAsAABECexkAAApvGgAACgsHjAMAABstEigCAAArCwJ7GQAACgdvGwAACgcq
SgIoFwAACgJzHAAACn0ZAAAKKgAyAgMEBQ4EKB4AAAoqAAAAEzABAAcAAAAMAAARFo0bAAABKgAT
MAEABwAAAA0AABEWjRsAAAEqABMwAQAJAAAADgAAEQIoHwAACgoGKgAAABMwAQAJAAAADwAAEQIo
IAAACgoGKgAAAH4CKCIAAAoCAnMaAAAGfQYAAAQCAnMbAAAGfQcAAAQqtgMCKCMAAApvJAAACnIB
AABwbyUAAApvJgAACjMPAgIDFwRzEQAABm8YAAAGKgAASisHAgNvGQAABgNvFAAABi3xKgAGKgAA
OgIoFwAACgIDfQgAAAQqADoCKBcAAAoCA30JAAAEKgCCAigWAAAGAn4nAAAKfQwAAAQCFn0NAAAE
AhZ9DgAABCoAAAAbMAQATgEAABAAABECexMAAASOtwoWBhfaEwoNODABAAACexMAAAQJlAwDbygA
AAoIbykAAAosBTgQAQAAA28oAAAKCG8qAAAKdCEAAAELBxYHbysAAAqEbywAAAoTBAJvJgAABkUF
AAAABQAAAGkAAAAFAAAABQAAAAUAAAA4vAAAAHMtAAAKEwYCexQAAAR0JAAAARMHAm8kAAAGFjMT
EQYRB28uAAAKF3MvAAAKEwUrEREGEQdvMAAAChZzLwAAChMFEQURBBYRBI63bzEAAAreCBEFbzIA
AArcEQZvMwAAChMEK1gCexQAAAR0JQAAARMIAm8kAAAGFjMhEQhvNAAACm81AAAKdCYAAAETCREJ
EQQXbzYAAAoTBCsaEQhvNwAACnQmAAABEwkRCREEF284AAAKEwQRBCg5AAAKB286AAAKBxEEbzsA
AAoJF9YNCREKPsj+//8qAAABDAAAAgC4ABDIAAgAAAABEzAGAI8AAAARAAARAig8AAAKAm8jAAAK
byQAAAoWjC0AAAFvJQAACgsHbz0AAApvPgAACgoCBhfaF9aNLQAAAX0TAAAEFgYX2g0MKzgCexMA
AAQIAm8/AAAKb0AAAAoHb0EAAAoHbz0AAAoIjC0AAAFvQgAACm9DAAAKb0QAAAqeCBfWDAgJMcQC
Am81AAAGKBEAAAp9FAAABCoAGzAEAPQAAAASAAARAm8mAAAGFy4YAm8qAAAGKEUAAAosC3INAABw
c0YAAAp6Am8mAAAGFzMYAm8wAAAGKEUAAAosC3IxAABwc0YAAAp6Am8jAAAKbyQAAAoWjC0AAAFv
JQAACgwCbyIAAAYXjRsAAAETCBEIFnJlAABwohEIFm9HAAAKDQhvSAAAChMECG89AAAKb0kAAAoJ
EwoWEwkrNhEKEQmaEwURBShFAAAKLSARBG9KAAAKEQVvSwAAChMGEQQRBm9MAAAKF29NAAAKJhEJ
F9YTCREJEQqOtzLCFwreGiUoTgAAChMHFgoDEQdvTwAAClEoUAAACt4ABgsHKgEMAAAAAAAA1tYA
GjQAAAETMAQAowAAABMAABFzUQAACgsHcmsAAHBvUgAACiYHcoUAAHBvUgAACiYHcpMAAHBvUgAA
CiYHcrEAAHBvUgAACiYHAm8oAAAGctcAAHBy+QAAcChTAAAKKBEAAApvUgAACiYCbyYAAAYXMy0H
cgsBAHBvUgAACiYHAm8uAAAGcj8BAHBybwEAcChTAAAKKBEAAApvUgAACiYH0BsAAAEoFAAACm9U
AAAKdAoAABsqABswAgCIAAAAFAAAEXNRAAAKCwIoIwAACm8kAAAKFowtAAABbyUAAApvSAAACgwI
b0oAAApvVQAAChMEKycRBG9WAAAKdDMAAAENCW9XAAAKIC0BAAAzDQcJb1gAAApvUgAACiYRBG9Z
AAAKLdDeFhEEdT0AAAEsDBEEdT0AAAFvWgAACtwHb1sAAAoHb1wAAAoKBioBDAAAAgAiAEFjABYA
AAABEzABAAkAAAAVAAARAnsMAAAECgYqAAAAEzACAC4AAAAWAAARAigjAAAKbyQAAAoWjC0AAAFv
JQAACgoGb10AAAotB34nAAAKEAECA30MAAAEKgAAEzABAAkAAAAXAAARAnsNAAAECgYqAAAAIgID
fQ0AAAQqAAAAEzABAAkAAAAYAAARAnsOAAAECgYqAAAAIgIDfQ4AAAQqAAAAEzABAAkAAAAZAAAR
AnsPAAAECgYqAAAAcgJ7DwAABAMuEgIDfQ8AAAQCficAAAp9EAAABCoAAAATMAEACQAAABoAABEC
exAAAAQKBioAAAAiAgN9EAAABCoAAAATMAEACQAAABsAABECexAAAAQKBioAAAAiAgN9EAAABCoA
AAATMAEACQAAABwAABECexEAAAQKBioAAAByAnsRAAAEAy4SAgN9EQAABAJ+JwAACn0SAAAEKgAA
ABMwAQAJAAAAHQAAEQJ7EgAABAoGKgAAACICA30SAAAEKgAAABMwAQAJAAAAHgAAEQJ7EgAABAoG
KgAAACICA30SAAAEKgAAABswAwA0AAAAHwAAERQMAm9eAAAKAxICb18AAAoIA29gAAAKb2EAAAoo
EQAACgveBwhvYgAACtwHKBEAAAoKBioBDAAAAgAQABQkAAcAAAABEzADAJgBAAAgAAARAm8qAAAG
DAJvKAAABiwfAm8sAAAGKEUAAAotEgICbywAAAZvNAAABm8VAAAKDAhyjwEAcBYoYwAAChYzAhQM
Am8qAAAGKGQAAApykQEAcG9lAAAKc2YAAAoLAm8mAAAGRQUAAAAFAAAAMgAAAJEAAAC6AAAA4gAA
ADgGAQAAKGcAAAoTBBEEBx8gb2gAAApvaQAAChEEBx8Qb2gAAApvagAAChEEDTjkAAAAAm8wAAAG
EwYCby4AAAYsIAJvMgAABihFAAAKLRMCAm8yAAAGbzQAAAZvFQAAChMGEQYIc2sAAAoTBQJvJAAA
BhczFBEFbzcAAAotC3LTAQBwc0YAAAp6EQUNOIUAAAAobAAAChMHEQcHHxhvaAAACm9tAAAKEQcH
Hm9oAAAKb2oAAAoRBw0rXChuAAAKEwgRCAceb2gAAApvbwAAChEIBx5vaAAACm9qAAAKEQgNKzQo
cAAAChMJEQkHHxBvaAAACm9pAAAKEQkHHm9oAAAKb2oAAAoRCQ0rC3IBAgBwc0YAAAp6CSgRAAAK
CgYqHgIoFwAACioTMAIALQAAACEAABF+HgAABC0gcjcCAHDQDgAAAigUAAAKb3wAAApzfQAACgsH
gB4AAAR+HgAABCoAAAATMAEABgAAACIAABF+HwAABCoAAB4CgB8AAAQqQnMXAAAKKBEAAAqAIQAA
BCoAAAAeAih+AAAKKhswAQA/AAAAIwAAEX4gAAAELTJ+IQAABCgRAAAKKH8AAAp+IAAABC0cczsA
AAaAIAAABN4QfiEAAAQoEQAACiiAAAAK3H4gAAAEKgABDAAAAgAdAAwpABAAAAABQlNKQgEAAQAA
AAAADAAAAHYyLjAuNTA3MjcAAAAABQBsAAAAMBAAACN+AACcEAAA0BQAACNTdHJpbmdzAAAAAGwl
AABsAgAAI1VTANgnAAAQAAAAI0dVSUQAAADoJwAAaAkAACNCbG9iAAAAAAAAAAIAAAFXHaIJCQ8A
AAD6ATMAFgAAAQAAAGAAAAAPAAAAIQAAADwAAAAaAAAAiwAAAAkAAABPAAAAIwAAAAYAAAATAAAA
HQAAAAoAAAABAAAACgAAAAEAAAAEAAAAAwAAAAIAAAAAAJEUAQAAAAAACgDFAZsBCgD5AdsBBgAJ
AgICCgBhApsBBgDfAgICCgBhAzcDDgCzA5wDEgACBOEDFgAzBOEDDgDOBJwDBgAfCAICBgBtCFwI
BgCaCIUIGgABCewIGgBOCTgJGgBnCTgJGgCUCXwJBgC+CasJCgD9CdYJCgAVChMAGgBKCi0KBgB/
Cl8KBgCdCgICBgDBCgICCgDaChMABgAeC/8KBgAyCwICEgA5C+EDBgBGCwICHgCpC4ALHgDYC4AL
HgADDIALFgAmDOEDBgBODDEMBgBlDFsMBgByDDEMGgCzDIUMBgDEDDEMBgAGDTEMBgAnDVsMBgAu
DTEMGgBlDYUMBgB9DTEMBgC4DQICBgDgDQICHgDmDYALFgAnDuEDHgBLDoALHgByDoALHgCpDoAL
HgC9DoALBgDXDgICBgDvDgICHgAiD4ALHgBnD4ALCgCBD9YJBgDOD7sPCgDcDxMABgDsD7sPIgBd
EDUQBgCFEAICIgClEDUQIgC2EDUQIgD0EDUQBgALETEMBgAeETEMBgBKCDEMBgBUCDEMBgBYCDEM
CgAnEdYJBgBLET8REgB9EeEDDgDGEaQRDgDgEaQRDgD8EaQRGgAUEjgJGgApEjgJGgBEEjgJDgBW
EqQRGgBoEjgJGgCjEjgJDgCzEqQRDgDBEqQRBgDpEtcSBgAQE/8SBgAjE6sJBgCME18KBgCsE18K
BgDKE9cSBgDnE/8KBgD1E9cSBgAQFNcSBgArFNcSBgBEFNcSBgBdFNcSBgB6FNcSAAAAAAEAAAAA
AAEAAQAAAAAAKQA3AAUAAQABAAAAAAByADcACQABAAIAAAEQAH0ANwANAAEAAwAFAQAAhwAAAA0A
BQAIAAUBAACVAAAADQAFAA8AAQAAALAAvAAdAAYAEQABAAAA9AC8ACkABgAWAAEAAAACAbwADQAI
ABoAAQAAAA4BvAANAAkAGwABAAAAGAG8ACAACgAcAAIBAAAjAQAALQAVADYAAgEAAC8BAAAtABgA
NgAAAAAAPwFLAQ0AHgA2AAABEACQAbwAOQAgADoAMQAkAiAAMQBNAi0AMQBvAjoAMQCUAkcAIQBw
A5AABgACAccABgAOAcsAAQAkBdwAAQAkBdwAUYA0BeYAUYBEBeYAAQAeB+YAAQAqB2MBAQAzB2cB
AQA6B2sBAQBKB+YAAQBVB2sBAQBoB+YAAQB2B24BAQCBB3IBBgYkCIcBVoAsCGMBVoA3CGMBBgYk
CIcBVoBCCGcBVoBGCGcBVoBKCGcBVoBUCGcBVoBYCGcBEQB9CKMBEQCmCKcBEQAZCcUBEQAhCXIB
CCEAAAAABhjVARMAAQAQIQAAAAAGGNUBEwABABghAAAAABEYEAIXAAEARCEAAAAAEwgXAhsAAQBc
IQAAAAATCD0CKAABAHQhAAAAABMIZgI1AAEAjCEAAAAAEwiEAkIAAQCkIQAAAABGAsoCYwABAMAh
AAAAAEYC0wJoAAIA1CEAAAAAgwDkAmwAAgDsIQAAAABGAuwCcQACAAAiAAAAABEA9QJ4AAIAHCIA
AAAAAQATA4AAAwA4IgAAAAAGGNUBEwAEAEAiAAAAAAMIJwOLAAQAdCIAAAAABhjVARMABACIIgAA
AAAGGNUBrwAEAJgiAAAAAEYKZAS5AAgArCIAAAAARgp7BLkACADAIgAAAACGAJMEvgAIANgiAAAA
AIYAmwS+AAgA8CIAAAAABhjVARMACAAQIwAAAABGAuIEzwAIAEAjAAAAAEYD9wTWAAoAVCMAAAAA
RgMKBdYACwBYIwAAAAAGGNUB4AAMAGgjAAAAAAYY1QHgAA0AeCMAAAAABhjVARMADgCcIwAAAABG
AgoF1gAOAAglAAAAAEYCSQUTAA8ApCUAAAAABgBUBS8BDwC0JgAAAAAGAGgFuQAQAGQnAAAAAAYA
dgU1ARAACCgAAAAABgiGBXEAEAAgKAAAAAAGCJcFOgEQAFwoAAAAAAYIrgU/AREAdCgAAAAABgi5
BUQBEQCAKAAAAAAGCMQFSgESAJgoAAAAAAYI1wVPARIApCgAAAAABgjqBb4AEwC8KAAAAAAGCAEG
VQETANwoAAAAAAYIGAZxABQA9CgAAAAABgglBjoBFAAAKQAAAAAGCDIGcQAVABgpAAAAAAYIRwY6
ARUAJCkAAAAABghcBr4AFgA8KQAAAAAGCHoGVQEWAFwpAAAAAAYImAZxABcAdCkAAAAABgisBjoB
FwCAKQAAAAAGCMAGcQAYAJgpAAAAAAYI3AY6ARgApCkAAAAAAQD4BloBGQD0KQAAAAABAA0HXwEa
AJgrAAAAAAMY1QETABoAoCsAAAAAFgiyCKsBGgDcKwAAAAAWCMYIsAEaAPArAAAAABYI0gi1ARoA
+CsAAAAAERgQAhcAGwAMLAAAAAAGGNUBEwAbABQsAAAAABYILgnJARsAAAABANECAAABAAoDAAAB
AAoDAAABAEIEAAACAEwEAAADAFUEAAAEAF0EAAABAO8EAAACAF0EAAABAF0EAAABACAFAAABAEIE
AAABAEIEAAABACAFAAABAF0FAAABAKgFAAABAKgFAAABAKgFAAABAKgFAAABAKgFAAABAKgFAAAB
AKgFAAABAKgFAAABAKgFAAABAAUHAAABAN4ICQDVARMAeQDVAdMBiQDVAeIBEQDVARMAkQDVARMA
JADVARMALADVARMANADVARMAPADVARMAJAAnA4sALAAnA4sANAAnA4sAPAAnA4sAmQDVARMAoQDV
ARMAqQDVAToBsQCOCnYCGQDKAmMAGQDTAmgAKQCvCoMCGQDsAnEAwQDLCpMCGQDVARMAyQDVAaMC
RABwA5AATAAuCYsATAD1CiADTADVARMA0QDVAVUBOQDVAa8A4QCTBL4A4QCbBL4A6QDVAVUBUQDV
ARMAQQDCCzgD8QDvCz0D+QAQDEIDAQEZDGgA2QAgDOYAOQDdDEkDSQDoDE4DSQAQDFMDCQHvDFgD
CQH6DFwDGQHVARMAIQEXDWMDEQHVAWkDIQE/DWMDEQFPDXYDQQFVDRMAGQFdDX4DKQFvDYMDUQGR
DYkDMQGZDY8DKQGhDYkDMQGwDY8DYQG+DZcDCQHGDRMACQHUDZ4DQQBJBRMAAQEDDsEDcQEdDmgA
UQA5DscDeQFgDs0DAQHdDGgAcQEQDNMDiQGFDmgAgQGTDtoD2QDhDukDoQHVAToB2QACD+4DAQEI
D/gDcQEYDxMAkQFGD/4DsQEQDAQEmQGFDmgAkQF0DwsEwQGNDxMEoQGdD3EAwQGpDxcAyQHVARMA
yQHYDzME0QHoDzgEyQFdDT8EsQH4D1IE2QEGEF8BmQFmEFgEmQFzEHEA2QF8EL4A6QFVDRMAyQGR
EBMAyQFdDTUBAQGWEL4AQQDPEH8E+QHlEIUE8QEQDI4EAQIuCV8B8QEEERMAMQIxEZ0EOQJUEaQE
OQJeEaoECQLVAbAEEQJnEbcECQJeEb0EIQFuEZ4DIQF2EZ4DKQHVAeIBGQJnEcMEGQJuEZ4DIQJn
EckEIQJuEZ4DKQJnEc8EQQLVARMASQLVAToBUQLVAToBWQLVAREFYQLVAToBaQLVAccFeQLVARMA
gQLVAVUBiQLVATUGkQLVAV8HmQLVARMAKQDyEmoIYQDVAXAIcQDVARMAqQIYE40IqQIeE40IsQLV
ARMAuQLVAZcIwQLVARMAyQLVAToB0QLVAToB2QLVAToB4QLVAToB6QLVAToB8QLVAToB+QLVAToB
AQPVAToBDgAoAOkADgAsAO4ACABYAIoBCABcAI8BCABkAIoBCABoAI8BCABsAJQBCABwAJkBCAB0
AJ4BKQCDADACLgBTBC0DLgBLBFgJLgAjBMQILgArBNEILgBDBBsJLgATBJwILgAbBKUILgBbBBsJ
LgDrAC0DLgALARgGLgAzBC0DLgA7BPsIQAArAI8BQAATANkBQwATANkBQwAbAOgBSQCDAGICYwAb
AOgBYwATANkBaQCDAEECgAArAI8BgwBzAI8BgwB7AI8BgwAbAOgBiQCDAE4CoAArAI8BowDDAKsC
owATANkBwAArAI8BwwDrAC0DwwATANkB4AArAI8B4wALAS0DAAErAI8BAAETANkBAwELAS0DCQGr
A30HCQHTA2YHIAErAI8BIAETANkBKQGrA7MFQAETANkBQAErAI8BSQGzA9kBSQGrA84FYAETANkB
YAErAI8BYwELAS0DYwGjAxcFYwGLA48BYwGTA/AEYwGbAwMFaQGrA+EHaQGzA9kBaQHbA48BgAEr
AI8BiQHDAxgGiQGrAx4GoAErAI8BqQG7A48BqQGrA+sFwAETANkBwAErAI8ByQGrAyIIyQHbA48B
yQGzA9kB4AErAI8B6QGrAzYH6QHLAz0GAAIrAI8BAAITANkBCQKrA6wHCQK7A48BKQITAIQISQIT
AIQIaQILBI8BQAMLAS0DYAMLAS0DHAIhAiYCKwJ7An8CigKPAp4CngImAzMDMwN7AnsCpAPgAxoE
SgReBI8CbwR1BHoEewKPAo8CewKPAo8ClQTVBHgIfwiSCAQAAQAGAAUABwAGAAsACAAOABEADwAT
AAAA+QFPAAAAsgJUAAAAYQJZAAAAvgJeAAAAegOYAAAApwTCAAAAugTCAAAAjQd1AQAAmgd5AQAA
oQd+AQAAsAeDAQAAwwd1AQAAzAd1AQAA3QeDAQAA9wd1AQAABwh1AQAAbQi7AQAA5AjAAQAA3gjO
AQIABAADAAIABQAFAAIABgAHAAIABwAJAAIADwALAAIAEgANAAIAEwAPAAIAIgARAAEAIwARAAIA
JAATAAEAJQATAAIAJgAVAAEAJwAVAAEAKQAXAAIAKAAXAAIAKgAZAAEAKwAZAAIALAAbAAEALQAb
AAIALgAdAAEALwAdAAIAMAAfAAEAMQAfAAIAMgAhAAEAMwAhAAIANwAjAAIAOAAlAAEAOQAlAAIA
PAAnAHUAdQCIAAACBwIOAhUCDQMUA0cEBIAAAAEAAAAAAAAAAAAAAAAAvAAAAAIAAAAAAAAAAAAA
AAEACgAAAAAACAAAAAAAAAAAAAAACgATAAAAAAABAAAAAAAAAAAAAACdAIYDAAAAAAoAAAAAAAAA
AAAAAKYAxAMAAAAACgAAAAAAAAAAAAAApgASBAAAAAACAAAAAAAAAAAAAAABAAICAAAAAAoAAAAA
AAAAAAAAAKYAXAsAAAAACgAAAAAAAAAAAAAApgASEAAAAAACAAAAAAAAAAAAAAAKAIYSAAAAAAIA
AAAAAAAAAAAAAAoAlBIAAAAAAAAAAAEAAABAEwAABQAEAAYABAAMAAsADQALAAAAEAAMAAgDAAAQ
ABkACAMAAAAAGwAIAy0AmQItABsDAAAAAAA8TW9kdWxlPgBtc2NvcmxpYgBNaWNyb3NvZnQuVmlz
dWFsQmFzaWMATXlBcHBsaWNhdGlvbgBTY3JpcHRDb21wb25lbnRfM2QyMjY0ZTFkNDEzNDVlZDgy
ODViNjQ1NDI0N2Q3MzUudmJwcm9qLk15AE15Q29tcHV0ZXIATXlQcm9qZWN0AE15V2ViU2Vydmlj
ZXMAVGhyZWFkU2FmZU9iamVjdFByb3ZpZGVyYDEASW5wdXRCdWZmZXIAU2NyaXB0Q29tcG9uZW50
XzNkMjI2NGUxZDQxMzQ1ZWQ4Mjg1YjY0NTQyNDdkNzM1LnZicHJvagBVc2VyQ29tcG9uZW50AENv
bm5lY3Rpb25zAFZhcmlhYmxlcwBTY3JpcHRNYWluAEFjdGlvblR5cGVzAEVuY3J5cHRpb25UeXBl
cwBNeVJlc291cmNlcwBTY3JpcHRDb21wb25lbnRfM2QyMjY0ZTFkNDEzNDVlZDgyODViNjQ1NDI0
N2Q3MzUudmJwcm9qLk15LlJlc291cmNlcwBNeVNldHRpbmdzAE1pY3Jvc29mdC5WaXN1YWxCYXNp
Yy5BcHBsaWNhdGlvblNlcnZpY2VzAEFwcGxpY2F0aW9uQmFzZQAuY3RvcgBNaWNyb3NvZnQuVmlz
dWFsQmFzaWMuRGV2aWNlcwBDb21wdXRlcgBTeXN0ZW0AT2JqZWN0AC5jY3RvcgBnZXRfQ29tcHV0
ZXIAbV9Db21wdXRlck9iamVjdFByb3ZpZGVyAGdldF9BcHBsaWNhdGlvbgBtX0FwcE9iamVjdFBy
b3ZpZGVyAFVzZXIAZ2V0X1VzZXIAbV9Vc2VyT2JqZWN0UHJvdmlkZXIAZ2V0X1dlYlNlcnZpY2Vz
AG1fTXlXZWJTZXJ2aWNlc09iamVjdFByb3ZpZGVyAEFwcGxpY2F0aW9uAFdlYlNlcnZpY2VzAEVx
dWFscwBvAEdldEhhc2hDb2RlAFR5cGUAR2V0VHlwZQBUb1N0cmluZwBDcmVhdGVfX0luc3RhbmNl
X18AVABpbnN0YW5jZQBEaXNwb3NlX19JbnN0YW5jZV9fAGdldF9HZXRJbnN0YW5jZQBNaWNyb3Nv
ZnQuVmlzdWFsQmFzaWMuTXlTZXJ2aWNlcy5JbnRlcm5hbABDb250ZXh0VmFsdWVgMQBtX0NvbnRl
eHQAR2V0SW5zdGFuY2UAQ296eVJvYy5TU0lTUGx1cy4yMDA4AENvenlSb2MuU3FsU2VydmVyLlNT
SVMAU2NyaXB0QnVmZmVyUGx1cwBNaWNyb3NvZnQuU3FsU2VydmVyLlR4U2NyaXB0AE1pY3Jvc29m
dC5TcWxTZXJ2ZXIuRHRzLlBpcGVsaW5lAFNjcmlwdENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2Vy
dmVyLlBpcGVsaW5lSG9zdABQaXBlbGluZUJ1ZmZlcgBDb21wb25lbnQAT2JqZWN0SUQASXNJbnB1
dABCdWZmZXIAZ2V0X1N0YXRpY0lucHV0Q29sdW1ucwBnZXRfU3RhdGljT3V0cHV0Q29sdW1ucwBO
ZXh0Um93AEVuZE9mUm93c2V0AFN0YXRpY0lucHV0Q29sdW1ucwBTdGF0aWNPdXRwdXRDb2x1bW5z
AFNjcmlwdENvbXBvbmVudFBsdXMAUHJvY2Vzc0lucHV0AElucHV0SUQASW5wdXRfUHJvY2Vzc0lu
cHV0AElucHV0X1Byb2Nlc3NJbnB1dFJvdwBSb3cAUGFyZW50Q29tcG9uZW50AENvbHVtblNlcGFy
YXRvcgBTYWx0AFByZUV4ZWN1dGUAVmFsaWRhdGUAZXJyTWVzc2FnZQBHZXRQcm9wZXJ0aWVzAEdl
dElucHV0Q29sdW1ucwBnZXRfSW5wdXRDb2x1bW5zAHNldF9JbnB1dENvbHVtbnMAdmFsdWUAZ2V0
X0FjdGlvbgBzZXRfQWN0aW9uAGdldF9FbmNyeXB0aW9uVHlwZQBzZXRfRW5jcnlwdGlvblR5cGUA
Z2V0X0lzUGFzc3dvcmRWYXJpYWJsZQBzZXRfSXNQYXNzd29yZFZhcmlhYmxlAGdldF9QYXNzd29y
ZABzZXRfUGFzc3dvcmQAZ2V0X1Bhc3N3b3JkVmFyaWFibGUAc2V0X1Bhc3N3b3JkVmFyaWFibGUA
Z2V0X0lzQ2VydGlmaWNhdGVGaWxlVmFyaWFibGUAc2V0X0lzQ2VydGlmaWNhdGVGaWxlVmFyaWFi
bGUAZ2V0X0NlcnRpZmljYXRlRmlsZQBzZXRfQ2VydGlmaWNhdGVGaWxlAGdldF9DZXJ0aWZpY2F0
ZUZpbGVWYXJpYWJsZQBzZXRfQ2VydGlmaWNhdGVGaWxlVmFyaWFibGUAR2V0VmFyaWFibGVfAHZh
ck5hbWUAQ3JlYXRlRW5jcnlwdG9yXwBtX2lucHV0Q29scwBtX2FjdGlvbgBtX3R5cGUAbV9pc1Bh
c3N3b3JkVmFyAG1fcGFzc3dvcmQAbV9pc0NlcnRpZmljYXRlVmFyAG1fY2VydGlmaWNhdGUAbV9p
bnB1dElkeABtX2VuY3J5cHRvcgBJbnB1dENvbHVtbnMAQWN0aW9uAEVuY3J5cHRpb25UeXBlAElz
UGFzc3dvcmRWYXJpYWJsZQBQYXNzd29yZABQYXNzd29yZFZhcmlhYmxlAElzQ2VydGlmaWNhdGVG
aWxlVmFyaWFibGUAQ2VydGlmaWNhdGVGaWxlAENlcnRpZmljYXRlRmlsZVZhcmlhYmxlAEVudW0A
dmFsdWVfXwBFbmNyeXB0aW9uAERlY3J5cHRpb24AQUVTAFJTQQBUcmlwbGVERVMAREVTAFJDMgBT
eXN0ZW0uUmVzb3VyY2VzAFJlc291cmNlTWFuYWdlcgBfcmVzTWdyAFN5c3RlbS5HbG9iYWxpemF0
aW9uAEN1bHR1cmVJbmZvAF9yZXNDdWx0dXJlAGdldF9SZXNvdXJjZU1hbmFnZXIAZ2V0X0N1bHR1
cmUAc2V0X0N1bHR1cmUAVmFsdWUAQ3VsdHVyZQBTeXN0ZW0uQ29uZmlndXJhdGlvbgBBcHBsaWNh
dGlvblNldHRpbmdzQmFzZQBtX1ZhbHVlAG1fU3luY09iamVjdABnZXRfVmFsdWUAU3lzdGVtLkNv
bXBvbmVudE1vZGVsAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVTdGF0
ZQBTeXN0ZW0uQ29kZURvbS5Db21waWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRlAFN5c3RlbS5E
aWFnbm9zdGljcwBEZWJ1Z2dlckhpZGRlbkF0dHJpYnV0ZQBNaWNyb3NvZnQuVmlzdWFsQmFzaWMu
Q29tcGlsZXJTZXJ2aWNlcwBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxlTmFtZUF0
dHJpYnV0ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAEhlbHBLZXl3b3JkQXR0cmlidXRl
AFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMAR2V0T2JqZWN0
VmFsdWUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAQWN0aXZhdG9yAENyZWF0
ZUluc3RhbmNlAE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRlAHNldF9WYWx1ZQBTeXN0ZW0uUnVu
dGltZS5JbnRlcm9wU2VydmljZXMAQ29tVmlzaWJsZUF0dHJpYnV0ZQBTdHJpbmcAU2NyaXB0QnVm
ZmVyAENMU0NvbXBsaWFudEF0dHJpYnV0ZQBNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1BpcGVsaW5l
V3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZS5XcmFwcGVyAElEVFNDb21wb25l
bnRNZXRhRGF0YTEwMABnZXRfQ29tcG9uZW50TWV0YURhdGEASURUU0lucHV0Q29sbGVjdGlvbjEw
MABnZXRfSW5wdXRDb2xsZWN0aW9uAElEVFNJbnB1dDEwMABnZXRfSXRlbQBnZXRfSUQARW1wdHkA
QmxvYkNvbHVtbgBTeXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5AENyeXB0b1N0cmVhbQBTeXN0
ZW0uSU8ATWVtb3J5U3RyZWFtAFN5bW1ldHJpY0FsZ29yaXRobQBTeXN0ZW0uU2VjdXJpdHkuQ3J5
cHRvZ3JhcGh5Llg1MDlDZXJ0aWZpY2F0ZXMAWDUwOUNlcnRpZmljYXRlMgBSU0FDcnlwdG9TZXJ2
aWNlUHJvdmlkZXIAZ2V0X0J1ZmZlcgBJc051bGwAZ2V0X0xlbmd0aABHZXRCbG9iRGF0YQBJQ3J5
cHRvVHJhbnNmb3JtAENyZWF0ZUVuY3J5cHRvcgBTdHJlYW0AQ3J5cHRvU3RyZWFtTW9kZQBDcmVh
dGVEZWNyeXB0b3IAV3JpdGUARGlzcG9zZQBUb0FycmF5AFB1YmxpY0tleQBnZXRfUHVibGljS2V5
AEFzeW1tZXRyaWNBbGdvcml0aG0AZ2V0X0tleQBFbmNyeXB0AGdldF9Qcml2YXRlS2V5AERlY3J5
cHQAQXJyYXkAUmV2ZXJzZQBSZXNldEJsb2JEYXRhAEFkZEJsb2JEYXRhAEludDMyAElEVFNJbnB1
dENvbHVtbkNvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sdW1uQ29sbGVjdGlvbgBnZXRfQ291bnQA
UGlwZWxpbmVDb21wb25lbnQAZ2V0X0hvc3RDb21wb25lbnQASURUU0J1ZmZlck1hbmFnZXIxMDAA
Z2V0X0J1ZmZlck1hbmFnZXIASURUU0lucHV0Q29sdW1uMTAwAGdldF9MaW5lYWdlSUQARmluZENv
bHVtbkJ5TGluZWFnZUlEAElEVFNWaXJ0dWFsSW5wdXQxMDAASURUU1ZpcnR1YWxJbnB1dENvbHVt
bjEwMABFeGNlcHRpb24ASXNOdWxsT3JFbXB0eQBTdHJpbmdTcGxpdE9wdGlvbnMAU3BsaXQAR2V0
VmlydHVhbElucHV0AFJlbW92ZUFsbABJRFRTVmlydHVhbElucHV0Q29sdW1uQ29sbGVjdGlvbjEw
MABnZXRfVmlydHVhbElucHV0Q29sdW1uQ29sbGVjdGlvbgBEVFNVc2FnZVR5cGUAU2V0VXNhZ2VU
eXBlAFByb2plY3REYXRhAFNldFByb2plY3RFcnJvcgBnZXRfTWVzc2FnZQBDbGVhclByb2plY3RF
cnJvcgBTeXN0ZW0uQ29sbGVjdGlvbnMAQXJyYXlMaXN0AEFkZABJbnRlcmFjdGlvbgBJSWYASUVu
dW1lcmF0b3IAR2V0RW51bWVyYXRvcgBnZXRfQ3VycmVudABNaWNyb3NvZnQuU3FsU2VydmVyLkRU
U1J1bnRpbWVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUuV3JhcHBlcgBEYXRh
VHlwZQBnZXRfRGF0YVR5cGUAZ2V0X05hbWUATW92ZU5leHQASURpc3Bvc2FibGUAU29ydABnZXRf
SXNBdHRhY2hlZABJRFRTVmFyaWFibGVzMTAwAElEVFNWYXJpYWJsZURpc3BlbnNlcjEwMABnZXRf
VmFyaWFibGVEaXNwZW5zZXIATG9ja09uZUZvclJlYWQASURUU1ZhcmlhYmxlMTAwAFVubG9jawBS
ZmMyODk4RGVyaXZlQnl0ZXMAUmlqbmRhZWwAT3BlcmF0b3JzAENvbXBhcmVTdHJpbmcAU3lzdGVt
LlRleHQARW5jb2RpbmcAZ2V0X0FTQ0lJAEdldEJ5dGVzAENyZWF0ZQBzZXRfS2V5AHNldF9JVgBT
U0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJpYnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5T
U0lTLkF0dHJpYnV0ZXMARmlsdGVyUHJvcGVydGllc0F0dHJpYnV0ZQBWYWxpZGF0ZVByb3BlcnRp
ZXNBdHRyaWJ1dGUAU29ydFByb3BlcnRpZXNBdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1dGUA
UmVmcmVzaFByb3BlcnRpZXNBdHRyaWJ1dGUAUmVmcmVzaFByb3BlcnRpZXMAVmFyaWFibGVBdHRy
aWJ1dGUAUGFzc3dvcmRQcm9wZXJ0eVRleHRBdHRyaWJ1dGUAU3lzdGVtLkRlc2lnbgBTeXN0ZW0u
RHJhd2luZwBFZGl0b3JBdHRyaWJ1dGUATGlzdEF0dHJpYnV0ZQBOb25Fc3NlbnRpYWxBdHRyaWJ1
dGUAU3lzdGVtLlJlZmxlY3Rpb24AQXNzZW1ibHkAZ2V0X0Fzc2VtYmx5AFN5c3RlbS5UaHJlYWRp
bmcATW9uaXRvcgBFbnRlcgBFeGl0AERlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUAU2NyaXB0
Q29tcG9uZW50XzNkMjI2NGUxZDQxMzQ1ZWQ4Mjg1YjY0NTQyNDdkNzM1LnZicHJvai5SZXNvdXJj
ZXMucmVzb3VyY2VzAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAUnVudGltZUNvbXBh
dGliaWxpdHlBdHRyaWJ1dGUAQXNzZW1ibHlGaWxlVmVyc2lvbkF0dHJpYnV0ZQBHdWlkQXR0cmli
dXRlAEFzc2VtYmx5VHJhZGVtYXJrQXR0cmlidXRlAEFzc2VtYmx5Q29weXJpZ2h0QXR0cmlidXRl
AEFzc2VtYmx5UHJvZHVjdEF0dHJpYnV0ZQBBc3NlbWJseUNvbXBhbnlBdHRyaWJ1dGUAQXNzZW1i
bHlEZXNjcmlwdGlvbkF0dHJpYnV0ZQBBc3NlbWJseVRpdGxlQXR0cmlidXRlAFNjcmlwdENvbXBv
bmVudF8zZDIyNjRlMWQ0MTM0NWVkODI4NWI2NDU0MjQ3ZDczNS52YnByb2ouZGxsAAAAAAALSQBu
AHAAdQB0AAAjUwBwAGUAYwBpAGYAeQAgAHAAYQBzAHMAdwBvAHIAZAAuAAAzUwBwAGUAYwBpAGYA
eQAgAGMAZQByAHQAaQBmAGkAYwBhAHQAZQAgAGYAaQBsAGUALgAABSwACgAAGUkAbgBwAHUAdABD
AG8AbAB1AG0AbgBzAAANQQBjAHQAaQBvAG4AAB1FAG4AYwByAHkAcAB0AGkAbwBuAFQAeQBwAGUA
ACVJAHMAUABhAHMAcwB3AG8AcgBkAFYAYQByAGkAYQBiAGwAZQAAIVAAYQBzAHMAdwBvAHIAZABW
AGEAcgBpAGEAYgBsAGUAABFQAGEAcwBzAHcAbwByAGQAADNJAHMAQwBlAHIAdABpAGYAaQBjAGEA
dABlAEYAaQBsAGUAVgBhAHIAaQBhAGIAbABlAAAvQwBlAHIAdABpAGYAaQBjAGEAdABlAEYAaQBs
AGUAVgBhAHIAaQBhAGIAbABlAAAfQwBlAHIAdABpAGYAaQBjAGEAdABlAEYAaQBsAGUAAAEAQTcA
QQBEAEMAOAAzAEQAMAA1ADUARAA2ADQANQA5AGMAOABDADEANwA5ADMAQwA4AEQANAAxAEEAMwA2
AEYARQAALVAAcgBpAHYAYQB0AGUAIABrAGUAeQAgAG4AbwB0ACAAZgBvAHUAbgBkAC4AADVVAG4A
aABhAG4AZABsAGUAZAAgAGUAbgBjAHIAeQBwAHQAaQBvAG4AIAB0AHkAcABlAC4AADFNAHkALgBS
AGUAcwBvAHUAcgBjAGUAcwAuAE0AeQBSAGUAcwBvAHUAcgBjAGUAcwAAAAAAV65SO5i/GEmj5zzr
f40AmQAIt3pcVhk04IkIsD9ffxHVCjoDIAABAwAAAQQAABIMBwYVEhgBEgwEAAASCAcGFRIYARII
BAAAEhEHBhUSGAESEQQAABIUBwYVEhgBEhQECAASDAQIABIIBAgAEhEECAASFAQgAQIcAyAACAQg
ABIVAyAADgIeAAcQAQEeAB4ABzABAQEQHgACEwAEIAATAAcGFRIZARMABCgAEwAIFs9JC7gMNOoI
iYRdzYCAzJEJIAQBEiEIAhIlBCAAHQ4DIAACBCgAHQ4DBhIkAwYSKAYgAgEIEiUFIAEBEhwDBhIh
BSABARIhAgYOBCwACgBANwBBAEQAQwA4ADMARAAwADUANQBEADYANAA1ADkAYwA4AEMAMQA3ADkA
MwBDADgARAA0ADEAQQAzADYARgBFAAUgAQIQDgQgAB0cBCABAQ4EIAARMAUgAQERMAQgABE0BSAB
ARE0BCABAQIEIAEcDgMgABwDBhEwAwYRNAIGAgMGHQgCBhwDKAAOBCgAETAEKAARNAMoAAICBggE
AAAAAAQBAAAABAIAAAAEAwAAAAQEAAAAAwYSMQMGEjUEAAASMQQAABI1BQABARI1BAgAEjEECAAS
NQMGEjwEAAASPAQIABI8BSABARFBCAEAAQAAAAAABSACAQ4OFwEACk15VGVtcGxhdGUHOC4wLjAu
MAAABhUSGAESDAYVEhgBEggGFRIYARIRBhUSGAESFAQHARIMBAcBEggEBwESEQQHARIUEAEAC015
LkNvbXB1dGVyAAAMAQAHTXkuVXNlcgAAEwEADk15LldlYlNlcnZpY2VzAAATAQAOTXkuQXBwbGlj
YXRpb24AAAQAARwcAwcBAgMHAQgGAAESFRFdBAcBEhUDBwEOBRABAB4ABAoBHgAEBwEeAAcgBAEO
Dg4OYQEANFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRwQ2xpZW50UHJvdG9j
b2wSQ3JlYXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAAGFRIYARMABhUSGQET
AAQKARMABSABARMABgcCEwATAAUBAAAAAAQHAR0OBCAAEnkEIAASfQYgARKAgRwEIAASJQQgAQII
BCABHAgDIAAJBiACHQUICAUgABKAnQwgAwESgKESgJ0RgKUHIAMBHQUICAQgAB0FBSAAEoCpBSAA
EoCtByACHQUdBQIGAAEBEoCxBSABAR0FHAcMCBKAhQgIHQUSgIkSgI0SgJESgJUSgJkIETQFIAAS
gLkFIAASgL0FIAASgMEGIAESgMUcBSACCAgICAcECBKAgQgIBAABAg4JIAIdDh0OEYDVBSAAEoDJ
BSAAEoDZBiABEoDNHAcgAggIEYDdBgABARKA0RgHCwICEoCBHQ4SgMkOEoDNEoDRHQ4IHQ4EIAEI
HAYAAxwCHBwHIAESgLESFQIdDgcHAh0OEoDlBSAAEoDtBSAAEYDxEAcFHRwSgOUSgMkSgM0SgO0F
BwESgIEEBwERMAQHARE0BSAAEoD9CCACAQ4QEoD5BiABEoEBHAcHAxwcEoD5BgADCA4OAgUAABKB
HQUgAR0FDgYgAgEOHQUFAAASgQkFIAEdBQgFAAASgQ0FAAASgREFAAASgRUaBwscEoEFDhwSgQkS
gJUOEoENEoEREoEVETQSAQANR2V0UHJvcGVydGllcwAADQEACFZhbGlkYXRlAAAFIAEBHQ6AmgEA
CQAAAAxJbnB1dENvbHVtbnMGQWN0aW9uDkVuY3J5cHRpb25UeXBlGUlzQ2VydGlmaWNhdGVGaWxl
VmFyaWFibGUPQ2VydGlmaWNhdGVGaWxlF0NlcnRpZmljYXRlRmlsZVZhcmlhYmxlEklzUGFzc3dv
cmRWYXJpYWJsZQhQYXNzd29yZBBQYXNzd29yZFZhcmlhYmxlAAATAQAOU2VsZWN0IGFjdGlvbi4A
AAYgAQERgTkcAQAXU2VsZWN0IGVuY3J5cHRpb24gdHlwZS4AACwBACdTcGVjaWZpZXMgdmFyaWFi
bGUgY29udGFpbmluZyBwYXNzd29yZC4AAAUBAAEAABYBABFTcGVjaWZ5IHBhc3N3b3JkLgAAByAC
ARIVEhWA9wEAfFN5c3RlbS5XaW5kb3dzLkZvcm1zLkRlc2lnbi5GaWxlTmFtZUVkaXRvciwgU3lz
dGVtLkRlc2lnbiwgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
a2VuPWIwM2Y1ZjdmMTFkNTBhM2F1U3lzdGVtLkRyYXdpbmcuRGVzaWduLlVJVHlwZUVkaXRvciwg
U3lzdGVtLkRyYXdpbmcsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNL
ZXlUb2tlbj1iMDNmNWY3ZjExZDUwYTNhAAAoAQAjU2VsZWN0IGNlcnRpZmljYXRlIGZpbGUgKC5j
ZXJ8LnBlbSkAAAYgAwEOAgIWAQAPR2V0SW5wdXRDb2x1bW5zAQAAAC4BAClTZWxlY3QgaW5wdXQg
Y29sdW1ucyB5b3Ugd2FudCB0byBwcm9jZXNzLgAANAEAL1NwZWNpZmllcyB2YXJpYWJsZSBjb250
YWluaW5nIGNlcnRpZmljYXRlIGZpbGUuAABAAQA7U3BlY2lmaWVzIGlmIFBhc3N3b3JkIHByb3Bl
cnR5IHJlZmVyZW5jZXMgcGFja2FnZSB2YXJpYWJsZS4AAEcBAEJTcGVjaWZpZXMgaWYgQ2VydGlm
aWNhdGVGaWxlIHByb3BlcnR5IHJlZmVyZW5jZXMgcGFja2FnZSB2YXJpYWJsZS4AAAUgABKBUQcg
AgEOEoFRBgcCEjESMQQHARI1CAEAAgAAAAAABAABARwEBwESPAQgAQEICAEACAAAAAAAHgEAAQBU
AhZXcmFwTm9uRXhjZXB0aW9uVGhyb3dzAQwBAAcxLjAuMC4wAAApAQAkZmIxMmMyZmUtZjk5MS00
ZGI2LTlhNDEtYzBhYzIzZmM0MGIxAAAfAQAaQ29weXJpZ2h0IEAgTWljcm9zb2Z0IDIwMTMAADwB
ADdTY3JpcHRDb21wb25lbnRfM2QyMjY0ZTFkNDEzNDVlZDgyODViNjQ1NDI0N2Q3MzUudmJwcm9q
AAAOAQAJTWljcm9zb2Z0AAAA6F0AAAAAAAAAAAAA/l0AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAA
APBdAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAAAAAA/yUAIEAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMAAAAoAACADgAAAEgAAIAQ
AAAAYAAAgAAAAAAAAAAAAAAAAAAAAgACAAAAeAAAgAMAAACQAACAAAAAAAAAAAAAAAAAAAABAAB/
AACoAACAAAAAAAAAAAAAAAAAAAABAAEAAADAAACAAAAAAAAAAAAAAAAAAAABAAAAAADYAAAAAAAA
AAAAAAAAAAAAAAABAAAAAADoAAAAAAAAAAAAAAAAAAAAAAABAAAAAAD4AAAAAAAAAAAAAAAAAAAA
AAABAAAAAAAIAQAAgGUAAOgCAAAAAAAAAAAAAGhoAAAoAQAAAAAAAAAAAACQaQAAIgAAAAAAAAAA
AAAAGGEAAGgEAAAAAAAAAAAAAGgENAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAA
AAC9BO/+AAABAAAAAQAAAAAAAAABAAAAAAA/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAA
AAEAVgBhAHIARgBpAGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4A
AAAAAAAAsATIAwAAAQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAACkAwAAAQAwADAAMAAw
ADAANABiADAAAAA0AAoAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAE0AaQBjAHIAbwBzAG8A
ZgB0AAAAmAA4AAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFMAYwByAGkAcAB0
AEMAbwBtAHAAbwBuAGUAbgB0AF8AMwBkADIAMgA2ADQAZQAxAGQANAAxADMANAA1AGUAZAA4ADIA
OAA1AGIANgA0ADUANAAyADQANwBkADcAMwA1AC4AdgBiAHAAcgBvAGoAAAAwAAgAAQBGAGkAbABl
AFYAZQByAHMAaQBvAG4AAAAAADEALgAwAC4AMAAuADAAAACYADwAAQBJAG4AdABlAHIAbgBhAGwA
TgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMwBkADIAMgA2ADQAZQAx
AGQANAAxADMANAA1AGUAZAA4ADIAOAA1AGIANgA0ADUANAAyADQANwBkADcAMwA1AC4AdgBiAHAA
cgBvAGoALgBkAGwAbAAAAFwAGwABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAAEMAbwBw
AHkAcgBpAGcAaAB0ACAAQAAgAE0AaQBjAHIAbwBzAG8AZgB0ACAAMgAwADEAMwAAAAAAoAA8AAEA
TwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBu
AGUAbgB0AF8AMwBkADIAMgA2ADQAZQAxAGQANAAxADMANAA1AGUAZAA4ADIAOAA1AGIANgA0ADUA
NAAyADQANwBkADcAMwA1AC4AdgBiAHAAcgBvAGoALgBkAGwAbAAAAJAAOAABAFAAcgBvAGQAdQBj
AHQATgBhAG0AZQAAAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAzAGQAMgAyADYA
NABlADEAZAA0ADEAMwA0ADUAZQBkADgAMgA4ADUAYgA2ADQANQA0ADIANAA3AGQANwAzADUALgB2
AGIAcAByAG8AagAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADEALgAwAC4A
MAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMQAuADAALgAw
AC4AMAAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA
AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAB3d3d3d3d3d3d3d3d3d3AERERERERERERERERERERwBP/////////////////0cAT/////
////////////9HAE//////////////////RwBP/////////////////0cAT/////////////////
9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE////////
//////////RwBP/////////////////0cAT/////////////////9HAE//////////////////Rw
BP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////////
///////0cAT/////////////////9HAE//////////////////RwBIiIiIiIiIiIiIiIiIiEcARE
RERERERERERERERERHAETExMTExMTExMTs7OSXRwBMzMzMzMzMzMzMzMzMzEAABERERERERERERE
REREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////
////////////////wAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGA
AAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAADwAAAB///
/////////////ygAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA
AACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8A
AAAAAAAAAAAHd3d3d3d3d0RERERERERHT///////+EdP///////4R0////////hHT///////+EdP
///////4R0////////hHT///////+EdP///////4R0iIiIiIiIhHTMzMzMzMzEfEREREREREwAAA
AAAAAAAAAAAAAAAAAAD//wAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAEAAP//AAD//wAAAAABAAIAICAQAAEABADoAgAAAgAQEBAAAQAEACgBAAADAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAABQAAAMAAAAED4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA]]></arrayElement></arrayElements></property>
<property id="137" 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="806" 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_3d2264e1d41345ed8285b6454247d735</property>
<property id="807" 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="127" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"></input>
</inputs>
<outputs>
<output id="128" name="Output" description="" exclusionGroup="0" synchronousInputId="127" deleteOutputOnPathDetached="false" hasSideEffects="false" dangling="false" isErrorOut="false" isSorted="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></output>
</outputs>
</component>