<component id="16" name="Range Dictionary" componentClassID="{874F7595-FB5F-40FF-96AF-FBFF8250E3EF}" description="Executes a custom script." localeId="1033" version="7" 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="17" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="18"><arrayElement dataType="System.String"><![CDATA[ScriptMain.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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.

Imports System
Imports System.ComponentModel
Imports System.Collections.Generic

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


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Call m_list.Add(New RangeValue( _
            Row.Buffer(m_startIndex), _
            Row.Buffer(m_endIndex), _
            Row.Buffer(m_valueIndex)))
    End Sub ' Input_ProcessInputRow


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

        ' Setup range list object.
        Dim vars As IDTSVariables100 = Nothing
        Call Me.VariableDispenser.LockOneForWrite(Me.ResultVariable, vars)
        Try
            Try
                Dim rvd As RangeValueDictionary = CType( _
                    vars(Me.ResultVariable).Value, _
                    RangeValueDictionary)
                m_list = rvd.Ranges
            Catch ex As Exception
                ' Dictionary not yet initialized.
                m_list = New List(Of RangeValue)
                vars(Me.ResultVariable).Value = New RangeValueDictionary(m_list)
            End Try
        Finally
            Call vars.Unlock()
        End Try

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

        ' Find range start column index.
        m_startIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.StartColumn).LineageID)

        ' Find range end column index.
        m_endIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.EndColumn).LineageID)

        ' Find value column index.
        m_valueIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.ValueColumn).LineageID)
    End Sub ' PreExecute


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

        ' Sort for binary search to work.
        Call m_list.Sort()

        m_list = Nothing
        m_startIndex = -1
        m_endIndex = -1
        m_valueIndex = -1
    End Sub ' PostExecute


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

        Try
            If String.IsNullOrEmpty(Me.StartColumn) Then
                Throw New Exception("Select range start column.")
            ElseIf String.IsNullOrEmpty(Me.EndColumn) Then
                Throw New Exception("Select range end colum.")
            ElseIf String.IsNullOrEmpty(Me.ValueColumn) Then
                Throw New Exception("Select value colum.")
            ElseIf String.IsNullOrEmpty(Me.ResultVariable) Then
                Throw New Exception("Select dictionary result variable.")
            Else
                Dim managedComponent As CManagedComponentWrapper = Me.ComponentMetaData.Instantiate()
                Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
                Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()

                Call input.InputColumnCollection.RemoveAll()

                ' Setup selected range start column.
                Dim startColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                    input.ID, _
                    virtInput, _
                    virtInput.VirtualInputColumnCollection(Me.StartColumn).LineageID, _
                    DTSUsageType.UT_READONLY)

                ' Setup selected range start column.
                Dim endColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                    input.ID, _
                    virtInput, _
                    virtInput.VirtualInputColumnCollection(Me.EndColumn).LineageID, _
                    DTSUsageType.UT_READONLY)

                ' Setup selected value column.
                Dim valueColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                    input.ID, _
                    virtInput, _
                    virtInput.VirtualInputColumnCollection(Me.ValueColumn).LineageID, _
                    DTSUsageType.UT_READONLY)
            End If
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    ' Validate


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select range start column.")> _
    <Category("Input")> _
    <InputVirtualColumn()> _
    Public Property StartColumn() As String
        Get
            StartColumn = m_startColumn
        End Get
        Set(ByVal value As String)
            m_startColumn = value
        End Set
    End Property    ' StartColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select range end column.")> _
    <Category("Input")> _
    <InputVirtualColumn()> _
    Public Property EndColumn() As String
        Get
            EndColumn = m_endColumn
        End Get
        Set(ByVal value As String)
            m_endColumn = value
        End Set
    End Property    ' EndColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select value column.")> _
    <Category("Input")> _
    <InputVirtualColumn()> _
    Public Property ValueColumn() As String
        Get
            ValueColumn = m_valueColumn
        End Get
        Set(ByVal value As String)
            m_valueColumn = value
        End Set
    End Property    ' ValueColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable with dictionary object.")> _
    <Category("Result")> _
    <Variable()> _
    Public Property ResultVariable() As String
        Get
            ResultVariable = m_resultVar
        End Get
        Set(ByVal value As String)
            m_resultVar = value
        End Set
    End Property    ' ResultVariable

#End Region ' Properties


#Region "Attributes"
    Private m_startColumn As String
    Private m_endColumn As String
    Private m_valueColumn As String
    Private m_resultVar As String

    Private m_list As List(Of RangeValue)
    Private m_startIndex As Integer
    Private m_endIndex As Integer
    Private m_valueIndex As Integer
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ComponentWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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 InputName As String, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer, OutputMap))
        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[BufferWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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, ByVal OutputMap As OutputNameMap)
        MyBase.New(Component, ObjectID, IsInput, Buffer, OutputMap)
    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_db237b1b862b4617bf8f943a1156d8a0.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-16"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{3026E04E-DC4F-409C-8252-D8874A8F35A8}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_db237b1b862b4617bf8f943a1156d8a0</RootNamespace>
    <AssemblyName>ScriptComponent_db237b1b862b4617bf8f943a1156d8a0</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>.\bin\Release\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Assemblies\CozyRoc.SSISPlus.2012.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
  </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>
  <ItemGroup>
    <AppDesigner Include="My Project\" />
  </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="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" DebugInfoExeName="devenv.exe" DebugInfoCommandLine="/vstaHostDebugUri:&quot;vstadebugc99d6896-2545-4137-bae8-8be28d638475/3024a1af-d82c-40b7-acc6-feb65c200605&quot;" />
        <Host Name="SSIS_SC110" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC110</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <ItemGroup>
    <Compile Include="ScriptMain.vb" />
    <Compile Include="RangeDictionary.vb" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
  <PropertyGroup>
    <OptionCompare>Binary</OptionCompare>
  </PropertyGroup>
  <PropertyGroup>
    <OptionExplicit>On</OptionExplicit>
  </PropertyGroup>
  <PropertyGroup>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[RangeDictionary.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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.

Imports System
Imports System.Collections
Imports System.Collections.Generic


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Container class for range value.
Public Class RangeValue
    Implements IComparable(Of RangeValue)


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub New(ByVal startR As Object, ByVal endR As Object, ByVal value As Object)
        m_start = CType(startR, IComparable)
        m_end = CType(endR, IComparable)
        m_value = value
    End Sub ' RangeValue


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function CompareTo(ByVal other As RangeValue) As Integer Implements IComparable(Of RangeValue).CompareTo
        Dim compareStart As Integer = m_start.CompareTo(other.m_start)
        Dim compareEnd As Integer = m_end.CompareTo(other.m_end)

        If compareStart < 0 AndAlso compareEnd < 0 Then
            Return -1
        End If

        If compareStart > 0 AndAlso compareEnd > 0 Then
            Return 1
        End If

        If compareStart = 0 AndAlso compareEnd = 0 Then
            Return 0
        End If

        Throw New ArgumentException("Overlapping Range.")
    End Function    ' CompareTo


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns:
    ' 0 if value is in the specified range.
    ' < 0 if value is below the range.
    ' > 0 if value is above the range.
    Public Function CompareTo(ByVal key As Object) As Integer
        Dim compareStart As Integer = m_start.CompareTo(key)
        Dim compareEnd As Integer = m_end.CompareTo(key)

        If compareStart <= 0 AndAlso compareEnd >= 0 Then
            Return 0
        ElseIf compareEnd < 0 Then
            Return -1
        End If

        Return 1
    End Function    ' CompareTo


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property Value() As Object
        Get
            Return m_value
        End Get
    End Property    ' Value
#End Region ' Properties


#Region "Attributes"
    Private m_start As IComparable
    Private m_end As IComparable
    Private m_value As Object
#End Region ' Attributes
End Class   ' RangeValue


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' The only implemented IDictionary interface methods are: Contains, Item Get
'
' Uses binary search to find value in specialized Ranges array.
Public Class RangeValueDictionary
    Implements IDictionary


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub New(ByVal list As List(Of RangeValue))
        m_list = list
    End Sub ' RangeValueDictionary


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Throw New Exception("Not Implemented.")
    End Sub ' CopyTo


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub Add(ByVal key As Object, ByVal value As Object) Implements IDictionary.Add
        Throw New Exception("Not Implemented.")
    End Sub ' Add


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub Clear() Implements IDictionary.Clear
        Throw New Exception("Not Implemented.")
    End Sub ' Clear


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function Contains(ByVal key As Object) As Boolean Implements IDictionary.Contains
        Contains = GetKeyIndex_(key) >= 0
    End Function    ' Contains


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function GetEnumerator() As IDictionaryEnumerator Implements IDictionary.GetEnumerator
        Throw New Exception("Not Implemented.")
    End Function    ' GetEnumerator


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub Remove(ByVal key As Object) Implements IDictionary.Remove
        Throw New Exception("Not Implemented.")
    End Sub ' Remove


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function GetEnumerator1() As IEnumerator Implements IEnumerable.GetEnumerator
        Throw New Exception("Not Implemented.")
    End Function    ' GetEnumerator1


#Region "Properties"
    Public ReadOnly Property Ranges() As List(Of RangeValue)
        Get
            Return m_list
        End Get
    End Property    ' Ranges


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Throw New Exception("Not Implemented.")
        End Get
    End Property    ' Count


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            IsSynchronized = False
        End Get
    End Property    ' IsSynchronized


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return m_list
        End Get
    End Property    ' SyncRoot


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property IsFixedSize() As Boolean Implements IDictionary.IsFixedSize
        Get
            IsFixedSize = True
        End Get
    End Property    ' IsFixedSize


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property IsReadOnly() As Boolean Implements IDictionary.IsReadOnly
        Get
            IsReadOnly = True
        End Get
    End Property    ' IsReadOnly


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Default Public Property Item(ByVal key As Object) As Object Implements IDictionary.Item
        Get
            Dim index As Integer = GetKeyIndex_(key)
            Dim rangeValue As RangeValue = m_list(index)

            Return rangeValue.Value
        End Get
        Set(ByVal value As Object)
            Throw New Exception("Not Implemented.")
        End Set
    End Property    ' Item


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property Keys() As ICollection Implements IDictionary.Keys
        Get
            Throw New Exception("Not Implemented.")
        End Get
    End Property    ' Keys


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property Values() As ICollection Implements IDictionary.Values
        Get
            Throw New Exception("Not Implemented.")
        End Get
    End Property    ' Values
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetKeyIndex_(ByVal key As Object) As Integer
        If Not m_cachedKey Is Nothing AndAlso m_cachedKey.CompareTo(key) = 0 Then
            ' Searched key index is already cached.
            Return m_cachedIndex
        End If

        m_cachedKey = CType(key, IComparable)
        m_cachedIndex = BinarySearch_(key)

        GetKeyIndex_ = m_cachedIndex
    End Function    ' GetKeyIndex_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Binary search for specified key.
    Private Function BinarySearch_(ByVal key As Object) As Integer
        Dim min As Integer = 0
        Dim max As Integer = m_list.Count - 1

        Do While min <= max
            Dim mid As Integer = (min + max) >> 1
            Dim compare As Integer = m_list(mid).CompareTo(key)

            If compare = 0 Then
                Return mid
            End If

            If compare < 0 Then
                min = mid + 1
            Else
                max = mid - 1
            End If
        Loop

        Return Not min
    End Function    ' BinarySearch_
#End Region ' Internals


#Region "Attributes"
    Private m_list As List(Of RangeValue)
    Private m_cachedKey As IComparable
    Private m_cachedIndex As Integer
#End Region ' Attributes
End Class   ' RangeDictionary
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Project]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:Language>msBuild</msb:Language>
		<msb:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:ProjectId>{FCCA66CF-D44A-4A53-8546-0792949CB153}</msb:ProjectId>
		<msb:DisplayName>ScriptComponent_db237b1b862b4617bf8f943a1156d8a0</msb:DisplayName>
		<msb:CodeName>ScriptComponent_db237b1b862b4617bf8f943a1156d8a0</msb:CodeName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="RangeDictionary.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:Project Include="ScriptComponent_db237b1b862b4617bf8f943a1156d8a0.vbproj"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement></arrayElements></property><property id="18" name="BinaryCode" state="cdata" dataType="System.String" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[ScriptComponent_db237b1b862b4617bf8f943a1156d8a0.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
EQdvWAAACgJvPQAABm9ZAAAKb1oAAAoWb1sAAAoTBt4aJShGAAAKEwgWCgMRCG9cAAAKUShJAAAK
3gAGCwcqAEEcAAAAAAAAAgAAABMBAAAVAQAAGgAAACgAAAETMAEACQAAACMAABECexAAAAQKBioA
AAAiAgN9EAAABCoAAAATMAEACQAAACQAABECexEAAAQKBioAAAAiAgN9EQAABCoAAAATMAEACQAA
ACUAABECexIAAAQKBioAAAAiAgN9EgAABCoAAAATMAEACQAAACYAABECexMAAAQKBioAAAAiAgN9
EwAABCoAAABCU0pCAQABAAAAAAAMAAAAdjQuMC4zMDMxOQAAAAAFAGwAAABYDgAAI34AAMQOAACs
DwAAI1N0cmluZ3MAAAAAcB4AACwBAAAjVVMAnB8AABAAAAAjR1VJRAAAAKwfAABQBQAAI0Jsb2IA
AAAAAAAAAgAAAVcXogsJDgAAAPolMwAWAAABAAAAQgAAAA0AAAAXAAAAQAAAACcAAAACAAAAZgAA
ADwAAAAmAAAABgAAABUAAAAaAAAAEQAAAAsAAAABAAAACAAAAAIAAAADAAAAAgAAAAAAdw8BAAAA
AAAKAF8BNQEKAJMBdQEGAKMBnAEKAPsBNQEGAHkCnAEKAPsC0QIOAE0DNgMSAJwDewMWAM0DewMS
ANwDewMOAIAENgMGAPAEnAEGAC4FnAEGAGkFVgUGAJAFdQUGAJwFnAEGAMgFVgUGAPMFVgUGAHQG
VgUaAGoIVAgaAIMIVAgaALAImAgGANoIxwgKABkJ8ggKADEJEwAaAGYJSQkGAJsJewkGALkJnAEG
AN0JnAEKAPYJEwAGADoKGwoGAE4KnAESAFUKewMGAGIKnAEeAMUKnAoeAPQKnAoeAB8LnAoGADML
nAEGAEULVgUGAFELnAEGAG0LWwsiANoLsgsiAOsLsgsiACoMsgsKADoM8ggGAG8MnAEWAHUMewMe
AJkMnAoeAMAMnAoeAPcMnAoeADMNnAoeAEwNnAoeAJQNnAoeANkNnAoeAPMNnAoeAA4OnAoSADQO
ewMOAH0OWw4OAJkOWw4OALEOWw4aAM0OVAgaAN8OVAgOAPQOWw4GAAYPewkGACYPewkGAF4PRA8A
AAAAAQAAAAAAAQABAAAAAAApADcABQABAAEAAAAAAGsANwAJAAEAAgAAARAAdgA3AA0AAQADAAUB
AACAAAAADQAFAAgABQEAAI4AAAANAAUADwABAAAAqQC1AB0ABgARAAEAAADmALUALQAGABYAAQAA
APQAtQANAAgAGgABAAAAAAG1AA0ACQAbAAEAAAAKAbUADQAKABwAAQAAABUBtQANAA0AIAABAAAA
KgG1ACAAEAA0ADEAvgEgADEA5wEtADEACQI6ADEALgJHACEACgOQAAYA9ADJAAYAAAHNAAEA4ATh
AAEA4AThAAEAOgUIAQEAQgUIAQEASAUMAQEArwZMAQEAtgYIAQEAwgZUAQEAygd9AQEA2Ad9AQEA
5Ad9AQEA8gd9AQEArwZMAQEA/gdUAQEACwhUAQEAFghUAVAgAAAAAAYYbwETAAEAWCAAAAAABhhv
ARMAAQBgIAAAAAARGKoBFwABAIwgAAAAABMIsQEbAAEApCAAAAAAEwjXASgAAQC8IAAAAAATCAAC
NQABANQgAAAAABMIHgJCAAEA7CAAAAAARgJkAmMAAQAIIQAAAABGAm0CaAACABwhAAAAAIMAfgJs
AAIANCEAAAAARgKGAnEAAgBIIQAAAAARAI8CeAACAGQhAAAAAAEArQKAAAMAgCEAAAAABhhvARMA
BACIIQAAAAADCMECiwAEALwhAAAAAAYYbwETAAQA0CEAAAAABhhvAa8ABADgIQAAAABGChYEuwAJ
APQhAAAAAEYKLQS7AAkACCIAAAAAhgBFBMAACQAgIgAAAACGAE0EwAAJADgiAAAAAAYYbwETAAkA
WCIAAAAARgKUBNEACQCIIgAAAABGA7ME2wANAJwiAAAAAEYDxgTbAA4AoCIAAAAABhhvAeUADwCw
IgAAAAAGGG8B5QAQAMAiAAAAAAYYbwHyABEA7CIAAAAAZgMQBfkAFABIIwAAAAAGABAF/wAVAIwj
AAAAAAYIJAUEARYAoCMAAAAABhhvARMBFgCwIwAAAABmA6IFHQEXALwjAAAAAGYDtQUkARkAyCMA
AAAAZgO5BRMAGwDUIwAAAABmA78FYwAbAPgjAAAAAGYD3gUqARwAECQAAAAAZgPsBS8BHAAcJAAA
AABmA/8FNAEdADQkAAAAAAYIDgY5AR0ASCQAAAAAZgsZBmgAHQBgJAAAAABmCyMGwAAdAHAkAAAA
AGYLNgYEAR0AhCQAAAAAZgtDBsAAHQCUJAAAAABmC1MGwAAdAKQkAAAAAGYLYgZCAR0A1CQAAAAA
ZgtrBiQBHgDgJAAAAABmC4AGRwEgAPgkAAAAAGYLiQZHASAAECUAAAAAAQCUBv8AIABoJQAAAAAB
AKEG/wAhAMQlAAAAAAYYbwETACIAzCUAAAAARgLGBNsAIgAsJgAAAABGAh0HEwAjAIAnAAAAAEYC
KAcTACMAsCcAAAAABgA0B3IBIwAMKQAAAAAGCEgHcQAkACQpAAAAAAYIWAd4ASQAMCkAAAAABgho
B3EAJQBIKQAAAAAGCHYHeAElAFQpAAAAAAYIhAdxACYAbCkAAAAABgiUB3gBJgB4KQAAAAAGCKQH
cQAnAJApAAAAAAYItwd4AScAAAABAGsCAAABAKQCAAABAKQCAAABAOoDAAACAPQDAAADAP0DAAAE
AAUEAAAFAAwEAAABAKEEAAACAKkEAAADAAUEAAAEAAwEAAABAAUEAAABANwEAAABAOoDAAABAOoD
AAABAP4EAAACAAUFAAADAAoFAAABABoFAAABACAFAAABAJcFAAABAKkFAAACAK8FAAABACAFAAAC
AAoFAAABACAFAAABACAFAAABACAFAAABACAFAAACAAoFAAABACAFAAABACAFAAABANwEAAABAD0H
AAABAAoFAAABAAoFAAABAAoFAAABAAoFCwASAAwAOQAJAG8BEwChAG8BhAGxAG8BkwERAG8BEwC5
AG8BEwAsAG8BEwA0AG8BEwA8AG8BEwBEAG8BEwAsAMECiwA0AMECiwA8AMECiwBEAMECiwDBAG8B
EwDJAG8BEwDRAG8BeAHZAKoJLQIZAGQCYwAZAG0CaAApAMsJOgIZAIYCcQDpAOcJSgIZAG8BEwDx
AG8BWgJMAAoDkABUACQFiwBUABEK1wJUAG8BEwD5AG8B5gI5AG8BrwAJAUUEwAAJAU0EwAARAW8B
5gJZAG8BEwBBAN4K9gIZAQsL/AIhAWIGAgMpASwLaAAkABAFCQNpABAF/wAxAW8BeAGZAKIFHQFx
ALUFJAFxALkFEwBxAL8FYwBxAN4FKgFxAOwFLwE5Ad4FNAGZABkGaACZACMGwACZADYGBAFxAEMG
wABxAFMGwABxAGIGQgFxAGsGJAFxAIAGRwFxAIkGRwFBAW8BeAFcAGIGMwNcABkGaABJAW8BeAE5
AIQLVwNJAGIGXANcALUF1wJBAB0HEwBBAAQMYQNZARoMZwNRAWIGcANhASQFBAFpAUYMdwNcAG8B
EwBhAREKLwFpAVYMFwBRAWgMEwBZAIcMfgN5Aa4MhAMpAYQLaAApAd0MigOJAWIGkAORAQoNaACB
ARgNlwNBACgHEwBcAC4NEwABAWANqwMZAW4NsAMpAXoNtgOJAYoNEwChAbgNvAOpAWIGwgOxAQoN
aAC5ARsOyQNBASgOcQDJAW8BEwDRAW8BeAHZAW8B/wPhAW8BEwDpAW8BeAHxAW8BeAH5AW8BEwAB
Am8B2wQJAm8BEwARAm8BeAEpAIMACAIuACMD4AQuACsD6QQuADMDCAVAABMAigFAACsAsgFDABMA
igFDABsAmQFJAIMA9AFjABMAigFjABsAmQFpAIMA5wGAACsAsgGDABsAmQGDAHsAsgGDAHMAsgGJ
AIMAGQKgACsAsgGjABMAigGjAMMAYgLAACsAsgHDAOsA6wLDABMAigHgACsAsgHjAAsB6wIAASsA
sgEAARMAigEDAQsB6wIgASsAsgEgARMAigFAARMAigFAASsAsgFgASsAsgFgARMAigGAASsAsgGD
AesBTQOgASsAsgGjAesCsgGjAfsCBQSjAfMC8QOjAQsB6wLAASsAsgHAARMAigHgASsAsgEAAisA
sgEAAhMAigFJAgsDPwRJAhMDSgRJAgMDsgFpAgMDsgFpAhMDagRpAgsDPwSJAgsDPwSJAhMDiASJ
AgMDsgGpAhsDsgGpAgsDogSpAhMDrgRAAwsB6wJgAwsB6wLTAdgB3QHiATICNgJBAkYCVQJVAt0C
8QLxAjICMgIPAw8DFQMyAhkDHgMjAzYCMgIVAzICMgI5A0ADQAM2AkUDnQPXA0YCRgJGAkYCBAAB
AAYABQAHAAYACwAIAAwACQANABIAAACTAU8AAABMAlQAAAD7AVkAAABYAl4AAAAUA5gAAABZBMQA
AABsBMQAAABQBQ8BAADQBlcBAADXBmABAADdBmQBAADsBg8BAAD1BmQBAAABB2QBAAAMB2gBAAAR
B20BAAAWB20BAAAjCIABAAAvCIABAAA5CIABAABFCIABAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkA
AgAPAAsAAgASAA0AAgATAA8AAgAfABEAAgAoABMAAgApABUAAgAqABcAAgArABkAAgAsABsAAgAt
AB0AAQAvAB8AAgAuAB8AAgAwACEAAgAxACMAAQA6ACUAAgA5ACUAAgA7ACcAAQA8ACcAAgA9ACkA
AQA+ACkAAgA/ACsAAQBAACsACwA6AE8ADABSAGMADABEAFcADABGAFkADABIAFsADABKAF0ADABM
AF8ADABOAGEADABCAFUADABUAGUADABWAGcADABYAGkADABaAGsADABcAG0ADABeAG8ADABgAHEA
DABiAHMAdQB1AIgA6wC3Ab4BxQHMAcQCywIsAwSAAAAAAAAAAAAAAAAAAAAAALUAAAAEAAAAAAAA
AAAAAAABAAoAAAAAAAoAAAAAAAAAAAAAAAoAEwAAAAAAAQAAAAAAAAAAAAAAnQAgAwAAAAALAAAA
AAAAAAAAAACmAF4DAAAAAAsAAAAAAAAAAAAAAKYArAMAAAAABAAAAAAAAAAAAAAAAQCcAQAAAAAL
AAAAAAAAAAAAAACmAHgKAAAAAAsAAAAAAAAAAAAAAKYAjwsAAAAABQAEAAYABAAAABAADACiAgAA
EAAZAKICAAAAABsAogItAFACLQDSAgAAAAAAPE1vZHVsZT4AbXNjb3JsaWIATWljcm9zb2Z0LlZp
c3VhbEJhc2ljAE15QXBwbGljYXRpb24AU2NyaXB0Q29tcG9uZW50X2RiMjM3YjFiODYyYjQ2MTdi
ZjhmOTQzYTExNTZkOGEwLk15AE15Q29tcHV0ZXIATXlQcm9qZWN0AE15V2ViU2VydmljZXMAVGhy
ZWFkU2FmZU9iamVjdFByb3ZpZGVyYDEASW5wdXRCdWZmZXIAU2NyaXB0Q29tcG9uZW50X2RiMjM3
YjFiODYyYjQ2MTdiZjhmOTQzYTExNTZkOGEwAFVzZXJDb21wb25lbnQAQ29ubmVjdGlvbnMAVmFy
aWFibGVzAFJhbmdlVmFsdWUAUmFuZ2VWYWx1ZURpY3Rpb25hcnkAU2NyaXB0TWFpbgBNaWNyb3Nv
ZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBBcHBsaWNhdGlvbkJhc2UALmN0b3IA
TWljcm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMAQ29tcHV0ZXIAU3lzdGVtAE9iamVjdAAuY2N0
b3IAZ2V0X0NvbXB1dGVyAG1fQ29tcHV0ZXJPYmplY3RQcm92aWRlcgBnZXRfQXBwbGljYXRpb24A
bV9BcHBPYmplY3RQcm92aWRlcgBVc2VyAGdldF9Vc2VyAG1fVXNlck9iamVjdFByb3ZpZGVyAGdl
dF9XZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNPYmplY3RQcm92aWRlcgBBcHBsaWNhdGlvbgBX
ZWJTZXJ2aWNlcwBFcXVhbHMAbwBHZXRIYXNoQ29kZQBUeXBlAEdldFR5cGUAVG9TdHJpbmcAQ3Jl
YXRlX19JbnN0YW5jZV9fAFQAaW5zdGFuY2UARGlzcG9zZV9fSW5zdGFuY2VfXwBnZXRfR2V0SW5z
dGFuY2UATWljcm9zb2Z0LlZpc3VhbEJhc2ljLk15U2VydmljZXMuSW50ZXJuYWwAQ29udGV4dFZh
bHVlYDEAbV9Db250ZXh0AEdldEluc3RhbmNlAENvenlSb2MuU1NJU1BsdXMuMjAxMgBDb3p5Um9j
LlNxbFNlcnZlci5TU0lTAFNjcmlwdEJ1ZmZlclBsdXMATWljcm9zb2Z0LlNxbFNlcnZlci5UeFNj
cmlwdABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZQBTY3JpcHRDb21wb25lbnQATWlj
cm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QAUGlwZWxpbmVCdWZmZXIAT3V0cHV0TmFtZU1h
cABDb21wb25lbnQAT2JqZWN0SUQASXNJbnB1dABCdWZmZXIAT3V0cHV0TWFwAGdldF9TdGF0aWNJ
bnB1dENvbHVtbnMAZ2V0X1N0YXRpY091dHB1dENvbHVtbnMATmV4dFJvdwBFbmRPZlJvd3NldABT
dGF0aWNJbnB1dENvbHVtbnMAU3RhdGljT3V0cHV0Q29sdW1ucwBTY3JpcHRDb21wb25lbnRQbHVz
AFByb2Nlc3NJbnB1dABJbnB1dElEAElucHV0TmFtZQBJbnB1dF9Qcm9jZXNzSW5wdXQASW5wdXRf
UHJvY2Vzc0lucHV0Um93AFJvdwBQYXJlbnRDb21wb25lbnQASUNvbXBhcmFibGVgMQBzdGFydFIA
ZW5kUgB2YWx1ZQBDb21wYXJlVG8Ab3RoZXIAa2V5AGdldF9WYWx1ZQBJQ29tcGFyYWJsZQBtX3N0
YXJ0AG1fZW5kAG1fdmFsdWUAVmFsdWUAU3lzdGVtLkNvbGxlY3Rpb25zAElEaWN0aW9uYXJ5AFN5
c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljAExpc3RgMQBsaXN0AEFycmF5AENvcHlUbwBhcnJheQBp
bmRleABBZGQAQ2xlYXIAQ29udGFpbnMASURpY3Rpb25hcnlFbnVtZXJhdG9yAEdldEVudW1lcmF0
b3IAUmVtb3ZlAElFbnVtZXJhdG9yAEdldEVudW1lcmF0b3IxAGdldF9SYW5nZXMAZ2V0X0NvdW50
AGdldF9Jc1N5bmNocm9uaXplZABnZXRfU3luY1Jvb3QAZ2V0X0lzRml4ZWRTaXplAGdldF9Jc1Jl
YWRPbmx5AGdldF9JdGVtAHNldF9JdGVtAElDb2xsZWN0aW9uAGdldF9LZXlzAGdldF9WYWx1ZXMA
R2V0S2V5SW5kZXhfAEJpbmFyeVNlYXJjaF8AbV9saXN0AG1fY2FjaGVkS2V5AG1fY2FjaGVkSW5k
ZXgAUmFuZ2VzAENvdW50AElzU3luY2hyb25pemVkAFN5bmNSb290AElzRml4ZWRTaXplAElzUmVh
ZE9ubHkASXRlbQBLZXlzAFZhbHVlcwBQcmVFeGVjdXRlAFBvc3RFeGVjdXRlAFZhbGlkYXRlAGVy
ck1lc3NhZ2UAZ2V0X1N0YXJ0Q29sdW1uAHNldF9TdGFydENvbHVtbgBnZXRfRW5kQ29sdW1uAHNl
dF9FbmRDb2x1bW4AZ2V0X1ZhbHVlQ29sdW1uAHNldF9WYWx1ZUNvbHVtbgBnZXRfUmVzdWx0VmFy
aWFibGUAc2V0X1Jlc3VsdFZhcmlhYmxlAG1fc3RhcnRDb2x1bW4AbV9lbmRDb2x1bW4AbV92YWx1
ZUNvbHVtbgBtX3Jlc3VsdFZhcgBtX3N0YXJ0SW5kZXgAbV9lbmRJbmRleABtX3ZhbHVlSW5kZXgA
U3RhcnRDb2x1bW4ARW5kQ29sdW1uAFZhbHVlQ29sdW1uAFJlc3VsdFZhcmlhYmxlAFN5c3RlbS5D
b21wb25lbnRNb2RlbABFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUARWRpdG9yQnJvd3NhYmxlU3Rh
dGUAU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIAR2VuZXJhdGVkQ29kZUF0dHJpYnV0ZQBTeXN0ZW0u
RGlhZ25vc3RpY3MARGVidWdnZXJIaWRkZW5BdHRyaWJ1dGUATWljcm9zb2Z0LlZpc3VhbEJhc2lj
LkNvbXBpbGVyU2VydmljZXMAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5hbWVB
dHRyaWJ1dGUAU3lzdGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbgBIZWxwS2V5d29yZEF0dHJpYnV0
ZQBTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzAFJ1bnRpbWVIZWxwZXJzAEdldE9iamVj
dFZhbHVlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAEFjdGl2YXRvcgBDcmVh
dGVJbnN0YW5jZQBNeUdyb3VwQ29sbGVjdGlvbkF0dHJpYnV0ZQBzZXRfVmFsdWUAU3lzdGVtLlJ1
bnRpbWUuSW50ZXJvcFNlcnZpY2VzAENvbVZpc2libGVBdHRyaWJ1dGUAU3RyaW5nAFNjcmlwdEJ1
ZmZlcgBDTFNDb21wbGlhbnRBdHRyaWJ1dGUATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNQaXBlbGlu
ZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBlcgBJRFRTQ29tcG9u
ZW50TWV0YURhdGExMDAAZ2V0X0NvbXBvbmVudE1ldGFEYXRhAElEVFNJbnB1dENvbGxlY3Rpb24x
MDAAZ2V0X0lucHV0Q29sbGVjdGlvbgBJRFRTSW5wdXQxMDAAZ2V0X0lEAEFyZ3VtZW50RXhjZXB0
aW9uAElFbnVtZXJhYmxlAEV4Y2VwdGlvbgBTeXN0ZW0uUmVmbGVjdGlvbgBEZWZhdWx0TWVtYmVy
QXR0cmlidXRlAGdldF9CdWZmZXIATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNSdW50aW1lV3JhcABN
aWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lLldyYXBwZXIASURUU1ZhcmlhYmxlczEwMABJ
RFRTVmFyaWFibGVEaXNwZW5zZXIxMDAAZ2V0X1ZhcmlhYmxlRGlzcGVuc2VyAExvY2tPbmVGb3JX
cml0ZQBJRFRTVmFyaWFibGUxMDAAUHJvamVjdERhdGEAU2V0UHJvamVjdEVycm9yAENsZWFyUHJv
amVjdEVycm9yAFVubG9jawBJbnQzMgBQaXBlbGluZUNvbXBvbmVudABnZXRfSG9zdENvbXBvbmVu
dABJRFRTQnVmZmVyTWFuYWdlcjEwMABnZXRfQnVmZmVyTWFuYWdlcgBJRFRTSW5wdXRDb2x1bW5D
b2xsZWN0aW9uMTAwAGdldF9JbnB1dENvbHVtbkNvbGxlY3Rpb24ASURUU0lucHV0Q29sdW1uMTAw
AGdldF9MaW5lYWdlSUQARmluZENvbHVtbkJ5TGluZWFnZUlEAFNvcnQAQ01hbmFnZWRDb21wb25l
bnRXcmFwcGVyAElEVFNWaXJ0dWFsSW5wdXQxMDAASXNOdWxsT3JFbXB0eQBJbnN0YW50aWF0ZQBH
ZXRWaXJ0dWFsSW5wdXQAUmVtb3ZlQWxsAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9u
MTAwAGdldF9WaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uAElEVFNWaXJ0dWFsSW5wdXRDb2x1
bW4xMDAASURUU0Rlc2lnbnRpbWVDb21wb25lbnQxMDAARFRTVXNhZ2VUeXBlAFNldFVzYWdlVHlw
ZQBnZXRfTWVzc2FnZQBTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJpYnV0ZQBDb3p5
Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAVmFsaWRhdGVQcm9wZXJ0aWVzQXR0cmlidXRl
AFNvcnRQcm9wZXJ0aWVzQXR0cmlidXRlAElucHV0VmlydHVhbENvbHVtbkF0dHJpYnV0ZQBDYXRl
Z29yeUF0dHJpYnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0ZQBWYXJpYWJsZUF0dHJpYnV0ZQBDb21w
aWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRl
AFN5c3RlbS5SdW50aW1lLlZlcnNpb25pbmcAVGFyZ2V0RnJhbWV3b3JrQXR0cmlidXRlAFNjcmlw
dENvbXBvbmVudF9kYjIzN2IxYjg2MmI0NjE3YmY4Zjk0M2ExMTU2ZDhhMC5kbGwAAAtJAG4AcAB1
AHQAACVPAHYAZQByAGwAYQBwAHAAaQBuAGcAIABSAGEAbgBnAGUALgAAIU4AbwB0ACAASQBtAHAA
bABlAG0AZQBuAHQAZQBkAC4AADVTAGUAbABlAGMAdAAgAHIAYQBuAGcAZQAgAHMAdABhAHIAdAAg
AGMAbwBsAHUAbQBuAC4AAC9TAGUAbABlAGMAdAAgAHIAYQBuAGcAZQAgAGUAbgBkACAAYwBvAGwA
dQBtAC4AACdTAGUAbABlAGMAdAAgAHYAYQBsAHUAZQAgAGMAbwBsAHUAbQAuAABFUwBlAGwAZQBj
AHQAIABkAGkAYwB0AGkAbwBuAGEAcgB5ACAAcgBlAHMAdQBsAHQAIAB2AGEAcgBpAGEAYgBsAGUA
LgAAAAAAq5MAzAXM/06+sHvpDgG9mAAIt3pcVhk04IkIsD9ffxHVCjoDIAABAwAAAQQAABIMBwYV
EhgBEgwEAAASCAcGFRIYARIIBAAAEhEHBhUSGAESEQQAABIUBwYVEhgBEhQECAASDAQIABIIBAgA
EhEECAASFAQgAQIcAyAACAQgABIVAyAADgIeAAcQAQEeAB4ABzABAQEQHgACEwAEIAATAAcGFRIZ
ARMABCgAEwAIFs9JC7gMNOoIiYRdzYCAzJELIAUBEiEIAhIlEikEIAAdDgMgAAIEKAAdDgMGEiQD
BhIoCSAEAQgOEiUSKQUgAQESHAMGEiEFIAEBEiEGFRIxARIsBiADARwcHAUgAQgSLAQgAQgcAyAA
HAMGEjUCBhwDKAAcCSABARUSPQESLAYgAgESQQgFIAIBHBwEIAASRQQgAQEcBCAAEkkIIAAVEj0B
EiwEIAEcHAQgABJNBwYVEj0BEiwCBggIKAAVEj0BEiwDKAAIAygAAgQoARwcBCgAEk0FIAECEA4E
IAEBDgIGDgMoAA4FIAEBEVUIAQABAAAAAAAFIAIBDg4YAQAKTXlUZW1wbGF0ZQgxMC4wLjAuMAAA
BAEAAAAGFRIYARIMBhUSGAESCAYVEhgBEhEGFRIYARIUBAcBEgwEBwESCAQHARIRBAcBEhQMAQAH
TXkuVXNlcgAAEwEADk15LkFwcGxpY2F0aW9uAAAQAQALTXkuQ29tcHV0ZXIAABMBAA5NeS5XZWJT
ZXJ2aWNlcwAABAABHBwDBwECAwcBCAYAARIVEXEEBwESFQMHAQ4FEAEAHgAECgEeAAQHAR4AByAE
AQ4ODg5hAQA0U3lzdGVtLldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMuU29hcEh0dHBDbGllbnRQcm90
b2NvbBJDcmVhdGVfX0luc3RhbmNlX18TRGlzcG9zZV9fSW5zdGFuY2VfXwAAAAYVEhgBEwAGFRIZ
ARMABAoBEwAFIAEBEwAIBwMTABMAEwAEIAEBAgUBAAAAAAQHAR0OBSAAEoCNBSAAEoCRBiABEoCV
HAUgAQgTAAUHAwgICAMHARwEBwESRQQHARJJCAcBFRI9ARIsBhUSPQESLAUgARMACAYHAwgcEiwE
BwESTQcHBQgICAgICQEABEl0ZW0AAAQgABIlBCABHAgFIAASgK0IIAIBDhASgKkGIAESgLEcBgAB
ARKAoQUgABKAvQUgABKAwQUgABKAxQYgARKAyRwFIAIICAgNBwQSgJUSgKkSMBKAoQQAAQIOBSAA
EoDNBSAAEoDRBSAAEoDVBiABEoDZHA0gBBKAyQgSgNEIEYDhGQcJAgISgMkSgJUSgM0SgMkSgMkS
gNESgKENAQAIVmFsaWRhdGUAAAUgAQEdDjkBAAQAAAALU3RhcnRDb2x1bW4JRW5kQ29sdW1uC1Zh
bHVlQ29sdW1uDlJlc3VsdFZhcmlhYmxlAAAKAQAFSW5wdXQAAB8BABpTZWxlY3QgcmFuZ2Ugc3Rh
cnQgY29sdW1uLgAAHQEAGFNlbGVjdCByYW5nZSBlbmQgY29sdW1uLgAAGQEAFFNlbGVjdCB2YWx1
ZSBjb2x1bW4uAAALAQAGUmVzdWx0AAAsAQAnU2VsZWN0IHZhcmlhYmxlIHdpdGggZGljdGlvbmFy
eSBvYmplY3QuAAAEIAEBCAgBAAgAAAAAAB4BAAEAVAIWV3JhcE5vbkV4Y2VwdGlvblRocm93cwFH
AQAaLk5FVEZyYW1ld29yayxWZXJzaW9uPXY0LjABAFQOFEZyYW1ld29ya0Rpc3BsYXlOYW1lEC5O
RVQgRnJhbWV3b3JrIDTATgAAAAAAAAAAAADeTgAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0E4A
AAAAAAAAAAAAAAAAAAAAX0NvckRsbE1haW4AbXNjb3JlZS5kbGwAAAAAAP8lACBAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAA
AAAAAAAAAAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYYAAA7AIAAAAA
AAAAAAAA7AI0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAAA
AAAAAAAAAAAAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkA
bABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBEwCAAAB
AFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAACgCAAABADAAMAAwADAAMAA0AGIAMAAAACwA
AgABAEYAaQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAgAAAAMAAIAAEARgBpAGwAZQBW
AGUAcgBzAGkAbwBuAAAAAAAwAC4AMAAuADAALgAwAAAAjAA1AAEASQBuAHQAZQByAG4AYQBsAE4A
YQBtAGUAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfAGQAYgAyADMANwBiADEAYgA4
ADYAMgBiADQANgAxADcAYgBmADgAZgA5ADQAMwBhADEAMQA1ADYAZAA4AGEAMAAuAGQAbABsAAAA
AAAoAAIAAQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAAAgAAAAlAA1AAEATwByAGkAZwBp
AG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8A
ZABiADIAMwA3AGIAMQBiADgANgAyAGIANAA2ADEANwBiAGYAOABmADkANAAzAGEAMQAxADUANgBk
ADgAYQAwAC4AZABsAGwAAAAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADAA
LgAwAC4AMAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMAAu
ADAALgAwAC4AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAwAAADwPgAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property><property id="23" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="25" name="VSTAProjectName" dataType="System.String" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE">ScriptComponent_db237b1b862b4617bf8f943a1156d8a0</property><property id="26" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><inputs><input id="28" name="Input" hasSideEffects="true"></input></inputs></component>