<component id="399" name="One" 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="403" 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_85b40e08fd3e4c90b5fd30ea5f5dfa1b.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_85b40e08fd3e4c90b5fd30ea5f5dfa1b.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2011")> 
<Assembly: AssemblyTrademark("")> 
<Assembly: CLSCompliant(True)> 

<Assembly: ComVisible(False)> 

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("ce148c94-f939-466c-bd3a-b65d506a8f03")> 

' 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_85b40e08fd3e4c90b5fd30ea5f5dfa1b.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_85b40e08fd3e4c90b5fd30ea5f5dfa1b.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_85b40e08fd3e4c90b5fd30ea5f5dfa1b.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{F1DFAB2D-45CE-4469-8973-22E62952902F}</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="Google.GData.Client, Version=1.6.0.0, Culture=neutral, PublicKeyToken=04a59ca9b0273830, 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\resources.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


Namespace My.Resources
    
    '''<summary>
    '''   A strongly-typed resource class, for looking up localized strings, etc.
    '''</summary>
    'This class was auto-generated by the Strongly Typed Resource Builder
    'class via a tool like ResGen or Visual Studio.NET.
    'To add or remove a member, edit your .ResX file then rerun ResGen
    'with the /str option, or rebuild your VS project.
    Class MyResources
        
        Private Shared _resMgr As System.Resources.ResourceManager
        
        Private Shared _resCulture As System.Globalization.CultureInfo
        
        Friend Sub New()
            MyBase.New
        End Sub
        
        '''<summary>
        '''   Returns the cached ResourceManager instance used by this class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared ReadOnly Property ResourceManager() As System.Resources.ResourceManager
            Get
                If (_resMgr Is Nothing) Then
                    Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("My.Resources.MyResources", GetType(MyResources).Assembly)
                    _resMgr = temp
                End If
                Return _resMgr
            End Get
        End Property
        
        '''<summary>
        '''   Overrides the current thread's CurrentUICulture property for all
        '''   resource lookups using this strongly typed resource class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared Property Culture() As System.Globalization.CultureInfo
            Get
                Return _resCulture
            End Get
            Set
                _resCulture = value
            End Set
        End Property
    End Class
End Namespace
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\componentwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal Buffer As PipelineBuffer)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer))
        End If

    End Sub

    Public Overridable Sub Input_ProcessInput(ByVal Buffer As InputBuffer)

        While Buffer.NextRow()
            Input_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input_ProcessInputRow(ByVal Row As InputBuffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2010 CozyRoc LLC
' 
' Permission is hereby granted, free of charge, to any person
' obtaining a copy of this software and associated documentation
' files (the "Software"), to deal in the Software without
' restriction, including without limitation the rights to use,
' copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following
' conditions:
' 
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
' OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
' HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
' WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
' OTHER DEALINGS IN THE SOFTWARE.

Imports System
Imports System.ComponentModel
Imports System.Text
Imports System.Collections
Imports System.IO

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS.Attributes
Imports Google.GData.Client


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ColumnMappings()> _
<SortProperties(New String() {"Username", "Password", "IsPrivateMap", "MapName"})> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Constants
    Const MapsUrl As String = "http://maps.google.com/maps/feeds/maps/default/full"
    Const AclService As String = "http://schemas.google.com/acl/2007#accessControlList"
    Private DataColumn As String() = New String() {"Name", "Latitude", "Longitude", "Description"}


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        With Row
            ' Setup row.
            Dim data As String
            Dim colsCount As Integer = DataColumn.Length
            For colIndex As Integer = 0 To colsCount - 1
                If Not String.IsNullOrEmpty(data) Then
                    data += ","
                End If

                Dim column As String = Row.Buffer(m_inputIndexes(colIndex)).ToString().Replace("""", """""")

                data += String.Format("""{0}""", column)
            Next

            Call m_sbData.AppendLine(data)
        End With
    End Sub ' Input_ProcessInputRow


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

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

        ' Setup dynamic input columns indexes.
        Dim colsCount As Integer = DataColumn.Length
        m_inputIndexes = New Integer(colsCount - 1) {}
        Dim header() As String = New String(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim column As IDTSInputColumn100 = input.InputColumnCollection(colIndex)
            Dim extColumn As IDTSExternalMetadataColumn100 = extCols.GetObjectByID( _
                column.ExternalMetadataColumnID)

            header(colIndex) = extColumn.Name.ToLower()
            m_inputIndexes(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                column.LineageID)
        Next

        m_sbData = New StringBuilder()
        Call m_sbData.AppendLine(String.Join(",", header))
    End Sub ' PreExecute


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

        ' Setup service.
        Dim service As Service = New Service("local", "CozyRoc Create Google Map")
        Call service.setUserCredentials(Me.Username, Me.Password)

        Try
            ' Retrieve maps list.
            Dim mapsList As ArrayList = GetMaps_(service)

            ' Remove existing destination map (if found).
            Dim mapId As String = GetMapId_(mapsList, Me.MapName)
            If Not String.IsNullOrEmpty(mapId) Then
                ' Delete previous map.
                Call service.Delete(New Uri(mapId))
            End If

            ' Insert map.
            Dim content As String = m_sbData.ToString()
            Dim mapEntry As AtomEntry = service.Insert( _
                New Uri(MapsUrl), _
                New MemoryStream(Encoding.UTF8.GetBytes(content)), _
                "text/csv", _
                Me.MapName)

            If Me.IsPrivateMap Then
                ' Make map private.
                Dim aclLink As AtomLink = mapEntry.Links.FindService(AclService, Nothing)
                Call service.Delete(New Uri(aclLink.HRef.Content + "/default"))
            End If
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try
    End Sub ' PostExecute


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

        Try
            If String.IsNullOrEmpty(Me.Username) Then
                Throw New ApplicationException("Specify service user name.")
            End If

            If String.IsNullOrEmpty(Me.Password) Then
                Throw New ApplicationException("Specify service password.")
            End If

            If String.IsNullOrEmpty(Me.MapName) Then
                Throw New ApplicationException("Specify destination map name.")
            End If

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.IsAttached AndAlso input.InputColumnCollection.Count < DataColumn.Length Then
                Throw New Exception("Map input columns.")
            End If
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate


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

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

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

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

        ' Setup columns.
        Call AddColumn_(input, DataColumn(0), 10)
        Call AddColumn_(input, DataColumn(1), 10)
        Call AddColumn_(input, DataColumn(2), 10)
        Call AddColumn_(input, DataColumn(3), 250)
    End Sub ' ReinitializeMetaData


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify service user name.")> _
    Public Property Username() As String
        Get
            Username = m_username
        End Get
        Set(ByVal value As String)
            m_username = value
        End Set
    End Property    ' Username


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify service 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("Specify if map should be private.")> _
    <DefaultValue(True)> _
    Public Property IsPrivateMap() As Boolean
        Get
            IsPrivateMap = m_isPrivateMap
        End Get
        Set(ByVal value As Boolean)
            m_isPrivateMap = value
        End Set
    End Property    ' IsPrivateMap


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify destination map.")> _
    Public Property MapName() As String
        Get
            MapName = m_mapName
        End Get
        Set(ByVal value As String)
            m_mapName = value
        End Set
    End Property    ' MapName
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireInformation_(ByVal message As String)
        Dim fireAgain As Boolean = False
        Call MyBase.ComponentMetaData.FireInformation( _
            0, _
            "Google Data Source", _
            message, _
            String.Empty, _
            0, _
            fireAgain)
    End Sub ' FireInformation_


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub AddColumn_(ByVal input As IDTSInput100, ByVal name As String, ByVal length As Integer)
        Dim column As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.[New]()
        column.Name = name
        column.DataType = DataType.DT_WSTR
        column.Length = length
    End Sub ' AddColumn_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetMaps_(ByVal service As Service) As ArrayList
        Dim result As ArrayList = New ArrayList

        Dim query As FeedQuery = New FeedQuery(MapsUrl)
        query.NumberToRetrieve = 100

        Try

            Dim feed As AtomFeed = service.Query(query)
            While True
                Dim itemsCount As Integer = feed.Entries.Count
                For itemIndex As Integer = 0 To itemsCount - 1
                    Dim entry As AtomEntry = feed.Entries(itemIndex)
                    Call result.Add(entry)
                Next

                If String.IsNullOrEmpty(feed.NextChunk) Then
                    ' No more data to retrieve.
                    Exit While
                End If

                ' Setup next query iteration.
                query.StartIndex += itemsCount
                feed = service.Query(query)
            End While
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try

        GetMaps_ = result
    End Function    ' GetMaps_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetMapId_(ByVal mapsList As ArrayList, ByVal mapName As String) As String
        Dim result As String

        Dim itemsCount As Integer = mapsList.Count
        For itemIndex As Integer = 0 To itemsCount - 1
            Dim entry As AtomEntry = CType(mapsList(itemIndex), AtomEntry)
            If entry.Title.Text = mapName Then
                ' Found map.
                result = entry.EditUri.Content
                Exit For
            End If
        Next

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


#Region "Attributes"
    Private m_username As String
    Private m_password As String
    Private m_isPrivateMap As Boolean
    Private m_mapName As String

    Private m_sbData As StringBuilder
    Private m_inputIndexes() As Integer
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="404" 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_85b40e08fd3e4c90b5fd30ea5f5dfa1b.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
CADYIgAAAACGAH8EvgAIAPAiAAAAAAYYuQETAAgAECMAAAAARgLGBM8ACABAIwAAAABGA9sE1gAK
AFQjAAAAAEYD7gTWAAsAWCMAAAAABhi5AeAADABoIwAAAAAGGLkB4AANAHgjAAAAAAYYuQETAA4A
vCMAAAAARgLuBNYADgBIJAAAAABGAjYFEwAPADAlAAAAAEYCQQUTAA8ANCYAAAAABgBNBb0BDwD4
JgAAAABGAmEFEwAQAKwnAAAAAAYIdgVxABAAxCcAAAAABgiDBcMBEADQJwAAAAAGCJYFcQARAOgn
AAAAAAYIowXDAREA9CcAAAAABgiwBb4AEgAMKAAAAAAGCMEFyAESABgoAAAAAAYI0gVxABMAMCgA
AAAABgjeBcMBEwA8KAAAAAABAOoFwwEUAGgoAAAAAAEAAwbDARUAlCgAAAAAAQBoBs0BFgDIKAAA
AAABAL4G3gEZAJApAAAAAAEAzwblARoA8CkAAAAAAxi5ARMAHAD4KQAAAAAWCMgHBwIcADQqAAAA
ABYI3AcMAhwASCoAAAAAFgjoBxECHABQKgAAAAARGPQBFwAdAGQqAAAAAAYYuQETAB0AbCoAAAAA
FghECCgCHQAAAAEAtQIAAAEA7gIAAAEA7gIAAAEAJgQAAAIAMAQAAAMAOQQAAAQAQQQAAAEA0wQA
AAIAQQQAAAEAQQQAAAEABAUAAAEAJgQAAAEAJgQAAAEABAUAAAEAVgUAAAEAkAUAAAEAkAUAAAEA
kAUAAAEAkAUAAAEA+wUAAAEA+wUAAAEAcwYAAAIAeQYAAAMAfgYAAAEAxwYAAAEA2QYAAAIA4gYA
AAEA9AcJALkBEwCRALkBMgKhALkBQQIRALkBEwCpALkBEwAkALkBEwAsALkBEwA0ALkBEwA8ALkB
EwAkAAsDiwAsAAsDiwA0AAsDiwA8AAsDiwCxALkBEwC5ALkBEwDBALkBwwHJAKQJ2gIZAK4CYwAZ
ALcCaAApAMUJ5wIZANACcQDZAOEJ9wIZALkBEwDhALkBBwNEAFQDkABMAEQIiwBMAAsKhANMALkB
EwDpALkByAE5ALkBrwD5AHcEvgD5AH8EvgABAbkByAFRALkBEwBBAIsKnAMJAbgKogMRAcwKqANZ
ANUKaADxANwKrgPxAOoKswM5APEKuQNJAMwKvgPxAPwKwwPxAAQLyQNxAAsLzwNBADYFEwBZAHUL
3wNZALcL5QM5AcwK6wMhAdELaAAZAe4L8gMpAfwLcQDxAAUMcQBRAB8M+QNBAUYM/wNZAPEKaAAh
AVgMaABJAWYMBQRxALkBEwDxAHwMCwRBAEEFEwBpALkBQQJpAJ4MQQJpAbkBwwFpALUMJQRxANAC
cQBxAcUMLARxAc4MMgR5AbkBOARpAPUMPgRRAQ8NTASJARkNUgRZAS0NWgSRATYNcQCZAU4NYARh
AV4NcQCZAWoNFwChAbkBwwFZAJENvgA5AaANaABhAbkBwwFRAGEFEwARAaANaAAZAaoNyAE5AbUN
EwAZAbUNEwDxAL8N5gAJAcUNiAQJAdUNiAQZAd8NkwQpAeMNwwEpAUAOmQQpAU0OoARhALkBEwCx
AbkBwwGxAWsOoARpAIAOqwS5AZoOtARUAKANaADBAcwKwwRhALsOygS5Ab8OcQCxAc0OaACxAdwO
oARhAKANaABhAMwKvgNRAf0O6ATRAQcPcQDZARoP7gRRASgPWgThAbkBEwDpAbkBwwHxAbkBDgX5
AbkBEwABArkBwwEJArkByAERArkByAEpAC0QzgV5ALkB1AWJALkBEwAhAlMQ8QUhAlkQ8QUpArkB
EwAxArkBoAQ5ArkBEwBBArkBwwFJArkBwwFRArkBwwFZArkBwwFhArkBwwFpArkBwwFxArkBwwF5
ArkBwwEOACgA6QAOACwAUAEpAIMAlAIuACMEkQMuABMEegYuAOsDBAYuAPMDIwYuAAsEWgYuABsE
twYuAOMD+wUuACsEegYuAPsDMAYuAOsAkQMuAAsBZAUuAAMEkQNAACsAXwJAABMAOAJDABMAOAJD
ABsARwJJAIMAsgJjABsARwJjABMAOAJpAIMApQKAACsAXwKDABsARwKDAHsAXwKDAHMAXwKJAIMA
xgKgACsAXwKjABMAOAKjAMMADwPAACsAXwLDABMAOALDAOsAkQPgACsAXwLjAAsBkQMAARMAOAIA
ASsAXwIDAQsBkQMJAZsDRAUgARMAOAIgASsAXwIpAaMDZAUpAZsDagVAARMAOAJAASsAXwJJAZsD
pwVJAasDZAVgARMAOAJgASsAXwJjAYMDAAVjAYsDFAVjAZMDXwJjAQsBkQNjAXsDXwJpAZsDiQWA
ASsAXwKJARMA6AWgASsAXwKpARMA6AXAARMAOALAASsAXwLJAdsDXwLgASsAXwIAAhMAOAIAAisA
XwJAAwsBkQNgAwsBkQOAAoUCigKPAt8C4wLuAvMCAgMCA4oDlwOXA98C3wKXA9UDEgRnBHkEgwTz
AvMC3wLzAt8C3wKlBM8E9QTcBeMF9gUEAAEABgAFAAcABgALAAgADAAMAA0ADgAAAN0BTwAAAJYC
VAAAAEUCWQAAAKICXgAAAF4DmAAAAIsEwgAAAJ4EwgAAAEsH9wEAAFQH9wEAAF0H+wEAAGoH9wEA
AIMHFwIAAPoHHAIAAPQHLQICAAQAAwACAAUABQACAAYABwACAAcACQACAA8ACwACABIADQACABMA
DwACACIAEQABACMAEQACACQAEwABACUAEwACACYAFQABACcAFQABACkAFwACACgAFwACADAAGQAC
ADEAGwABADIAGwACADUAHQB1AHUAiABkAmsCcgJ5AnEDeAO6BASAAAABAAAAAAAAAAAAAAAAALwA
AAACAAAAAAAAAAAAAAABAAoAAAAAAAgAAAAAAAAAAAAAAAoAEwAAAAAAAQAAAAAAAAAAAAAAnQBq
AwAAAAAKAAAAAAAAAAAAAACmAKgDAAAAAAoAAAAAAAAAAAAAAKYA9gMAAAAACgAAAAAAAAAAAAAA
pgAOBgAAAAABAAYAAAAAAAAAAADVAaIGAAAAAAIAAAAAAAAAAAAAAAEA5gEAAAAACgAAAAAAAAAA
AAAApgDsDQAAAAAAAAAAAQAAAHsQAAAFAAQABgAEAAAAEAAMAOwCAAAQABkA7AIAAAAAGwDsAi0A
/QItAH8DAAAAAAA8TW9kdWxlPgBtc2NvcmxpYgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMATXlBcHBs
aWNhdGlvbgBTY3JpcHRDb21wb25lbnRfODViNDBlMDhmZDNlNGM5MGI1ZmQzMGVhNWY1ZGZhMWIu
dmJwcm9qLk15AE15Q29tcHV0ZXIATXlQcm9qZWN0AE15V2ViU2VydmljZXMAVGhyZWFkU2FmZU9i
amVjdFByb3ZpZGVyYDEASW5wdXRCdWZmZXIAU2NyaXB0Q29tcG9uZW50Xzg1YjQwZTA4ZmQzZTRj
OTBiNWZkMzBlYTVmNWRmYTFiLnZicHJvagBVc2VyQ29tcG9uZW50AENvbm5lY3Rpb25zAFZhcmlh
YmxlcwBTY3JpcHRNYWluAE15UmVzb3VyY2VzAFNjcmlwdENvbXBvbmVudF84NWI0MGUwOGZkM2U0
YzkwYjVmZDMwZWE1ZjVkZmExYi52YnByb2ouTXkuUmVzb3VyY2VzAE15U2V0dGluZ3MATWljcm9z
b2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMAQXBwbGljYXRpb25CYXNlAC5jdG9y
AE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1dGVyAFN5c3RlbQBPYmplY3QALmNj
dG9yAGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0UHJvdmlkZXIAZ2V0X0FwcGxpY2F0aW9u
AG1fQXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNlcgBtX1VzZXJPYmplY3RQcm92aWRlcgBn
ZXRfV2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2VzT2JqZWN0UHJvdmlkZXIAQXBwbGljYXRpb24A
V2ViU2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENvZGUAVHlwZQBHZXRUeXBlAFRvU3RyaW5nAENy
ZWF0ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERpc3Bvc2VfX0luc3RhbmNlX18AZ2V0X0dldElu
c3RhbmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZpY2VzLkludGVybmFsAENvbnRleHRW
YWx1ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBDb3p5Um9jLlNTSVNQbHVzLjIwMDgAQ296eVJv
Yy5TcWxTZXJ2ZXIuU1NJUwBTY3JpcHRCdWZmZXJQbHVzAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhT
Y3JpcHQATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUAU2NyaXB0Q29tcG9uZW50AE1p
Y3Jvc29mdC5TcWxTZXJ2ZXIuUGlwZWxpbmVIb3N0AFBpcGVsaW5lQnVmZmVyAENvbXBvbmVudABP
YmplY3RJRABJc0lucHV0AEJ1ZmZlcgBnZXRfU3RhdGljSW5wdXRDb2x1bW5zAGdldF9TdGF0aWNP
dXRwdXRDb2x1bW5zAE5leHRSb3cARW5kT2ZSb3dzZXQAU3RhdGljSW5wdXRDb2x1bW5zAFN0YXRp
Y091dHB1dENvbHVtbnMAU2NyaXB0Q29tcG9uZW50UGx1cwBQcm9jZXNzSW5wdXQASW5wdXRJRABJ
bnB1dF9Qcm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vzc0lucHV0Um93AFJvdwBQYXJlbnRDb21wb25l
bnQATWFwc1VybABBY2xTZXJ2aWNlAERhdGFDb2x1bW4AUHJlRXhlY3V0ZQBQb3N0RXhlY3V0ZQBW
YWxpZGF0ZQBlcnJNZXNzYWdlAFJlaW5pdGlhbGl6ZU1ldGFEYXRhAGdldF9Vc2VybmFtZQBzZXRf
VXNlcm5hbWUAdmFsdWUAZ2V0X1Bhc3N3b3JkAHNldF9QYXNzd29yZABnZXRfSXNQcml2YXRlTWFw
AHNldF9Jc1ByaXZhdGVNYXAAZ2V0X01hcE5hbWUAc2V0X01hcE5hbWUARmlyZUluZm9ybWF0aW9u
XwBtZXNzYWdlAEZpcmVFcnJvcl8ATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNQaXBlbGluZVdyYXAA
TWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBlcgBJRFRTSW5wdXQxMDAAQWRk
Q29sdW1uXwBpbnB1dABuYW1lAGxlbmd0aABTeXN0ZW0uQ29sbGVjdGlvbnMAQXJyYXlMaXN0AEdv
b2dsZS5HRGF0YS5DbGllbnQAU2VydmljZQBHZXRNYXBzXwBzZXJ2aWNlAEdldE1hcElkXwBtYXBz
TGlzdABtYXBOYW1lAG1fdXNlcm5hbWUAbV9wYXNzd29yZABtX2lzUHJpdmF0ZU1hcABtX21hcE5h
bWUAU3lzdGVtLlRleHQAU3RyaW5nQnVpbGRlcgBtX3NiRGF0YQBtX2lucHV0SW5kZXhlcwBVc2Vy
bmFtZQBQYXNzd29yZABJc1ByaXZhdGVNYXAATWFwTmFtZQBTeXN0ZW0uUmVzb3VyY2VzAFJlc291
cmNlTWFuYWdlcgBfcmVzTWdyAFN5c3RlbS5HbG9iYWxpemF0aW9uAEN1bHR1cmVJbmZvAF9yZXND
dWx0dXJlAGdldF9SZXNvdXJjZU1hbmFnZXIAZ2V0X0N1bHR1cmUAc2V0X0N1bHR1cmUAVmFsdWUA
Q3VsdHVyZQBTeXN0ZW0uQ29uZmlndXJhdGlvbgBBcHBsaWNhdGlvblNldHRpbmdzQmFzZQBtX1Zh
bHVlAG1fU3luY09iamVjdABnZXRfVmFsdWUAU3lzdGVtLkNvbXBvbmVudE1vZGVsAEVkaXRvckJy
b3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVTdGF0ZQBTeXN0ZW0uQ29kZURvbS5Db21w
aWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRlAFN5c3RlbS5EaWFnbm9zdGljcwBEZWJ1Z2dlckhp
ZGRlbkF0dHJpYnV0ZQBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQ29tcGlsZXJTZXJ2aWNlcwBTdGFu
ZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxlTmFtZUF0dHJpYnV0ZQBTeXN0ZW0uQ29tcG9u
ZW50TW9kZWwuRGVzaWduAEhlbHBLZXl3b3JkQXR0cmlidXRlAFN5c3RlbS5SdW50aW1lLkNvbXBp
bGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMAR2V0T2JqZWN0VmFsdWUAUnVudGltZVR5cGVIYW5k
bGUAR2V0VHlwZUZyb21IYW5kbGUAQWN0aXZhdG9yAENyZWF0ZUluc3RhbmNlAE15R3JvdXBDb2xs
ZWN0aW9uQXR0cmlidXRlAHNldF9WYWx1ZQBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMA
Q29tVmlzaWJsZUF0dHJpYnV0ZQBTdHJpbmcAU2NyaXB0QnVmZmVyAENMU0NvbXBsaWFudEF0dHJp
YnV0ZQBJRFRTQ29tcG9uZW50TWV0YURhdGExMDAAZ2V0X0NvbXBvbmVudE1ldGFEYXRhAElEVFNJ
bnB1dENvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sbGVjdGlvbgBnZXRfSXRlbQBnZXRfSUQASXNO
dWxsT3JFbXB0eQBDb25jYXQAZ2V0X0J1ZmZlcgBSZXBsYWNlAEZvcm1hdABBcHBlbmRMaW5lAElE
VFNFeHRlcm5hbE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbjEwMABJRFRTSW5wdXRDb2x1bW4xMDAA
SURUU0V4dGVybmFsTWV0YWRhdGFDb2x1bW4xMDAASW50MzIAZ2V0X0V4dGVybmFsTWV0YWRhdGFD
b2x1bW5Db2xsZWN0aW9uAElEVFNJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29s
dW1uQ29sbGVjdGlvbgBnZXRfRXh0ZXJuYWxNZXRhZGF0YUNvbHVtbklEAEdldE9iamVjdEJ5SUQA
Z2V0X05hbWUAVG9Mb3dlcgBQaXBlbGluZUNvbXBvbmVudABnZXRfSG9zdENvbXBvbmVudABJRFRT
QnVmZmVyTWFuYWdlcjEwMABnZXRfQnVmZmVyTWFuYWdlcgBnZXRfTGluZWFnZUlEAEZpbmRDb2x1
bW5CeUxpbmVhZ2VJRABKb2luAEF0b21FbnRyeQBBdG9tTGluawBFeGNlcHRpb24Ac2V0VXNlckNy
ZWRlbnRpYWxzAFVyaQBEZWxldGUARW5jb2RpbmcAZ2V0X1VURjgAR2V0Qnl0ZXMAU3lzdGVtLklP
AE1lbW9yeVN0cmVhbQBTdHJlYW0ASW5zZXJ0AEF0b21MaW5rQ29sbGVjdGlvbgBnZXRfTGlua3MA
RmluZFNlcnZpY2UAQXRvbVVyaQBnZXRfSFJlZgBnZXRfQ29udGVudABQcm9qZWN0RGF0YQBTZXRQ
cm9qZWN0RXJyb3IAZ2V0X01lc3NhZ2UAQ2xlYXJQcm9qZWN0RXJyb3IAQXBwbGljYXRpb25FeGNl
cHRpb24AZ2V0X0lzQXR0YWNoZWQAZ2V0X0NvdW50AHNldF9Jc1VzZWQAUmVtb3ZlQWxsAEVtcHR5
AEZpcmVJbmZvcm1hdGlvbgBGaXJlRXJyb3IATmV3AHNldF9OYW1lAE1pY3Jvc29mdC5TcWxTZXJ2
ZXIuRFRTUnVudGltZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZS5XcmFwcGVy
AERhdGFUeXBlAHNldF9EYXRhVHlwZQBzZXRfTGVuZ3RoAEZlZWRRdWVyeQBBdG9tRmVlZABzZXRf
TnVtYmVyVG9SZXRyaWV2ZQBRdWVyeQBBdG9tRW50cnlDb2xsZWN0aW9uAGdldF9FbnRyaWVzAEF0
b21Db2xsZWN0aW9uQmFzZWAxAEFkZABnZXRfTmV4dENodW5rAGdldF9TdGFydEluZGV4AHNldF9T
dGFydEluZGV4AEF0b21UZXh0Q29uc3RydWN0AGdldF9UaXRsZQBnZXRfVGV4dABPcGVyYXRvcnMA
Q29tcGFyZVN0cmluZwBnZXRfRWRpdFVyaQBTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0
dHJpYnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAVmFsaWRhdGVQcm9wZXJ0
aWVzQXR0cmlidXRlAFNvcnRQcm9wZXJ0aWVzQXR0cmlidXRlAENvbHVtbk1hcHBpbmdzQXR0cmli
dXRlAERlc2NyaXB0aW9uQXR0cmlidXRlAFBhc3N3b3JkUHJvcGVydHlUZXh0QXR0cmlidXRlAERl
ZmF1bHRWYWx1ZUF0dHJpYnV0ZQBTeXN0ZW0uUmVmbGVjdGlvbgBBc3NlbWJseQBnZXRfQXNzZW1i
bHkAU3lzdGVtLlRocmVhZGluZwBNb25pdG9yAEVudGVyAEV4aXQARGVidWdnZXJOb25Vc2VyQ29k
ZUF0dHJpYnV0ZQBTY3JpcHRDb21wb25lbnRfODViNDBlMDhmZDNlNGM5MGI1ZmQzMGVhNWY1ZGZh
MWIudmJwcm9qLlJlc291cmNlcy5yZXNvdXJjZXMAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJp
YnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0ZQBBc3NlbWJseUZpbGVWZXJzaW9uQXR0
cmlidXRlAEd1aWRBdHRyaWJ1dGUAQXNzZW1ibHlUcmFkZW1hcmtBdHRyaWJ1dGUAQXNzZW1ibHlD
b3B5cmlnaHRBdHRyaWJ1dGUAQXNzZW1ibHlQcm9kdWN0QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFu
eUF0dHJpYnV0ZQBBc3NlbWJseURlc2NyaXB0aW9uQXR0cmlidXRlAEFzc2VtYmx5VGl0bGVBdHRy
aWJ1dGUAU2NyaXB0Q29tcG9uZW50Xzg1YjQwZTA4ZmQzZTRjOTBiNWZkMzBlYTVmNWRmYTFiLnZi
cHJvai5kbGwAAAtJAG4AcAB1AHQAAAlOAGEAbQBlAAARTABhAHQAaQB0AHUAZABlAAATTABvAG4A
ZwBpAHQAdQBkAGUAABdEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAMsAAADIgAABSIAIgAACyIAewAw
AH0AIgAAC2wAbwBjAGEAbAAAM0MAbwB6AHkAUgBvAGMAIABDAHIAZQBhAHQAZQAgAEcAbwBvAGcA
bABlACAATQBhAHAAAGdoAHQAdABwADoALwAvAG0AYQBwAHMALgBnAG8AbwBnAGwAZQAuAGMAbwBt
AC8AbQBhAHAAcwAvAGYAZQBlAGQAcwAvAG0AYQBwAHMALwBkAGUAZgBhAHUAbAB0AC8AZgB1AGwA
bAAAEXQAZQB4AHQALwBjAHMAdgAAaWgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAGcAbwBv
AGcAbABlAC4AYwBvAG0ALwBhAGMAbAAvADIAMAAwADcAIwBhAGMAYwBlAHMAcwBDAG8AbgB0AHIA
bwBsAEwAaQBzAHQAABEvAGQAZQBmAGEAdQBsAHQAADVTAHAAZQBjAGkAZgB5ACAAcwBlAHIAdgBp
AGMAZQAgAHUAcwBlAHIAIABuAGEAbQBlAC4AADNTAHAAZQBjAGkAZgB5ACAAcwBlAHIAdgBpAGMA
ZQAgAHAAYQBzAHMAdwBvAHIAZAAuAAA7UwBwAGUAYwBpAGYAeQAgAGQAZQBzAHQAaQBuAGEAdABp
AG8AbgAgAG0AYQBwACAAbgBhAG0AZQAuAAAlTQBhAHAAIABpAG4AcAB1AHQAIABjAG8AbAB1AG0A
bgBzAC4AABVOAG8AIABpAG4AcAB1AHQAcwAuAAAlRwBvAG8AZwBsAGUAIABEAGEAdABhACAAUwBv
AHUAcgBjAGUAACNDAHIAZQBhAHQAZQAgAEcAbwBvAGcAbABlACAATQBhAHAAADFNAHkALgBSAGUA
cwBvAHUAcgBjAGUAcwAuAE0AeQBSAGUAcwBvAHUAcgBjAGUAcwAAAA9wVCJIWcpBg9Z0j/XgtOMA
CLd6XFYZNOCJCLA/X38R1Qo6AyAAAQMAAAEEAAASDAcGFRIYARIMBAAAEggHBhUSGAESCAQAABIR
BwYVEhgBEhEEAAASFAcGFRIYARIUBAgAEgwECAASCAQIABIRBAgAEhQEIAECHAMgAAgEIAASFQMg
AA4CHgAHEAEBHgAeAAcwAQEBEB4AAhMABCAAEwAHBhUSGQETAAQoABMACBbPSQu4DDTqCImEXc2A
gMyRCSAEARIhCAISJQQgAB0OAyAAAgQoAB0OAwYSJAMGEigGIAIBCBIlBSABARIcAwYSIQUgAQES
IQIGDmZoAHQAdABwADoALwAvAG0AYQBwAHMALgBnAG8AbwBnAGwAZQAuAGMAbwBtAC8AbQBhAHAA
cwAvAGYAZQBlAGQAcwAvAG0AYQBwAHMALwBkAGUAZgBhAHUAbAB0AC8AZgB1AGwAbABoaAB0AHQA
cAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AZwBvAG8AZwBsAGUALgBjAG8AbQAvAGEAYwBsAC8AMgAw
ADAANwAjAGEAYwBjAGUAcwBzAEMAbwBuAHQAcgBvAGwATABpAHMAdAADBh0OBSABAhAOBCABAQ4E
IAEBAgcgAwESLQ4ICASlnKmwJzgwBiABEjESNQYgAg4SMQ4CBgIDBhI5AwYdCAMoAA4DKAACAwYS
PQMGEkEEAAASPQQAABJBBQABARJBBAgAEj0ECAASQQMGEjQCBhwEAAASNAQIABI0BSABARFNCAEA
AQAAAAAABSACAQ4OFwEACk15VGVtcGxhdGUHOC4wLjAuMAAABAEAAAAGFRIYARIMBhUSGAESCAYV
EhgBEhEGFRIYARIUBAcBEgwEBwESCAQHARIRBAcBEhQQAQALTXkuQ29tcHV0ZXIAAAwBAAdNeS5V
c2VyAAATAQAOTXkuQXBwbGljYXRpb24AABMBAA5NeS5XZWJTZXJ2aWNlcwAABAABHBwDBwECAwcB
CAYAARIVEWkEBwESFQMHAQ4FEAEAHgAECgEeAAQHAR4AByAEAQ4ODg5hAQA0U3lzdGVtLldlYi5T
ZXJ2aWNlcy5Qcm90b2NvbHMuU29hcEh0dHBDbGllbnRQcm90b2NvbBJDcmVhdGVfX0luc3RhbmNl
X18TRGlzcG9zZV9fSW5zdGFuY2VfXwAAAAYVEhgBEwAGFRIZARMABAoBEwAFIAEBEwAGBwITABMA
BQEAAAAABAcBHQ4FIAASgIUFIAASgIkFIAESLRwEAAECDgUAAg4ODgQgABIlBCABHAgFIAIODg4F
AAIODhwFIAESOQ4JBwYIDggOEhwIBSAAEoCNBSAAEoCdBiABEoCRHAYgARKAlQgFIAASgKEFIAAS
gKUFIAIICAgGAAIODh0OEgcICBKAjR0OEi0IEoCREoCVCAYgAQESgLUFAAASgLkFIAEdBQ4FIAEB
HQUNIAQSgKkSgLUSgMEODgUgABKAxQcgAhKArQ4OBSAAEoDJBgABARKAsREHBxI1DhKAqQ4SMRKA
rRKAsQkHBAICEi0SgLEEBwESLQogBgEIDg4OCBACBSAAEoCVBiABARGA1QQgAQEIBQcBEoCVCCAB
EoDdEoDZBSAAEoDhCBUSgOUBEoCpBiABEoCpCAQgAQgcGAcKEjESgNkSMRKA3QgSgKkIEoCxCBKA
2QUgABKA6QYAAwgODgIKBwYOCA4SgKkICA0BAAhWYWxpZGF0ZQAABSABAR0OLwEABAAAAAhVc2Vy
bmFtZQhQYXNzd29yZAxJc1ByaXZhdGVNYXAHTWFwTmFtZQAAHwEAGlNwZWNpZnkgc2VydmljZSB1
c2VyIG5hbWUuAAAFAQABAAAeAQAZU3BlY2lmeSBzZXJ2aWNlIHBhc3N3b3JkLgAAHQEAGFNwZWNp
ZnkgZGVzdGluYXRpb24gbWFwLgAAJgEAIVNwZWNpZnkgaWYgbWFwIHNob3VsZCBiZSBwcml2YXRl
LgAABSAAEoENByACAQ4SgQ0GBwISPRI9BAcBEkEIAQACAAAAAAAEAAEBHAQHARI0CAEACAAAAAAA
HgEAAQBUAhZXcmFwTm9uRXhjZXB0aW9uVGhyb3dzAQwBAAcxLjAuMC4wAAApAQAkY2UxNDhjOTQt
ZjkzOS00NjZjLWJkM2EtYjY1ZDUwNmE4ZjAzAAAfAQAaQ29weXJpZ2h0IEAgTWljcm9zb2Z0IDIw
MTEAADwBADdTY3JpcHRDb21wb25lbnRfODViNDBlMDhmZDNlNGM5MGI1ZmQzMGVhNWY1ZGZhMWIu
dmJwcm9qAAAOAQAJTWljcm9zb2Z0AAAAAEBVAAAAAAAAAAAAAF5VAAAAIAAAAAAAAAAAAAAAAAAA
AAAAAAAAAABQVQAAAAAAAAAAAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAAAAAA/yUA
IEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwAAACgAAIAOAAAA
SAAAgBAAAABgAACAAAAAAAAAAAAAAAAAAAACAAIAAAB4AACAAwAAAJAAAIAAAAAAAAAAAAAAAAAA
AAEAAH8AAKgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAAMAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAANgA
AAAAAAAAAAAAAAAAAAAAAAEAAAAAAOgAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAPgAAAAAAAAAAAAA
AAAAAAAAAAEAAAAAAAgBAACAZQAA6AIAAAAAAAAAAAAAaGgAACgBAAAAAAAAAAAAAJBpAAAiAAAA
AAAAAAAAAAAYYQAAaAQAAAAAAAAAAAAAaAQ0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBG
AE8AAAAAAL0E7/4AAAEAAAABAAAAAAAAAAEAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAA
AABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABp
AG8AbgAAAAAAAACwBMgDAAABAFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAAKQDAAABADAA
MAAwADAAMAA0AGIAMAAAADQACgABAEMAbwBtAHAAYQBuAHkATgBhAG0AZQAAAAAATQBpAGMAcgBv
AHMAbwBmAHQAAACYADgAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAUwBjAHIA
aQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwA4ADUAYgA0ADAAZQAwADgAZgBkADMAZQA0AGMAOQAw
AGIANQBmAGQAMwAwAGUAYQA1AGYANQBkAGYAYQAxAGIALgB2AGIAcAByAG8AagAAADAACAABAEYA
aQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADAALgAwAC4AMAAAAJgAPAABAEkAbgB0AGUAcgBu
AGEAbABOAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwA4ADUAYgA0ADAA
ZQAwADgAZgBkADMAZQA0AGMAOQAwAGIANQBmAGQAMwAwAGUAYQA1AGYANQBkAGYAYQAxAGIALgB2
AGIAcAByAG8AagAuAGQAbABsAAAAXAAbAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAA
QwBvAHAAeQByAGkAZwBoAHQAIABAACAATQBpAGMAcgBvAHMAbwBmAHQAIAAyADAAMQAxAAAAAACg
ADwAAQBPAHIAaQBnAGkAbgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0A
cABvAG4AZQBuAHQAXwA4ADUAYgA0ADAAZQAwADgAZgBkADMAZQA0AGMAOQAwAGIANQBmAGQAMwAw
AGUAYQA1AGYANQBkAGYAYQAxAGIALgB2AGIAcAByAG8AagAuAGQAbABsAAAAkAA4AAEAUAByAG8A
ZAB1AGMAdABOAGEAbQBlAAAAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADgANQBi
ADQAMABlADAAOABmAGQAMwBlADQAYwA5ADAAYgA1AGYAZAAzADAAZQBhADUAZgA1AGQAZgBhADEA
YgAuAHYAYgBwAHIAbwBqAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAu
ADAALgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAxAC4A
MAAuADAALgAwAAAAKAAAACAAAABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP//
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHd3d3d3d3d3d3d3d3d3cARERERERERERERERERERHAE//////////////////Rw
BP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////////
///////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/
////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////
////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE////
//////////////RwBP/////////////////0cAT/////////////////9HAEiIiIiIiIiIiIiIiI
iIRwBEREREREREREREREREREcARMTExMTExMTExOzs5JdHAEzMzMzMzMzMzMzMzMzMQAAERERERE
RERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP/////////////////////AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB
gAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAPA
AAAH////////////////KAAAABAAAAAgAAAAAQAEAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8A
AP///wAAAAAAAAAAAAd3d3d3d3d3REREREREREdP///////4R0////////hHT///////+EdP////
///4R0////////hHT///////+EdP///////4R0////////hHSIiIiIiIiEdMzMzMzMzMR8RERERE
RETAAAAAAAAAAAAAAAAAAAAAAP//AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAQAA//8AAP//AAAAAAEAAgAgIBAAAQAEAOgCAAACABAQEAABAAQAKAEA
AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAABwNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property>
<property id="411" 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="1807" 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_85b40e08fd3e4c90b5fd30ea5f5dfa1b</property>
<property id="1808" 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="401" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="True">
<externalMetadataColumn id="1664" name="Name" description="" precision="0" scale="0" length="10" dataType="wstr" codePage="0" mappedColumnId="0" />
<externalMetadataColumn id="1665" name="Latitude" description="" precision="0" scale="0" length="10" dataType="wstr" codePage="0" mappedColumnId="0" />
<externalMetadataColumn id="1666" name="Longitude" description="" precision="0" scale="0" length="10" dataType="wstr" codePage="0" mappedColumnId="0" />
<externalMetadataColumn id="1667" name="Description" description="" precision="0" scale="0" length="250" dataType="wstr" codePage="0" mappedColumnId="0" /></externalMetadataColumns></input>
</inputs>
</component>