<component id="141" name="Geocode" 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="145" 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_2e714c6deb8346b79a3cd31154cf303a.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_2e714c6deb8346b79a3cd31154cf303a.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2010")> 
<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("f5d4ae7d-e432-4c29-ac70-759b656f07a8")> 

' 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 WriteOnly Property [Accuracy]() As Int32
        Set
            Me(0) = Value
        End Set
    End Property
    Public WriteOnly Property [Accuracy_IsNull] As Boolean
        Set
            If (value)
                SetNull(0)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [Latitude]() As Double
        Set
            Me(1) = Value
        End Set
    End Property
    Public WriteOnly Property [Latitude_IsNull] As Boolean
        Set
            If (value)
                SetNull(1)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [Longitude]() As Double
        Set
            Me(2) = Value
        End Set
    End Property
    Public WriteOnly Property [Longitude_IsNull] As Boolean
        Set
            If (value)
                SetNull(2)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {"Accuracy", "Latitude", "Longitude"}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


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

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\scriptcomponent_2e714c6deb8346b79a3cd31154cf303a.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_2e714c6deb8346b79a3cd31154cf303a.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_2e714c6deb8346b79a3cd31154cf303a.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{92CC4D7F-8ED5-4D1E-9B5B-F33DA3C1E525}</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.Web" />
    <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[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2009 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.

' Following resources were used as reference:
' http://code.google.com/apis/maps/documentation/geocoding/index.html
' http://code.google.com/apis/maps/articles/phpsqlgeocode.html

Imports System
Imports System.ComponentModel
Imports System.Collections
Imports System.Net
Imports System.Web
Imports System.IO
Imports System.Threading

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() {"AddressColumn", "ApiKeyVariable", "CacheFile"})> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const Query_2P As String = "http://maps.google.com/maps/geo?output=csv&oe=utf8&sensor=false&key={0}&q={1}"


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim address As String = CStr(Row.Buffer(m_addressIndex))

        ' Geocode address.
        Dim geo() As Object = GeoCode_(address)
        Row.Accuracy = CInt(geo(0))
        Row.Latitude = CDbl(geo(1))
        Row.Longitude = CDbl(geo(2))
    End Sub ' Input_ProcessInputRow


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

        ' Setup address index.
        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
        m_addressIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.AddressColumn).LineageID)

        ' Setup API key.
        Dim vars As IDTSVariables100
        Call Me.VariableDispenser.LockOneForRead(Me.ApiKeyVariable, vars)
        Try
            m_apiKey = CStr(vars(Me.ApiKeyVariable).Value)
        Finally
            Call vars.Unlock()
        End Try

        ' Setup cache.
        m_cache = LoadCache_()
        m_cacheModified = False
    End Sub ' PreExecute


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

        If m_cacheModified Then
            ' Cache has been modified. Store it.
            Call StoreCache_(m_cache)
        End If
    End Sub ' PostExecute


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

        ' Setup address column.
        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
        Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()
        Call input.InputColumnCollection.RemoveAll()
        Call virtInput.SetUsageType( _
            virtInput.VirtualInputColumnCollection(Me.AddressColumn).LineageID, _
            DTSUsageType.UT_READONLY)

        ' Setup cache file connection manager.
        Me.ComponentMetaData.RuntimeConnectionCollection("CacheFile").ConnectionManagerID = Me.CacheFile
    End Sub ' ReinitializeMetaData


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

        Try
            If String.IsNullOrEmpty(Me.AddressColumn) Then
                Throw New ApplicationException("Select address column.")
            End If

            If String.IsNullOrEmpty(Me.ApiKeyVariable) Then
                Throw New ApplicationException("Select API key variable.")
            End If

            If String.IsNullOrEmpty(Me.CacheFile) Then
                Throw New ArgumentException("Select cache file connection manager.")
            End If

            Call ReinitializeMetaData()

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

        Validate = result
    End Function    'Validate


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select address column.")> _
    <InputVirtualColumn()> _
    Public Property AddressColumn() As String
        Get
            AddressColumn = m_addressColumn
        End Get
        Set(ByVal value As String)
            m_addressColumn = value
        End Set
    End Property    ' AddressColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select file containing geocoding cache.")> _
    <Connection("FileConnectionType", True)> _
    Public Property CacheFile() As String
        Get
            CacheFile = m_cacheFile
        End Get
        Set(ByVal value As String)
            m_cacheFile = value
        End Set
    End Property    ' CacheFile


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable containing Google Maps API key.")> _
    <Variable()> _
    Public Property ApiKeyVariable() As String
        Get
            ApiKeyVariable = m_apiKeyVariable
        End Get
        Set(ByVal value As String)
            m_apiKeyVariable = value
        End Set
    End Property    ' ApiKeyVariable
#End Region ' Properties


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Loads current geocode cache file.
    Private Function LoadCache_() As Hashtable
        Dim result As Hashtable = New Hashtable()
        Dim fileName As String

        fileName = Me.Connections.CacheFile.ConnectionString
        If File.Exists(fileName) Then
            ' Cache file exists. Load it.
            Using reader As StreamReader = New StreamReader(fileName)
                While Not reader.EndOfStream
                    Dim line() As String = reader.ReadLine().Split(Chr(124))
                    result.Add(line(0), New Object() {CInt(line(1)), CDbl(line(2)), CDbl(line(3))})
                End While
            End Using

            Dim fireAgain As Boolean
            Me.ComponentMetaData.FireInformation( _
                0, _
                "Geocode", _
                String.Format("Loaded {0} cached addresses.", result.Count), _
                String.Empty, _
                0, _
                fireAgain)
        End If

        LoadCache_ = result
    End Function    ' LoadCache_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Stores current geocode cache.
    Private Sub StoreCache_(ByVal cache As Hashtable)
        Dim fileName As String = Me.Connections.CacheFile.ConnectionString

        Using writer As StreamWriter = File.CreateText(fileName)
            For Each pair As DictionaryEntry In cache
                Dim line As String = CStr(pair.Key)
                For Each item As Object In CType(pair.Value, Object())
                    line += Chr(124) + item.ToString()
                Next

                Call writer.WriteLine(line)
            Next
        End Using
    End Sub ' StoreCache_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' If not yet cached, geocode specified address.
    Private Function GeoCode_(ByVal address As String) As Object()
        Dim result() As Object

        If Not m_cache.Contains(address) Then
            ' Address not cached yet. Load it.
            While result Is Nothing
                Dim ra() As String
                Dim response As WebResponse = HttpWebRequest.Create(String.Format( _
                    Query_2P, _
                    m_apiKey, _
                    address)).GetResponse()
                Using reader As StreamReader = New StreamReader(response.GetResponseStream())
                    ra = reader.ReadLine().Split(Chr(44))
                End Using

                If ra(0) = "200" Then
                    result = New Object() {CInt(ra(1)), CDbl(ra(2)), CDbl(ra(3))}
                ElseIf ra(0) = "620" Then
                    ' Too many queries. Increase delay between calls.
                    m_delay += 100
                    Me.ComponentMetaData.FireWarning( _
                        0, _
                        "Geocode", _
                        "Geocode service has too many queries. Delay between calls is incremented.", _
                        String.Empty, _
                        0)
                Else
                    ' Failed to geocode.
                    Throw New ApplicationException(String.Format( _
                        "Failed to geocode '{0}'. Received code: {1}", _
                        address, _
                        ra(0)))
                End If

                Call Thread.Sleep(m_delay)
            End While

            ' Address was successfully geocoded. Cache it.
            m_cacheModified = True
            m_cache.Add(address, result)
        End If

        GeoCode_ = CType(m_cache(address), Object())
    End Function    ' GeoCode_
#End Region ' Internals


#Region "Attributes"
    Private m_addressColumn As String
    Private m_cacheFile As String
    Private m_apiKeyVariable As String

    Private m_addressIndex As Integer
    Private m_apiKey As String
    Private m_cache As Hashtable
    Private m_cacheModified As Boolean

    ' Milliseconds to wait between geocode calls.
    ' It will gradually increase if service responds too many queries (620).
    Private m_delay As Integer = 200
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="146" 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_2e714c6deb8346b79a3cd31154cf303a.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDALs+rkwAAAAAAAAAAOAAAiELAQgAADoAAAAMAAAAAAAAXlgA
AAAgAAAAYAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAABBYAABLAAAAAGAAALgJAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAZDgAAAAgAAAAOgAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAALgJAAAAYAAAAAoAAAA8AAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAARgAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAABA
WAAAAAAAAEgAAAACAAUAFCsAAPwsAAABAAAAAAAAAFAgAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291cmNlcy5S
ZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMuUnVudGlt
ZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAAAeAigBAAAKKh4CKAQAAAoqpnMGAAAK
gAEAAARzBwAACoACAAAEcwgAAAqAAwAABHMJAAAKgAQAAAQqAAATMAEACwAAAAEAABF+AQAABG8K
AAAKKgATMAEACwAAAAIAABF+AgAABG8LAAAKKgATMAEACwAAAAMAABF+AwAABG8MAAAKKgATMAEA
CwAAAAQAABF+BAAABG8NAAAKKgATMAIADQAAAAUAABECAygRAAAKKBIAAAoqAAAAEzABAAcAAAAG
AAARAigTAAAKKgATMAEACwAAAAcAABHQBQAAAigUAAAKKgATMAEABwAAAAgAABECKBUAAAoqABMw
AQAQAAAACQAAEQKMAQAAGy0GKAEAACsqAioTMAIAEAAAAAoAABEDEgD+FQIAABsGgQIAABsqHgIo
FwAACioTMAIAKAAAAAsAABECexkAAApvGgAACgsHjAMAABstEigCAAArCwJ7GQAACgdvGwAACgcq
SgIoFwAACgJzHAAACn0ZAAAKKgAyAgMEBQ4EKB4AAAoqAAAAEzABAAcAAAAMAAARFo0cAAABKgA6
AhYDjB0AAAFvHwAACioAYgMsCQIWbyAAAAorC3IBAABwcyEAAAp6KgAAADoCFwOMHwAAAW8fAAAK
KgBiAywJAhdvIAAACisLcgEAAHBzIQAACnoqAAAAOgIYA4wfAAABbx8AAAoqAGIDLAkCGG8gAAAK
KwtyAQAAcHMhAAAKeioAAAATMAMAIQAAAA0AABEZjRwAAAELBxZyngAAcKIHF3KwAABwogcYcsIA
AHCiByoAAAATMAEACQAAAA4AABECKCIAAAoKBioAAAATMAEACQAAAA8AABECKCMAAAoKBioAAAB+
AiglAAAKAgJzIAAABn0GAAAEAgJzIgAABn0HAAAEKrYDAigmAAAKbycAAApy1gAAcG8oAAAKbykA
AAozDwICAxcEcxEAAAZvHgAABioAAEorBwIDbx8AAAYDbxoAAAYt8SoABioAADoCKBcAAAoCA30I
AAAEKgATMAIAIAAAABAAABECewgAAARvJgAACm8qAAAKcuIAAHBvKwAACm8sAAAKKjoCKBcAAAoC
A30JAAAEKgBKAigcAAAGAiDIAAAAfRIAAAQqABMwAwBKAAAAEQAAEQNvLQAACgJ7DgAABG8uAAAK
KC8AAAoKAgZvMgAABgsDBxaaKDAAAApvEwAABgMHF5ooMQAACm8VAAAGAwcYmigxAAAKbxcAAAYq
AAAbMAUAmwAAABIAABECKDIAAAoCbyYAAApvJwAAChaMHQAAAW8oAAAKCgICbzMAAApvNAAACgZv
NQAACgZvNgAACgJvKQAABm83AAAKbzgAAApvOQAACn0OAAAEAm86AAAKAm8tAAAGEgFvOwAACgIH
Am8tAAAGbzwAAApvPQAACigvAAAKfQ8AAATeBwdvPgAACtwCAm8wAAAGfRAAAAQCFn0RAAAEKgAB
DAAAAgBiAB6AAAcAAAABbgIoPwAACgJ7EQAABCwMAgJ7EAAABG8xAAAGKhMwAwBuAAAAEwAAEQIo
QAAACgJvJgAACm8nAAAKFowdAAABbygAAAoKBm9BAAAKCwZvNgAACm9CAAAKBwdvQwAACgJvKQAA
Bm9EAAAKb0UAAAoWb0YAAAomAm8mAAAKbyoAAApy4gAAcG8rAAAKAm8rAAAGb0cAAAoqAAAbMAIA
bgAAABQAABECbykAAAYoSAAACiwLcvYAAHBzSQAACnoCby0AAAYoSAAACiwLciQBAHBzSQAACnoC
bysAAAYoSAAACiwLclYBAHBzSgAACnoCbycAAAYXCt4YJShLAAAKDBYKAwhvTAAAClEoTQAACt4A
BgsHKgAAAQwAAAAAAABSUgAYMwAAARMwAQAJAAAAFQAAEQJ7CwAABAoGKgAAACICA30LAAAEKgAA
ABMwAQAJAAAAFgAAEQJ7DAAABAoGKgAAACICA30MAAAEKgAAABMwAQAJAAAAFwAAEQJ7DQAABAoG
KgAAACICA30NAAAEKgAAABMwAwATAAAAGAAAEReNHAAAAQsHFnKiAQBwogcKBioAGzAHAN0AAAAZ
AAARc04AAAoMAnsGAAAEbyEAAAZvTwAACgoGKFAAAAo5twAAAAZzUQAAChMEK2gRBG9SAAAKF405
AAABEwYRBhYffJ0RBm9TAAAKEwUIEQUWmhmNAwAAARMHEQcWEQUXmihUAAAKjB0AAAGiEQcXEQUY
mihVAAAKjB8AAAGiEQcYEQUZmihVAAAKjB8AAAGiEQdvVgAAChEEb1cAAAosj94MEQQsBxEEb1gA
AArcAm8mAAAKFnKsAQBwcrwBAHAIb1kAAAqMHQAAAShaAAAKflsAAAoWEgNvXAAACggLByoAAAAB
DAAAAgAqAHWfAAwAAAABGzADAKYAAAAaAAARAnsGAAAEbyEAAAZvTwAACgoGKF0AAAoLA29eAAAK
EwUrbhEFb18AAAolLQUmEQYrCnk8AAABcTwAAAENEgMoYAAACigvAAAKDBIDKGEAAAp0CgAAGxMI
FhMHKyURCBEHmigRAAAKEwQIcvYBAHARBG8VAAAKKGIAAAoMEQcX1hMHEQcRCI63MtMHCG9jAAAK
EQVvZAAACi2J3goHLAYHb1gAAArcKgAAAQwAAAIAGACDmwAKAAAAARswBgBGAQAAGwAAEQJ7EAAA
BANvZQAACjohAQAAOAIBAABy+gEAcAJ7DwAABAMoZgAACihnAAAKb2gAAAoNCW9pAAAKc2oAAAoT
BBEEb1IAAAoXjTkAAAETBREFFh8snREFb1MAAAoM3gwRBCwHEQRvWAAACtwIFppylwIAcBYoawAA
ChYzQBmNAwAAARMGEQYWCBeaKFQAAAqMHQAAAaIRBhcIGJooVQAACowfAAABohEGGAgZmihVAAAK
jB8AAAGiEQYLK1IIFppynwIAcBYoawAAChYzLQICexIAAAQfZNZ9EgAABAJvJgAAChZyrAEAcHKn
AgBwflsAAAoWb2wAAAorFHI8AwBwAwgWmihmAAAKc0kAAAp6AnsSAAAEKG0AAAoHOfj+//8CF30R
AAAEAnsQAAAEAwdvVgAACgJ7EAAABANvbgAACnQKAAAbCgYqAAABDAAAAgA/AB9eAAwAAAABHgIo
FwAACioTMAIALQAAABwAABF+EwAABC0gcpQDAHDQDAAAAigUAAAKb3YAAApzdwAACgsHgBMAAAR+
EwAABCoAAAATMAEABgAAAB0AABF+FAAABCoAAB4CgBQAAAQqQnMXAAAKKBEAAAqAFgAABCoAAAAe
Aih4AAAKKhswAQA/AAAAHgAAEX4VAAAELTJ+FgAABCgRAAAKKHkAAAp+FQAABC0cczgAAAaAFQAA
BN4QfhYAAAQoEQAACih6AAAK3H4VAAAEKgABDAAAAgAdAAwpABAAAAABQlNKQgEAAQAAAAAADAAA
AHYyLjAuNTA3MjcAAAAABQBsAAAAlA4AACN+AAAADwAAVBMAACNTdHJpbmdzAAAAAFQiAADIAwAA
I1VTABwmAAAQAAAAI0dVSUQAAAAsJgAA0AYAACNCbG9iAAAAAAAAAAIAAAFXHaIJCQ8AAAD6ATMA
FgAAAQAAAFgAAAANAAAAFgAAADkAAAAbAAAAhQAAAAEAAABBAAAAHgAAAAcAAAAVAAAAGQAAAAoA
AAABAAAACAAAAAEAAAACAAAAAwAAAAIAAAAAABUTAQAAAAAACgCpAX8BCgDdAb8BBgDtAeYBCgBF
An8BBgDDAuYBCgBFAxsDDgCXA4ADEgDmA8UDFgAXBMUDDgBqBYADGgAbBvMFBgAdBwoHBgD7B+oH
BgAoCBMIHgCJCHQIHgDWCMAIHgDvCMAIHgAcCQQJBgBGCTMJCgCFCV4JCgCdCRMAHgDSCbUJBgAH
CucJBgAlCuYBBgBJCuYBCgBiChMABgCmCocKBgC6CuYBBgDBCuYBBgDYCuYBBgDyCuYBEgD5CsUD
BgAGC+YBIgBpC0ALIgCYC0ALIgDDC0ALIgDgC0ALIgAjDEALCgBdDF4JGgB8DPMFFgCNDMUDIgCx
DEALIgDYDEALIgAPDUALGgBGDfMFGgCEDfMFIgCbDUALIgDJDUALIgAODkALIgAoDkALBgBaDuYB
BgByDuYBBgCHDuYBCgCZDl4JBgDdDtMOBgD/DtMOBgAUD+YBBgAzD+YBBgBuD9MOBgB7DwoHBgCL
DwoHBgC6DwoHBgDhD9MOHgAKEP8PHgAfEP8PBgA9ENMOCgBWEF4JBgCLEHoQEgCYEMUDDgDhEL8Q
DgD9EL8QDgAVEb8QHgApEcAIDgA+Eb8QDgBaEb8QBgB+EWwRBgCUEXoQBgCnETMJBgAQEucJBgAw
EucJBgBOEmwRBgBrEocKBgB5EmwRBgCUEmwRBgCvEmwRBgDIEmwRBgDhEmwRBgD+EmwRAAAAAAEA
AAAAAAEAAQAAAAAAKQA3AAUAAQABAAAAAAByADcACQABAAIAAAEQAH0ANwANAAEAAwAFAQAAhwAA
AA0ABQAIAAUBAACVAAAADQAFAA8AAQAAALAAvAAdAAYAEQABAAAA9AC8ACkABgAcAAEAAAACAbwA
DQAIACAAAQAAAA4BvAANAAkAIgABAAAAGAG8ACAACgAjAAAAAAAjAS8BDQATADMAAAEQAHQBvAA9
ABUANwAxAAgCIAAxADECLQAxAFMCOgAxAHgCRwAhAFQDkAAGAAIB4gAGAA4B5gABAMAF9wABAMAF
9wBRgEwGCwEBAFUHCwEBAGUHCwEBAHEHCwEBAIIHxgEBAJEHCwEBAJoHyQEBAKIHzQEBALIHxgER
AAsI1AERADQI2AERAKEI9gERAKkI+gEIIQAAAAAGGLkBEwABABAhAAAAAAYYuQETAAEAGCEAAAAA
ERj0ARcAAQBEIQAAAAATCPsBGwABAFwhAAAAABMIIQIoAAEAdCEAAAAAEwhKAjUAAQCMIQAAAAAT
CGgCQgABAKQhAAAAAEYCrgJjAAEAwCEAAAAARgK3AmgAAgDUIQAAAACDAMgCbAACAOwhAAAAAEYC
0AJxAAIAACIAAAAAEQDZAngAAgAcIgAAAAABAPcCgAADADgiAAAAAAYYuQETAAQAQCIAAAAAAwgL
A4sABAB0IgAAAAAGGLkBEwAEAIgiAAAAAAYYuQGvAAQAmCIAAAAARgpIBLkACACsIgAAAAAGCF8E
vgAIALwiAAAAAAYIcgTDAAkA2CIAAAAABgiGBMgACgDoIgAAAAAGCJMEwwALAAQjAAAAAAYIpwTI
AAwAFCMAAAAABgi1BMMADQAwIwAAAABGCsoEuQAOAGAjAAAAAIYA4gTNAA4AeCMAAAAAhgDqBM0A
DgCQIwAAAAAGGLkBEwAOALAjAAAAAEYCfgXqAA4A4CMAAAAARgOTBfEAEAD0IwAAAABGA6YF8QAR
APgjAAAAAAYYuQH7ABIACCQAAAAABgg0BgEBEwA0JAAAAAAGGLkB+wATAEQkAAAAAAYYuQETABQA
WCQAAAAARgKmBfEAFACwJAAAAABGAlUGEwAVAGglAAAAAEYCYAYTABUAhCUAAAAARgJsBhMAFQAA
JgAAAAAGAIEGqgEVAIwmAAAAAAYIlQZxABYApCYAAAAABginBrABFgCwJgAAAAAGCDQGcQAXAMgm
AAAAAAYIvwawARcA1CYAAAAABgjNBnEAGADsJgAAAAAGCOAGsAEYAPgmAAAAAAEI8wa5ABkAGCcA
AAAAAQAnB7UBGQAUKAAAAAABADIHugEZANgoAAAAAAEARAfAARoAPCoAAAAAAxi5ARMAGwBEKgAA
AAAWCEAI3AEbAIAqAAAAABYIVAjhARsAlCoAAAAAFghgCOYBGwCcKgAAAAARGPQBFwAcALAqAAAA
AAYYuQETABwAuCoAAAAAFgi2CP0BHAAAAAEAtQIAAAEA7gIAAAEA7gIAAAEAJgQAAAIAMAQAAAMA
OQQAAAQAQQQAAAEAbAQAAAEAbAQAAAEAbAQAAAEAbAQAAAEAbAQAAAEAbAQAAAEAiwUAAAIAQQQA
AAEAQQQAAAEAvAUAAAEAJgQAAAEAJgQAAAEAvAUAAAEAigYAAAEAuQYAAAEAuQYAAAEAuQYAAAEA
PgcAAAEATQcAAAEAbAQJALkBEwCBALkBBwKRALkBFgIRALkBEwCZALkBEwAkALkBEwAsALkBEwA0
ALkBEwA8ALkBEwAkAAsDiwAsAAsDiwA0AAsDiwA8AAsDiwChALkBEwCpALkBEwCxALkBsAG5ABYK
rwIZAK4CYwAZALcCaAApADcKvAIZANACcQDJAFMKzAIZALkBEwDRALkB3AJEAFQDkABMALYIiwBM
AH0KWQNMALkBEwDZALkBwwA5ALkBrwA5AMcKcQM5ANAKvgDxALkBsAEBAeIEzQABAeoEzQAJAbkB
wwBRALkBEwBBAIILfgMRAa8LhAMZAdALigMhAdkLaAARAQMMkQMpAdALlwMxATwMAQE5AFIMowNJ
ANALqAM5AdACrQM5AWkMsgM5AXMMtwNBAFUGEwBRAJ8MwgNJAcYMyAMhAVIMaAAhAfUMzgNZAdAL
1ANhASINaABRATAN2wNBAF8N4QNpAXUN5wNBAdAL8ANxAbYI9wNBAZQNEwBBAGAGEwBRAGwGEwAh
Aa8NBARZAb8NEwB5Ae0NCgSBAdALEASJASINaAB5ATUOFwQxAUIOsAHhAGQOKAShAbkBsAGpAbkB
sAGxAaUOLQSZAbUOcQCxAcEOFwBhALkBEwBZAOoOcQDBAQQPKAS5AbkBsAG5AQsPcQDhABkPPAQ5
AWkMQwQ5AXMMSARhAB8PTQS5ASMPzQDRAT8PEwBhAEcPaADhAFEPUwThAFgPCwERAV4PWQTBAaEP
dgRhAKwPfQTxAcYP9wPhAdIP9wPhAbYI9wPhANoPhgT5AewPsAHxAfYPzQBhABYQYwDhAFEPogQJ
AioQqQQJAjEQsAQBAkQQtgS5AbkBvAQZAmAQwwQRAW4QygQhApIQ0wRhANAL2AQpArkBEwAxArkB
sAE5ArkB/gRBArkBNAVJArkBsAFRArkBEwBZArkBEwApAIcR0QVpALkB1wV5ALkBEwBpApwR9AVp
AqIR9AVxArkBEwB5ArkBvgCBArkBEwCJArkBsAGRArkBsAGZArkBsAGhArkBsAGpArkBsAGxArkB
sAG5ArkBsAHBArkBsAEOACgADgEpAIMAfQIuABsEwAYuABMEgwYuACsEgwYuAAsEYwYuAOsDBwYu
ACMEZgMuAPMDJgYuAOMD/gUuAPsDMwYuAOsAZgMuAAMEZgMuACMBXQZAACsANAJAABMADQJDABMA
DQJDABsAHAJJAIMAaQJjABMADQJjABsAHAJpAIMAjgKAACsANAKDABsAHAKDAHsANAKDAHMANAKJ
AIMAmwKgACsANAKjAMMA5AKjABMADQLAACsANALDABMADQLDAOsAZgPgACsANALjACMBZgMAASsA
NAIAARMADQIDASMBZgMgASsANAIgARMADQJAASsANAJAARMADQJgARMADQJgASsANAJjAYMD8ARj
AYsDBAVjASMBZgNjAXsDNAKAASsANAKgASsANALAARMADQLAASsANALgASsANALpAZsDgAXpAaMD
NAIAAisANAIAAhMADQIJApMDOgUJApsDUwUpAqsDNAIpApsDnAVpAhMA6wWJAhMA6wWpAtsDNAIA
BCMBZgNABCMBZgNVAloCXwJkArQCuALDAsgC1wLXAl8DbAN3A7QCtAKeA7wD+wMfBDQEyALIAsgC
dwNkBI0E3QTfBeYF+QUEAAEABgAFAAcABgAJAA4ACwAPAAwAEwANABUAAADdAU8AAACWAlQAAABF
AlkAAACiAl4AAABeA5gAAAD2BNEAAAAJBdYAAAASBdoAAAAiBd4AAAArBdoAAAA7Bd4AAABFBdoA
AABWBdEAAABCBgYBAAC6B9ABAABCBtABAADIB9ABAADXB9EAAAD7B+wBAABsCPEBAABsBAICAgAE
AAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAPAAsAAgASAA0AAQATAA8AAQAUABEAAQAVABMAAQAWABUA
AQAXABcAAQAYABkAAgAZABsAAgAhAB0AAQAqAB8AAgApAB8AAgArACEAAQAsACEAAgAtACMAAQAu
ACMAAgAvACUAAgA0ACcAAgA1ACkAAQA2ACkAAgA5ACsAdQB1AIgAOQJAAkcCTgJGA00DgwQEgAAA
AQAAAAAAAAAAAAAAAAC8AAAAAgAAAAAAAAAAAAAAAQAKAAAAAAAIAAAAAAAAAAAAAAAKABMAAAAA
AAEAAAAAAAAAAAAAAJ0AagMAAAAACgAAAAAAAAAAAAAApgCoAwAAAAAKAAAAAAAAAAAAAACmAPYD
AAAAAAoAAAAAAAAAAAAAAKYA0AUAAAAAAgAAAAAAAAAAAAAAAQDmAQAAAAAKAAAAAAAAAAAAAACm
ABwLAAAAAAAAAAABAAAAxBEAAAUABAAGAAQAAAAQAAwA7AIAABAAGQDsAgAAAAAbAOwCLQDSAi0A
VAMAAAAAADxNb2R1bGU+AG1zY29ybGliAE1pY3Jvc29mdC5WaXN1YWxCYXNpYwBNeUFwcGxpY2F0
aW9uAFNjcmlwdENvbXBvbmVudF8yZTcxNGM2ZGViODM0NmI3OWEzY2QzMTE1NGNmMzAzYS52YnBy
b2ouTXkATXlDb21wdXRlcgBNeVByb2plY3QATXlXZWJTZXJ2aWNlcwBUaHJlYWRTYWZlT2JqZWN0
UHJvdmlkZXJgMQBJbnB1dEJ1ZmZlcgBTY3JpcHRDb21wb25lbnRfMmU3MTRjNmRlYjgzNDZiNzlh
M2NkMzExNTRjZjMwM2EudmJwcm9qAFVzZXJDb21wb25lbnQAQ29ubmVjdGlvbnMAVmFyaWFibGVz
AFNjcmlwdE1haW4ATXlSZXNvdXJjZXMAU2NyaXB0Q29tcG9uZW50XzJlNzE0YzZkZWI4MzQ2Yjc5
YTNjZDMxMTU0Y2YzMDNhLnZicHJvai5NeS5SZXNvdXJjZXMATXlTZXR0aW5ncwBNaWNyb3NvZnQu
VmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBBcHBsaWNhdGlvbkJhc2UALmN0b3IATWlj
cm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMAQ29tcHV0ZXIAU3lzdGVtAE9iamVjdAAuY2N0b3IA
Z2V0X0NvbXB1dGVyAG1fQ29tcHV0ZXJPYmplY3RQcm92aWRlcgBnZXRfQXBwbGljYXRpb24AbV9B
cHBPYmplY3RQcm92aWRlcgBVc2VyAGdldF9Vc2VyAG1fVXNlck9iamVjdFByb3ZpZGVyAGdldF9X
ZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNPYmplY3RQcm92aWRlcgBBcHBsaWNhdGlvbgBXZWJT
ZXJ2aWNlcwBFcXVhbHMAbwBHZXRIYXNoQ29kZQBUeXBlAEdldFR5cGUAVG9TdHJpbmcAQ3JlYXRl
X19JbnN0YW5jZV9fAFQAaW5zdGFuY2UARGlzcG9zZV9fSW5zdGFuY2VfXwBnZXRfR2V0SW5zdGFu
Y2UATWljcm9zb2Z0LlZpc3VhbEJhc2ljLk15U2VydmljZXMuSW50ZXJuYWwAQ29udGV4dFZhbHVl
YDEAbV9Db250ZXh0AEdldEluc3RhbmNlAENvenlSb2MuU1NJU1BsdXMuMjAwOABDb3p5Um9jLlNx
bFNlcnZlci5TU0lTAFNjcmlwdEJ1ZmZlclBsdXMATWljcm9zb2Z0LlNxbFNlcnZlci5UeFNjcmlw
dABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZQBTY3JpcHRDb21wb25lbnQATWljcm9z
b2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QAUGlwZWxpbmVCdWZmZXIAQ29tcG9uZW50AE9iamVj
dElEAElzSW5wdXQAQnVmZmVyAGdldF9TdGF0aWNJbnB1dENvbHVtbnMAc2V0X0FjY3VyYWN5AFZh
bHVlAHNldF9BY2N1cmFjeV9Jc051bGwAc2V0X0xhdGl0dWRlAHNldF9MYXRpdHVkZV9Jc051bGwA
c2V0X0xvbmdpdHVkZQBzZXRfTG9uZ2l0dWRlX0lzTnVsbABnZXRfU3RhdGljT3V0cHV0Q29sdW1u
cwBOZXh0Um93AEVuZE9mUm93c2V0AFN0YXRpY0lucHV0Q29sdW1ucwBBY2N1cmFjeQBBY2N1cmFj
eV9Jc051bGwATGF0aXR1ZGUATGF0aXR1ZGVfSXNOdWxsAExvbmdpdHVkZQBMb25naXR1ZGVfSXNO
dWxsAFN0YXRpY091dHB1dENvbHVtbnMAU2NyaXB0Q29tcG9uZW50UGx1cwBQcm9jZXNzSW5wdXQA
SW5wdXRJRABJbnB1dF9Qcm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vzc0lucHV0Um93AFJvdwBQYXJl
bnRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNSdW50aW1lV3JhcABNaWNyb3NvZnQu
U3FsU2VydmVyLkR0cy5SdW50aW1lLldyYXBwZXIASURUU0Nvbm5lY3Rpb25NYW5hZ2VyMTAwAGdl
dF9DYWNoZUZpbGUAQ2FjaGVGaWxlAFF1ZXJ5XzJQAFByZUV4ZWN1dGUAUG9zdEV4ZWN1dGUAUmVp
bml0aWFsaXplTWV0YURhdGEAVmFsaWRhdGUAZXJyTWVzc2FnZQBnZXRfQWRkcmVzc0NvbHVtbgBz
ZXRfQWRkcmVzc0NvbHVtbgB2YWx1ZQBzZXRfQ2FjaGVGaWxlAGdldF9BcGlLZXlWYXJpYWJsZQBz
ZXRfQXBpS2V5VmFyaWFibGUAZ2V0X0ZpbGVDb25uZWN0aW9uVHlwZQBTeXN0ZW0uQ29sbGVjdGlv
bnMASGFzaHRhYmxlAExvYWRDYWNoZV8AU3RvcmVDYWNoZV8AY2FjaGUAR2VvQ29kZV8AYWRkcmVz
cwBtX2FkZHJlc3NDb2x1bW4AbV9jYWNoZUZpbGUAbV9hcGlLZXlWYXJpYWJsZQBtX2FkZHJlc3NJ
bmRleABtX2FwaUtleQBtX2NhY2hlAG1fY2FjaGVNb2RpZmllZABtX2RlbGF5AEFkZHJlc3NDb2x1
bW4AQXBpS2V5VmFyaWFibGUARmlsZUNvbm5lY3Rpb25UeXBlAFN5c3RlbS5SZXNvdXJjZXMAUmVz
b3VyY2VNYW5hZ2VyAF9yZXNNZ3IAU3lzdGVtLkdsb2JhbGl6YXRpb24AQ3VsdHVyZUluZm8AX3Jl
c0N1bHR1cmUAZ2V0X1Jlc291cmNlTWFuYWdlcgBnZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQBDdWx0
dXJlAFN5c3RlbS5Db25maWd1cmF0aW9uAEFwcGxpY2F0aW9uU2V0dGluZ3NCYXNlAG1fVmFsdWUA
bV9TeW5jT2JqZWN0AGdldF9WYWx1ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwARWRpdG9yQnJvd3Nh
YmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJsZVN0YXRlAFN5c3RlbS5Db2RlRG9tLkNvbXBpbGVy
AEdlbmVyYXRlZENvZGVBdHRyaWJ1dGUAU3lzdGVtLkRpYWdub3N0aWNzAERlYnVnZ2VySGlkZGVu
QXR0cmlidXRlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5Db21waWxlclNlcnZpY2VzAFN0YW5kYXJk
TW9kdWxlQXR0cmlidXRlAEhpZGVNb2R1bGVOYW1lQXR0cmlidXRlAFN5c3RlbS5Db21wb25lbnRN
b2RlbC5EZXNpZ24ASGVscEtleXdvcmRBdHRyaWJ1dGUAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJT
ZXJ2aWNlcwBSdW50aW1lSGVscGVycwBHZXRPYmplY3RWYWx1ZQBSdW50aW1lVHlwZUhhbmRsZQBH
ZXRUeXBlRnJvbUhhbmRsZQBBY3RpdmF0b3IAQ3JlYXRlSW5zdGFuY2UATXlHcm91cENvbGxlY3Rp
b25BdHRyaWJ1dGUAc2V0X1ZhbHVlAFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBDb21W
aXNpYmxlQXR0cmlidXRlAFN0cmluZwBJbnQzMgBzZXRfSXRlbQBTZXROdWxsAEludmFsaWRPcGVy
YXRpb25FeGNlcHRpb24ARG91YmxlAFNjcmlwdEJ1ZmZlcgBDTFNDb21wbGlhbnRBdHRyaWJ1dGUA
TWljcm9zb2Z0LlNxbFNlcnZlci5EVFNQaXBlbGluZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5E
dHMuUGlwZWxpbmUuV3JhcHBlcgBJRFRTQ29tcG9uZW50TWV0YURhdGExMDAAZ2V0X0NvbXBvbmVu
dE1ldGFEYXRhAElEVFNJbnB1dENvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sbGVjdGlvbgBJRFRT
SW5wdXQxMDAAZ2V0X0l0ZW0AZ2V0X0lEAElEVFNSdW50aW1lQ29ubmVjdGlvbkNvbGxlY3Rpb24x
MDAAZ2V0X1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbgBJRFRTUnVudGltZUNvbm5lY3Rpb24x
MDAAZ2V0X0Nvbm5lY3Rpb25NYW5hZ2VyAGdldF9CdWZmZXIAQ29udmVyc2lvbnMAVG9JbnRlZ2Vy
AFRvRG91YmxlAElEVFNWYXJpYWJsZXMxMDAAUGlwZWxpbmVDb21wb25lbnQAZ2V0X0hvc3RDb21w
b25lbnQASURUU0J1ZmZlck1hbmFnZXIxMDAAZ2V0X0J1ZmZlck1hbmFnZXIASURUU0lucHV0Q29s
dW1uQ29sbGVjdGlvbjEwMABnZXRfSW5wdXRDb2x1bW5Db2xsZWN0aW9uAElEVFNJbnB1dENvbHVt
bjEwMABnZXRfTGluZWFnZUlEAEZpbmRDb2x1bW5CeUxpbmVhZ2VJRABJRFRTVmFyaWFibGVEaXNw
ZW5zZXIxMDAAZ2V0X1ZhcmlhYmxlRGlzcGVuc2VyAExvY2tPbmVGb3JSZWFkAElEVFNWYXJpYWJs
ZTEwMABVbmxvY2sASURUU1ZpcnR1YWxJbnB1dDEwMABHZXRWaXJ0dWFsSW5wdXQAUmVtb3ZlQWxs
AElEVFNWaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9WaXJ0dWFsSW5wdXRDb2x1
bW5Db2xsZWN0aW9uAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW4xMDAARFRTVXNhZ2VUeXBlAFNldFVz
YWdlVHlwZQBzZXRfQ29ubmVjdGlvbk1hbmFnZXJJRABFeGNlcHRpb24ASXNOdWxsT3JFbXB0eQBB
cHBsaWNhdGlvbkV4Y2VwdGlvbgBBcmd1bWVudEV4Y2VwdGlvbgBQcm9qZWN0RGF0YQBTZXRQcm9q
ZWN0RXJyb3IAZ2V0X01lc3NhZ2UAQ2xlYXJQcm9qZWN0RXJyb3IAU3lzdGVtLklPAFN0cmVhbVJl
YWRlcgBnZXRfQ29ubmVjdGlvblN0cmluZwBGaWxlAEV4aXN0cwBSZWFkTGluZQBDaGFyAFNwbGl0
AEFkZABnZXRfRW5kT2ZTdHJlYW0ASURpc3Bvc2FibGUARGlzcG9zZQBnZXRfQ291bnQARm9ybWF0
AEVtcHR5AEZpcmVJbmZvcm1hdGlvbgBTdHJlYW1Xcml0ZXIARGljdGlvbmFyeUVudHJ5AElEaWN0
aW9uYXJ5RW51bWVyYXRvcgBDcmVhdGVUZXh0AEdldEVudW1lcmF0b3IASUVudW1lcmF0b3IAZ2V0
X0N1cnJlbnQAZ2V0X0tleQBDb25jYXQAVGV4dFdyaXRlcgBXcml0ZUxpbmUATW92ZU5leHQAU3lz
dGVtLk5ldABXZWJSZXNwb25zZQBDb250YWlucwBXZWJSZXF1ZXN0AENyZWF0ZQBHZXRSZXNwb25z
ZQBTdHJlYW0AR2V0UmVzcG9uc2VTdHJlYW0AT3BlcmF0b3JzAENvbXBhcmVTdHJpbmcARmlyZVdh
cm5pbmcAU3lzdGVtLlRocmVhZGluZwBUaHJlYWQAU2xlZXAAU1NJU1NjcmlwdENvbXBvbmVudEVu
dHJ5UG9pbnRBdHRyaWJ1dGUAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUy5BdHRyaWJ1dGVzAFZhbGlk
YXRlUHJvcGVydGllc0F0dHJpYnV0ZQBTb3J0UHJvcGVydGllc0F0dHJpYnV0ZQBDb25uZWN0aW9u
QXR0cmlidXRlAERlc2NyaXB0aW9uQXR0cmlidXRlAElucHV0VmlydHVhbENvbHVtbkF0dHJpYnV0
ZQBWYXJpYWJsZUF0dHJpYnV0ZQBTeXN0ZW0uUmVmbGVjdGlvbgBBc3NlbWJseQBnZXRfQXNzZW1i
bHkATW9uaXRvcgBFbnRlcgBFeGl0AERlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUAU2NyaXB0
Q29tcG9uZW50XzJlNzE0YzZkZWI4MzQ2Yjc5YTNjZDMxMTU0Y2YzMDNhLnZicHJvai5SZXNvdXJj
ZXMucmVzb3VyY2VzAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAUnVudGltZUNvbXBh
dGliaWxpdHlBdHRyaWJ1dGUAQXNzZW1ibHlGaWxlVmVyc2lvbkF0dHJpYnV0ZQBHdWlkQXR0cmli
dXRlAEFzc2VtYmx5VHJhZGVtYXJrQXR0cmlidXRlAEFzc2VtYmx5Q29weXJpZ2h0QXR0cmlidXRl
AEFzc2VtYmx5UHJvZHVjdEF0dHJpYnV0ZQBBc3NlbWJseUNvbXBhbnlBdHRyaWJ1dGUAQXNzZW1i
bHlEZXNjcmlwdGlvbkF0dHJpYnV0ZQBBc3NlbWJseVRpdGxlQXR0cmlidXRlAFNjcmlwdENvbXBv
bmVudF8yZTcxNGM2ZGViODM0NmI3OWEzY2QzMTE1NGNmMzAzYS52YnByb2ouZGxsAAAAAACAm0kA
cwBOAHUAbABsACAAcAByAG8AcABlAHIAdAB5ACAAYwBhAG4AbgBvAHQAIABiAGUAIABzAGUAdAAg
AHQAbwAgAEYAYQBsAHMAZQAuACAAQQBzAHMAaQBnAG4AIABhACAAdgBhAGwAdQBlACAAdABvACAA
dABoAGUAIABjAG8AbAB1AG0AbgAgAGkAbgBzAHQAZQBhAGQALgAAEUEAYwBjAHUAcgBhAGMAeQAA
EUwAYQB0AGkAdAB1AGQAZQAAE0wAbwBuAGcAaQB0AHUAZABlAAALSQBuAHAAdQB0AAATQwBhAGMA
aABlAEYAaQBsAGUAAC1TAGUAbABlAGMAdAAgAGEAZABkAHIAZQBzAHMAIABjAG8AbAB1AG0AbgAu
AAAxUwBlAGwAZQBjAHQAIABBAFAASQAgAGsAZQB5ACAAdgBhAHIAaQBhAGIAbABlAC4AAEtTAGUA
bABlAGMAdAAgAGMAYQBjAGgAZQAgAGYAaQBsAGUAIABjAG8AbgBuAGUAYwB0AGkAbwBuACAAbQBh
AG4AYQBnAGUAcgAuAAAJRgBJAEwARQAAD0cAZQBvAGMAbwBkAGUAADlMAG8AYQBkAGUAZAAgAHsA
MAB9ACAAYwBhAGMAaABlAGQAIABhAGQAZAByAGUAcwBzAGUAcwAuAAADfAAAgJtoAHQAdABwADoA
LwAvAG0AYQBwAHMALgBnAG8AbwBnAGwAZQAuAGMAbwBtAC8AbQBhAHAAcwAvAGcAZQBvAD8AbwB1
AHQAcAB1AHQAPQBjAHMAdgAmAG8AZQA9AHUAdABmADgAJgBzAGUAbgBzAG8AcgA9AGYAYQBsAHMA
ZQAmAGsAZQB5AD0AewAwAH0AJgBxAD0AewAxAH0AAAcyADAAMAAABzYAMgAwAACAk0cAZQBvAGMA
bwBkAGUAIABzAGUAcgB2AGkAYwBlACAAaABhAHMAIAB0AG8AbwAgAG0AYQBuAHkAIABxAHUAZQBy
AGkAZQBzAC4AIABEAGUAbABhAHkAIABiAGUAdAB3AGUAZQBuACAAYwBhAGwAbABzACAAaQBzACAA
aQBuAGMAcgBlAG0AZQBuAHQAZQBkAC4AAFdGAGEAaQBsAGUAZAAgAHQAbwAgAGcAZQBvAGMAbwBk
AGUAIAAnAHsAMAB9ACcALgAgAFIAZQBjAGUAaQB2AGUAZAAgAGMAbwBkAGUAOgAgAHsAMQB9AAEx
TQB5AC4AUgBlAHMAbwB1AHIAYwBlAHMALgBNAHkAUgBlAHMAbwB1AHIAYwBlAHMAAAAA1N+R92T7
jku0Yyk8XH6ICwAIt3pcVhk04IkIsD9ffxHVCjoDIAABAwAAAQQAABIMBwYVEhgBEgwEAAASCAcG
FRIYARIIBAAAEhEHBhUSGAESEQQAABIUBwYVEhgBEhQECAASDAQIABIIBAgAEhEECAASFAQgAQIc
AyAACAQgABIVAyAADgIeAAcQAQEeAB4ABzABAQEQHgACEwAEIAATAAcGFRIZARMABCgAEwAIFs9J
C7gMNOoIiYRdzYCAzJEJIAQBEiEIAhIlBCAAHQ4EIAEBCAQgAQECBCABAQ0DIAACBCgAHQ4DKAAI
AygAAgMoAA0DBhIkAwYSKAYgAgEIEiUFIAEBEhwDBhIhBSABARIhBCAAEi0EKAASLQIGDoCaaAB0
AHQAcAA6AC8ALwBtAGEAcABzAC4AZwBvAG8AZwBsAGUALgBjAG8AbQAvAG0AYQBwAHMALwBnAGUA
bwA/AG8AdQB0AHAAdQB0AD0AYwBzAHYAJgBvAGUAPQB1AHQAZgA4ACYAcwBlAG4AcwBvAHIAPQBm
AGEAbABzAGUAJgBrAGUAeQA9AHsAMAB9ACYAcQA9AHsAMQB9AAUgAQIQDgQgAQEOBCAAEjEFIAEB
EjEFIAEdHA4CBggDBhIxAgYCAygADgMGEjUDBhI5BAAAEjUEAAASOQUAAQESOQQIABI1BAgAEjkD
BhI0AgYcBAAAEjQECAASNAUgAQERRQgBAAEAAAAAAAUgAgEODhcBAApNeVRlbXBsYXRlBzguMC4w
LjAAAAQBAAAABhUSGAESDAYVEhgBEggGFRIYARIRBhUSGAESFAQHARIMBAcBEggEBwESEQQHARIU
EwEADk15LkFwcGxpY2F0aW9uAAAQAQALTXkuQ29tcHV0ZXIAAAwBAAdNeS5Vc2VyAAATAQAOTXku
V2ViU2VydmljZXMAAAQAARwcAwcBAgMHAQgGAAESFRFhBAcBEhUDBwEOBRABAB4ABAoBHgAEBwEe
AAcgBAEODg4OYQEANFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRwQ2xpZW50
UHJvdG9jb2wSQ3JlYXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAAGFRIYARMA
BhUSGQETAAQKARMABSABARMABgcCEwATAAUBAAAAAAQHAR0OBSACAQgcBgcCHQ4dDgUgABKAiQUg
ABKAjQYgARKAkRwFIAASgJUGIAESgJkcBAcBEi0EIAASJQQgARwIBAABDhwEAAEIHAQAAQ0cBQcC
Dh0cBSAAEoClBSAAEoCpBSAAEoCtBiABEoCxHAUgAggICAUgABKAtQggAgEOEBKAoQYgARKAuRwD
IAAcCAcCEoCREoChBSAAEoC9BSAAEoDBBiABEoDFHAcgAggIEYDJCAcCEoCREoC9BAABAg4GAAEB
EoDNBwcDAgISgM0GIAEdDh0DBAABCA4EAAENDgUgAgEcHAUAAg4OHAogBgEIDg4OCBACEQcIDhIx
EjECEoDdHQ4dAx0cBgABEoDtDgUgABKA9QIdHAYAAw4ODg4UBwkOEoDtDhGA8RwSgPURgPEIHRwG
AAMODhwcBgABEoEFDgUgABKBAQUgABKBCQYgAQESgQkGAAMIDg4CCCAFAQgODg4IBAABAQgEIAEc
HBIHBx0cHRwdDhKBARKA3R0DHRwNAQAIVmFsaWRhdGUAAAUgAQEdDi8BAAMAAAANQWRkcmVzc0Nv
bHVtbg5BcGlLZXlWYXJpYWJsZQlDYWNoZUZpbGUAAAUgAgEOAhgBABJGaWxlQ29ubmVjdGlvblR5
cGUBAAAsAQAnU2VsZWN0IGZpbGUgY29udGFpbmluZyBnZW9jb2RpbmcgY2FjaGUuAAAbAQAWU2Vs
ZWN0IGFkZHJlc3MgY29sdW1uLgAANAEAL1NlbGVjdCB2YXJpYWJsZSBjb250YWluaW5nIEdvb2ds
ZSBNYXBzIEFQSSBrZXkuAAAFIAASgTEHIAIBDhKBMQYHAhI1EjUEBwESOQgBAAIAAAAAAAQAAQEc
BAcBEjQIAQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBDAEABzEuMC4wLjAA
ACkBACRmNWQ0YWU3ZC1lNDMyLTRjMjktYWM3MC03NTliNjU2ZjA3YTgAAAUBAAEAAB8BABpDb3B5
cmlnaHQgQCBNaWNyb3NvZnQgMjAxMAAAPAEAN1NjcmlwdENvbXBvbmVudF8yZTcxNGM2ZGViODM0
NmI3OWEzY2QzMTE1NGNmMzAzYS52YnByb2oAAA4BAAlNaWNyb3NvZnQAAAA4WAAAAAAAAAAAAABO
WAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFgAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUu
ZGxsAAAAAAD/JQAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMAAAAoAACADgAAAEgA
AIAQAAAAYAAAgAAAAAAAAAAAAAAAAAAAAgACAAAAeAAAgAMAAACQAACAAAAAAAAAAAAAAAAAAAAB
AAB/AACoAACAAAAAAAAAAAAAAAAAAAABAAEAAADAAACAAAAAAAAAAAAAAAAAAAABAAAAAADYAAAA
AAAAAAAAAAAAAAAAAAABAAAAAADoAAAAAAAAAAAAAAAAAAAAAAABAAAAAAD4AAAAAAAAAAAAAAAA
AAAAAAABAAAAAAAIAQAAgGUAAOgCAAAAAAAAAAAAAGhoAAAoAQAAAAAAAAAAAACQaQAAIgAAAAAA
AAAAAAAAGGEAAGgEAAAAAAAAAAAAAGgENAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBP
AAAAAAC9BO/+AAABAAAAAQAAAAAAAAABAAAAAAA/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAA
RAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBv
AG4AAAAAAAAAsATIAwAAAQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAACkAwAAAQAwADAA
MAAwADAANABiADAAAAA0AAoAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAE0AaQBjAHIAbwBz
AG8AZgB0AAAAmAA4AAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFMAYwByAGkA
cAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgBlADcAMQA0AGMANgBkAGUAYgA4ADMANAA2AGIANwA5
AGEAMwBjAGQAMwAxADEANQA0AGMAZgAzADAAMwBhAC4AdgBiAHAAcgBvAGoAAAAwAAgAAQBGAGkA
bABlAFYAZQByAHMAaQBvAG4AAAAAADEALgAwAC4AMAAuADAAAACYADwAAQBJAG4AdABlAHIAbgBh
AGwATgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgBlADcAMQA0AGMA
NgBkAGUAYgA4ADMANAA2AGIANwA5AGEAMwBjAGQAMwAxADEANQA0AGMAZgAzADAAMwBhAC4AdgBi
AHAAcgBvAGoALgBkAGwAbAAAAFwAGwABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAAEMA
bwBwAHkAcgBpAGcAaAB0ACAAQAAgAE0AaQBjAHIAbwBzAG8AZgB0ACAAMgAwADEAMAAAAAAAoAA8
AAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAA
bwBuAGUAbgB0AF8AMgBlADcAMQA0AGMANgBkAGUAYgA4ADMANAA2AGIANwA5AGEAMwBjAGQAMwAx
ADEANQA0AGMAZgAzADAAMwBhAC4AdgBiAHAAcgBvAGoALgBkAGwAbAAAAJAAOAABAFAAcgBvAGQA
dQBjAHQATgBhAG0AZQAAAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAyAGUANwAx
ADQAYwA2AGQAZQBiADgAMwA0ADYAYgA3ADkAYQAzAGMAZAAzADEAMQA1ADQAYwBmADMAMAAzAGEA
LgB2AGIAcAByAG8AagAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADEALgAw
AC4AMAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMQAuADAA
LgAwAC4AMAAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA
AACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAB3d3d3d3d3d3d3d3d3d3AERERERERERERERERERERwBP/////////////////0cAT/
////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////
////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE////
//////////////RwBP/////////////////0cAT/////////////////9HAE////////////////
//RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////
///////////0cAT/////////////////9HAE//////////////////RwBIiIiIiIiIiIiIiIiIiE
cARERERERERERERERERERHAETExMTExMTExMTs7OSXRwBMzMzMzMzMzMzMzMzMzEAABERERERERE
REREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/
////////////////////wAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAADwAAA
B////////////////ygAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD/
//8AAAAAAAAAAAAHd3d3d3d3d0RERERERERHT///////+EdP///////4R0////////hHT///////
+EdP///////4R0////////hHT///////+EdP///////4R0iIiIiIiIhHTMzMzMzMzEfERERERERE
wAAAAAAAAAAAAAAAAAAAAAD//wAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAEAAP//AAD//wAAAAABAAIAICAQAAEABADoAgAAAgAQEBAAAQAEACgBAAAD
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAMAAAAYDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA]]></arrayElement></arrayElements></property>
<property id="153" 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="487" 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_2e714c6deb8346b79a3cd31154cf303a</property>
<property id="488" 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>
<connections>
<connection id="231" name="CacheFile" description="" connectionManagerID="{AB444594-0EA1-4BFB-81C3-5A8AD6D70AF9}" /></connections>
<inputs>
<input id="143" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></input>
</inputs>
<outputs>
<output id="144" name="Output" description="" exclusionGroup="0" synchronousInputId="143" deleteOutputOnPathDetached="false" hasSideEffects="false" dangling="false" isErrorOut="false" isSorted="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><outputColumns>
<outputColumn id="178" name="Accuracy" description="" lineageId="178" precision="0" scale="0" length="0" dataType="i4" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" />
<outputColumn id="179" name="Latitude" description="" lineageId="179" precision="0" scale="0" length="0" dataType="r8" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" />
<outputColumn id="180" name="Longitude" description="" lineageId="180" precision="0" scale="0" length="0" dataType="r8" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" /></outputColumns><externalMetadataColumns isUsed="False" /></output>
</outputs>
</component>