From d0bd96d91ba32b2704708108df134922c0e8af97 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Wed, 13 Nov 2024 16:53:44 +0000 Subject: [PATCH 01/17] Update schema store --- deploy_ai_search/README.md | 6 +- deploy_ai_search/deploy.py | 6 +- deploy_ai_search/environment.py | 2 +- deploy_ai_search/rag_documents.py | 2 +- ...xt_2_sql.py => text_2_sql_schema_store.py} | 74 +++++++++++++++---- 5 files changed, 67 insertions(+), 23 deletions(-) rename deploy_ai_search/{text_2_sql.py => text_2_sql_schema_store.py} (75%) diff --git a/deploy_ai_search/README.md b/deploy_ai_search/README.md index 775bf6b..c67858f 100644 --- a/deploy_ai_search/README.md +++ b/deploy_ai_search/README.md @@ -15,13 +15,13 @@ The associated scripts in this portion of the repository contains pre-built scri ## Steps for Text2SQL Index Deployment -### Entity Schema Index +### Schema Store Index 1. Update `.env` file with the associated values. Not all values are required dependent on whether you are using System / User Assigned Identities or a Key based authentication. -2. Adjust `text_2_sql.py` with any changes to the index / indexer. The `get_skills()` method implements the skills pipeline. Make any adjustments here in the skills needed to enrich the data source. +2. Adjust `text_2_sql_schema_store.py` with any changes to the index / indexer. The `get_skills()` method implements the skills pipeline. Make any adjustments here in the skills needed to enrich the data source. 3. Run `deploy.py` with the following args: - - `index_type text_2_sql`. This selects the `Text2SQLAISearch` sub class. + - `index_type text_2_sql_schema_store`. This selects the `Text2SQLSchemaStoreAISearch` sub class. - `rebuild`. Whether to delete and rebuild the index. - `suffix`. Optional parameter that will apply a suffix onto the deployed index and indexer. This is useful if you want deploy a test version, before overwriting the main version. - `single_data_dictionary`. Optional parameter that controls whether you will be uploading a single data dictionary, or a data dictionary file per entity. By default, this is set to False. diff --git a/deploy_ai_search/deploy.py b/deploy_ai_search/deploy.py index cbfe042..5ff2483 100644 --- a/deploy_ai_search/deploy.py +++ b/deploy_ai_search/deploy.py @@ -2,7 +2,7 @@ # Licensed under the MIT License. import argparse from rag_documents import RagDocumentsAISearch -from text_2_sql import Text2SqlAISearch +from text_2_sql_schema_store import Text2SqlSchemaStoreAISearch from text_2_sql_query_cache import Text2SqlQueryCacheAISearch import logging @@ -20,8 +20,8 @@ def deploy_config(arguments: argparse.Namespace): rebuild=arguments.rebuild, enable_page_by_chunking=arguments.enable_page_chunking, ) - elif arguments.index_type == "text_2_sql": - index_config = Text2SqlAISearch( + elif arguments.index_type == "text_2_sql_schema_store": + index_config = Text2SqlSchemaStoreAISearch( suffix=arguments.suffix, rebuild=arguments.rebuild, single_data_dictionary=arguments.single_data_dictionary, diff --git a/deploy_ai_search/environment.py b/deploy_ai_search/environment.py index a47bf1c..e431304 100644 --- a/deploy_ai_search/environment.py +++ b/deploy_ai_search/environment.py @@ -12,7 +12,7 @@ class IndexerType(Enum): """The type of the indexer""" RAG_DOCUMENTS = "rag-documents" - TEXT_2_SQL = "text-2-sql" + TEXT_2_SQL_SCHEMA_STORE = "text-2-sql-schema-store" TEXT_2_SQL_QUERY_CACHE = "text-2-sql-query-cache" diff --git a/deploy_ai_search/rag_documents.py b/deploy_ai_search/rag_documents.py index c514a0d..c9ebffd 100644 --- a/deploy_ai_search/rag_documents.py +++ b/deploy_ai_search/rag_documents.py @@ -281,7 +281,7 @@ def get_indexer(self) -> SearchIndexer: indexer_parameters = IndexingParameters( batch_size=batch_size, configuration=IndexingParametersConfiguration( - data_to_extract=BlobIndexerDataToExtract.ALL_METADATA, + data_to_extract=BlobIndexerDataToExtract.STORAGE_METADATA, query_timeout=None, execution_environment=execution_environment, fail_on_unprocessable_document=False, diff --git a/deploy_ai_search/text_2_sql.py b/deploy_ai_search/text_2_sql_schema_store.py similarity index 75% rename from deploy_ai_search/text_2_sql.py rename to deploy_ai_search/text_2_sql_schema_store.py index 3310039..1c679ef 100644 --- a/deploy_ai_search/text_2_sql.py +++ b/deploy_ai_search/text_2_sql_schema_store.py @@ -26,7 +26,7 @@ ) -class Text2SqlAISearch(AISearch): +class Text2SqlSchemaStoreAISearch(AISearch): """This class is used to deploy the sql index.""" def __init__( @@ -41,7 +41,7 @@ def __init__( suffix (str, optional): The suffix for the indexer. Defaults to None. If an suffix is provided, it is assumed to be a test indexer. rebuild (bool, optional): Whether to rebuild the index. Defaults to False. """ - self.indexer_type = IndexerType.TEXT_2_SQL + self.indexer_type = IndexerType.TEXT_2_SQL_SCHEMA_STORE super().__init__(suffix, rebuild) if single_data_dictionary: @@ -62,34 +62,35 @@ def get_index_fields(self) -> list[SearchableField]: key=True, analyzer_name="keyword", ), + SearchableField( + name="EntityName", type=SearchFieldDataType.String, filterable=True + ), SearchableField( name="Entity", type=SearchFieldDataType.String, analyzer_name="keyword", ), SearchableField( - name="EntityName", type=SearchFieldDataType.String, filterable=True - ), - SearchableField( - name="Description", + name="Definition", type=SearchFieldDataType.String, sortable=False, filterable=False, facetable=False, ), SearchField( - name="DescriptionEmbedding", + name="DefinitionEmbedding", type=SearchFieldDataType.Collection(SearchFieldDataType.Single), vector_search_dimensions=self.environment.open_ai_embedding_dimensions, vector_search_profile_name=self.vector_search_profile_name, + hidden=True, ), ComplexField( name="Columns", collection=True, fields=[ - SearchableField(name="Name", type=SearchFieldDataType.String), + SearchableField(name="ColumnName", type=SearchFieldDataType.String), SearchableField(name="Definition", type=SearchFieldDataType.String), - SearchableField(name="Type", type=SearchFieldDataType.String), + SearchableField(name="DataType", type=SearchFieldDataType.String), SearchableField( name="AllowedValues", type=SearchFieldDataType.String, @@ -102,6 +103,11 @@ def get_index_fields(self) -> list[SearchableField]: collection=True, searchable=False, ), + SearchableField( + name="JoinableEntities", + type=SearchFieldDataType.String, + collection=True, + ), ], ), SearchableField( @@ -111,6 +117,39 @@ def get_index_fields(self) -> list[SearchableField]: hidden=True, # This is needed to enable semantic searching against the column names as complex field types are not used. ), + SearchableField( + name="ColumnDefinitions", + type=SearchFieldDataType.String, + collection=True, + hidden=True, + # This is needed to enable semantic searching against the column names as complex field types are not used. + ), + ComplexField( + name="ImmediateRelationships", + collection=True, + fields=[ + SearchableField( + name="ImmediateRelationshipName", + type=SearchFieldDataType.String, + ), + SearchableField( + name="ImmediateRelationshipEntity", + type=SearchFieldDataType.String, + ), + ComplexField( + name="ForeignKeys", + collection=True, + fields=[ + SearchableField( + name="SourceColumnName", type=SearchFieldDataType.String + ), + SearchableField( + name="TargetColumnName", type=SearchFieldDataType.String + ), + ], + ), + ], + ), SimpleField( name="DateLastModified", type=SearchFieldDataType.DateTimeOffset, @@ -131,7 +170,8 @@ def get_semantic_search(self) -> SemanticSearch: prioritized_fields=SemanticPrioritizedFields( title_field=SemanticField(field_name="EntityName"), content_fields=[ - SemanticField(field_name="Description"), + SemanticField(field_name="Definition"), + SemanticField(field_name="ColumnDefinitions"), ], keywords_fields=[ SemanticField(field_name="ColumnNames"), @@ -151,7 +191,7 @@ def get_skills(self) -> list: list: The skillsets used in the indexer""" embedding_skill = self.get_vector_skill( - "/document", "/document/Description", target_name="DescriptionEmbedding" + "/document", "/document/Definition", target_name="DefinitionEmbedding" ) skills = [embedding_skill] @@ -222,12 +262,12 @@ def get_indexer(self) -> SearchIndexer: target_field_name="EntityName", ), FieldMapping( - source_field_name="/document/Description", - target_field_name="Description", + source_field_name="/document/Definition", + target_field_name="Definition", ), FieldMapping( - source_field_name="/document/DescriptionEmbedding", - target_field_name="DescriptionEmbedding", + source_field_name="/document/DefinitionEmbedding", + target_field_name="DefinitionEmbedding", ), FieldMapping( source_field_name="/document/Columns", @@ -237,6 +277,10 @@ def get_indexer(self) -> SearchIndexer: source_field_name="/document/Columns/*/Name", target_field_name="ColumnNames", ), + FieldMapping( + source_field_name="/document/Columns/*/Definition", + target_field_name="ColumnDefinitions", + ), FieldMapping( source_field_name="/document/DateLastModified", target_field_name="DateLastModified", From f82e244c0ee42c301bc9bf2012e85b24f725118f Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Wed, 13 Nov 2024 17:23:22 +0000 Subject: [PATCH 02/17] Updated query store --- deploy_ai_search/text_2_sql_query_cache.py | 8 ++++---- deploy_ai_search/text_2_sql_schema_store.py | 9 +++++++-- .../data_dictionary/data_dictionary_creator.py | 16 +++++++++------- text_2_sql/data_dictionary/requirements.txt | 1 + .../sql_sever_data_dictionary_creator.py | 4 ++-- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/deploy_ai_search/text_2_sql_query_cache.py b/deploy_ai_search/text_2_sql_query_cache.py index 61dd24d..d8b4765 100644 --- a/deploy_ai_search/text_2_sql_query_cache.py +++ b/deploy_ai_search/text_2_sql_query_cache.py @@ -53,7 +53,7 @@ def get_index_fields(self) -> list[SearchableField]: vector_search_profile_name=self.vector_search_profile_name, ), SearchableField( - name="Query", type=SearchFieldDataType.String, filterable=True + name="SQLQuery", type=SearchFieldDataType.String, filterable=True ), ComplexField( name="Schemas", @@ -69,13 +69,13 @@ def get_index_fields(self) -> list[SearchableField]: collection=True, fields=[ SearchableField( - name="Name", type=SearchFieldDataType.String + name="ColumnName", type=SearchFieldDataType.String ), SearchableField( - name="Definition", type=SearchFieldDataType.String + name="ColumnDefinition", type=SearchFieldDataType.String ), SearchableField( - name="Type", type=SearchFieldDataType.String + name="DataType", type=SearchFieldDataType.String ), SearchableField( name="AllowedValues", diff --git a/deploy_ai_search/text_2_sql_schema_store.py b/deploy_ai_search/text_2_sql_schema_store.py index 1c679ef..8bf488a 100644 --- a/deploy_ai_search/text_2_sql_schema_store.py +++ b/deploy_ai_search/text_2_sql_schema_store.py @@ -88,7 +88,7 @@ def get_index_fields(self) -> list[SearchableField]: name="Columns", collection=True, fields=[ - SearchableField(name="ColumnName", type=SearchFieldDataType.String), + SearchableField(name="Name", type=SearchFieldDataType.String), SearchableField(name="Definition", type=SearchFieldDataType.String), SearchableField(name="DataType", type=SearchFieldDataType.String), SearchableField( @@ -125,7 +125,7 @@ def get_index_fields(self) -> list[SearchableField]: # This is needed to enable semantic searching against the column names as complex field types are not used. ), ComplexField( - name="ImmediateRelationships", + name="ImmediateEntityRelationships", collection=True, fields=[ SearchableField( @@ -150,6 +150,11 @@ def get_index_fields(self) -> list[SearchableField]: ), ], ), + SimpleField( + name="CompleteEntityRelationships", + type=SearchFieldDataType.String, + collection=True, + ), SimpleField( name="DateLastModified", type=SearchFieldDataType.DateTimeOffset, diff --git a/text_2_sql/data_dictionary/data_dictionary_creator.py b/text_2_sql/data_dictionary/data_dictionary_creator.py index f9b897d..02c2b14 100644 --- a/text_2_sql/data_dictionary/data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/data_dictionary_creator.py @@ -22,7 +22,7 @@ class ColumnItem(BaseModel): """A class to represent a column item.""" name: str = Field(..., alias="Name") - type: str = Field(..., alias="Type") + data_type: str = Field(..., alias="DataType") definition: Optional[str] = Field(..., alias="Definition") distinct_values: Optional[list[any]] = Field( None, alias="DistinctValues", exclude=True @@ -37,7 +37,9 @@ def from_sql_row(cls, row, columns): """A method to create a ColumnItem from a SQL row.""" result = dict(zip(columns, row)) return cls( - name=result["Name"], type=result["Type"], definition=result["Definition"] + name=result["Name"], + type=result["DataType"], + definition=result["Definition"], ) @@ -45,7 +47,7 @@ class EntityItem(BaseModel): """A class to represent an entity item.""" entity: str = Field(..., alias="Entity") - description: Optional[str] = Field(..., alias="Description") + definition: Optional[str] = Field(..., alias="Definition") name: str = Field(..., alias="Name", exclude=True) entity_schema: str = Field(..., alias="Schema", exclude=True) entity_name: Optional[str] = Field(default=None, alias="EntityName") @@ -67,7 +69,7 @@ def from_sql_row(cls, row, columns): entity=entity, name=result["Entity"], entity_schema=result["EntitySchema"], - description=result["Description"], + definition=result["Definition"], ) @@ -102,20 +104,20 @@ def __init__( def extract_table_entities_sql_query(self) -> str: """An abstract property to extract table entities from a database. - Must return 3 columns: Entity, EntitySchema, Description.""" + Must return 3 columns: Entity, EntitySchema, Definition.""" @property @abstractmethod def extract_view_entities_sql_query(self) -> str: """An abstract property to extract view entities from a database. - Must return 3 columns: Entity, EntitySchema, Description.""" + Must return 3 columns: Entity, EntitySchema, Definition.""" @abstractmethod def extract_columns_sql_query(self, entity: EntityItem) -> str: """An abstract method to extract column information from a database. - Must return 3 columns: Name, Type, Definition.""" + Must return 3 columns: Name, DataType, Definition.""" def extract_distinct_values_sql_query( self, entity: EntityItem, column: ColumnItem diff --git a/text_2_sql/data_dictionary/requirements.txt b/text_2_sql/data_dictionary/requirements.txt index 92621b3..becad18 100644 --- a/text_2_sql/data_dictionary/requirements.txt +++ b/text_2_sql/data_dictionary/requirements.txt @@ -3,3 +3,4 @@ azure-identity python-dotenv pydantic openai +networkx diff --git a/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py b/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py index 4b71105..6d5b597 100644 --- a/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py @@ -52,7 +52,7 @@ def extract_view_entities_sql_query(self) -> str: return """SELECT v.TABLE_NAME AS Entity, v.TABLE_SCHEMA AS EntitySchema, - CAST(ep.value AS NVARCHAR(500)) AS Description + CAST(ep.value AS NVARCHAR(500)) AS Definition FROM INFORMATION_SCHEMA.VIEWS v LEFT JOIN @@ -66,7 +66,7 @@ def extract_columns_sql_query(self, entity: EntityItem) -> str: """A property to extract column information from a SQL Server database.""" return f"""SELECT c.COLUMN_NAME AS Name, - c.DATA_TYPE AS Type, + c.DATA_TYPE AS DataType, CAST(ep.value AS NVARCHAR(500)) AS Definition FROM INFORMATION_SCHEMA.COLUMNS c From 4b9f15853da2e8132f3e56497e8ee8250d20cde9 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 13:31:31 +0000 Subject: [PATCH 03/17] Update query cache setup --- deploy_ai_search/text_2_sql_query_cache.py | 54 +++++++++++++--------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/deploy_ai_search/text_2_sql_query_cache.py b/deploy_ai_search/text_2_sql_query_cache.py index d8b4765..f8a06bc 100644 --- a/deploy_ai_search/text_2_sql_query_cache.py +++ b/deploy_ai_search/text_2_sql_query_cache.py @@ -52,42 +52,52 @@ def get_index_fields(self) -> list[SearchableField]: vector_search_dimensions=self.environment.open_ai_embedding_dimensions, vector_search_profile_name=self.vector_search_profile_name, ), - SearchableField( - name="SQLQuery", type=SearchFieldDataType.String, filterable=True - ), ComplexField( - name="Schemas", + name="Queries", collection=True, fields=[ SearchableField( - name="Entity", + name="SQLQuery", type=SearchFieldDataType.String, filterable=True, ), ComplexField( - name="Columns", + name="Schemas", collection=True, fields=[ SearchableField( - name="ColumnName", type=SearchFieldDataType.String - ), - SearchableField( - name="ColumnDefinition", type=SearchFieldDataType.String - ), - SearchableField( - name="DataType", type=SearchFieldDataType.String - ), - SearchableField( - name="AllowedValues", + name="Entity", type=SearchFieldDataType.String, - collection=True, - searchable=False, + filterable=True, ), - SearchableField( - name="SampleValues", - type=SearchFieldDataType.String, + ComplexField( + name="Columns", collection=True, - searchable=False, + fields=[ + SearchableField( + name="ColumnName", + type=SearchFieldDataType.String, + ), + SearchableField( + name="ColumnDefinition", + type=SearchFieldDataType.String, + ), + SearchableField( + name="DataType", type=SearchFieldDataType.String + ), + SearchableField( + name="AllowedValues", + type=SearchFieldDataType.String, + collection=True, + searchable=False, + ), + SearchableField( + name="SampleValues", + type=SearchFieldDataType.String, + collection=True, + searchable=False, + ), + ], ), ], ), From f85106fe96ffb0fb751947e8379d1e4042847fed Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 13:41:18 +0000 Subject: [PATCH 04/17] Update the query cache --- deploy_ai_search/ai_search.py | 6 ++++-- deploy_ai_search/text_2_sql_query_cache.py | 24 ---------------------- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/deploy_ai_search/ai_search.py b/deploy_ai_search/ai_search.py index 2e8bf12..6d63bac 100644 --- a/deploy_ai_search/ai_search.py +++ b/deploy_ai_search/ai_search.py @@ -48,7 +48,8 @@ def __init__( """ if not hasattr(self, "indexer_type"): - self.indexer_type = None # Needed to help mypy understand that indexer_type is defined in the child class + # Needed to help mypy understand that indexer_type is defined in the child class + self.indexer_type = None raise ValueError("indexer_type is not defined in the child class.") if rebuild is not None: @@ -126,13 +127,14 @@ def get_index_fields(self) -> list[SearchableField]: Returns: list[SearchableField]: The index fields""" - @abstractmethod def get_semantic_search(self) -> SemanticSearch: """Get the semantic search configuration for the indexer. Returns: SemanticSearch: The semantic search configuration""" + return None + def get_skills(self) -> list: """Get the skillset for the indexer. diff --git a/deploy_ai_search/text_2_sql_query_cache.py b/deploy_ai_search/text_2_sql_query_cache.py index f8a06bc..211a593 100644 --- a/deploy_ai_search/text_2_sql_query_cache.py +++ b/deploy_ai_search/text_2_sql_query_cache.py @@ -5,10 +5,6 @@ SearchFieldDataType, SearchField, SearchableField, - SemanticField, - SemanticPrioritizedFields, - SemanticConfiguration, - SemanticSearch, SimpleField, ComplexField, ) @@ -111,23 +107,3 @@ def get_index_fields(self) -> list[SearchableField]: ] return fields - - def get_semantic_search(self) -> SemanticSearch: - """This function returns the semantic search configuration for sql index - - Returns: - SemanticSearch: The semantic search configuration""" - - semantic_config = SemanticConfiguration( - name=self.semantic_config_name, - prioritized_fields=SemanticPrioritizedFields( - title_field=SemanticField(field_name="Question"), - keywords_fields=[ - SemanticField(field_name="Query"), - ], - ), - ) - - semantic_search = SemanticSearch(configurations=[semantic_config]) - - return semantic_search From fc9880350e757b8fbdf48fbab5f61b77b285348a Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 14:41:36 +0000 Subject: [PATCH 05/17] Update vector store layout --- deploy_ai_search/text_2_sql_query_cache.py | 6 +++--- deploy_ai_search/text_2_sql_schema_store.py | 14 +++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/deploy_ai_search/text_2_sql_query_cache.py b/deploy_ai_search/text_2_sql_query_cache.py index 211a593..fda9c1d 100644 --- a/deploy_ai_search/text_2_sql_query_cache.py +++ b/deploy_ai_search/text_2_sql_query_cache.py @@ -49,7 +49,7 @@ def get_index_fields(self) -> list[SearchableField]: vector_search_profile_name=self.vector_search_profile_name, ), ComplexField( - name="Queries", + name="Decomposition", collection=True, fields=[ SearchableField( @@ -71,11 +71,11 @@ def get_index_fields(self) -> list[SearchableField]: collection=True, fields=[ SearchableField( - name="ColumnName", + name="Name", type=SearchFieldDataType.String, ), SearchableField( - name="ColumnDefinition", + name="Definition", type=SearchFieldDataType.String, ), SearchableField( diff --git a/deploy_ai_search/text_2_sql_schema_store.py b/deploy_ai_search/text_2_sql_schema_store.py index 8bf488a..bc66541 100644 --- a/deploy_ai_search/text_2_sql_schema_store.py +++ b/deploy_ai_search/text_2_sql_schema_store.py @@ -70,6 +70,14 @@ def get_index_fields(self) -> list[SearchableField]: type=SearchFieldDataType.String, analyzer_name="keyword", ), + SearchableField( + name="Database", + type=SearchFieldDataType.String, + ), + SearchableField( + name="Warehouse", + type=SearchFieldDataType.String, + ), SearchableField( name="Definition", type=SearchFieldDataType.String, @@ -129,11 +137,7 @@ def get_index_fields(self) -> list[SearchableField]: collection=True, fields=[ SearchableField( - name="ImmediateRelationshipName", - type=SearchFieldDataType.String, - ), - SearchableField( - name="ImmediateRelationshipEntity", + name="Name", type=SearchFieldDataType.String, ), ComplexField( From e377618c2d50c8f894498cc18c5f79aa3ae348f4 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 14:46:37 +0000 Subject: [PATCH 06/17] Update skillset ingestion --- deploy_ai_search/text_2_sql_schema_store.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/deploy_ai_search/text_2_sql_schema_store.py b/deploy_ai_search/text_2_sql_schema_store.py index bc66541..1d50144 100644 --- a/deploy_ai_search/text_2_sql_schema_store.py +++ b/deploy_ai_search/text_2_sql_schema_store.py @@ -290,6 +290,14 @@ def get_indexer(self) -> SearchIndexer: source_field_name="/document/Columns/*/Definition", target_field_name="ColumnDefinitions", ), + FieldMapping( + source_field_name="/document/ImmediateEntityRelationships", + target_field_name="ImmediateEntityRelationships", + ), + FieldMapping( + source_field_name="/document/CompleteEntityRelationships", + target_field_name="CompleteEntityRelationships", + ), FieldMapping( source_field_name="/document/DateLastModified", target_field_name="DateLastModified", From a9efb6a482c57157d87a063e9afc3e4682baf5e4 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 16:39:57 +0000 Subject: [PATCH 07/17] Add graph traversal --- deploy_ai_search/text_2_sql_schema_store.py | 10 +- .../data_dictionary_creator.py | 145 +++++++++++++++++- .../sql_sever_data_dictionary_creator.py | 26 +++- 3 files changed, 174 insertions(+), 7 deletions(-) diff --git a/deploy_ai_search/text_2_sql_schema_store.py b/deploy_ai_search/text_2_sql_schema_store.py index 1d50144..9e7093c 100644 --- a/deploy_ai_search/text_2_sql_schema_store.py +++ b/deploy_ai_search/text_2_sql_schema_store.py @@ -133,11 +133,11 @@ def get_index_fields(self) -> list[SearchableField]: # This is needed to enable semantic searching against the column names as complex field types are not used. ), ComplexField( - name="ImmediateEntityRelationships", + name="EntityRelationships", collection=True, fields=[ SearchableField( - name="Name", + name="ForeignEntity", type=SearchFieldDataType.String, ), ComplexField( @@ -145,17 +145,17 @@ def get_index_fields(self) -> list[SearchableField]: collection=True, fields=[ SearchableField( - name="SourceColumnName", type=SearchFieldDataType.String + name="Column", type=SearchFieldDataType.String ), SearchableField( - name="TargetColumnName", type=SearchFieldDataType.String + name="ForeignColumn", type=SearchFieldDataType.String ), ], ), ], ), SimpleField( - name="CompleteEntityRelationships", + name="CompleteEntityRelationshipGraph", type=SearchFieldDataType.String, collection=True, ), diff --git a/text_2_sql/data_dictionary/data_dictionary_creator.py b/text_2_sql/data_dictionary/data_dictionary_creator.py index 02c2b14..1dd0acd 100644 --- a/text_2_sql/data_dictionary/data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/data_dictionary_creator.py @@ -14,10 +14,52 @@ from azure.identity import DefaultAzureCredential, get_bearer_token_provider import random import re +import networkx as nx logging.basicConfig(level=logging.INFO) +class ForeignKeyRelationship(BaseModel): + source_column: str = Field(..., alias="Column") + foreign_column: str = Field(..., alias="ForeignColumn") + + +class EntityRelationship(BaseModel): + foreign_entity: str = Field(..., alias="ForeignEntity") + foreign_keys: list[ForeignKeyRelationship] = Field(..., alias="ForeignKeys") + + def pivot(self, entity: str): + """A method to pivot the entity relationship.""" + return EntityRelationship( + foreign_entity=entity, + foreign_keys=[ + ForeignKeyRelationship( + source_column=foreign_key.foreign_column, + foreign_column=foreign_key.source_column, + ) + for foreign_key in self.foreign_keys + ], + ) + + def add_foreign_key(self, foreign_key: ForeignKeyRelationship): + """A method to add a foreign key to the entity relationship.""" + self.foreign_keys.append(foreign_key) + + @classmethod + def from_sql_row(cls, row, columns): + """A method to create an EntityRelationship from a SQL row.""" + result = dict(zip(columns, row)) + return cls( + foreign_entity=result["ForeignEntity"], + foreign_keys=[ + ForeignKeyRelationship( + source_column=result["Column"], + foreign_column=result["ForeignColumn"], + ) + ], + ) + + class ColumnItem(BaseModel): """A class to represent a column item.""" @@ -38,7 +80,7 @@ def from_sql_row(cls, row, columns): result = dict(zip(columns, row)) return cls( name=result["Name"], - type=result["DataType"], + data_type=result["DataType"], definition=result["Definition"], ) @@ -51,6 +93,16 @@ class EntityItem(BaseModel): name: str = Field(..., alias="Name", exclude=True) entity_schema: str = Field(..., alias="Schema", exclude=True) entity_name: Optional[str] = Field(default=None, alias="EntityName") + database: Optional[str] = Field(default=None, alias="Database") + warehouse: Optional[str] = Field(default=None, alias="Warehouse") + + entity_relationships: Optional[list[EntityRelationship]] = Field( + None, alias="EntityRelationships" + ) + + complete_entity_relationship_graph = Optional[str] = Field( + None, alias="CompleteEntityRelationshipGraph" + ) columns: Optional[list[ColumnItem]] = Field( ..., alias="Columns", default_factory=list @@ -97,6 +149,9 @@ def __init__( self.single_file = single_file self.generate_descriptions = generate_descriptions + self.entity_relationships = {} + self.relationship_graph = nx.DiGraph() + load_dotenv(find_dotenv()) @property @@ -119,6 +174,13 @@ def extract_columns_sql_query(self, entity: EntityItem) -> str: Must return 3 columns: Name, DataType, Definition.""" + @property + @abstractmethod + def extract_entity_relationships_sql_query(self) -> str: + """An abstract method to extract entity relationships from a database. + + Must return 4 columns: Entity, ForeignEntity, Column, ForeignColumn.""" + def extract_distinct_values_sql_query( self, entity: EntityItem, column: ColumnItem ) -> str: @@ -165,6 +227,72 @@ async def query_entities( return results + async def extract_entity_relationships(self) -> list[EntityRelationship]: + """A method to extract entity relationships from a database. + + Returns: + list[EntityRelationships]: The list of entity relationships.""" + + relationships = await self.query_entities( + self.extract_entity_relationships_sql_query, cast_to=EntityRelationship + ) + + # Duplicate relationships to create a complete graph + + for relationship in relationships: + if relationship.entity not in self.entity_relationships: + self.entity_relationships[relationship.entity] = { + relationship.foreign_entity: relationship + } + else: + self.entity_relationships[relationship.entity][ + relationship.foreign_entity + ].add_foreign_key(relationship.foreign_keys[0]) + + if relationship.foreign_entity not in self.entity_relationships: + self.entity_relationships[relationship.foreign_entity] = { + relationship.entity: relationship.pivot() + } + else: + self.entity_relationships[relationship.foreign_entity][ + relationship.entity + ].add_foreign_key(relationship.pivot().foreign_keys[0]) + + async def build_entity_relationship_graph(self) -> nx.DiGraph: + """A method to build a complete entity relationship graph.""" + + for entity, foreign_entities in self.entity_relationships.items(): + for foreign_entity, relationship in foreign_entities.items(): + self.relationship_graph.add_edge( + entity, foreign_entity, relationship=relationship + ) + + def get_entity_relationships_from_graph( + self, entity: str, path=None, result=None, visited=None + ) -> nx.DiGraph: + if entity not in self.relationship_graph: + return None + + if path is None: + path = [] + if result is None: + result = [] + if visited is None: + visited = set() + + # Mark the current node as visited + visited.add(entity) + + # For each successor (neighbor in the directed path) + for successor in self.relationship_graph.successors(entity): + new_path = path + [f"{entity} -> {successor}"] + result.append(" -> ".join(new_path)) # Add the path as a string + self.get_entity_relationships_from_graph( + self.relationship_graph, successor, new_path, result, visited + ) + + return result + async def extract_entities_with_descriptions(self) -> list[EntityItem]: """A method to extract entities with descriptions from a database. @@ -420,12 +548,27 @@ async def build_entity_entry(self, entity: EntityItem) -> EntityItem: if self.generate_descriptions: await self.generate_entity_description(entity) + # add in relationships + if entity.entity in self.entity_relationships: + entity.entity_relationships = list( + self.entity_relationships[entity.entity].values() + ) + + # add in the graph traversal + entity.complete_entity_relationship_graph = ( + self.get_entity_relationships_from_graph(entity.entity) + ) + return entity async def create_data_dictionary(self): """A method to build a data dictionary from a database. Writes to file.""" entities = await self.extract_entities_with_descriptions() + await self.extract_entity_relationships() + + await self.build_entity_relationship_graph() + entity_tasks = [] for entity in entities: entity_tasks.append(self.build_entity_entry(entity)) diff --git a/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py b/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py index 6d5b597..8dd966d 100644 --- a/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py @@ -34,7 +34,7 @@ def extract_table_entities_sql_query(self) -> str: return """SELECT t.TABLE_NAME AS Entity, t.TABLE_SCHEMA AS EntitySchema, - CAST(ep.value AS NVARCHAR(500)) AS Description + CAST(ep.value AS NVARCHAR(500)) AS Definition FROM INFORMATION_SCHEMA.TABLES t LEFT JOIN @@ -80,6 +80,30 @@ def extract_columns_sql_query(self, entity: EntityItem) -> str: c.TABLE_SCHEMA = '{entity.entity_schema}' AND c.TABLE_NAME = '{entity.name}';""" + @property + def extract_entity_relationships_sql_query() -> str: + """A property to extract entity relationships from a SQL Server database.""" + return """SELECT + fk_tab.name AS Entity, + pk_tab.name AS ForeignEntity, + fk_col.name AS Column, + pk_col.name AS ForeignColumn + FROM + sys.foreign_keys AS fk + INNER JOIN + sys.foreign_key_columns AS fkc ON fk.object_id = fkc.constraint_object_id + INNER JOIN + sys.tables AS fk_tab ON fk_tab.object_id = fk.parent_object_id + INNER JOIN + sys.tables AS pk_tab ON pk_tab.object_id = fk.referenced_object_id + INNER JOIN + sys.columns AS fk_col ON fkc.parent_object_id = fk_col.object_id AND fkc.parent_column_id = fk_col.column_id + INNER JOIN + sys.columns AS pk_col ON fkc.referenced_object_id = pk_col.object_id AND fkc.referenced_column_id = pk_col.column_id + ORDER BY + Entity, ForeignEntity; + """ + if __name__ == "__main__": data_dictionary_creator = SqlServerDataDictionaryCreator() From 8cf293d62a2c42e427a033050a09ef7d5b618906 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 16:43:35 +0000 Subject: [PATCH 08/17] Store warehouse and entity info --- text_2_sql/data_dictionary/data_dictionary_creator.py | 8 ++++++++ .../data_dictionary/sql_sever_data_dictionary_creator.py | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/text_2_sql/data_dictionary/data_dictionary_creator.py b/text_2_sql/data_dictionary/data_dictionary_creator.py index 1dd0acd..721737c 100644 --- a/text_2_sql/data_dictionary/data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/data_dictionary_creator.py @@ -152,6 +152,9 @@ def __init__( self.entity_relationships = {} self.relationship_graph = nx.DiGraph() + self.warehouse = None + self.database = None + load_dotenv(find_dotenv()) @property @@ -321,6 +324,11 @@ async def extract_entities_with_descriptions(self) -> list[EntityItem]: if entity.entity not in self.excluded_entities ] + # Add warehouse and database to entities + for entity in all_entities: + entity.warehouse = self.warehouse + entity.database = self.database + return all_entities async def extract_column_distinct_values( diff --git a/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py b/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py index 8dd966d..2c1805d 100644 --- a/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py @@ -2,6 +2,7 @@ # Licensed under the MIT License. from data_dictionary_creator import DataDictionaryCreator, EntityItem import asyncio +import os class SqlServerDataDictionaryCreator(DataDictionaryCreator): @@ -24,7 +25,10 @@ def __init__( excluded_entities.extend( ["dbo.BuildVersion", "dbo.ErrorLog", "sys.database_firewall_rules"] ) - return super().__init__(entities, excluded_entities, single_file) + cls = super().__init__(entities, excluded_entities, single_file) + cls.database = os.environ["Text2Sql__DatabaseName"] + + return cls """A class to extract data dictionary information from a SQL Server database.""" From d4c2350b5275dc96e1b0e2e8bcf96edf2389f141 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 16:48:18 +0000 Subject: [PATCH 09/17] Update env --- text_2_sql/data_dictionary/.env | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/text_2_sql/data_dictionary/.env b/text_2_sql/data_dictionary/.env index 39fdcb3..4ecd14c 100644 --- a/text_2_sql/data_dictionary/.env +++ b/text_2_sql/data_dictionary/.env @@ -4,17 +4,7 @@ OpenAI__Endpoint= OpenAI__ApiKey= OpenAI__ApiVersion= Text2Sql__DatabaseEngine= -Text2Sql__UseQueryCache= -Text2Sql__PreRunQueryCache= Text2Sql__DatabaseName= Text2Sql__DatabaseConnectionString= -AIService__AzureSearchOptions__Endpoint= -AIService__AzureSearchOptions__Key= -AIService__AzureSearchOptions__RagDocuments__Index= -AIService__AzureSearchOptions__Text2Sql__Index= -AIService__AzureSearchOptions__Text2SqlQueryCache__Index= -AIService__AzureSearchOptions__RagDocuments__SemanticConfig= -AIService__AzureSearchOptions__Text2Sql__SemanticConfig= -AIService__AzureSearchOptions__Text2SqlQueryCache__SemanticConfig= IdentityType= # system_assigned or user_assigned or key ClientId= From b1defa7abf90966326dcf1b6ee7e8fadf2ddfdf3 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 16:59:45 +0000 Subject: [PATCH 10/17] Bug fixes --- .../data_dictionary/data_dictionary_creator.py | 16 +++++++++++----- .../sql_sever_data_dictionary_creator.py | 10 ++++------ 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/text_2_sql/data_dictionary/data_dictionary_creator.py b/text_2_sql/data_dictionary/data_dictionary_creator.py index 721737c..58d5d1f 100644 --- a/text_2_sql/data_dictionary/data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/data_dictionary_creator.py @@ -20,18 +20,24 @@ class ForeignKeyRelationship(BaseModel): - source_column: str = Field(..., alias="Column") + column: str = Field(..., alias="Column") foreign_column: str = Field(..., alias="ForeignColumn") + model_config = ConfigDict(populate_by_name=True, arbitrary_types_allowed=True) + class EntityRelationship(BaseModel): + entity: str = Field(..., alias="Entity") foreign_entity: str = Field(..., alias="ForeignEntity") foreign_keys: list[ForeignKeyRelationship] = Field(..., alias="ForeignKeys") - def pivot(self, entity: str): + model_config = ConfigDict(populate_by_name=True, arbitrary_types_allowed=True) + + def pivot(self): """A method to pivot the entity relationship.""" return EntityRelationship( - foreign_entity=entity, + entity=self.foreign_entity, + foreign_entity=self.entity, foreign_keys=[ ForeignKeyRelationship( source_column=foreign_key.foreign_column, @@ -53,7 +59,7 @@ def from_sql_row(cls, row, columns): foreign_entity=result["ForeignEntity"], foreign_keys=[ ForeignKeyRelationship( - source_column=result["Column"], + column=result["Column"], foreign_column=result["ForeignColumn"], ) ], @@ -100,7 +106,7 @@ class EntityItem(BaseModel): None, alias="EntityRelationships" ) - complete_entity_relationship_graph = Optional[str] = Field( + complete_entity_relationship_graph: Optional[str] = Field( None, alias="CompleteEntityRelationshipGraph" ) diff --git a/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py b/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py index 2c1805d..22b8073 100644 --- a/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py @@ -25,10 +25,8 @@ def __init__( excluded_entities.extend( ["dbo.BuildVersion", "dbo.ErrorLog", "sys.database_firewall_rules"] ) - cls = super().__init__(entities, excluded_entities, single_file) - cls.database = os.environ["Text2Sql__DatabaseName"] - - return cls + super().__init__(entities, excluded_entities, single_file) + self.database = os.environ["Text2Sql__DatabaseName"] """A class to extract data dictionary information from a SQL Server database.""" @@ -85,12 +83,12 @@ def extract_columns_sql_query(self, entity: EntityItem) -> str: AND c.TABLE_NAME = '{entity.name}';""" @property - def extract_entity_relationships_sql_query() -> str: + def extract_entity_relationships_sql_query(self) -> str: """A property to extract entity relationships from a SQL Server database.""" return """SELECT fk_tab.name AS Entity, pk_tab.name AS ForeignEntity, - fk_col.name AS Column, + fk_col.name AS [Column], pk_col.name AS ForeignColumn FROM sys.foreign_keys AS fk From cc30a2cc78d3baeb688c5e85188f54e217c2ae68 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 17:41:38 +0000 Subject: [PATCH 11/17] Add entity relationship graphs --- .../data_dictionary/SalesLT.Address.json | 167 ++++++++++ .../data_dictionary/SalesLT.Customer.json | 242 ++++++++++++++ .../SalesLT.CustomerAddress.json | 106 ++++++ .../data_dictionary/SalesLT.Product.json | 265 +++++++++++++++ .../SalesLT.ProductCategory.json | 108 ++++++ .../SalesLT.ProductDescription.json | 80 +++++ .../data_dictionary/SalesLT.ProductModel.json | 111 +++++++ ...alesLT.ProductModelProductDescription.json | 105 ++++++ .../SalesLT.SalesOrderDetail.json | 157 +++++++++ .../SalesLT.SalesOrderHeader.json | 307 ++++++++++++++++++ .../SalesLT.vGetAllCategories.json | 49 +++ .../SalesLT.vProductAndDescription.json | 76 +++++ ...lesLT.vProductModelCatalogDescription.json | 292 +++++++++++++++++ .../data_dictionary_creator.py | 227 +++++++------ .../sql_sever_data_dictionary_creator.py | 8 +- 15 files changed, 2204 insertions(+), 96 deletions(-) create mode 100644 text_2_sql/data_dictionary/SalesLT.Address.json create mode 100644 text_2_sql/data_dictionary/SalesLT.Customer.json create mode 100644 text_2_sql/data_dictionary/SalesLT.CustomerAddress.json create mode 100644 text_2_sql/data_dictionary/SalesLT.Product.json create mode 100644 text_2_sql/data_dictionary/SalesLT.ProductCategory.json create mode 100644 text_2_sql/data_dictionary/SalesLT.ProductDescription.json create mode 100644 text_2_sql/data_dictionary/SalesLT.ProductModel.json create mode 100644 text_2_sql/data_dictionary/SalesLT.ProductModelProductDescription.json create mode 100644 text_2_sql/data_dictionary/SalesLT.SalesOrderDetail.json create mode 100644 text_2_sql/data_dictionary/SalesLT.SalesOrderHeader.json create mode 100644 text_2_sql/data_dictionary/SalesLT.vGetAllCategories.json create mode 100644 text_2_sql/data_dictionary/SalesLT.vProductAndDescription.json create mode 100644 text_2_sql/data_dictionary/SalesLT.vProductModelCatalogDescription.json diff --git a/text_2_sql/data_dictionary/SalesLT.Address.json b/text_2_sql/data_dictionary/SalesLT.Address.json new file mode 100644 index 0000000..34676f7 --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.Address.json @@ -0,0 +1,167 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The AddressID column in the SalesLT.Address entity contains unique identifier values for each address record within the table. The data is represented as integer values, which are incremented to ensure each AddressID is unique. This column is likely used as a primary key to distinguish each address entry and to enable efficient querying and indexing of address data.", + "Name": "AddressID", + "SampleValues": [ + 541, + 1019, + 548, + 1100, + 1023 + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The AddressLine1 column in the SalesLT.Address entity contains the primary address information, typically including the street number and name. The values can also include additional details such as suite or floor numbers. The addresses may follow various formats and can include special characters or abbreviations, reflecting different address conventions and layouts. This column is used to store the main part of the physical address for a location.", + "Name": "AddressLine1", + "SampleValues": [ + "399 Clearing Green", + "595 Burning Street", + "2500-622 5th Ave Sw", + "600 Boul. Rene-levesque Ouest", + "6th Floor Ferguson Block" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The AddressLine2 column in the SalesLT.Address entity contains secondary address information which often includes building names, suite numbers, or P.O. Box numbers. The values in this column typically complement the primary address line by providing additional details that aid in locating a specific address. This column may contain a variety of formats and abbreviations relevant to secondary address components.", + "Name": "AddressLine2", + "SampleValues": [ + "Raven House, Kingsgate", + "Ste 1071", + "Suite 2501", + "P.O. Box 803", + "Box 8033" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The City column in the SalesLT.Address entity contains the names of cities where addresses are located. The values are typically in the form of full city names and are used to specify the municipality in which a particular address is situated. This column does not follow any specific standard format other than being a string representation of city names. The city names can vary widely based on geographic location.", + "Name": "City", + "SampleValues": [ + "Westminster", + "Whittier", + "Trabuco Canyon", + "Escondido", + "Birmingham" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The StateProvince column in the SalesLT.Address entity contains the names of states or provinces in the United States. The values are represented as full state names in English. This column is used to specify the state or province part of an address within the United States.", + "Name": "StateProvince", + "SampleValues": [ + "Utah", + "California", + "Washington", + "Texas", + "Minnesota" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The CountryRegion column in the SalesLT.Address entity contains a list of country or region names where the addresses are located. The values represent the full names of countries or regions. This column helps to identify the geographical location associated with each address entry. Examples include names such as 'United States', 'United Kingdom', and 'Canada'.", + "Name": "CountryRegion", + "SampleValues": [ + "United States", + "United Kingdom", + "Canada" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The PostalCode column in the SalesLT.Address entity contains postal codes, which are numerical codes used by postal services to identify specific geographic regions or delivery routes. The values are typically composed of five digits. This column is used to facilitate mail sorting and delivery as well as location-based services within the database. The values follow the pattern of US ZIP Codes.", + "Name": "PostalCode", + "SampleValues": [ + "90712", + "64106", + "92335", + "63103", + "92867" + ] + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.Address entity contains unique identifier values in the form of UUIDs (Universally Unique Identifiers). These values are 36-character strings formatted as 8-4-4-4-12 and are used to uniquely distinguish each record in the table. This ensures that each address entry has a distinct and non-repeating identifier, regardless of the data's context or usage. The use of UUIDs provides a method for uniquely identifying records in a distributed environment.", + "Name": "rowguid", + "SampleValues": [ + "C15ECA9A-6054-40E4-8D09-D4341AABCE2D", + "6D2D6846-3F17-474E-8D31-AD3A59C0CEB0", + "3438AFB3-390C-48D5-8CCF-5438278D981D", + "6D6A8E1A-FFD8-4D2D-A70D-88467049A880", + "726819A8-1B02-4EFD-AEB9-3FD801D9F153" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.Address entity contains timestamps indicating the date and time when each address record was last modified. The values are in the format 'YYYY-MM-DD HH:MM:SS', which includes both the date and time. This column is used to track changes and updates to the address data over time.", + "Name": "ModifiedDate", + "SampleValues": [ + "2006-10-01 00:00:00", + "2007-09-01 00:00:00", + "2007-06-01 00:00:00", + "2006-03-01 00:00:00", + "2006-09-01 00:00:00" + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.Address -> SalesLT.CustomerAddress", + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader", + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail", + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product", + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel", + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription" + ], + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.Address entity stores information about customer addresses. It includes details such as the street address, city, state or province, country or region, and postal code. This entity can be used to answer questions related to customer locations, shipping addresses, and regional sales analysis. It also tracks when and by whom the address information was last modified.", + "Entity": "SalesLT.Address", + "EntityName": "Customer Address Information", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.CustomerAddress", + "ForeignKeys": [ + { + "Column": "AddressID", + "ForeignColumn": "AddressID" + } + ] + }, + { + "ForeignEntity": "SalesLT.SalesOrderHeader", + "ForeignKeys": [ + { + "Column": "AddressID", + "ForeignColumn": "BillToAddressID" + }, + { + "Column": "AddressID", + "ForeignColumn": "BillToAddressID" + }, + { + "Column": "AddressID", + "ForeignColumn": "BillToAddressID" + }, + { + "Column": "AddressID", + "ForeignColumn": "ShipToAddressID" + } + ] + } + ], + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.Customer.json b/text_2_sql/data_dictionary/SalesLT.Customer.json new file mode 100644 index 0000000..c47c33a --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.Customer.json @@ -0,0 +1,242 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The CustomerID column in the SalesLT.Customer entity contains unique numeric identifiers assigned to each customer. These identifiers are integers and do not follow a specific sequential order, ensuring that each customer can be uniquely distinguished. The values in this column are critical for linking customer information with transactional and operational data within the database.", + "Name": "CustomerID", + "SampleValues": [ + 508, + 30051, + 418, + 595, + 336 + ] + }, + { + "AllowedValues": null, + "DataType": "bit", + "Definition": "The NameStyle column in the SalesLT.Customer entity contains boolean values that indicate the formatting style used for the customer's name. A value of 'False' suggests that the name does not follow a specific format, whereas a value of 'True' would indicate adherence to a predefined naming convention. Generally, this column aids in distinguishing between different name formatting styles within the customer records.", + "Name": "NameStyle", + "SampleValues": [ + false + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Title column in the SalesLT.Customer entity contains honorifics or salutations used to address customers. The values typically include common titles such as 'Mr.' for Mister, 'Ms.' for Miss, 'Sr.' for Senior, and 'Sra.' for Senora, indicating a standard format for addressing individuals formally. The entries are usually abbreviations and may follow cultural norms for addressing people based on their gender or age.", + "Name": "Title", + "SampleValues": [ + "Sra.", + "Sr.", + "Ms.", + "Mr." + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The column contains a list of first names of customers. These values represent the given names of individuals in the SalesLT.Customer entity. The data includes various common personal names used by customers.", + "Name": "FirstName", + "SampleValues": [ + "Carolyn", + "Kara", + "Jane", + "Delia", + "George" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The MiddleName column in the SalesLT.Customer entity contains the middle initials of customers. The values are typically single letters followed by a period, representing the abbreviated form of the customer's middle name. This column helps to identify customers more precisely, especially in cases where they have common first and last names.", + "Name": "MiddleName", + "SampleValues": [ + "D.", + "F.", + "R", + "P.", + "B." + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The LastName column in the SalesLT.Customer entity contains the surnames of customers. This column holds textual data representing the last name or family name of each customer. The values are varied and do not follow a specific pattern, indicating they are typical last names from potentially diverse cultural backgrounds.", + "Name": "LastName", + "SampleValues": [ + "Tran", + "Holloway", + "Beebe", + "Chen", + "Lyeba" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Suffix column in the SalesLT.Customer entity contains suffixes used in customer names. These suffixes typically denote generational titles or academic and professional qualifications, such as 'Sr.' for Senior, 'PhD' for Doctor of Philosophy, 'Jr.' for Junior, 'IV' for the fourth in a generational sequence, and 'II' for the second. The values in this column help in distinguishing individuals with similar names and conveying additional information about their status or achievements.", + "Name": "Suffix", + "SampleValues": [ + "Sr.", + "PhD", + "Jr.", + "IV", + "II" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The CompanyName column in the SalesLT.Customer entity contains the names of companies that are customers of the business. The names in this column often include terms related to biking and sports, indicating that the customers are primarily businesses in the bike and outdoor sports industry. The values in this column represent the commercial identity or trade names of these customer companies.", + "Name": "CompanyName", + "SampleValues": [ + "Transport Bikes", + "Flawless Bike Shop", + "Two Bike Shops", + "Big-Time Bike Store", + "Outdoor Sports Supply" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The SalesPerson column in the SalesLT.Customer entity contains the usernames of sales representatives in the format of 'adventure-works\\username'. This format includes a common prefix 'adventure-works\\' followed by the individual's username, which typically consists of the employee\u2019s first name and a numerical digit. This column is used to identify which salesperson is assigned to or responsible for a particular customer within the Adventure Works organization.", + "Name": "SalesPerson", + "SampleValues": [ + "adventure-works\\garrett1", + "adventure-works\\linda3", + "adventure-works\\jae0", + "adventure-works\\pamela0", + "adventure-works\\jillian0" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The EmailAddress column in the SalesLT.Customer entity contains the email addresses of customers. The email addresses appear to follow a pattern where a combination of the customer's name followed by a digit and the domain 'adventure-works.com' is used. This pattern suggests that the email addresses are uniquely generated for each customer within the Adventure Works company.", + "Name": "EmailAddress", + "SampleValues": [ + "imtiaz0@adventure-works.com", + "george1@adventure-works.com", + "kerim0@adventure-works.com", + "scott6@adventure-works.com", + "bob2@adventure-works.com" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Phone column in the SalesLT.Customer entity contains customer phone numbers. The phone numbers follow a common format of three-digit area code, a three-digit central office code, and a four-digit station number, separated by hyphens. This column is used to store contact phone numbers for customers, ensuring that each number is correctly formatted for consistent data entry and retrieval.", + "Name": "Phone", + "SampleValues": [ + "327-555-0148", + "129-555-0164", + "570-555-0199", + "482-555-0174", + "436-555-0160" + ] + }, + { + "AllowedValues": null, + "DataType": "varchar", + "Definition": "The PasswordHash column in the SalesLT.Customer entity contains hashed representations of customer passwords. Each value is a base64-encoded string that represents a securely hashed password, created using a cryptographic hashing algorithm. The hash ensures that the original password cannot be easily retrieved or deciphered, providing a layer of security for user authentication. The pattern of the sample values suggests that they uniformly follow a base64-encoded format encoding the hashed value.", + "Name": "PasswordHash", + "SampleValues": [ + "jnz8GF/glxwiqqdUVHkoV+53Mp1HOnFR/azWzJ80Ktc=", + "S9Kf7AXqY19C/4rLMHjUwO+5Yh7mMhaPsuouZxizDpg=", + "NEJS/vq9oswLdLNa4VH0fbwb+fgxDYIHg2hPP1fn7t4=", + "5obs6LI7GwHZ55lps26uIsPyz7E4xBxF6pdB5KYAnn0=", + "yV4p9H28cp19QO/bcSjLxZFYAs22W5SR9HnmTXUEWkM=" + ] + }, + { + "AllowedValues": null, + "DataType": "varchar", + "Definition": "The PasswordSalt column in the SalesLT.Customer entity contains values that are used as salt for hashing customer passwords. These values are typically base64-encoded strings which add an additional layer of security by ensuring that even if two users have the same password, their hashes will be different due to the unique salt. This column helps in protecting against rainbow table attacks. The values are generally random and unique for each customer record.", + "Name": "PasswordSalt", + "SampleValues": [ + "BX3pcB8=", + "ke7sTgo=", + "DmNlCmQ=", + "dt/JUB4=", + "PiILPfc=" + ] + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.Customer entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). These values follow the standard 8-4-4-4-12 hexadecimal digit pattern separated by hyphens. Each GUID value is used to uniquely identify a customer record within the database, ensuring no two customer records have the same rowguid. This column is typically used for ensuring data integrity and for synchronizing records across different database systems.", + "Name": "rowguid", + "SampleValues": [ + "319FECC0-A652-417F-AF3A-4AA99B2FF8DC", + "68DC7932-128E-47CC-80CB-CF2B1A352F3C", + "838ACD04-5B60-459C-88CC-EF5D1D696E05", + "BAA99D94-2FC2-4A1C-8B67-2C3210EB90C3", + "E24193F1-F5DF-481E-AC1A-BAB86BD72C54" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.Customer entity contains timestamps indicating the last modification date and time for each customer record. The values are stored in a datetime format which includes both the date and the time down to fractional seconds. This column is typically used to track and audit changes made to customer information, ensuring data integrity and historical accuracy. The presence of specific timestamps and dates suggests that modifications may be tracked to the precise moment they occurred.", + "Name": "ModifiedDate", + "SampleValues": [ + "2009-05-16 16:33:33.107000", + "2009-05-16 16:33:33.077000", + "2005-07-01 00:00:00", + "2007-07-01 00:00:00", + "2006-06-01 00:00:00" + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.Customer -> SalesLT.CustomerAddress", + "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address", + "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader", + "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail", + "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product", + "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel", + "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", + "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription" + ], + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.Customer entity contains detailed information about customers, including their personal and professional data such as names, contact details, and company affiliation. It also includes security-related fields for login purposes, such as password hash and salt, as well as metadata like unique identifiers and modification dates. This entity can be used to answer questions about customer demographics, contact information, sales assignments, and account security details.", + "Entity": "SalesLT.Customer", + "EntityName": "Customer Information", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.CustomerAddress", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + }, + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ] + }, + { + "ForeignEntity": "SalesLT.SalesOrderHeader", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + }, + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + }, + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ] + } + ], + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.CustomerAddress.json b/text_2_sql/data_dictionary/SalesLT.CustomerAddress.json new file mode 100644 index 0000000..4c7e873 --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.CustomerAddress.json @@ -0,0 +1,106 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The CustomerID column in the SalesLT.CustomerAddress entity contains unique identifiers for each customer. These identifiers are numeric and do not follow a specific pattern, serving as primary keys to link customer records with their associated addresses. The values in this column are unique to each customer and are used to differentiate between individual customers within the database.", + "Name": "CustomerID", + "SampleValues": [ + 29950, + 29988, + 30036, + 29831, + 30106 + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The AddressID column in the SalesLT.CustomerAddress entity contains unique numeric identifiers for addresses. Each value in this column is a distinct integer that serves as a primary key to uniquely identify an address associated with a customer. The values do not follow a specific format other than being integers and are used to link customer records to their corresponding address records.", + "Name": "AddressID", + "SampleValues": [ + 592, + 655, + 633, + 582, + 544 + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The AddressType column in the SalesLT.CustomerAddress entity contains descriptive values that define the type of address associated with a customer. Examples include specific roles or purposes of the address, such as 'Shipping' or 'Main Office'. This information is used to categorize addresses and helps in distinguishing between different address functions related to a customer.", + "Name": "AddressType", + "SampleValues": [ + "Shipping", + "Main Office" + ] + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.CustomerAddress entity contains unique identifiers for each customer address record. The values in this column are in the form of globally unique identifiers (GUIDs), which follow the standard 128-bit format used to ensure that each entry is distinct across databases and tables. Each value is a string in the format of hexadecimal digits separated by hyphens, which makes it suitable for uniquely identifying records in a distributed system.", + "Name": "rowguid", + "SampleValues": [ + "6075EE51-F2EE-4E6D-97BB-6C0732A4C53F", + "4012A207-360D-4189-833C-61B0EBE4E593", + "2F99485B-952A-44D4-A5AF-5A94FACA240E", + "779CEF11-027C-4921-9F5B-6537A571C4AA", + "48F96EB4-5E50-42D7-B8E4-6390C2AB703A" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.CustomerAddress entity contains datetime values representing the date and time when a record was last updated. The values follow the standard datetime format 'YYYY-MM-DD HH:MI:SS'. This column is used to track changes and ensure data integrity by recording the timestamp whenever a modification occurs.", + "Name": "ModifiedDate", + "SampleValues": [ + "2005-08-01 00:00:00", + "2006-08-01 00:00:00", + "2007-02-01 00:00:00", + "2006-01-01 00:00:00", + "2005-10-01 00:00:00" + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.CustomerAddress -> SalesLT.Address", + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader", + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail", + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product", + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel", + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.Customer" + ], + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.CustomerAddress entity stores the relationship between customers and their addresses. It includes details on the type of address (such as billing or shipping) associated with each customer. This entity can be used to answer questions related to the specific addresses associated with a customer, the types of addresses a customer has, or when the address information was last modified.", + "Entity": "SalesLT.CustomerAddress", + "EntityName": "Customer Address Information", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.Address", + "ForeignKeys": [ + { + "Column": "AddressID", + "ForeignColumn": "AddressID" + } + ] + }, + { + "ForeignEntity": "SalesLT.Customer", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + }, + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ] + } + ], + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.Product.json b/text_2_sql/data_dictionary/SalesLT.Product.json new file mode 100644 index 0000000..efeb18b --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.Product.json @@ -0,0 +1,265 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductID column in the SalesLT.Product entity contains unique numeric identifiers assigned to each product in the database. Each value in this column is an integer and serves as the primary key for the Product table, ensuring that each product can be individually referenced. The values do not follow a specific pattern beyond being unique and numeric.", + "Name": "ProductID", + "SampleValues": [ + 742, + 912, + 890, + 966, + 781 + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Name column in the SalesLT.Product entity contains the names of various products. The product names typically include a description of the product type, and may also include additional attributes such as size, color, and specific variants. This column provides a concise identification label for each product, combining multiple characteristics into a single descriptive name.", + "Name": "Name", + "SampleValues": [ + "Road Bottle Cage", + "ML Mountain Frame-W - Silver, 38", + "LL Road Frame - Black, 52", + "ML Mountain Frame-W - Silver, 40", + "HL Mountain Pedal" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The ProductNumber column in the SalesLT.Product entity contains alphanumeric codes used to uniquely identify products. The values follow a pattern that includes a combination of uppercase letters and numbers, often separated by hyphens. This pattern seems to represent information about product types and possibly product variations such as size or color. The codes are formatted in a way that likely allows easy recognition and categorization of different products within the inventory system.", + "Name": "ProductNumber", + "SampleValues": [ + "FW-T905", + "BK-T18U-44", + "TI-M267", + "FR-R38B-44", + "BK-T18U-50" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Color column in the SalesLT.Product entity contains the color descriptions of products. The values in this column represent various colors and sometimes combinations of colors that identify the product's appearance. The values include both single colors and combinations separated by a forward slash. This column can help in filtering products based on their color attributes.", + "Name": "Color", + "SampleValues": [ + "Red", + "Black", + "Grey", + "Silver/Black", + "Blue" + ] + }, + { + "AllowedValues": null, + "DataType": "money", + "Definition": "The StandardCost column in the SalesLT.Product entity contains the manufacturing or acquisition cost of a product, expressed as a numerical value with four decimal places. This cost represents the base amount required to produce or procure each unit of the product. The values are typically used for cost accounting and financial analysis purposes. The values in this column do not follow a specific standard and vary depending on the production costs associated with different products.", + "Name": "StandardCost", + "SampleValues": [ + "13.0900", + "352.1394", + "17.3782", + "10.3125", + "884.7083" + ] + }, + { + "AllowedValues": null, + "DataType": "money", + "Definition": "The ListPrice column in the SalesLT.Product entity contains the standard selling prices of various products. The values in this column are represented as decimal numbers with four decimal places, indicating precise pricing for each product. This column is used to store the regular prices before any discounts or promotions are applied.", + "Name": "ListPrice", + "SampleValues": [ + "9.5000", + "742.3500", + "300.2150", + "3374.9900", + "2384.0700" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Size column in the SalesLT.Product entity contains a variety of values that represent the size of the product. The values can include both numerical measurements and letter-based descriptors. Numerical values appear to be measurements, likely in centimeters, while letter-based values are common size designations such as S (Small) and L (Large). This column captures the physical dimensions or size classification of each product.", + "Name": "Size", + "SampleValues": [ + "S", + "60", + "L", + "54", + "70" + ] + }, + { + "AllowedValues": null, + "DataType": "decimal", + "Definition": "The Weight column in the SalesLT.Product entity contains numerical values representing the weight of products. These values are stored with two decimal precision, indicating that weight measurements may be critical for the products listed. The weights can vary significantly, ranging from a few hundred to over ten thousand units. The unit of measurement is not provided, but it seems consistent within the column. The values represent the physical weight of each product in the catalog.", + "Name": "Weight", + "SampleValues": [ + "7869.79", + "10945.13", + "635.00", + "1306.34", + "1070.47" + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductCategoryID column in the SalesLT.Product entity contains numeric identifiers that correspond to different product categories. Each unique number represents a distinct product category within the product catalog. The values are integers and indicate the category classification for each product.", + "Name": "ProductCategoryID", + "SampleValues": [ + 36, + 15, + 26, + 33, + 10 + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductModelID column in the SalesLT.Product entity contains numeric identifiers for different product models. Each value in this column is a unique integer that serves as a primary key to relate the product to its specific model. This helps in categorizing and organizing the products based on their models within the database. These identifiers are essential for joining tables and querying detailed information about the product models.", + "Name": "ProductModelID", + "SampleValues": [ + 95, + 93, + 48, + 80, + 69 + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The SellStartDate column in the SalesLT.Product entity contains the date and time representing when a product became available for sale. The values are in the datetime format 'YYYY-MM-DD HH:MM:SS'. Each entry indicates the specific start date and time down to the second that a product was first introduced to the market. This information is typically used to track and manage product availability timelines.", + "Name": "SellStartDate", + "SampleValues": [ + "2007-07-01 00:00:00", + "2006-07-01 00:00:00", + "2005-07-01 00:00:00", + "2002-06-01 00:00:00" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The SellEndDate column in the SalesLT.Product entity contains the date and time when the product was last available for sale. The values in this column follow the datetime format 'YYYY-MM-DD HH:MM:SS', indicating the precise end date and time. This column helps to track when products were discontinued or no longer sold.", + "Name": "SellEndDate", + "SampleValues": [ + "2007-06-30 00:00:00", + "2006-06-30 00:00:00" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The DiscontinuedDate column in the SalesLT.Product entity contains the date on which a product was discontinued. This column holds date values indicating when a product is no longer available for sale. It is used to track the lifecycle of products and manage inventory by identifying products that are no longer active. If the value is NULL, it signifies that the product is still active and available.", + "Name": "DiscontinuedDate", + "SampleValues": [] + }, + { + "AllowedValues": null, + "DataType": "varbinary", + "Definition": "The ThumbNailPhoto column in the SalesLT.Product entity contains binary data representing thumbnail images of the products. The data is in GIF (Graphics Interchange Format) as indicated by the initial bytes 'GIF89a'. It stores encoded image information which is used for displaying small preview images of the products within the database. This column ensures that each product has a related visual representation, aiding in product identification and visual presentation capabilities in applications and interfaces.", + "Name": "ThumbNailPhoto", + "SampleValues": [ + "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\xc5\\xc2\\xbeTRQ\\xd1\\xd1\\xd1ECC\\xfe\\xfe\\xfe\\xf7\\xf7\\xd8\\xa6\\xa3\\x9e\\xf0\\xf0\\xf0\\xe1\\xe0\\xde\\xf4\\xf4\\xf4\\xda\\xda\\xd9\\xaa\\xaa\\xaa\\xec\\xec\\xec\\xf6\\xf6\\xf6LKJ\\xbb\\xb9\\xb4\\xfb\\xfb\\xfb\\x97\\x94\\x10\\xb4\\xb2\\xad\\xf8\\xf8\\xf8\\xf2\\xf2\\xf2\\x93\\x8e\\x88ecb\\xb1\\xae\\xaa|{{\\xc2\\xc2\\xc2trquqm+\\x06+\\x99\\x99\\x99\\xb4\\xb4\\xb4323\\xb1\\xb1\\xb1\\xfd\\xfe\\xf9\\x8c\\x8c\\x8b\\xcb\\xcc\\x13\\xea\\xea\\xea\\xd4\\xd2\\xce\\xfa\\xfb\\xea\\x87\\x83}\\xaa\\xa6\\xa1\\xe1\\xe2xqnj\\xf2\\xf3\\xc37%7\\xec\\xed\\xa8}zt\\xe2\\xe2\\xe2\\xad\\xa9\\xa5\\xe9\\xea\\x99\\x9e\\x9b\\x95\\x85\\x84\\x84\\xe4\\xe4\\xe4\\xe8\\xe8\\xe8KBI\\xce\\xce\\xce\\xdc\\xdc\\xdc\\xcb\\xc9\\xc5\\xaf\\xaf\\xafXUT\\x9f\\x9f\\x9f\\xd4\\xd4\\xd4\\xc8\\xc6\\xc3\\xdd\\xdd\\xda\\xb9\\xb9\\xb9iec\\xee\\xef\\xef\\xda\\xdbVD;B\\xd7\\xd7\\xd7$$#\\xca\\xca\\xca\\xd7\\xd8K\\xc6\\xc4\\xc1ca^?>>ti\\x15nkk\\x88\\x86\\x83\\xe6\\xe6\\xe6,,+\\xa1\\x9e\\x99\\xbc\\xbc\\xbc\\xe6\\xe6\\x8a\\xd5\\xd4\\xd1.\\x11(\\xfc\\xfc\\xf1\\xfd\\xfd\\xf6\\xf1\\xf1\\xbb\\xa1\\xa1\\xa0\\xc8\\xc8\\xc8\\xd9\\xd8\\xd6\\x96\\x96\\x96\\xd5\\xd6=OLLZH\\x1a\\xc6\\xc6\\xc6\\xe5\\xe4\\xe2:\\x1d#\\xb8\\xb6\\xb1\\xdf\\xdf\\xdf\\xc4\\xc4\\xc4lie\\x91\\x91\\x90\\xcc\\xcc\\xcc\\x95\\x92\\x8d___\\x8c\\x88\\x84\\xf8\\xf8\\xe0eT3\\x81~{\\xc0\\xbe\\xba\\xf0\\xf0\\xee\\x9e\\x9c\\x9axvs[YU@<=\\xb6\\xb4\\xb0\\xe9\\xe8\\xe6\\xfe\\xfe\\xfbb_[\\xbf\\xbd\\xb8\\xcd\\xce\\x1a\\xc0\\xc0\\xc0\\xec\\xec\\xea>3>\\x9a\\x97\\x93\\xe0\\xe0\\xe0][X:99RPN\\x9b\\x98\\x94\\xc5\\xc3\\xc0\\xcd\\xcc\\xc9\\xd0\\xcf\\xcb\\xab\\xab\\xab\\xec\\xeb\\xe9\\xb1\\xb0\\xafJHGD*\"\\x9c\\x9c\\x9c2\\x182GFF\\xf6\\xf6\\xf5\\xb6\\xb6\\xb6\\xcd\\xcb\\xc7\\xf5\\xf4\\xf3745\\xa5\\xa4\\xa3B@?\\x1d\\x1c\\x1c<:9\\xba\\xba\\xba\\x94\\x93\\x92\\xf1\\xf1\\xf1\\xe7\\xe6\\xe3UOP\\xdd\\xdd\\xdd\\xea\\xea\\xe8YYY\\xa7\\xa7\\xa7\\xb2\\xaf\\xab\\xb0\\xad\\xa8\\xf5\\xf5\\xd0\\xe3\\xe2\\xe0\\xef\\xee\\xed\\xd8\\xd7\\xd4\\xd1\\xd2/\\x96\\x94\\x91_]Y\\xbc\\xbb\\xb8\\xaf\\xae\\xac\\xa6\\xa5\\xa4\\x9d\\x9b\\x99\\xdc\\xdb\\xdb\\xd7\\xd6\\xd4\\xc7\\xc6\\xc4\\xc5\\xc5\\xc5\\xc3\\xc2\\xc0\\xbb\\xba\\xb9\\xc5\\xc6h976=<<\\xbf\\xbf\\xbf\\xbe\\xbe\\xbe\\xa4\\xa4\\xa4\\xfd\\xfd\\xfd3\\x063\\xfc\\xfc\\xfc\\xfd\\xfe\\xfe\\xb8\\xb5\\xaf\\x9d\\x99\\x93L6\\x1e\\xfc\\xfd\\xfc\\xfc\\xfd\\xfd\\xf3\\xf3\\xf3\\xfa\\xfa\\xf9\\xf8\\xf8\\xf7\\xb1\\xb2\\x0f\\x9e\\x9e\\x9d\\xfd\\xfe\\xfd\\xbe\\xbf\\x10\\xce\\xcf h[\\x17?:<\\xf5\\xf6\\xf6\\xf9\\xfa\\xfa\\xf7\\xf7\\xf7\\xad\\xad\\xad\\xc1\\xc1\\xc0\\xbf\\xbf\\xbd\\xfd\\xfd\\xfc\\xf7\\xf8\\xf8\\xb5\\xb5\\xb5\\xf9\\xf9\\xf9\\xcf\\xce\\xcc\\x7ftQ\\xeb\\xeb\\xeb\\xdd\\xdd\\x99c]_\\xe3\\xe3\\xe3-%)\\xa6\\xa1n100\\xf5\\xf5\\xf5\\xa6\\xa6\\xa5\\xe0\\xdf\\xdc\\x95\\x93-\\xc9\\xcayqoo\\xe1\\xe1\\xe10./\\xdb\\xdc\\xdc((\\'\\xcf\\xd1&\\xcb\\xccL\\xc8\\xc8=O9,\\xe4\\xe2\\xdf\\xa4\\xa5\\x0e\\xa8\\xa6\\x11\\x9b\\x95t\\x95\\x8a~\\xd5\\xd3\\xd0\\xb6\\xb3\\xae]WX\\xbe\\xbf\\xbf\\xc2\\xc1\\xc2\\xe7\\xe7\\xe4\\xee\\xef\\xb1\\xa3\\xa3\\xa3\\xad\\xab\\xa8\\x95\\x90[\\xa5\\xa5Hfff\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00o\\xfd\\x1bH\\xb0\\xa0\\xc1\\x83\\x06\\t(\\\\H@\\x97C]\\xbc\"B\\x80@\\x8c\\x98\\xb5\\t\\xcf\\x9e5\\x00\\x97`\\x98\\xa6\\x03B\\x180 Q\\xe3\\t\\x8d\\x17d:)(\\xd2C\\xc0\\x8d#`2\\xe0\\x02\\xe2A\\xc7\\x82\\\\<\\x04\"\\xdc\\xc9\\xf3\\x1f\\xc3\\x85\\x0f!J\\x84`\\xcd\\x1a\\xb5g\\xcd8\\x0e\\xa3\\xa0I\\x93\\x90\\x90#K\\x9eL\\xb9\\xb2\\xe5\\xcb\\x983k\\xde\\xcc\\xd9\\xb3k\\xc2\\x9f\\r\\x1fF\\xe4\\x05\\xc1\\x19\\xb5G\\x14B\\x92\\xb4C\\x82D\\xb6l\\x0c\\xb2\\xb5\\xadA\\x83\\x1bJ\\x95,]\\xc2\\x94I\\xd3&N\\x9d^\\x11*\\xec\\xd5\\x0b\\x99Ca\\xc2\\x82\\x8a%k\\xadS&A\\x8a\\x1c\\r\\xa8\\x94J\\xc3\\x99U[p\\x883\\xf7\\xc2\\xee\\x0bs\\x7f\\xc8\\xe0\\xa8\\xaa\\x17k\\xdf\\xad\\x80\\x03\\x13$\\xd0+\\x18\\x84b\\x8f\\xc0I\\x92\\x04\\xee\\x99\\xb5\\x89c\\xc9\\x12\\xfb\\x83!\\x80\\x8b_\\x15N\\xb8P\\x11$\\x80\":\\x93>a\\xf0\\xd7\\xe4X\\x8f\"\\np\\xe0pE\\xfa*_\\xad\\x7fU\\xafF\\x06A\\x0b\\x06\\x0bJ\\xd4\\xa8\\xff\\x11\\xc1\\xe5A\\x18;|\\xe0\\x0c\\xab\\x9d\\x11\\x88\\xa38\\xf4P\\x00\\x17N\\x1c\\xcf\\x1c\\x07\\xe7\\x8c(\\x121#\\x90\\x83\\x1d:\\xdc \\xc0s=X\\xb5WV~q\\xa5]C:8\\x90\\x8a\\x1b\\xc1\\r\\x07\\x88\\x03\\x03\\xd4\\x12\\x00\\x06\\x94`\\x90I\\x19$\\x1c\\x11@\\x12\\x00\\xc47\\xdfpA\\xcc\\x01\\x05\\x14\\x01\\xf8\\xe3\\x80\\x08M8\\xe0\\xcf\\'\\x1f\\x04p\\x8b\\x16\\x02\\nP\\xdau\\t\\xa6\\xd6U/\\x07XP\\x8e((\\xc8\\x10\\xe1\\x06A(1\\x87 \\x95\\x18a\\xcb\\x0c38\\xa2\\xc6\\x07\\xd2\\x18\\x02\\x80\\x04\\xf2E\\xa8\\xc2\\x0eF|\\xa2\\x06\\x11,\\xb0`\\x03\\x0b\\x8d0\\xa3\\x86?\\x01\\xa4\\xc3\\x8a\\x14`\\xa0q\\x83u\\x08\\xa2\\xa6\\x1a\\x01\\x07|\\x82\\n\\x00\\xbe\\x04i\\xa5\\x19x$\\x19\\xc8\\'\\x0e`\\xe0\\x86\\x8b\\x8e\\xa4\\xa3A\\x88U\\n\\xe7\\x88\\x11j\\xf4\\xc1\\x01\\x07\\xc04Z\\x05\\x07\\xbbp`\\x03\\x99\\x95\\xe8\\xe3A\\x06G\\xa0q\\xe0i\\xd9y\\xd5\\x90\\x1b\\x99\\x94@\\xa7\\x9d\\xc2m\\xa0\\x84\\x11\\x81\\x90I\\xc4\\x07\\x9f8\\xc2\\x82\"\\xfe\\xf8\\xff\\xe3\\x88\\x17\"\\x06W\\xe6\\'\\x8d\\x88\\xc1\\xcf\\x14)\\x9c2\\xc2\\x08\\x11,\\x12\\xe9\\xa4\\xa9\\xc6\\x01B4Zh\\x11\\x0b\\x8enz\\xd5\\xcb\\x0bJ\\xb8#j\\x9dB\\ngF:\\x9fx\\xd1\\xc8\\xa2\\xdc\\xee\\xb2K\\x15^\\x90\\x19@\\x95.\\xa4\\xa3\\x06\\x07L(\\xc3\\x06A\\xf9\\x0c\\xa1G2\\xc2r\\xf0\\x89?\\xdf\\xcc\\xc0\\x03$\\x19(\\xcbl\\xa7]\\xe9\\x92\\xc5\\x02\\xd2\\x8eZ\\xed\\x06\\xe6*\\xdaF?H\\xfcj\\x0c\\x13UxK\\xeco\\x15\\xd4\\xa2F#L\\xa4p\\x90\\t)(\\x13\\x81\\xb7,\\xf8\\x03E\\x13\", E\\x19\\xcb\\xb6\\xc9/O\\x04\\xf0\\xe2D4\\x01S\\x1b\\x1c\\xa2,,\\xf2\\xce\\n\\x03Y1E\\x17\\xef\\xc6;\\xef\\x12\\xbf\\xb8\\xf1\\x01\\x11\\xed 1\\x05B&\\x0c1\\x82\\x18\\xdf\\xfa\\xf3\\x01 \\x18\\x1cSM4e\\xec\\xab`O\\x04\\x10c\\xc10-\\xdb\\x19\\x80#},\\xb2\\xce(\\x06\\x15\\x90\\x82\\x1e\\x1b\\xef\\xd21\\x14\\xbf(\\xf2I\\x15\\xaa\\xf0t\\x05\\x16#\\x00\\x13\\xa9\\xd2\\x9c\\x94\\x93\\x89\\x0e\\xb8d \\xb5\\x8e\\x08\\xf5\\xffb\\xcd\\x0c,Ok\\'\\x8aU\\x18\\x83\\xc4Aw\\x14=B\\xbc\\xfe,\\xe1B-\\x0eTa1Bw\\\\1\\xca\\x10rs\\xa0\\xb4\"A\\x84,E\\x06\\xd1\\x98<5O\\xbdLp\\x86\\x07Y\\xcb`\\x81\\xab\\xf2\\xf0\\x14\\x02\\x16z,3\\xb7\\x03\\x1b\\x9cC\\x040\\xa7$4\\xd0\\x1dV\\xac0\\x85\\xb0\\x8d\\xf8c\\x84\\r\\x9d\\x83\\xf2y\\xe8\\x9c\\x8e\\xbeS\\xe9\\xb3\\x9c\\x91z%\\xe7\\xd2\\xe2v\\x01C01\\xb7\\xe3\\x1f\\xf4\\x01\\xcc\\x08-\\x14\\x14\\xc2\\x15\\xff$\\x8e\\x059\\x90\\xb2\\xa0\\x86%\\xc4{\\x0e\\xba\\xe8|\\x1fT\\xba*\\xce\\x0b.\\xc3\\x12\\x91\\xeb\\xb1\\x13\\x01V\\x8c\\x12\\xc3\\x17s\\xa3\\rE\\x1fb\\x18\\x01\\x12B@\\x90+\\xb0\\xc1\\n\\x06\\\\A\\x1b\\xbc\\xe5\\x85\\x0f|\\xc3\\x0bM8\\x034\\xf2\\x86<\\xec(\\xafo\\xc5\\x80_\\xea\\x960\\x80\\xedu\\x8f w\\xb8C\\xf8z\\x17\\x83\\x86\\x05\\xef\\x1b\\xbf\\xa8\\x85#v\\xf1\\x0e=\\xc4\\x80 \\xf9[A\\x08V\\xe0\\r\\x8e\\x9d\\x8f\\x08\\x9c\\xd0@\\x07@\\xb0\\x87\\xa8\\xb1\\xaf+\\r\\x81\\xc6\\x12\\xff\\xe2\\'\\xb0%8\\x82\\x03\\x02\\x04\\xdf@B\\xc0\\x86+$n\\x05\\xf1\\xf0\\x16\\x11\\x1c\\x10\\x84_\\x08\\xe2\\x13\\x8c\\x1a\\x81:^\\xc8\\xbb\\x15\\xc4@c\\r\\xe3\\x80\\x1a\\x8c\\xd0\\x07\\x1blc\\x06\\x94\\x00B\\x06|\\x98\\xbc\\xf6\\xad\\x86\\x17\"\\xf8\\x80#\\x88H\\xadK8\\x80\\x03\\x11\\xd0\\xc3\\x07\\xff\\x11\\x82\\x02\\xac\\xe0\\n\\x05\\xd0F#\"\\xa5\\x86t\\xc8\\xe0\\x17\\'\\xb0\\xdd.\\xbe`\\x8c\\x11\\x0c!\\x1f\\xf9\\xa3\\x05\\xff\\xbe\\x85\\xa5s\\xd8`\\x07vK\\xc4-\\xc0P\\xb26\\x92\\xaeGK\\xb3\\xc5\\x0ex ?A\\x04 \\x8b\\xa7\\xa0\\x19\\xfeF\\xd1\\x82!\\xb0CX\\xbbPD &a\\x0b<\\x9c`\\x00K`A\\xa4\\x80\\xc1\\x04&,c\\x11\\x90\\xdaE#>\\x91\\x8en\\xe00\\x08N8S,\\xf4\\xf5\\xc3\\x83\\xb0\\x06\\x020\\n\\xc0\\x07\\x1c`\\x9c%h\\xc0\\x00Ar\\x82\"\\xbf\\x90\\x0c=\\xa4\\xe0\\x80+hA\\x04\\x90&\\xa92\\xc5*\\x00K\\xa8\\x85%\\x021\\x80\\x86y\\xeb\\x9dU\\x18\\x80\\x03,1\\t\\x1bxa\\x1bn`D50\\xb5\\xff)\\x0b\\xf2\\x8d5E\\xb0\\xc0\\x07>\\x10\\x089\\xa8`^\\x94\\x12\\x84\\x06*P\\tW}k\\x19\\x11\\x88\\xc08\\xb0!\\x86`\\xda\\xc0\\x11P\\x88\\x95Fc\\x15(G8\\xa0\\x0f %\\xc2\\xd6,\\x01\\x05f\\x10\\xc1\\x8c\\x18\\xf0C\"\\xee\\x91\\xa9~\\xe6(!\\xbdH\\xc4\\x07R\\x81\\x8aOT\\xc0\\t\\x16@h\\xac\\xd4\\xe0\\x00#Z\\x82k\\xc1|g\\xa4\\x1a!\\xcd\\x0fl\\xf4\\xa8\\x8d\\x83\\xc2@\\x07\\n\\x05G\\xf8c\\x07t\\xb0A=4\\x90\\th\\xec\\xe1\\x08kri\\xb3\\x08\\xd2\\x0b)|@\\x03%\\xc8\\x03\\n\\xd2p\\x023\\xe8t\\xa3Z\\xfa\\x00\\x14\\x1c\\xc0\\xa5F4\\x82\\x05\"]B:\\x06`\\x01@\\x04\\xc0\\x0b\\x8e\\xa8\\x04\\x1df\\x89\\xaa%,\\x81\\x0e\\x80e\\x86`\\x99A\\x07E\\xec\\xa0\\tkX\\x804\\na#6yr5\\x07\\xb0&\\x15\\xdep\\x81(\\x0c\"\\r.H\\x11R5\\n#\\xa5.\\xf5D\\x01\\xb0@\\x10*\\xe0\\x06\\x15\\x18\\xc9\\x0b\\x03\\xb0\\xc5\\x07\\x8c`\\xca\\x00\\x04`\\x07\\x01\\xe0\\x84l9\\x11\\x80z\\xff\\x98\\xc1\\rq\\x00\\xc2\\x11\\x06t\\xa3f\\x0e\\x04\\x19\\xfa\\xb0E!\\xa6\\x04\\x03\\x18\\x88B\\x02\\x12h\\xc2\\x1c\\x02\\xe0\\x80\\xc8\\xe0r\\t\\r\\x1d\\x80#\\xa6+\\xddJ4\\xc1\\x1fx\\x00\\xc4\\x1aN \\x87 \\xa4\\x022\\x95\\x08\\x84%\\x02\\xa0\\x04\\x0b\\x98\\xa1\\x1c\\x1bHo9T\\x80^98a\\x10\\x12\\xd0B\\t\\n\\xd4\\xdb\\xc7\\xfa\\x84\\x17\\x16\\xd0@\\x0e\\xc6 \\x8aP\\xe4!\\x12T\\xa0B\\x12`\\xb0\\x06\\x15\\x00b\\x00\\x03\\xb5\\x85GM\\xb9\\x83\\x06O\"\\x1c?HB(\\xa2\\xb0\\x86\\xe1\\xe0a\\x07\\x14\\xb2\\x05\\x14.\\xa1\\x019\\xb8a\\r\\xa8\\x18D+d0\\x88A\\xf8a\\x10Q@\\xc1\\x18`!\\x80\"\\xe4\\xc5\\xb1\\xfe\\xe4*1>\\x90\\x85<\\\\ \\x14o\\xa0B\\x18\\x18\\x80\\x88\\x1f\\x00\\xc0\\x00f\\x98\\xc4$\\xfe\\xd3`@(\\xa1\\t\\x1b\\x90C\\x8b\\xf0a\\x88\\x07\\x18\\x80\\xacD:\\x92#\\xd2i\\t78A\\x04\\x1d\\xd8\\x87*\\x08\\xe1\\x83$\\x10\\x02\\x00\\xb2\\x88\\x06!`q\\x8d\\x1e(\\xa0:Z\\xe5W/\\xb2\\xf1\\x01V\\xf0w\\xff\\x0c\\x85\\x08\\x03\\x05&\\xd0\\x00D\\x98Bi\\x80p\\xc1\\x06\\xcc`\\x06\\x15\\xc8\\xc1\\x0f\\xb2\\xf0A\\x16*!\\x8b-\\x00@\\x14\\xbf\\xa80\\x9e\\x98\\x1b^#X\\xe0\\x0c\\x998F\"b\\xf1\\nq \\x00\\x01\\xe2\\xf8\\x01u\\xce\\xec\\x8aN\\xa0\\x03\\xcd\\xa6\\x89\\xf1@\\x84\\x11\\x8b\\x0f\\xbc\\x81\\x1e\\xfe5E)\\xac\\x01\\x91a\\xc8\\xc1\\x16Nx\\xf2\\x1a\\x9c\\xb0\\x86A\\xe0\\xa0 7\\x90B$|a\\x00\\xd2n\\xc0\\x02s\\xc0+r\\xa0\\xc0\\x05.\\x1c\\x03\\x1ae\\xd8\\xc2\\x13\\xe02\\x12\\x92\\xd0\\xe0$\\xe6\\x10\\r\\xa8\\xf7F\\x10]\\x0c\\xe3\\x03q@.\\x00\\xc4A\\x01^\\xf4b\\x1a\\x18\\xb0E\\x1d\\xde\\x00\\x83(D\\xc1\\x00\\xa1 \\xc5An\\x90\\x06\\x18\\xf8\\xc1\\tr0C*\\x8c\\x13^K`\\x80\\x0b\\x8c0^\\x0fh\\xc0\\x00\\x90\\x84D.R\\xb9\\xcb\\xb4}\\xcb\\x0b\\n`\\x1b\\xb9>@@\\x02\\x1c\\xa2\\x8f6\\xef\\x17\\x06\\xfb\\xf0E\\x12\\xb6\\xb0\\x13\\x11D\\x81\\xb4\\xa6\\xdd\\x01jm\\xf1\\r[p\\xa1\\x03Y\\xa8\\x06\\x1a\\xfe\\xc0\\x80\\xa6\\x80D$$\\xff1\\x89\\xc0_\\x9c\\xe6\\xa9\\x05\\x83\\x02;\\x90\\x03\\xc2\\x15>\\r!,\\x01\\x03\\x86PE\\x7fUQ\\x08q\\x0cc\\'\\xafP\\x01w\\x83\\x00\\x08\\xf0\\x8a\\xf7\\x0c\\xf8^@\\x06\\x8aP\\x83\\x030\\xe5\\xe4QQ9UX\\x1e\\xea\\x97\\x8e\\xda\\xd5;@.!\\xb8M\\x0c\\x0c8\"\\x07o\\x08\\xc5\\x05Ta\\x08R\\x94\\x02\\x02<\\xf1\\x82\\x851<\\x80K\\xa4\\xc3\\x0b\\x1d\\xe8@.\\x80 \\x00n\\x94\\x82\\x02O\\x87J\\xca\\xa7\\x82\\x17\\x03U}\\xab\\xba\\x00\\xc7*>\\xb0\\x0f\\x1c+\\xa0\\x14$XB+|P\\x07Q\\xc0\\x99\\x14\\x9ax\\x06/xB\\xbb\\x12\\tb\\xca\\xea\\x8c\\xfb1t\\x00\\x86Nd\\x83\\x02\\xc3\\xf0\\x08\\xd4\\xf7\\xber\\xbfS{ \\xbdx\\xc6\\x0f>p\\x82P\\xa8b\\x1e\\x9eX\\x80-|\\xf0\\x80\\x0b\\xd0\\xc3\\x07\\xe28@Q&\\x8f\\x10\\n(b\\xd1\\x0e\\xa8\\xc4%\\x8c\\xa0\\xc3|K\\xa1\\x07M\\x1fFG>\\xa2\\xf7\\x80O\\xdd\\xf4\\xbe\\xed\\x051\\xf8\\xa0\\x81\\x00H\\xe0\\x01\\x86\\x08\\xc3u}@\\x8f\\x0b\\xe4\\x81\\n\\x88(\\x06\\xff/\\x881\\x81\\x9dd\\xa1\\xbc;\\x10\\xc4\\x00\\xe8\\xf0\\x81t\\xc4=\\x0b 8\\xc2\\x1fJ\\xa1\\xfc\\xe5\\x8f\\xde\\xf9}\\xaf\\xaf\\xa8\\xef\\xab\\x89\\x1cda\\x0c<\\x87\\x00\\xfb\\x11v\\xb7\\x87\\x00\\xc3\\xc0\\x0b\\x04\\x00\\x01\\x0b\\x87\\x10; o\\xf4&^N\\xd0\\x01\\x8cp\\x08{P\\x04$@\\x01\\x1ca\\x7f\\xcd\\'u\\xf9\\x07cV\\xe7\\x13\\xba\\xf0\\x08\\xf8P\\x02I\\x90\\x04% \\x0em\\xf6\\x00\\xa1\\x80}\\x9e0\\x01\\xba\\x902\\x8fp\\x00\\xba`\\x10\\xfe\\xe0\\x05\\x8a |\\xedg\\x04\\x18 \\x81sw\\x034p\\x00\\xe0\\x10\\x84\\x1a\\x88r\\xf87p\\xf6\\xf5\\x0f\\xd2\\x07\\x07\\xa4`\\nT\\xf0\\x03\\xb2\\xf0\\x01uP\\x078\\xb6\\x05g7\\x18\\x13\\xa0\\t5 \\x04\\x13 \\x047p\\x06r \\x07\\x1aP\\x0eb\\xa8C<\\xe8\\x01G@\\x06\\x0c\\x90\\x00\\r\\xb0\\x11C\\x18u|g\\x84\\xfb\\x07\\x82\\xcfP\\nv\\xb0\\tv\\xa0\\n\\x1f\\x90\\x04\\xda\\xf6\\x03\\xdd\\xb6\\x10\\x10\\xd0\\x0c\\xd9\\x80\\x03G\\x80\\x0b\\x1e\\x00\\r\\xe1\\x90\\x05\\xc7\\xc0\\x08\\x12x\\x0c\\xc7\\x90\\x05\\xa0\\xff\\xe0\\x01e\\xa0\\x00\\x17\\xb8\\x86l(z\\x1b\\xf8\\x86Twz\\\\\\x15\\x0c\\xd6\\xc0\\x11\\x14 \\r\\x1f0%\\x05(\\t\\xc20\\x10\\r\\xe1\\x0c\\xc3P\\x03\\xae \\x00\\xb1 \\x05\\xd5\\x90\\x08\\xd0p\\x08\\xd0\\x00\\r:\\x90\\x08\\xd5 \\x05G\\xa0\\x005\\xa0\\t\\r\\x90\\x11\\x95\\xc8|D\\xc8\\x81p\\xf8\\x81\\xab\\xa1\\x0b\\xc1\\xc0\\x0b\\xd6\\x10\\r\\x1f\\xb0\\n\\x12\\xe0\\x0b9\\xe0\\x0e\\xe00\\x83>\\xd1\\x10\\xd60\\x0c$\\xf0\\x02\\n \\x00\\x9a\\x92,G\\xd0\\x8dh\\xd0b\\xe60\\x89\\x19\\xa1\\x11J\\x01\\x8cnXz\\xfaG\\x8c\\xab\\xc1\\x1a\\xbcp\\x00\\x1f\\xd0\\n\\x120\\x069\\x10\\x06\\x8f\\xd0\\x0b\\xeb\\xa8\\x0b\\xc4\\x00\\x0e\\x9a\\xc0\\x00t\\xc1\\r\\xdc\\xf0l\\xcf\\xf6\\x04$Pr\\t\\xf0\\x0c\\x13\\x80\\x11\\xe4\\xd8\\x86\\xa4\\xf7|\\xe9\\xb8U\\xce\\xc4\\x0b\\x9a\\xb0\\x04qP\\x07\\x0f\\x10\\t\\xf4h\\x8f\\xf7H\\x14\\xcf\\xa0\\x14\\t\\xd0\\x91\\x1e\\xd9\\x8b\\x07y\\x11\\x08\\xf9\\x8b\\xf7\\'\\x8c\\x99\\xe8[\\x08\\x11\\x0c\\xc3`\\n\\x91\\xa0\\noP\\x02\\xf8\\xd0\\x00\\x18y\\x8fB1\\x1169\\x11\\x15yQ\\x11\\xd6`\\x11#Y\\x8e%\\x89\\x89\\xd0w\\x84\\x07\\x11\\x82v\\xf0\\n9\\x10\\t\\n\\x80\\x08\\xd60\\x934\\xa9\\x18\\x0e1\\x168\\xc9\\x93\\xbe\\xe8\\x93\\x97\\x88\\x8e\\x1e\\xb8\\x15:p\\x0bZ\\xb9\\x95\\\\i\\x0f\\xae\\x08\\r\\xa0\\x00\\x03\\xd0\\x00\\tR\\xc0\\x95fy\\x96\\xb8\\x90\\x96j)\\x05l\\xd9\\x96m\\x89\\t@\\x10\\x97@\\x00\\ttY\\r\\x1e\\xe0\\x01 \\x90\\x08\\x89\\xa0\\x03\\xb1\\xb8\\x00\\xa0\\x00\\n\\xb9\\xa0\\x0f\\x88\\xa8\\x88\\x1d\\xc0\\x05gp\\x06\\x01\\x01\\x00;'", + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00twx\\x9e\\xa4\\xaa;AD.1i\\xc1\\xc2\\xc2xw\\xaf\\x19n\\xfb\\xca\\xca\\xda\\xcb\\xcb\\xcc\\xba\\xbc\\xbb\\xfd\\xfd\\xf1us\\xf0/c\\xef\\xfc\\xfc\\xfc\\xf6\\xf6\\xf7q\\x82\\xe2\\xed\\xed\\xedehiTYZ0V\\xf6\\xfa\\xfa\\xfaPrQ\\x8e\\x8a\\xed\\xf5\\xf4\\xed\\xf8\\xf8\\xf8\\xaa\\xac\\xac\\'4\\x9bTq\\xf0Pj\\xd4\\xb2\\xc0\\xaf\\xa7\\xbc\\xa1\\xfe\\xfe\\xfe\\xf6\\xf6\\xf9]bc\\xb2\\xb8\\xad\\xee\\xed\\xf0|}\\xad/0\\xf4\\xa1\\xa4\\xa4W\\\\k\\xb2\\xb4\\xb4 \\x1ap\\xbe\\xbe\\xbf\\xd9\\xda\\xee\\xc0\\xc0\\xd9\\xe9\\xe9\\xea\\xb8\\xb5\\xeb\\xf4\\xf4\\xf4w\\x88vI[\\xecKRT\\x82\\x82\\x84}\\x83\\x8318:\\xf2\\xf2\\xf2AGL\\x92\\x93\\x95D[\\xce\\xf1\\xeb\\xf3#\\'*\\xe5\\xe5\\xe6\\x0e\\x15\\xf1\\x99\\x9c\\x9c\\x8a\\x8c\\x8bRZ\\x8f0:\\xcf\\xff\\xff\\xf8+27\\x1a\"\\'\\xf4\\xf4\\xf7mrr\\xd3\\xd2\\xdc\\x00D\\xfa\\xf2\\xf2\\xf3cq\\xdd\\x8d\\x95\\xd0\\x84\\xa8{\\xc4\\xc5\\xc7(-2\\xd9\\xd9\\xda\\x12\\x18\\x1c\\x9c\\x9e\\xa3\\xc0\\xc1\\xcd\\x8d\\x93\\x93JT\\xb2\\xd0\\xd1\\xd2\\xbf\\xc7\\xba;D\\x9d\\xe0\\xe0\\xe1\\xb6\\xb6\\xd7\\xff\\xff\\xfc\\xea\\xea\\xeb\\xd5\\xd6\\xd6\\x96\\x99\\x98\\xa4\\xa4\\xaa\\xc6\\xca\\xe7\\x0c\\x13\\x17HLQ\\x8d\\x8e\\x93\\xa9\\xa4\\xe9\\xcb\\xd1\\xc6>J\\xcd\\x9b\\xa8\\x98Kp\\xa7\\x17M\\xf6\\x19^\\xfc\\xa7\\xa9\\xa9\\xaf\\xad\\xd9\\xf8\\xf8\\xfa\\xd9\\xd7\\xf5z}\\x7f\\x16\\x1d!\\x92\\x9b\\x92\\xe1\\xdd\\xd4\\xf9\\xf6\\xf6\\xf0\\xf0\\xf0\\xa4\\xa7\\xa4\\xb6\\xb9\\xb7\\xca\\xc9\\xc2\\xf1\\xf0\\xf2\\x02O\\xfa\\xde\\xde\\xdf\\xe6\\xe5\\xe8\\xf4\\xf2\\xf4\\x97\\x90\\x8d/t\\xce\\x8c\\x94\\x8bkmq\\x02\"\\xfb\\xab\\xaf\\xa8\\xce\\xd1\\xd1\\xe9\\xeb\\xe1\\x83\\x8f\\x81\\xb8\\xb7\\xb9\\xec\\xe9\\xf6\\x95\\x98\\xb9\\xaf\\xb1\\xaf\\xe2\\xe1\\xe3\\xb1\\xae\\xed\\x86\\x89\\x89j\\x85\\x95\\xda\\xd9\\xdb\\xf8\\xf8\\xf1\\x84\\x86\\x89\\xb3\\xb0\\xab\\xee\\xef\\xe8\\x01\\x08\\x0b\\xff\\xfc\\xfc\\xd7\\xd9\\xd6\\xa8\\xa8\\xf2\\x83~\\xbb\\x00<\\xeb\\x00=\\xfe\\x94\\x95\\x98\\xb7\\xb1\\xbf\\x9f\\xa3\\x9f\\xe6\\xe3\\xf3\\xc6\\xc6\\xc1dpl\\x16(\\xf6\\xf7\\xf4\\xf5\\xec\\xe5\\xf9\\xfd\\xfc\\xfe\\xde\\xe3\\xe0\\x9c\\x9b\\x95\\x06\\x0e\\x11\\xf6\\xf6\\xf1 J\\xec\\xd8\\xd7\\xda\\xe9\\xec\\xea\\xe5\\xe8\\xe6\\xf6\\xf7\\xf4\\xf4\\xf7\\xf7\\x00C\\xef\\xe7\\xe2\\xe2\\xd2\\xd3\\xd3\\xfd\\xfd\\xfd\\xfc\\xfa\\xfd\\xf9\\xf9\\xf9\\xf7\\xf7\\xf7\\xf2\\xf2\\xf0\\xf4\\xef\\xf3\\xdf\\xe0\\xdb\\x158\\xfe\\xfb\\xfc\\xfd\\x9f\\x9f\\xa1\\xc8\\xc9\\xcb\\x1e!!\\xfb\\xfb\\xfb\\xec\\xec\\xed\\xf9\\xfa\\xfa\\xf9\\xf9\\xfa\\xf1\\xf1\\xf3\\xd3\\xd4\\xd4\\xfa\\xfb\\xf7\\xef\\xef\\xf0rmnev\\x91#.\\xe4\\xe1\\xda\\xdc\\xa6\\xae\\xb8\\xf9\\xfc\\xfa\\xc7\\xc6\\xc8~\\x91\\x92\\x02\\x01\\xd9f\\x81\\xb6\\xce\\xce\\xd0\\xfc\\xf9\\xf9_u\\x95t}\\xa4qpt\\xd1\\xd5\\xd3\\xd4\\xd3\\xd6o\\x83\\x8e\\xd0\\xcc\\xf2\\x18<\\xecy\\x8b\\x95jo\\x8ehh\\xa2\\xdc\\xdb\\xd5iq\\x86\\xe6\\xe5\\xe1\\xda\\xdd\\xd9\\xc8\\xca\\xc5\\xdb\\xdb\\xdc\\xf3\\xf4\\xf4\\xc3\\xbf\\xb8\\xf3\\xf3\\xf3\\xbe\\xbe\\xfe\\xf3\\xf3\\xf4(0119.\\x1fB\\xd7\\x0fb\\xed\\xea\\xe3\\xe4\\xa9\\xa4\\xcc\\xf2\\xef\\xec\\xd5\\xce\\xe0\\xe7\\xe7\\xe8\\xc2\\xbe\\xf0\\xa8\\xba\\xde\\x9d\\x9c\\xee\\xe4\\xe4\\xe5\\xd0\\xcd\\xc6PQR\\xed\\xef\\xee\\xfd\\xfe\\xfe\\x9f\\xa0\\xd7\\xf5\\xf6\\xf5ba\\xf2\\xf5\\xf5\\xf6\\xf7\\xf8\\xf9\\x91\\x8f\\xa8\\x8e\\x98\\xb5\\xa8\\xa8\\xab\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0a\\xc3:\\x11\\xb88\\x9cH\\xb1\\xa2C\\x1f5\\xde\\x14\\xb2\\xc8\\xb1c\\xc5\\x06\\x19\\xc0\\xec\\x90\\x90\\xc1\\xa3\\xc9\\x93\\x08\\xb9H\\x90\\x11bS*Y\\x18P\\n\\x84\\x95D\\x9f\\xcc\\x8a\\xa8\\xc4\\x80sG\\x00G.J\\x9d$R\\x0c\\xd6e\\xca\\x8f\\x19\\x8b~\\xb8\\x11\\xa3bS\\x84W7\\x1d\\xda\\x80%\\xb0^\\x1eD4\\xfe\\xc8\\xab\\xa8,\\x97\\x1a\\x7f&p\\xdcpB\\x8f^\\r\\x1f\\xf8\\xa2V\\xa4\\xf0\\xe4\\x1e\\x80\\x04\\'U\\x84\\t#O\\x85P\\xb5\\x15\\xa5\\x18\\xa3\\xd2\\xeed\\xae\\x1aQ\\xf0v\\xd4b\\t\\x0f 4\\x1b*\\x85\\xd2b\\x11\\xd6\\x0c1\\x82;\\xc6\\xe1\\x80\\xa7\\xc4\\x06\\x06|b\\x8c\\x12\\x07\\x10\\xff]\\xd0/\\x11\\xa0J\\x0f\\x02\\x93<\\xf3\\x02,w\\xc8B\\x01\\xd5\\xbc`@A\\xb2\\xbd\\x14\\x12\\x02\\x18\\xa5\\xf8P\\x90,\\xf4\\x80aN.\\xfd\\xfd3N\\x03\\xb2\\xcc\\xc1\\x8b\\x03\\x1f\\xfc\\xe2\\x08<\\xe9\\xf4\\xa5\\x8f\\r\\x8f\\x80\\xe9\\x843\\x05q\"]\\x19\\xd6&\\x14E\\xac7\\x10 \\xd0\\x0b\\xe3P\\xf0\\xc2\\x0b\\x8f\\xff\\xf3\\xcb/\\x0e\\xf0r\\x87\\xf0\\x19\\xc8P\\n\\x11\\x94\\x10D\\x07\\xae34\\xf2\\xcf\\x1c\\x1f|P\\x8e\\xc6\\x0ePM\\x81#\\x0fp \\xc486\\r#\\xcd\\x99!\\xacK\\x905\\x13\\xa4\\xb3\\x80q\\x06\\xe9!\\xc0\\x1bCxq\\xb1\\x1c\\r\\xdca\\x03\\x06#`\\xc0\\xc6?O\\x17q8\\x06\\xe1\\xb8\\x03F$\\x11\\x82\\x81\\xf8\\xe2\\x06\\xa5\\xa0\\x87\\n\\xc6\\xf1\\x01^\\xd8\\xe0\\x1f\\xbc(\\x82\\x03z\\xb1\\x0f\\x08\\xda\\xe2\\n\\xeb\\x10FL\\x1eW\\x850\\xf4\\xab\\t\\x05\\xd1\\x82\"&\\x90\\x06\\x0b$D\\x0cox\\x03\\x00(\\xa0\\x0f\\x0c\\xe0b\\x16\\x93\\xc8\\xde\\x16*\\xf8\\x0f\\x07\\xe8c\\x18\\xbc\\xd0\\x87>\\xeaE\\x8d\\x08$j\\x1a\\x02i\\x02\\x18\\xff\\xde \\x06\\xa6\\x8d\\x03\\x16\\xb2\\x18\\x07\\xff\\xca\\xd1\\x0b\"\\xfd\\xa2\\t\\x11\\xc0\\x02Udq\\xbc\\x7f|\\x97\\xacr\\xb8!L 4\\x080\\xa43\\x01C|\\x80\\x16\\x83\\xa8\\xc7?h\\xb0\\xbc\\\\\\x10\\x84\\x02\\x10\\x18\\xc10 \\x90\\x81\\x10Hb\\x08\\xa8\\xc8\\xd9>\\x8a\\xd0\\x00\\x0c\\xbc\\xc0\\x1d\\xc7\\x84\\xc24\\xea1\\x040\\xcc\\x00\\x1cN\\x93\\x05/x\\x01\\x8ca\\xf4\\xa2\\t\\th\\x814N\\x10\\xff\\x01\\t\\xb8!\\x11E\\x18\\x86>f\\xa1C\\x13\\x9c\\xcar\\x07YA\\x0c\\xd0\\xa1\\r\\x11l\\xc2\\x07Qh\\xc2\\x1f\\x04 \\x80\\x04\\\\ \\x12\\x8e\\xb8\\x800\\x14p\\x81n\\x04\\xc2\\x0f00\\x82\\x0cp\\x90\\xacY\\xcc\\xab\\x1c\\xa9\\xfc@&\\xccQ\\nD\\x80\\x03\\x8b8\\xd8B\\x03~\\x81\\x01\\x93\\xce\\xa2\\x1cyP\\x813\"0\\x04\\x01\\xd4\\xe0\\x06!PF90\\xb02\\x81\\xa8@\\x8c3H\\xc8\\x17BP\\x01&t\\xc0\\n>\\xf0\\xc09\\x06p\\x85\\x02X\\xe2\\xaaV-\\x00\\t\\xb4\\x01\\x84\\xae\\x16\\x03\\x00\\x11(\\xc40Z\\xd0\\x0b`\\xbc@\\x1f\\xe5x\\xc1\\x1d%1\\x85W\\xec\\x82\\x08\\x99\\xe8\\x05,:4\\x90DT\\xc1\\x1f\\xfdZ\\xd5\\rPP:\\x0cdO\\x82\\x04\\xb8\\x01\\x14\\xb8\\x86\\x10]\\x98\\x81\\x100p\\xaa\\t\\xcc \\x01\"T`\\x19\\xcb\\xc0F5\\xaa\\xc1\\x08F@\\x03\\x08W\\xd0@\\x8c\\xae\\xe0\\x89E\\xc8\\x03\\x18\\xe5p\\x00Q\\xeb\\x85\\x02<\\xd2\\x80\\x0bo\\xc5\\x81<\\xb2\\xa7C\\x07\\xec\\xa3\\x1c\\\\(\\x84\\t\\x9c\\xe0\\x04i\\xff\\xf8#\\x13\\x85\\x15,a\\r\\x02\\x0b\\x13\\x08\\xa2\\x03 \\x85\\x83\\x0f\\x02Q\\x81\\x01P\\xa1\\x19g\\xa0\\x02\\x15\\xca\\xc0\\xdc 8\\xf7\\nW(A\\x10\\x08Sh\\x10\\x82\\x00\\x13d \\xff\\x10n\\xa0C\\x06\\xbe\\xf1\\x07I\\x08@\\x10:\\x84E\\x03\\xc61\\xc7\\x0f\\xe8\\xc2\\xc6\\xe3r\\x06\\x16\\xb8\\x00\\x81aP\\x80Cl\\t\\x01\\x14J\\x01\\xbb\\x0c\\x94\\xc2\\t]\\xe0\\x81Mfa\\x83z\\xe9\\xa3\\x05[\\x10\\x88\\x1e\\xa8\\xf7\\x8f\\x16\\xcek\\x9e\\xa80B\\xd2\\x80\\x91\\x10X\\xd4!\\x10]\\x80\\x03\\x01\\xea\\xb0\\nD\\x80\\x81\\x08\\x19\\xa0\\xda,\\x8e\\xd84Y\\xe8B\\x06\\x08H\\xc4+T\\xe0\\x0e\\x0c\\xfc\\xc2\\x06f-\\x07,\\x12\\x10\\x06I\\xd4`\\x8e\\xbd\\xd8\\x01\\x18\"\\xa0\\x0b\\xcf)\\xf1\\x03wp@\\x0b\\x00\\xd6\\x80^\\x8c\\x80H\\x9e\\x8b\\x9a>(p\\xd4\\xc1.\\xe4\\x17\\t \\xc4&:\\xd1\\x02\\n\\xe8a\\x08\\x920\\x02\\x0f\\xb2w\\xb1\\xde\\xed!\\x114h\\xda0\\x08\\x05\\x8c3\\xbf\\xac\\x05\\x8b\\xc0\\xe3n\\xdd`l\\x1c`\\x81j\\r\\x10\\xdd\\x1c\\x80\\xa1\\xbd\\x17@\\xe0\\xa6\\x17\\xab4,\\xa8A\\x83~5[!\\xf5\\x08\\xc47`1\\x0c,\\xe4!\\x11F\\xf8\\xa9\\x1aH-\\n\\x9b\\xfc\\xe2\\x0eG\\x08A\\x1e>\\xb0bR\\xf3\"\\t\\xff\\xff\\xb8\\x03/T\\xe0CF\\x0f\\x04\\x0b\\xca&\\x89\\x9e\\x8715\\x08\\xc8\\xc2&0\\x01F#\\xb5\\xe7\\x80\\x11\\xc0\\x18\\n\\x11`\\x08%6\\x01\\x01\\x82\\xc0\\x82\\x0b>\\x8d\\x00\\x01\\xaa\\x80\\nw$B\\x1e\\x18x\\x84$\\xdc\\xf0\\x8b\\x17\\x0c\\xd5&\\xfa\\xa0\\x9a3\\x16\\x81\\xee\\xa0\\x13\\xc4\\x07\\xcb{\\x8b\\x121\\x00\\xbe\\xd1\\xd5\\xda\\x01\\xc2\\x1e\\xe8?F\\xa0\\x02\\t\\xc0Oz\\xa5n\\x80\\x1a\\xe8p\\x107,\\xaf\\x0b\\xe1\\xdcB\\x1e.\\xee\\x0f#\\xa0\\xc0\\x01\\xb2\\x00\\x86\\xf5~\\xd1\\xb4\\xe0\\x06a\\x80.;\\x80P7\\xf1\\x04\\x1f\\x03\\x06C`\\x04~0n*\\xd0\\t\\x90\\x00\\t\\x81@\\x032@\\x04\\xa5`\\x0ep\\xd1\\x10\\t X\\xa5\\x90+7@\\x0f+\\xc1\\'\\xa8\\xb2\\x03\\x11P\\x05\\x821\\x0b?\\xc0R\\xcb#\\x002\\xd0*|\\xa25D`\\x04\\xaa\\x80|\\xb8@\\x01\\x84\\xb7r\\x00P\\x03\\x94\\x032`\\x00\\x06\\xbb \\x003\\x80\\x83QQ=\\xb0@\\x01\\xe1\\xd0\\x00X0\\x057\\xf0\\x06\\xa5 \\t`\\x08\\x86`P\\x03n \\x08\\xc9\\xe0\\x0b\\r0\\x7f4v\\x85P3\\x10\\xf5\\x90\\x01`\\x15\\x01\\x110\\x03\\x080G\\xff\\xb067\\xa1g\\xb2\\x80\\x0f\\xf5\\xb0\\x05\\xa9P\\x0f\\xa3\\x80\\x029\\xb2#\\x12\\xe0\\t]@\\x06\\xaa\\xe0\\x0e\\xaa\\x90\\n\\xab\\x00\\x0bj\\x04\\xf8\\x0f\\x01\\x01\\x00;'", + "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\x9f\\x9f\\x9f{z\\\\\\xc2\\xc1\\xb2\\xb6\\xb4\\x9d\\xb9\\xb9\\xb9\\xd9\\xd9\\xd2\\xef\\xee\\xe8FHI\\xad\\xab\\x93\\xaf\\xaf\\xaf\\xaa\\xaa\\xaa_^\\x10\\xf8\\xf8\\xf6EC\\x1b\\xe2\\xe2\\xe2[Y=dcC\\xec\\xec\\xec\\xe2\\xe1\\xdekj+rr,\\x7f~D\\xfa\\xfa\\xf9\\xe6\\xe6\\xe6{zU\\xea\\xe9\\xe2\\xf6\\xf6\\xf2\\x85\\x84TsqVfe\\x13ed-\\xe5\\xe5\\xde\\xb4\\xb4\\xb4\\xa1\\x9e\\x85ZY\\x0e<:\\x12\\xa6\\xa4\\x8a\\xe8\\xe8\\xe8\\xfa\\xfa\\xf8QSF\\x9b\\x9a{db<\\xef\\xef\\xef\\xa4\\xa2\\x86][4rqA\\xd5\\xd5\\xcd\\xda\\xd9\\xcc\\xf2\\xf2\\xed\\xfc\\xfc\\xfbml=rr6\\x8a\\x89dZX\\x17nm4\\xc3\\xc2\\xaeusK\\xb9\\xb8\\xa0\\xf8\\xf8\\xf8\\xb1\\xb1\\xb1poD\\xd1\\xd0\\xc1\\xf6\\xf6\\xf5\\x8b\\x8aX\\xed\\xec\\xe5fe$\\xee\\xee\\xee\\xea\\xea\\xearr:cb5\\xcd\\xcc\\xbc\\xf4\\xf4\\xf4xy%\\x95\\x92s\\xc1\\xbf\\xaaKI#yxLJ\\x1e{{G\\x7f~N\\xbe\\xbc\\xadcb\\x0f\\xab\\xa9\\x8e\\xb1\\xaf\\x96\\x9c\\x9a\\x82\\xe8\\xe8\\xe5\\xe4\\xe4\\xe2\\xe3\\xe2\\xe0]\\\\\\x18fe\\x19usWljD\\xf3\\xf3\\xf2\\x94\\x94b\\x9a\\x98\\x80mm\\x13\\xcd\\xcc\\xc0\\x83\\x80`\\x8d\\x8d]\\x91\\x91`TS*\\xe4\\xe3\\xddB@\\x1f`_&\\xde\\xdd\\xd8\\x9f\\x9e\\x7f\\x86\\x83h\\x7f\\x7f9\\xc0\\xbf\\xb0kjL\\xbb\\xba\\xa8\\x8a\\x88m\\x94\\x94\\x94\\x8e\\x8cp\\\\[%\\xf7\\xf7\\xf5a`\\x1f\\xcc\\xcb\\xbb\\xf0\\xef\\xeahfB\\xa2\\xa2\\xa2\\x99\\x99\\x99\\xd6\\xd5\\xc5\\x82\\x81M\\xb7\\xb7\\xb6\\xc6\\xc5\\xb3\\xd0\\xcf\\xc3\\xe3\\xe2\\xd8US&\\xb5\\xb3\\xa0~|a\\xa9\\xa6\\x91\\xc8\\xc6\\xb8\\x8b\\x8bYSR\\x15fe\\x1e\\x97\\x97d\\xbe\\xbd\\xab\\x90\\x91^\\xde\\xdc\\xd0\\xda\\xda\\xd3_^.\\xc9\\xc8\\xb6\\x87\\x87V\\x90\\x8et\\xd8\\xd6\\xc9\\xd3\\xd2\\xc8\\xd0\\xce\\xbe\\xbc\\xbc\\xba\\xbd\\xbd\\xbd\\x88\\x88Xa_BYW.XW\\x1aQO\\'\\x98\\x9a\\x0f\\xbf\\xbf\\xbf\\xfe\\xfe\\xfe\\xbe\\xbe\\xbe\\xa4\\xa4\\xa4\\xdf\\xdf\\xdf\\xd1\\xd1\\xd1\\xd4\\xd4\\xd4\\xdd\\xdd\\xdd\\xce\\xce\\xce\\xd7\\xd7\\xd7\\xe4\\xe4\\xe4\\xda\\xda\\xda\\xca\\xca\\xca\\xc2\\xc2\\xc2\\xc6\\xc6\\xc6\\xfd\\xfd\\xfdYX)\\xfe\\xfe\\xfd\\xe5\\xe5\\xe5\\xfc\\xfc\\xfc\\xfd\\xfd\\xfc@>\\x15\\x88\\x87a\\x7f\\x80\\x0e\\x98\\x99$\\xe4\\xe3\\xe2\\xe5\\xe6\\xe5\\xbe\\xbf\\xbe\\xb6\\xb6\\xb5ii\\x18\\xd4\\xd3\\xc4\\xb9\\xb8\\xa7\\xf4\\xf3\\xef\\xe4\\xe3\\xd9\\xbd\\xbe\\xbd\\xeb\\xeb\\xea\\xbc\\xbb\\xab\\x98\\x98e\\x8e\\x8e[\\xa8\\xa8\\xa8cb\\x1dxwH\\xd3\\xd2\\xc3\\xc7\\xc6\\xb8qoPRP\\x1bxuPNL)\\x7f~H\\xf1\\xf1\\xf1\\x90\\x8en\\xb0\\xae\\x9a\\x98\\x96\\x7f\\x98\\x95w\\xfb\\xfb\\xfa\\xe0\\xdf\\xdb\\xed\\xed\\xedll#\\xe9\\xe9\\xe9\\xd7\\xd6\\xd0\\x8e\\x8f1\\xeb\\xea\\xe3oo,\\x89\\x88^]\\\\0\\xe7\\xe7\\xe6\\x8f\\x8f\\x8faeWXZc\\xe7\\xe6\\xde\\x9d\\x9b\\x84z{\\x0f\\xd8\\xd8\\xd0\\xcb\\xca\\xbd\\xfd\\xfc\\xfc\\xe5\\xe5\\xe3\\xe5\\xe4\\xe4\\x91\\x93\\x0eKJ\\x17\\x93\\x94a\\xe8\\xe8\\xe0fe4gf\\x10\\x98\\x98f\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00W\\xfd\\x1bH\\xb0\\xa0\\xc1\\x83\\x06Y)\\\\\\xc8J\\x97C]\\xbe\"\\x86\\x0bg\\xa1\\xa2\\x0e\\x1d\\x82|\\xf88\\xb2\\x86\\x9b\\n\\x15\\xe3\"\\x0c)q\\xa1\\x96\\x83W\\xb2l\\xd1\\x8a\\x05k\\xd6\\xad\\\\\\xb8Z\\x11\\x00\\x91@\\x81+\\x00\\x02\\x11\\xea\\xdc\\xf9\\x8f\\xe1\\xc2\\x87\\x10%R\\xb4(H\\x87F\\x8e\\x1eA\\x8a$i\\x12\\xa5J\\x96.a\\xca\\xa4i\\x13\\'\\xcf\\xab=Y\\r\\xf4\\xa9\\x10hD_\\x13+Z\\xb8\\x98qc\\xc7\\x8f!G\\x96<\\x99re\\xcb\\x971g\\xd6\\xbc\\x99\\x13\\xebAV\\xbct\\xe5\\xe5\\x95W\\x17C\\xafB-2\\xc8x\\x84\\xe3Y\\xa5j\\x9b\\xb6\\x85\\nw\\xea\\\\\\xabv\\r\\xf2\\xeas\\x83\\x81\\x13A\\x0c&\\xc6\\xf8\\xf5\\xcb\\xe1\\xaf\\x18\\xa0\\'\\x0ee\\xc0\\xc0,\\xb7\\xd3\\xa8\\xd1.]\\xeb\\xd4m\\xd4\\xb8T\\xe9F.\\xc8\\n\\x1d\\xa7GZ\\xf0(y\\x01\\x04\\xc62\\r\\x820\\x0f\\x0e\\xae\\xa1\\xb8\\xa3\\x1e\\x8c\\x10\\x84\\t&\\x03\\x07\\x9d\\x0fd\\xc6}D\\xcc\\x94\\xed\\xd3\\xb7R\\xe5V\\xad\\x1b\\x19/\\x89\\x16\\xfc\\xb8\\x88\\xff\\xdf\\xc5\\tC\\xb0\\xf3\\xe8\\xd3k\\xe1\\xc7i\\xd7#.\\xf9\\xb8\\xf0[\\x87\\xa0Q\\x01:\\xce\\x84Pg\\xbd\\x18;\\xec\\xc7\\xdc\\xd9\\xc5\\xca28\\xf8c \\x1b\\x94\\x80wJ\\x03\\\\4\\x00\\xcc\\x83\\x10\\x8e\\x00\\x05\\x14\\xc04\\xb0K\\x0b\\x1b\\xb0\\xe1\\x0f5[x#@\\x14\\x1fD DZ\\xd5\\xb5\\xc6Xv\\xb1A\\xd6\\x1d/bl`\\xe0\\x8b0\\xfa#\\x07%4\\xd6X\\xa3\\x861\\xfa\\xd3\\x00 \\x92\\x08\\xb0\\t\\x19#\\xae\\xa6\\xd8u\\xaf9\\xb6\\xddl=\\x81\"\\x83\\rLT@\\x89\\x1c9F)\\xe5\\x8b2<\\xf0\\x897FH\\x10\\xc1\\x96\\x89Y\\xe7Zc\\xda\\xc9\\xd6\\xdd/xX2M?hv\\x80F:3T\\xb0\\x01%SN\\x99I\\x1d\\x91\\x8c\\x81\\xc9\\x1e\\xf4\\xd3\\x05\\x8c?L\\x00\\xc6\\xaagD+-%\"L;\\xc1\\xb5\\xc8\\xfc\\xb0\\xe1\\x12\\x91\\x84\\xe0#;\\xe5\\xfc\\xfa%\\x8a\\xe6b\\x85W\\x0e\\x96,\\x00e\\x8c\"\\xacZC\\xb4\\xc3L[\\xaf\\x81\\x1b\\xb8\\x8b\\xad\\xb6#p\\xf0\\t$\\xa1\\x84+\\xf0\\x89\\xff\\x1dip\\x0c\\xc7N\\x13e\\xc3\\xaa>\\x0cm\\xc4\\xf4\\xc6\\xa8H\\x10\\xef\\xa6\\xe3\\xcf#[\\xe4!\\t\\x15w\\xb0\\xf3\\xf1\\xa7~\\x0e\\x8b\\x10+\\xe1\\xc8\\xd0O\\xb29\\xa2|\\xa8\\xca\\xaa\\xb0\\'\\x14\\x03\\n]T\\xe0z\\x05\\x9e\\xfc\\xf0\\x03\\x8dBc\\xbe\\xf2\\xb4\\x9bK\\xd9\\xf9\\xe7\\x01\\xf8\\xbb\\x89=\\xc5\\xc0}z\\xcf\\x06\\x9b@\\xc3\\x8b\\x18\\x9c@\\x89>l\\xb0q\\t\\x0fc\\xdf\\xaey\\x9cDx\\x0eA\\x00U\\xf8XF\\xf0^\\x0e/,\\xa0\\x0c\\xc8\\xf0\\xa2;\\x07P\\x13G4r\\xb0\\x01\\xbd\\xed\\xaa<\\x81;\\xf5\\x96\\xf0\\x9e}\\x01\\xdb\\x0b\\xcf\\xf3\\xf7W\\xe9\\xf2A\\x0b\\x06B\\xc3F\\xec\\x9e(E\\x1c\\xf4\\xb1\\xbe\\xa3E\\xcb}\\x94 B\\x9cf\\x80\\x06\\x0f\\\\o~\\xf5\\xeb\\xde\\xfd\\n\\xc6\\x93_P\\x81\\x7f\\xfe\\xb8\\x04\\x1b\\xa2Q\\x8a\\rx\\xe2I\\x054\\x14*\\x0e8\\xad\\x05P.\\x08(D!\\x11\\x88P(\\x07bo\\x0f\\xf43\\xdd\\x04\\xb9\\xf6\\xb8_ @\\x1d\\xfdcC&~\\x10\\xc08\\xc8!\\x84h\\xb2\\x830\\xff\\xa0\\xe5\\xbeh\\xcc\\xe0\\x88G\\xa4\\x80\\x12\\x97H\\x8e~\\xb8pW\\x05 \\x86\\x0c\\xfb\\x84?b\\xc5`\\x00Z\\xe8\\x02\\x11l\\xc0\\x0f\\x0fp\\xe2\\x8b\\x1e\\xf0\\x00?V%D\"\\xc6iZ\\xa5`\\x82\\x13!\\x80\\x811\\xc0P\\x8a\\xf6\\xa3\"\\x05\\x1f\\x17\\x0e\\x04\\xd8`\\x89\\x14H\\x87\\x1e\\xf5H\\x81\\t\\\\\\xceP\\x81\\x18b\\xfb^\\xf4(/\\xf0\\x80\\x07\\xfc\\xe8b\\x11\\x12\\xc9\\x8f\\x14\\x04\\xc0\\x8d\\xf3\\x80\\xa3\\x04\\xe5H\\xc3\\x9f\\x85c\\x05p:\\x10\\x062q\\x89N\\xfa\\xa3s\\xaa\\xe2\\x82 \\xcf\\x01\\x1eF\\x9a\\xf2\\x94\\x894\\xc5\\x0b#9\\xc5rU\\xf2.&\\x08\\x06\\xde0\\xf0\\x8e\\x07\\xc0\\x88\\x12hP\\x150\\x04i\\x05T\\xfa\\x92\\x91\\xaa\\xac\\xc2\\x1b[\\xb9\\xb5\\xb9\\xfd\\x8c\\x01\\xc1\\x80\\x11\\x1b\\x02\\x90I\\\\\\xe5\\xb2V\\xc0\\x90\\x07\\xb4\\x90\\xf0\\xcb_\\x06s\\x98qt\\xa51\\xef\"\\x08\\xf1\\xc5\\t\\x97\\x87B\\xc3\\x08\\xdc\\x00-\\nT\\xd3\\x97\\xd7\\x8c\"1\\xe5\\xe6\\xb8\\x83\\xf0\\xc2\\t\\xde\\x9c\\x128\\r%Nr\\xaa\\xc2\\x9c\\xe7<\\xa5*w\\x15\\xff\\xc9^d\\xb3\\x98\\xed4\\x88.\\x80\\x80\\xc1)\\xc9\\xe1\\x99h:\\xc38\\xcb\\x99O}6\\x01\\x92\\xc4\\xf0\\xe7$\\xb5\\x19P\\x82\\x14\\xab\\x1a\\x05\\x9d\\x12B\\xfb\\x81\\x8a\\x06 \\x83\\xa1\\r\\x05\\xe6C\\xbf`\\x8e\\x88\\xfe\\x93\\x9d\\xa9\\xdb\\xca/\\xaa\\xc1\\x0f$\\xce\\x80\\x08^\\x88\\xa9LK\\xb1Ql4 ^\\xf7\\x0c)#\\xb705\\x92\\x9at\\xa2\\x00MiO\\xea1\\x80 8\\xeb\\xa8h\\xca\\xc7\\x12\\xb2\\x00R\\x9dn!\\r\\xdfx\\x86\\x0b~\\xea)Jn\\x936u\\xb4\\x04R\\x8f\\xda\\x80%\\x0c\\xa2\\xa9!}\\xea7\\xfa\\xe0\\x023H\\xb4\\xaa\\x14\\x15*\\xd0V\\xb0\\xd1\\xad\\xa6i\\x04\\xa7\\x08\\x04\\xb4\\xd2\\xa1\\xd3Dn\\x81\\x03S \\xab\\x04\\xceJ\\xae\\xa0\\xf2\\x84\\x15\\xb1l\\xab[+\\x01\\x8cS\\x9c\\x02Zu\\xb5+^\\x95\\xe1\\x82\\xbd\\x9e\\x14u\\x7f5\\x01\\n\\x80!\\x85\\xcaV\\xa2\\x06\\x98\\x1d\\x84fge\\xa8A\\x8c \\x15,\\xd8\\x02b\\x13{\\xd7)0\\xd6\\xb1@Eid\\x81\\x80\\t@\\\\\\x83\\x05Kh\\x80lG@[\\xda\\xff>\\xc8A\\xc0`\\x81!\\x0c!\\x0ca\\xec\\xe2\\xb7\\xc0\\r\\xaep\\xc9S\\xda\\xd3\\xf2Uk\\xaa%V8\\x0c\\x00\\x8a\\x01$\\x01\\x03jH\\x81t\\xa7+]\\x16\\xb0`\\x0es\\xd0-\\x06\\xe0`\\x88\\x14\\x9c\"\\x15\\xb1\\xad\\x83x\\xc7K^\\xf1.\\xc1\\x14S\\x93\\xaaY\\x1fK<+.\\x83\\x19\\x9d@\\x008h\\x00\\x078h\\xe1\\xbe\\xf7\\xc5@6p\\xc0\\x83k\\xe0@\\x0bI \\x01\\x02V@\\x83l\\x18\\xc2\\x14[x\\x80\\x82\\x17\\xcc\\xe0\\x07\\x98\\xa2p$\\x10@\\x14\\x8f\\xcb\\xb8\\xf6>\\x8e\\x17\\x0c(\\xc4\\x15D\\xa1\\x84\\x01\\x88\\x01\\x01\\xca\\tC\\x18H\\xb0\\x02<\\xa0\\x00\\x1cI@\\xc1\\n\\x06p\\x03F\\xe4`\\x05\\xdd\\x80C\\x00\\x9a@\\xe3\\x1a\\xd38\\r8nB\\x00\\xf2\\x10\\x0fH\\xbcA\\x16\\xf7X\\'d\\xff\\xfa\\x0b\\x06\\xc0 \\x03W\\xd0\\xc4\\x0b@\\x91\\x88dT\\xa3\\x07\\xa2 D\\'n\\xa0\\x04%\\xdc\\xa0\\x13\\xc9\\xd0\\x84&\\x92q\\x031\\x8cx\\x05+\\x08\\x81\\x98\\xc7\\\\\\x852Wa\\x05\\x08P\\x06=\\xd4)d\\x0b\\x13\\xeb\\xab3\\x0c\\xd0\\xc02`\\x00\\x83B\\x14\\xc2\\x00\\x06\\x00\\x02:\\xf6\\x01\\x0ff8\\x82\\x19\\xf0\\x00\\x82\\x9d\\x91\\x0c\\n(\\x1b\\xc1\\x08\\x84H4\\x15\\x16=\\x89FO\\x82\\no\\x88\\xc2\\x1d\\xcc\\xc0\\x8e\\xb7\\xa5v\\xc8WQ\\x08/8\\xf3\\x99\\xd0L\\x844N(\\x8e\\x06\\x9c\\xc0\\x00\\x13\\xc4\\x19\\x06yFG\\x06V\\x9d\\x81}\\xf0\\x19\\x1e\\x1f\\xa0\\x83\\xacem\\x0f\\x80\\x05\\xac\\xcd)J\\xc0*v\\xcd\\xeb^\\xfb\\xfa\\xd7\\xbb6\\x86\\xb0\\x8d\\xd1\\x8ab\\x1b\\xbb\\x19\\xcd \\x05)F\\xc1l\\x028\\xfb\\xd9\\x04X\\x84\\xb4\\x8fA\\xedjS\\x1b\\x04 \\xd8A\\x02\\xb6]\\x13\\x05HC\\x1a\\xae8\\xc4!\\x00\\x00\\x00D \\xe2\\x0f\\x7fhG@\\x00\\x00;'", + "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\x95\\x94\\x93\\xfd\\xfd\\xfdvll\\x8c\\x8b\\x8a\\xe6\\xe6\\xe6z=N\\xb8\\x84\\x93\\xb2\\xb2\\xb2\\xf8\\xf8\\xf8\\x87\\x1a8\\xa3\\x9d\\x9c\\xc6\\xc6\\xc6\\x91\\x8d\\x8e\\xaa\\xaa\\xaajab\\xe4\\xe4\\xe4\\x99\\x99\\x99\\xfa\\xfa\\xfaSRQ][YyGR\\xdd\\xdd\\xdd\\x88\\x82*\\x8e\\x83\\x83\\x81{#\\xc2\\xc2\\xc2\\xe2\\xe2\\xe2qpl\\xf3\\xf3\\xf3\\xee\\xee\\xee\\xda\\xda\\xda\\x9b\\x92\\x92\\xae\\xae\\xae\\xd7\\xd7\\xd7QON\\xca\\xca\\xca}zy\\x80~z\\xd1\\xd1\\xd1\\xb8\\xb8\\xb8ysr\\xcc\\xcc\\xcd\\x86*CLLL\\xdc\\xdc\\xdc\\xb4\\xb4\\xb4\\x9f\\x9f\\x9f433\\xac\\xa4L\\x98\\x0c3\\xb8\\xa7\\xac\\xab\\xa6\\xa4\\x85\\x83\\x82\\x92\\x83\\x86???\\xce\\xce\\xcev\\'m*\\x8b\\x16\\xe9\\xda\\xa5n\\x9d\\xc6\\x8dJ\\x97\\xea\\xdd\\xabz\\x116l\\xa7d\\x1d\\x88`pJ\\xa5pe\\xa0\\x16+\\x03) \\x90\\xf3`\\t\\xdbb\\xa3i\\x93\\xb2e\\xfa\\xf6\\xa9\\\\\\xa9u\\xab\\xe2\\xcd|\\xb0R\\x05\\x00\\x10R\\xc8je\\n\\xd6\\xab\\x181h\\xe5\\xba\\xc5*\\x85\\xb7%d\\xe2i\\x02U\\xf6\\xa8Z\\xa5m\\x9b\\xc2\\x85:w\\xaa]\\xabyy\\x0f\\xff\\xac\\xe4\\xa8\\x93,T\\xc8\\x13\\xa8\\xc0e\\xcb\\x81?\\x7f\\x14b8\\x07\\xb7\\xc4\\x11\\x01\\x0e\\xd5c?\\xce^{r\\xf7\\xdc\\x97\\x85\\xa7\\x17_\\x08@\\xe0J\\x0cI\\xbc\\xb0\\xc2\\x04^\\xbc\\xf7\\x9e-1\\xac\\xc2@\\rQ\\xd0a\\x8d(\\xafY\\'\\x1bd\\xda\\xd9F\\x99w\\xbaa6`%7ha\\x11(C\\xac\\x82\\xe0\\x0b\\x9e\\x0c2\\x88\\x04\\x0e\\xfa\\x13\\x83+\\x10\\xf0\\x00\\x0e$\\xf1p\\x92\\xa1~\\xd8\\xd1&\\x19w\\xb8Y\\x06\\x1eo\\x95\\xd0p\\xc5\\x06\\xd9\\x84\\x14L\\n1\\x14\\x12\\xc4\\x15at\\x92\\x1a\\t\\xe8D\\x12\\x03jR,\\xb2\\x84\\x0e\\x99P\\xd7\\xd8u\\xb3E\\xb6\\xddm\\x95}\\xb7[f\\x95\\x00 \\x82!\\x07\\xc0\\xa3\\xc1\\x92\\xac\\xf02\\t\\x0e\\x14\\xac\\xc2\\xca,\\xad\\xa4r\\xc0<\\x10@P\\x0e\\x03c\\xdc@\\x006\\xa3X\\x07&\\x87\\xfd\\x01Yf\\x88\\x02\\xf2\\xd4\\x90\\x12\"L\\xd0\\xc4\\x1dZ\\xb8\\x90\\x82)1\\xbc\\x02K\\r\\xb5\\xc8\\x99@\\x0c\\xb0\\xa8\\xb2J\\'\\x00\\x8cc\\x86\\x0b\\xf1X\\xd2\\xc1\\'\\x1c\\x84\\xe2*\\x07\\xd8d\\xff\\x13f\\x87\\xfe\\x05i\\xa6\\x88X5\\x84\\xc4\\x00X\\x10\\x00\\xc1\\x02\\x07\\x1c\\x90B)\\x0c\\x90p@,\\x85\\xbc \\x82\\x0f\\x14\\xa8@\\xcb+\\xad\\x04\\xdb\\t\\x04.\\xb0\\x13\\x82%\\x9at \\xce\\'J!\\xfa#\\x99 \\x06\\x88f\\x009Tp\\x0e#V B\\t\\x10\\xde|\\x90N\\x17\\xab\\xec\\xf1\\x88\\rB4\\xf8\\x9e\\n\\xa6@\\x90\\n,\\xb5\\xb82,\\x1cCd\\xa0\\x01\\x01\\x99h\\xc2\\x89H\\xa4\\x88\\xe9\\xe1\\x7fB\\x9e\\x99UC\\r\\xec\\x82\\xc5\\x06c\\xd0\\xd0\\x82\\x12?\\xf0\\xa1\\x807\\xaa\\xb8\\x11\\xc4\\x17\\x13\\xd8\\xe1\\xe0-\\xad@`\\x80\\x1bh\\xd0\\x82\\n,\\x06\\xe8\\xf9KNL\\x10LJ\\xc2\\xb4*\\x1a\\xee\\x90\\x03\\x06\\x00\\x8a$\\xc0\\x0c\\x00\\x04\\x14.\\xacs\\xc9\\x13\\xc4@\\xd0\\n*{\\xd0i\\xc4{R\\xc8\\x07\\x01,S\\xbc\\xe0\\xcb\\x19\\x05\\xa8\\x10C,\\xad\\xa4@\\x03?Hh`I&\\n\\xd7\\xba\\xa8\\xb89\\x8f\\xe2\\xcf\\x1dD\\x0c\\x00\\xc0\\x06 \\xc41B\\x9f}\\xeabJ,1\\xa8P\\x00.\\xb0@\\xc0\\x0f\\x82\\x92H\\xff`\\xaf\\x03x\\x1f\\xc0\\xc0\\x12X\\xc4\\xf3\\xc0)a\\xdb\\x0c \\xce\\x0f\\x07\\x80\\xc0%\\xfe\\xf4!\\x01\\t\\x86\\xc0qB\\np\\xa4\\xe2\\xca\\xa8}\\xd6`\\x00,1\\x94\\xec\\x8a\\x1bbd1\\x88\\xc8\\xf7\\xaa2@:\\n\\x10c\\x02\\x13\\x96\\x9cR3\\xb8\\x8b;\\xfcp\\x04\\x9c\\x04B\\xcd\\x069l\\xb0\\x812\\x0b\\xfc2\\x8b\\x1fW\\x9b\"Kj}\\x1e\\x00\\xc1y~\\xe0\\xf0\\xc7\\xd2\\xef\\xd1\\xb2\\x8a\\x00<|\\xc0G\\n\\xb0\\xcb\\x9e(\\xed\\r\\xe3\\x9ak;\\xd8\\x18QE=v$\\xc3\\x0c\\x1c\\x00t\\xf2J\\x12\\x81\\xa0\\xa3\\xc2-\\xa8\\xe0\\x99\\xc2\\x00p\\xebR\\xcb+\\xb4\\xa8@\\x01\\x05\\xaft\"\\x05=\\x8b\\xe0\\xc3\\r`\\x978\\xee\\xdd\\xaaQ\\x8e\\n\\xc0(.!\\x841,\\x0b\\x06\\xc9 \\x81.\\xfc\\xf0\\x08\\xd3\\x89\\xcc\\x16\\xb8\\xa0\\x85\\x01\\x82\\xe3\\n=\\xc5M\\x15\\xac\\x88\\x81)\\x18\\xb0\\x83\\xea\\xb1A\\x0b\\x87+\\xe0\\x87j\\xe7\\xbd\\\\!\\x80\\x13/\\x98\\xc1\\x04\\xd4\\x00\\x03|\\xa4\\xa0\\x13\\xf6xA\\x18&\\x00=\\x7f\\xdcB\\x16\\x10P\\xc5\\x1e\\xffb\\xc0\\nQM\\xabO\\x9d@\\xc1\\x0e.\\xa0\\x80\\' \\x81`*d\\xd8\\x01\\xc5S\\x89vd\\xc3\\x08P0\\x84\\x1a\\xee\\xa1\\x0e\\n\\xcc\\xe2x.\\xd8\\xc0 \\x1e\\x84\\x8aN\\x94\\x02Y\\xdcp\\xdf\\xb3\\xfa\\x95\\x02v\\x9ca\\x07\\xe9\\x98\\x01\\x16*`\\t\\x9amo\\x85\\xddC`\\x027\\x11\\x07*\\xe4\\xe0\\x08\\xf7\\xd8B>\\x90\\x13\\x0bU\\xa4\\xa2\\x13\\x030D\\x01f\\xa1\\xaf\\x18)\\xc5u\\x12\\xa9\\x18)\\xa0\\xc4#\\xc4\\x90\\x84+\\xf4\\xd0A\\xb8\\xb8RpR\\x90\\x8a}L`\\r\\x0c\\xe8\\x04qR\\xa1D\\n\\xdd\\xc1\\x03\\xa78\\x18:\\x176L\\xb2\\x8d\\xab\\x017\\xb4\\xda\\x1f\\x0c\\xe1\\x05#\\xdcTe\\xa90\\xdaq\\x88\\xd8\\x0c\\x1a8\\xa1\\x0b4\\x80\\x80\\x14x\\x10\\xc0\\x14\\xc0\\x83\\x14\\x1dXi:[\\xea\\xd4\\x01iB4*\\xa2\\x85\\x08\\x840\\x01\\xaa\\xda\\xc1\\xaa\\xf1\\x99E)d\\x80\\n\\n\\xf8\\xc3\\x01*hN) `\\x86\\xff]\\x00\\x1c\\xc4@a\\xb6\\xd4\\xca\\xd4\\x85\\xda.+\\x01\\x10V\\nT\\x11\\x83I\\xd8\\xe0\\n\\x82\\x90\\xc0 \\xea\\xea\\x05V\\x02\\xd1\\x14*p\\x907W\\xb1SW\\\\\\x80\\x04\\x0c\\xf8\\x81\\x16\\xe0aNMxr\\xadMeh\\xae\\x02`\\xa9\\x14\\xff\\x84\\x10\\rAxA \\xb2@\\x85\\xb9\\x9e!S\\x9d\\xc0\\x84)p\\xc1 \\xab\\x92\\xac\\x14\\x98\\x9af-\\x0e\\x00\\x9c\\x10\\xc4\\x0cl\\n\\xbd\\xd9c{RE8X\\x93\\xb21\\xd8\\x03/\\x9c\\x14\\x08I\\\\\\x01\\x071PEp\\x0c\\xb0\\x07\\x1b\\xac`\\x10\\x7f@\\x85\\xd1ha\\x8b\\xbf\\xde\\xc2\\x14\\xa9\\xa1\\x84\\tX@\\x80\\xd8\\xcdN\\x9dm\\xcd\\xd51\\x81#\\x9cZ\\xa0\\'\\x06~\\x98\\x82\\x18^0\\xc4T\\x94b\\x00)\\x98\\xc5\\x1e\\xe6\\xa4SVP\\x00z\\xb6@\\x05?\\xbcQ\\x05%\\x90\\xa3\\x02\\x04\\xd0\\x1eKc;]Gi#\\x1b\\x15\\xb8\\x03\\rh \\x1a\\x03\\x84\\x109V\\x9a\\xc5\\r\\xcf\\x10\\x86.\\x98\\xc3\\x14\\xa6XE):\\xc1\\nt\\xf8\\xa0\\xaa\\xdeLA\\x17>0\\x86; \\xe1\\x01\\x96\\xb8/[eK\\xddv@\\x83\\x00z\\x80D\\x14. \\x80\\xa0\\xae\\xe2~\\xc8\\xf1\\x977.\\xbb\\x02I\\x88\\x80\\x06\\xd3\\xbaT\\x1bl \\x88A\\xe0\\r\\x08\\xf4HG\\x14(\\x11\\x02 \\x0b\\x99\\xc3-L \\x02\\xc4Q\\x8dD\\xfc@\\xff\\x01P\\xe8B\\x18\\xbc`]W\\x1c/\\x05+\\xb0\\x81\\x9e=!\\x89\\x17|A\\x04\\x03HE,\"1\\x89\\x04\\xa0B\\x16\\x02\\x08s\\x85\\x9e\\xa8a\\xd8:6\\xcd\\x1eV\\x02\\x106\\xe0\\x89@\\x04\\x82\\xca|\\xde\\x85\\x94J\\x91\\x05O\\\\\\xe1\\xd3\\x95\\x16\\xc4\\x19\\x1c\\xe0\\x83q\\xb8\\xc3\\x14\\x86\\\\B\\x17\\xc8:\\x06,\\xd0\\xb7\\xd1\\x8d\\x95.\\xa4\\xf7\\x12\\x00#\\xbc\\xc0\\x06}\\xb6\\xc1n\\xb3\\x90\\x85\\x15TY\\x04\\x12\\xf0\\xb5\\x08V\\xe0\\tO\\xe8P\\x02\\x0e \\xc1\\x05\\xcc`\\x06 tb\\x1c<\\xa8\\x018\\xd8`\\x02\\xaf\\xc1Zl\\xb2\\xd6\\xe3^\\xda\\xe1\\x8db{\\xfa\\xb2W\\xf0\\x04\\xb0% \\x01\\x1b\\x88 \\xdcW\\xb8\\xac\\rn-\\x08\\xb0\\x12\\x81\\x10\\xe0X\\x04\\n\\xcc\\x90\\x8e\\x0fT\\xe1\\xa8P<\\xf3\\xa3\\xb5\\xad\\x19m\\xb0#\\xdd6\\xc8B\\xb8\\x03qn\\td!\\xe0\\xc6^w\\x16\\x84\\xf0\\x02\\xdd\\x8a\\xa0\\x0b@x\\xc3\\x0f26\\x03BDa\\x0c\\x8dX\\xed)^\\x1bk\\x16\\xf2\\xbb7\\x11\\xb8\\x83y;\\xediO\\x08a\\x05\\x06\\xff\\'6\\xaf\\x03\\xd1\\xf0,\\xb4\\\\\\x029\\x00\\xc02\\xf4\\xa0\\x039\\x90\\xe1\\t\\x8d\\xb8\\xc3\\x85\\x81\\xc9ql{\\x9c\\x8a\\x11\\x00F\\xc0I\\xbe\\x82O\\xdb\\xc0\\x13zNww/\\x1b\\x86/8}\\x10f \\x04\\x19\\xc2A\\x00\\x02X\\xc3\\x03\\xf1\\xf0\\x00<\\x80\\xe9\\xda\\xe8\\xfe\\x9cH\\xda\\x10\\x87\\x08Z\\xb4\\x02\\x96\\xf79\\xd7Y\\x08\\x83\\'|\\x11\\x86\\xa6\\xfbb\\xae\\x86\\xd8\\xc0\\x00\\xf8 \\x07\\x02\\x88\\xe2\\x13\\x1d \\x05\\xe2H\\xc1\\x89\\xb4.\\xd5\\xe7yd\\'6r\\xc0rv\\x83\\x9a\\na\\xa0Bf\\xe9\\xea\\x85.\\xe4\\x00\\x05%\\xc0\\x03\\x11\\xde@\\x86\\npB,\\xa1\\x88\\x95(@\\xe2-Gg\\x9b\\x8a\\x01\\xe8\\x852\\x9a\\xc0;!PA\\xf1\\x9a\\xf5\\x81\\x1dzG\\x02(\\xf8\\xac\\x1eQx\\x830\\xe8\\x90\\x88r\\x12\\xca1\\xd8\\xe8\\x91\\xd7\\x03O\\xc5m\\xa4\\xa1\\x0fV\\xa0\\xc1\\x06\\xba\\xd0\\x85\\r\\x98!\\xf2@ \\xc2\\xc5\\x97\\xf0\\x03:0B\\x0f\\xd4\\xc8\\x83\\x06\\xd2\\xd0\\x01\\x0e\\x14\\x8aG\\xb3\\xba\\xe3\\x90;L\\xdd\\x08\\x88#\\x0fO\\xb0\\x02w\\x00\\x80\\x00\\x80zXA\\xf6O C\\x1f\\xae\\xf1\\x8dp\\xbc#\\r\\xd38\\x0428\\xd0\\x8bhdDC\\xfb\\xf9\\xbb\\xe2\\xba\\xa7\\x0cJ\\xf8\\xff\\xff\\x00\\x18\\x80\\xff7\\x13\\x07`\\x05\\x100~\\x00\\xf02\\xc1\\xc0\\x0e\\x88\\x00\\x02\\x07\\xb0\\x04up\\x02\\'\\x00\\x06JP\\x81\\x16x\\x81J\\x00\\x06\\xc5\\xb0\\x81\\x12X\\x07u\\xb0\\x0e\\xc1r\\x00\\xca\\xa0\\x0c \\x00\\x02\\x88\\xd0\\x00\\x8a\\xa0\\x08\\x98\\x10\\x0cC\\xe0\\x02p\\xf0\\x0b\\x07\\x08\\x00\\x0c\\x10\\x10\\x00;'", + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\xee\\xed\\xf8\\xf2\\xf1\\xf2\\xed\\xed\\xf5\\xe0\\xde\\xe7\\xbb\\xb9\\xbd\\xa7\\xac\\xb5\\xf5\\xf5\\xfd\\xcd\\xca\\xcb\\xef\\xee\\xf5\\xb4\\xb1\\xb2\\xed\\xed\\xed\\x98\\x9c\\xa1\\xcd\\xd1\\xd6SZc\\xa4\\xa2\\xa4d]c\\x88\\x8b\\x926ET\\xc3\\xbd\\xc3\\x92\\x91\\x93\\x04\\x07\\tglu\\xe3\\xe3\\xeb\\xe3\\xe1\\xf4v|\\x85\\x9c\\xa2\\xad\\xe1\\xda\\xdc\\x9d\\x9a\\x9d\\xd4\\xd1\\xdb\\xc4\\xc5\\xcb\\xf1\\xf1\\xf7\\xb1\\xad\\xb2\\x92\\x8e\\x926\\xaa\\xa5\\xab[`g\\x83\\x86\\x8eRMRSPT\\xa3\\xa5\\xaa+18ZV[KRZ\\xf8\\xf6\\xf6\\x8c\\x91\\x9bJEL\\xf7\\xf7\\xfdmlm\\xce\\xcd\\xd9\\xc6\\xc1\\xc5\\xf6\\xf6\\xf6Z\\\\^\\xf1\\xee\\xee\\x84\\x80\\x86\\xfa\\xfa\\xfa\\xf2\\xf1\\xfd\\xf5\\xf3\\xf5,%+\\xde\\xdd\\xde\\xed\\xeb\\xf2D@E\\xf8\\xfc\\xff\\xf8\\xf8\\xfc\\xd6\\xd3\\xe2ADJ\\xce\\xcb\\xd0\\xb1\\xad\\xad,(,\\xfc\\xfb\\xfc\\xfa\\xfa\\xfe\\xed\\xea\\xed\\xd7\\xd6\\xd7\\xe1\\xdf\\xe0\\xeb\\xea\\xf2\\xf4\\xf2\\xfarjn\\xef\\xf0\\xef\\xd7\\xda\\xdc{z}\\xf9\\xf8\\xf8\\xf4\\xf1\\xf4\\xd0\\xd0\\xd1\\xb5\\xb3\\xb9\\xf4\\xf4\\xfbts|659\\xa9\\xb3\\xc1\\xc5\\xc6\\xc7\\xbd\\xb5\\xbc\\xf6\\xf4\\xf5UTX\\xe8\\xe6\\xe4\\x88\\x83\\x86ehkcck\\xdd\\xd8\\xd6\\x1d#)LIN325\\xea\\xe8\\xf6\\xeb\\xea\\xea\\xd9\\xd9\\xd9\\xf9\\xf9\\xfc\\x95\\x95\\x99\\xe6\\xe8\\xea\\xa8\\x9b\\x9c\\xc3\\xbe\\xbf\"\"#\\xf8\\xf8\\xfa2-1\\xe7\\xe6\\xf3\\xcc\\xc7\\xd0\\xf6\\xf4\\xf7\\xf6\\xf6\\xfa\\xa0\\x9e\\xa1\\xe5\\xe5\\xe6\\xc3\\xc0\\xc2\\x13\\x1a!\\xdd\\xda\\xda\\x97\\x91\\x96\\xf8\\xf7\\xf7\\xf6\\xf5\\xf5\\xf0\\xef\\xfb\\xf2\\xf2\\xf7\\x90\\x8d\\x90\\xa7\\xa7\\xa7\\xc4\\xcb\\xd4\\x80y}\\xec\\xea\\xf5\\xe4\\xe1\\xe4\\xda\\xd7\\xd8\\xfc\\xfb\\xfa\\xf7\\xf7\\xf6ibg\\xfc\\xfc\\xfb\\xf2\\xf0\\xf9#\\x1e\"\\xc7\\xc9\\xca\\xb4\\xbc\\xc9\\xb6\\xb9\\xbc\\xf9\\xf9\\xf8\\r\\x11\\x15@9?\\xed\\xec\\xeb\\xea\\xec\\xee\\xd1\\xd3\\xd5\\xfa\\xfa\\xf9\\xdc\\xdb\\xdd\\x95\\x99\\x9c`Za\\xc3\\xbf\\xc8\\xf4\\xf4\\xf8\\'\"\\'\\xf2\\xf1\\xfaPHN37<\\xfe\\xfe\\xfd\\xfd\\xff\\xfe\\xfd\\xfd\\xfd\\xf8\\xfa\\xf9$).\\xf5\\xf5\\xf5\\xf4\\xf3\\xfd\\xf3\\xf3\\xf2/+.\\xda\\xd7\\xe6\\xd4\\xd2\\xd3\\xf7\\xf5\\xfb\\xf7\\xf4\\xf8\\xe5\\xe3\\xe3817BHPWY^\\x1d\\x1c\\x1f\\xf3\\xf5\\xf8\\xf4\\xf4\\xf3\\xd5\\xd3\\xd4\\xf9\\xf8\\xfd\\xb6\\xb6\\xb6\\xb7\\xb4\\xc4\\xbe\\xbf\\xc1\\xe2\\xe5\\xe5\\xc4\\xc2\\xc4\\xb8\\xb5\\xc1\\x99\\x99\\x99\\xc6\\xc4\\xc5\\xdf\\xe2\\xe4\\xe7\\xe4\\xe3\\'%\\'\\x86\\x9d\\xc5\\x9b\\xa8\\xbc\\xa4\\xa9\\xad\\xac\\xa8\\xa7\\xea\\xee\\xf0\\xfc\\xfd\\xfd\\xfa\\xfc\\xfb\\xfd\\xfd\\xff\\xcf\\xd6\\xe1\\x88\\x88\\x8a\\xd4\\xdc\\xe2qw~ysx\\xf2\\xf2\\xf9\\xef\\xf1\\xfaYQXi\\x84\\xab\\xf3\\xf5\\xfc\\xf5\\xf6\\xf5\\xd6\\xd0\\xc8HCF\\xbe\\xc7\\xd3\\xbe\\xc0\\xc8\\xcb\\xc8\\xd9\\xdf\\xdd\\xef\\xfa\\xf9\\xf9\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0\\xa1\\xc3\\x87\\x10#J\\\\\\x98l\\xc7\\xc4\\x8b\\x18%\\xba(\\x11(\\xa3@W\\x05\\xdb\\xccc\\xc0\\xcb\\x98G\\x89b\\xa2\\x8c\\x08\\xe0\\xd1\\x1b\\x86\\x12\\x10&,0W\\xae^\\x84\\r\\'#\\xd6\\x98\\x10\\xe6\\x01\\x10M&/\\xd2\\x12\\x13n\\xdf\\x11iPB@\\xd1\\x943\\xa2\\x97\\x03Ul\\x8dp\\xb0,\\xe7\\x012s\\xd4$h:\\x11\\xc4\\x90\\x11\\x9f>\\x90\"U\\x15\\xa3\\xa4\\x04\\xd7\\xb8^\\\\\\xd6\\x88V\\x9e\\x16\\xd2\\xaa\\xdc\\xc2x\\x07\\x05\\x1c\\xb5\\'W\\xb0\\xd8\\x8aqS\\xa9\\xb2x\\'Z3\\xd5@\\xc5\\x1fJ\\x18\\t8\\x08\\x8c\\xd1F\\x06D\\x9d\\x90\\t\\x82\\xd0\\xc1\"DcHf0\\x9e(\\xa2]!\\n*\\xc8Q\\xa0\\xd0\\x89\\x0c\\xbc\\x15\\xe2\\x1cF\\x1b1wsD#\\xb2\\xfa\\x9c0G\\x87\\x80\\x9d$\\xb5F\\x9fX\\xb2 W\\xb2\\x8452\\x14`\\xe5:\\xa2\\x05*\\x8a\\x9c\\xa0\\xf1#\\xd0\\xd8\\x1bM[&\\x8d\\xae\\x96\\x88\\t7\\\\\\x06_\\x9c`R\\x1cbgC}\\x10\\xd5\\xffZ^\\x90\\x0e\\xb7\\xdb\\xb9k\\r\\xbb\\xe2B\\x8c:\\x81\\x04:\\xfd\\xe9\\xfe\\xd0\\x9a\\x9f!\\'\\x1a4\\xa85M\\xd6A\\x11u\\xb8SM-\\x04\"C\\x8d&y\\xf0\\x01\\x05q\\xf45d\\x03\\x13\\xcc\\x84\\x00I\\x19\\x11\\xf0gBBi\\x082\\t\\x14\\xc8 RM\\x08\\xc3\\x08\\xd1\\xa0A\\x01\\xc0q@\\x112x\\xc2\\x08%\\xfaPs\\xc2|\\xff\\x18\\x81F-*\\xe8\\x93\\x10(\\x13@1\\r\\x04\\x0b,\\x81\\x886\\x07\\x05p\\x80\\x03\\xa4\\xfc@\\xc3#\\t\\xdc\\xe5\\x11\\x1d3\\x80\\x00\\x04\\x12QDAM/\\x0f\\xfcP\\xc0\\t\\x05\\x10\\x94\\xce0\\xb5Ha\\x8aA\\xc5\\x88 \\xd0\\x01*@A\\xc5\\x11\\'\\xa4E\\xd0\\x1b\\x9f\\xf42D\\x1fI\\xb0\\x90\\x84\"\\x8a$\\xd1J\\x02\\xc7L\\xe4\\x85\\x12\\x0f$b\\x8b \\x86\\x1c\\xc1\\x07\\x1f\\x86\\x08B\\x02\\t\\xc8\\x04\\xc1\\x08A\\x90@\\xd1\\x89\\x14\\x0c(D\\x0b\\r\\x8a\\x0c#\\x05\\x17\\x031\\x02\\x820\\x950#\\x88\\x10L\\x18\\xd9E0\\x80\\x01\\x8c\\xe2\\x1f\\x8eP@*21\\x8fb\\xb0\\x0b\\x0c \\xc3$V\\x80\\x90\\rTb\\x040\\x00\\x83:\\xac\\x90=\\x7fL\\x01\\x15\\x960\\x80\\x15:\\x90\\x08~\\xdc\\xe0\\x1f\\xa8\\x18\\xc3?v\\xd1\\x05\\x16\\x8c@j\\x04)@-\\x86\\x10\\x02\\x15\\xa0\\x01\\x19\\x93\\x98\\x04\\x9c\\n!\\x84!\\x0ca\\x03\\xe6\\xfb\\x07\\x16\\xff\\n1\\x0c*p\\xc0\\x17\\x97x\\x83\\x18z\\xa0\\x83b\\x98A\\x00l`E\\x16ZA\\x8e-\\x84k \\xba\\x88\\x02\\x0b>\\x91\\n\\x11\\x84\\xc2\\x0bV\\x10\\xc5?\\xfc\\xf1\\x82\\x0bX!\\x00\\x13@\\x82\\x07\\xfea\\x89\\x1d\\xb0\\x01\\x00\\x08\\x98A\"\\x86\\xa0\\n\\x83d`\\x86$0\\x02#r\\x81\\x81Zl\\x01\\r\\xd5@\\xc6\\t\\xc8P\\x08&\\xccB\\x1c\\x96p\\x00\\x1a0\\xc0\\x84\\x078\\x81\\x1b\\x99\\xf8\\x87\\x19Pq\\x07:$#\\x19?`\\x013\\xea`\\x101\\xb0@\\x18\\x80\\x08@ \\x02\\x11\\x80k\\xc8!\\x18\\xffP\\x00\\x07\\xce\\x00\\x03$\\xf4\\n\\x00;\\xd8\\x03\\x00(\\x913!HC\\t\\x07\\xe1\\x85z0`\\x84\\x17h\\x02\\x1e\\x83P\\x85&\\xb7@\\x82\\x06\\xc8OG@X\\x022\"0\\ri\\xa8ay\\xa8p\\xc3&\\xc6\\xc0\\x03\\x0f(\\xa1\\n\\xb0\\x00RAf\\xb0\\x86V\\\\\\xc2\\x18\\xc6`\\x03\\x1b\\xa6\\x10\\x801\\xa0\\x02\\x0e>\\xf0E\\t\\xfa \\x84.\\xe0@\\x00c\\x08E(@\\xf1\\x02RH\\xa3\\x0b\\x08\\x81@\\'\\x1a \\xff\\x84\\x12\\xccA\\x08\\x1fP\\x83-\\x84\\xe1\\x80[\\x8c\\xe3\\r\\xdcx\\x02\\x13*`\\xcc\\x08@\\xa1\\x15\\xa5(\\x02\\x16,\\xd0\\x83Qd\\xc2\\x0b\\xff8\\x80 `\\x81\\x93\\x82\\x94\"\\x0c\\xf1\\xc8\\x81\\x0ex \\x00\\x00\\x00@\\x00=\\xe0@\\x0e\\xbe\\xc1\\x87$$\\x81\\x0c\\x0f\\xe8\\xc7+\\xe4\\xf0\\x0c+\\xb4a\\x07\\x0eH]B\\x98\\xb0\\x04j\\x9c\"\\x12\\x0e\\xe8\\xc2\\x0f\\x801\\x84\\x19h!\\x19\\xa1\\x98\\xc2*\\x88\\x01\\x8a\\x0fq\\x8aV\\xff\\xc0\\xea\\x13\\x82\\x08C\\x13b\\xe1\\x81`d\\xd5\\x00\\x02\\x18\\x80\\x1e\\x08P\\nB8\\xa1\\x00\\x1d@\\x85\\x0e|\\xe0Y\\x1d\\xec\\x81\\xab\\xb0\\x00\\x82AfP\\x899\\xc8\\xe0\\x1f\\xe14\\x03\\x0f,q\\x01K4\\xe3\\x12J\\xf0\\x05\\x0e\\x9a\\x91\\x82E|\\xc1\\x00\\xe8\\xd5\\xc1&6\\xc0\\x82\\x16 $\\x14\\x13 \\x05\\x1fH\\xd0\\x0b\\x148`\\x04\\x95\\xa8\\xc2|j\\xe0A7\\x14\\x90\\x03z\\xf8\\xc0\\x0c\\x1c\\xc0\\x89\\x1e\\xa4`\\x00X\\xd0\\xc13\\xda \\x82,D\\x01\\x16\\xb8+H#X\\x10\\x05\\t\\x08@\\x1e\\xdbE\\x85I\\xd9\\xc8\\x8f\\x01\\xf0#\\x15\\xff\\x00@\\x1c\\x10\\x10\\x0c\\x11\\xb2C\\x0c%\\x90\\xc6\\'\\x12\\xf2\\x81xd\\x80\\x04s D\\t8\\x11\\'=,\\x8d\\x0e\\x16\\x88\\x03\\x0f\\x94\\xe1\\x06BL\\xc0\\x01\\x84P\\xc35\\xc6\\x90\\x038\\xf4@\\x00\\x02\\xe0\\x81&\\xaa0\\tm\\x12\\x84\\x15N\\x18\\x82\\x12\\xdc\\xe0\\x08\\x008\\xe2\\x17\\xca\\xb3B?,w\\x01\\x0b\\x10#\\xc4\\x98\\x08\\x04&\\xcc\\x10\\x0co \\x81\\x05\\x9cH\\xc8\\x1d6@\\x02!\\xc4\\x83\\xff\\x14\\xb9\\xf8G\\xa9&@\\x87\\'\\x9aA\\x07\\xa8\\xccC+8\\x11\\x80\\x1c\\x04A\\x0fF\\xb6\\x82?\\x02\\xb0\\n7\\x94`N\\x9b8\\x08)*Q\\x82K\\xd8\\xc3\\x18<@\\xa5,\\x07\\x10\\x87\\x10[\\x00\\x0c5\\x10\\x81\\x95\\xa7@\\x8b\\x178\\x80\\x0cNHXB\\xeaP\\x81G\\xa8\\xe1\\r\\xcb\\x08\\xc5\\'\\xc2 \\x884\\xc8\\xe1\\x1f\\xa2P\\x1e+\\x12@\\n\\x8c\\xf2 \\x0e\\xa20\\xc3\\xd6\\xf6\\xe0\\x8a)H`\\x04k\\xb8\\xacAv\\xa1\\xb6\\x0f\\xc4@\\x19:8\\xdf+v\\xb0\\x885\\x06#\\x0e\\xaf\\x08\\x851\\xb0w\\x03J(\\x8e\\x05 X\\xc8\\x13H\\xf0eZ\\xd0\\x81\\x11y\\xe8E\\x136\\x10\\rK\\xf4\\xc0\\x15t\\xb8\\x05\\x12\\xe6P\\x15\\x92\"\\x00\\x01|\\x0bF6\\xdc\\x00\\x81*\\xac!\\x1c\\t!\\x844Z\\xe0\\x0b\\x04\\x84\\xd8\\x03\\xa0\\xb0\\xc0H\\xff\\xc1\\x83\\x00,\\xa2\\r`\\x10\\xc1\\r\\xbe\\xf0\\x86 \\x90\\xa1\\t1P\\xc82*\\xe0\\x02\\x83\\xfc\\x80\\x19M\\x98\\x01\\x1cnq\\x081\\x1cb\\x04Wh\\xc4?\\x10\\xf0\\x8c\\x1e\\xbc\\x91o\\x08\\xffp\\x01\\xb0\\xafp\\xc5\\x82@\\xa2\\t>\\x93\\xc1\\x18x}\\x0b\\x0fXAy:\\xb8\\x83\\x07\\xbe`\\x0c<\\xfc\\xe3\\rJp\\x02\\x0b*\\x9e\\x10:\\xa0\\xe3\\n\\t\\x00EA\\x18Q\\x05`\\x8c \\x17\\x8cHF\\r\\x18q\\x0b\\xc2\\x8d\\xdc\\x11\\x1e\\x08\\x80\\x08t\\xb0\\x83\\x19t\\x01NbX\\xc8\\x1f\\xc8P\\x85s\\xed`\\x07\\xc7\\xe0A\\x1b\\xd6\\xa8\\x03/ha\\x0f\\xec\\x08E\\x1a\\\\\\xd0\\x0b\\x16\\x94 (\\x08I\\xc6\\x01\\xe0\\xf0\\x06\\xbc\\x0f\\xa4\\x08}\\x086\\x0c\\x14\\xc0\\x05\\x7f\\xd0A\\x04,A\\xc0\\rx@\\t-\\xc4\\x80\\x004\\x18\\x023\\x9c\\xac\\x10m\\x90\\x81\\x0c?\\x90\\x80\\x06\\xa6\\xa0\\xbc\\xa2}\\xe1\\x1f\\xa1\\xb8\\x83\\x0f\\xb2\\x10\\x04z\\xb0\\x00\\x08\\xbf\\xc9\\x08\\x01X\\x10\\x86(|\\x00\\x1b\\\\HXZ\\xe6a4.\\xc8@\\x0f%`A%J\\xf1\\x10n\\xf8i\\x04\\x9a8\\x80\\x06b\\x80\\x0bZ\\xec\\x80\\x0e\\xce\\xf0\\x86\\x12\\x80@\\x06\\x16\\x10\"\\xf5-\\xd9\\x964\\xe2\\xa1\\x06|\\x10\\x81\\x08\\x83\\xe0\\x80\\x06d\\x80\\x02\\x10\\xd0#\\x0cI\\xa0\\xfc\\x8e\\xaan3\\x84\\x07\\x94`\\x03\\x1f\\x00D\\x024\\xf1\\x83\\x11TA\\x1aN\\x10\\xbfG6\\xe14XT\\xa2\\tB \\xc4\\x0f~\\xf0W2\\x90\\x83\\x19W\\x10v\\x13\\xf1\\x07v\\xb0>/U\\x05d0\\x04\\xd2\\xc0\\x02\\x82\\xb0\\x01\\x8b\\x12\\x18y`\\x07\\xf9\\xb0\\x06\\xb0\\x00\\x0c\\x16\\x08\\x0b\\x93\\x90\\x04@\\xe08\\x8f\\x13\\x11\" &5\\xd0\\x08\\x1bQ\\x08\\x86P\\x08@@\\n\\x92\\xa0\\x00\\x02\\x01[\\'Q\\x0c\\x02\\xc1\\x08\\xdc\\x00\\x0e4\\xe0\\x0e\\xee@\\n.\\xd0\\x08Zp\\x07\\xac\\xe0\\x05\\x996\">\\xf8\\x83@\\x98\\x10\\x01\\x01\\x00;'" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The ThumbnailPhotoFileName column in the SalesLT.Product entity contains the file names of thumbnail images associated with products. The file names typically include a brief description of the product and end with a common image file extension such as .gif. The pattern in the file names suggests they are in a format that includes the product name followed by '_small', indicating they are smaller versions of the images suitable for thumbnails.", + "Name": "ThumbnailPhotoFileName", + "SampleValues": [ + "sprocket_small.gif", + "water_bottle_small.gif", + "racer02_yellow_f_small.gif", + "handpump_small.gif", + "handlebar_small.gif" + ] + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.Product entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). Each value is a 128-bit identifier typically used to uniquely identify records. The format follows the standard 8-4-4-4-12 hexadecimal representation. This ensures that each product can be distinctly identified across different systems and databases.", + "Name": "rowguid", + "SampleValues": [ + "1B486300-7E64-4C5D-A9BA-A8368E20C5A0", + "D28B3872-5173-40A4-B12F-655524386CC7", + "408435AA-15C0-41E5-981F-32A8226AF15F", + "9D458FD5-392D-4AB1-AFEF-6A5548E48858", + "12E4D5E8-79ED-4BCB-A532-6275D1A93417" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.Product entity contains timestamps indicating the date and time when a product record was last modified. The values follow a precise datetime format including the date, hours, minutes, seconds, and fractional seconds. This information is crucial for tracking changes and updates to product records over time.", + "Name": "ModifiedDate", + "SampleValues": [ + "2008-03-11 10:03:55.510000", + "2008-03-11 10:01:36.827000" + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.Product -> SalesLT.ProductModel", + "SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", + "SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.Product -> SalesLT.SalesOrderDetail", + "SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", + "SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", + "SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", + "SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" + ], + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.Product entity contains detailed information about products sold by a company. It includes specifics such as unique product identifiers, names, numbers, and descriptions related to size, weight, and color. Additionally, it tracks financial details like standard and list prices, as well as key dates for product availability and discontinuation. This entity can be used to answer questions related to product inventory, pricing, product categorization, sales periods, and historical modifications.", + "Entity": "SalesLT.Product", + "EntityName": "Product Information", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.ProductCategory", + "ForeignKeys": [ + { + "Column": "ProductCategoryID", + "ForeignColumn": "ProductCategoryID" + } + ] + }, + { + "ForeignEntity": "SalesLT.ProductModel", + "ForeignKeys": [ + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + }, + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + } + ] + }, + { + "ForeignEntity": "SalesLT.SalesOrderDetail", + "ForeignKeys": [ + { + "Column": "ProductID", + "ForeignColumn": "ProductID" + }, + { + "Column": "ProductID", + "ForeignColumn": "ProductID" + } + ] + } + ], + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.ProductCategory.json b/text_2_sql/data_dictionary/SalesLT.ProductCategory.json new file mode 100644 index 0000000..d6d0a9c --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.ProductCategory.json @@ -0,0 +1,108 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductCategoryID column in the SalesLT.ProductCategory entity contains unique identifier values for each product category. These values are integers that serve as primary keys, distinguishing different categories of products within the database. The values do not follow a specific pattern other than being unique identifiers for each category.", + "Name": "ProductCategoryID", + "SampleValues": [ + 16, + 27, + 8, + 17, + 9 + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ParentProductCategoryID column in the SalesLT.ProductCategory entity contains numeric identifiers that indicate the parent category of a given product category. Each value represents a unique product category ID that serves as the parent to one or more sub-categories, establishing a hierarchical relationship between product categories. This structure helps organize product categories into a tree-like format, providing meaningful relationships among them. The sample values 4, 3, 2, 1 suggest sequential identifiers for parent categories.", + "Name": "ParentProductCategoryID", + "SampleValues": [ + 4, + 3, + 2, + 1 + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The column contains the names of product categories in a sales inventory. The values are in plain text and typically consist of common nouns describing various types of products, such as accessories, clothing, and components. This column helps classify and organize the types of products available in the inventory.", + "Name": "Name", + "SampleValues": [ + "Gloves", + "Wheels", + "Bike Stands", + "Bottom Brackets", + "Bib-Shorts" + ] + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.ProductCategory entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). Each value is a 128-bit number that is typically represented as a sequence of hexadecimal digits separated by hyphens. These GUIDs are used to ensure the uniqueness of each record within the ProductCategory table. The format follows the standard structure for UUIDs.", + "Name": "rowguid", + "SampleValues": [ + "6D24AC07-7A84-4849-864A-865A14125BC9", + "43521287-4B0B-438E-B80E-D82D9AD7C9F0", + "FE4D46F2-C87C-48C5-A4A1-3F55712D80B1", + "09E91437-BA4F-4B1A-8215-74184FD95DB8", + "9AD3BCF0-244D-4EC4-A6A0-FB701351C6A3" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.ProductCategory entity contains timestamps indicating the last time a product category record was modified. The dates and times are represented in the format 'YYYY-MM-DD HH:MM:SS'. This column helps track changes and updates to the product categories over time. The value is typically updated whenever a change is made to a record in the ProductCategory table.", + "Name": "ModifiedDate", + "SampleValues": [ + "2002-06-01 00:00:00" + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.ProductCategory -> SalesLT.Product", + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.ProductModel", + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail", + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" + ], + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.ProductCategory entity contains information about the various product categories within a sales database. It includes details about the unique identifier for each product category, the ID of the parent product category (if applicable), the name of the category, and metadata about when the entry was last modified. This entity can answer questions related to the hierarchy and classification of products, such as identifying parent and child product categories, retrieving the names of product categories, and monitoring updates to category information.", + "Entity": "SalesLT.ProductCategory", + "EntityName": "Product Category Data", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.Product", + "ForeignKeys": [ + { + "Column": "ProductCategoryID", + "ForeignColumn": "ProductCategoryID" + } + ] + }, + { + "ForeignEntity": "SalesLT.ProductCategory", + "ForeignKeys": [ + { + "Column": "ParentProductCategoryID", + "ForeignColumn": "ProductCategoryID" + }, + { + "Column": "ParentProductCategoryID", + "ForeignColumn": "ProductCategoryID" + }, + { + "Column": "ProductCategoryID", + "ForeignColumn": "ParentProductCategoryID" + } + ] + } + ], + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.ProductDescription.json b/text_2_sql/data_dictionary/SalesLT.ProductDescription.json new file mode 100644 index 0000000..614400e --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.ProductDescription.json @@ -0,0 +1,80 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductDescriptionID column in the SalesLT.ProductDescription entity contains unique numeric identifiers for each product description. These values are integers and help in uniquely identifying and referencing specific product descriptions within the database. Each ProductDescriptionID is unique and serves as a key to distinguish one product description record from another.", + "Name": "ProductDescriptionID", + "SampleValues": [ + 1387, + 1448, + 1712, + 1479, + 1391 + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Description column in the SalesLT.ProductDescription entity contains detailed textual descriptions of products. These descriptions provide specific information about the product's features, benefits, usage, or durability. The content of the descriptions may vary in language, indicating that the descriptions are catered to a diverse customer base. The purpose of this column is to give prospective buyers a better understanding of the product to assist in their purchasing decision.", + "Name": "Description", + "SampleValues": [ + "\u062a\u0645\u0646\u0639 \u0627\u0644\u062e\u0631\u0637\u0648\u0634\u0629 \u0645\u062d\u0643\u0645\u0629 \u0627\u0644\u0625\u063a\u0644\u0627\u0642 \u0627\u0644\u0623\u0648\u0633\u0627\u062e \u0645\u0646 \u0627\u0644\u062f\u062e\u0648\u0644.", + "For true trail addicts. An extremely durable bike that will go anywhere and keep you in control on challenging terrain - without breaking your budget.", + "\u516c\u8def\u8d8a\u91ce\u4e24\u7528\u7684\u5168\u529f\u80fd\u8f66\u628a\u3002", + "\u0639\u0644\u0628 \u062e\u0641\u064a\u0641\u0629 \u0627\u0644\u0648\u0632\u0646\u060c \u0648\u0645\u0642\u0627\u0648\u0645\u0629 \u0644\u0644\u0631\u064a\u062d\u060c \u062a\u0646\u0627\u0633\u0628 \u062d\u062c\u0645 \u0627\u0644\u062c\u064a\u0628.", + "Cuissards r\u00e9sistants \u00e0 l'usure pour utilisation intensive, doubl\u00e9s \u00e0 l'int\u00e9rieur en Spandex, sans couture, peau de chamois anti-bact\u00e9rie pour un meilleur confort." + ] + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.ProductDescription entity contains globally unique identifier (GUID) values. Each value is a unique 128-bit number used to identify records in the table, ensuring there are no duplicates. The format of these values is a standard GUID format: 32 hexadecimal characters displayed in five groups separated by hyphens (8-4-4-4-12). This column is typically used for scenarios requiring unique identifiers that are unique across different databases.", + "Name": "rowguid", + "SampleValues": [ + "BAC5D6F9-8C13-4DDD-9B85-AD65F9820FD5", + "3452CDE5-DE87-4992-B75E-F5BD1982C0AF", + "F07E5B84-4CA8-4276-84A6-FC071A4C44E7", + "12C887D5-3875-4E5E-B291-5A592B061392", + "C5458DF7-44A0-47F8-8053-D252C5C6E564" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.ProductDescription entity contains timestamps indicating the most recent date and time when a product description was modified. The values follow a pattern of including both date and time components, typically using the format 'YYYY-MM-DD HH:MM:SS.sss'. This column helps track changes or updates made to product descriptions over time, which can be useful for auditing and historical data purposes.", + "Name": "ModifiedDate", + "SampleValues": [ + "2008-03-11 10:32:17.973000", + "2007-06-01 00:00:00" + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription", + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel", + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product", + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail", + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" + ], + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.ProductDescription entity contains detailed information about product descriptions within a sales system. This entity includes unique identifiers for each product description along with the description text itself. It also tracks the date and time when the product description was last modified, as well as a globally unique identifier (GUID) for each entry. This entity can be used to answer questions related to specific product descriptions, their updates, and historical modifications.", + "Entity": "SalesLT.ProductDescription", + "EntityName": "Product Descriptions", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.ProductModelProductDescription", + "ForeignKeys": [ + { + "Column": "ProductDescriptionID", + "ForeignColumn": "ProductDescriptionID" + } + ] + } + ], + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.ProductModel.json b/text_2_sql/data_dictionary/SalesLT.ProductModel.json new file mode 100644 index 0000000..90e05fb --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.ProductModel.json @@ -0,0 +1,111 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductModelID column in the SalesLT.ProductModel entity contains unique identifiers for different product models. The values in this column are integer numbers that serve as primary keys to distinguish each product model record. These IDs are used to link product models to other related data within the database. The integers do not follow a specific sequential order and are used solely for identification purposes.", + "Name": "ProductModelID", + "SampleValues": [ + 68, + 92, + 90, + 45, + 111 + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Name column in the SalesLT.ProductModel entity contains the names of various product models available. The values in this column are descriptive and often include a combination of product type and model specifications. The names can refer to different kinds of biking and cycling equipment, including components and accessories, and may vary from simple product names to more detailed descriptions.", + "Name": "Name", + "SampleValues": [ + "HL Bottom Bracket", + "Mountain Pump", + "HL Mountain Tire", + "Men's Bib-Shorts", + "ML Crankset" + ] + }, + { + "AllowedValues": null, + "DataType": "xml", + "Definition": "The CatalogDescription column in the SalesLT.ProductModel entity contains detailed text descriptions of the products listed in the catalog. This information is typically used to provide additional details and features about each product, which can be useful for marketing and sales purposes. The content in this column is stored in an XML format, allowing for a structured representation of the descriptive data. The descriptions may include product specifications, usage instructions, and benefits to potential customers.", + "Name": "CatalogDescription", + "SampleValues": null + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.ProductModel entity contains unique identifier values in the form of UUIDs (Universally Unique Identifiers). Each value is a 128-bit number used to uniquely identify a specific product model within the entity. The UUID format typically follows a pattern of 8-4-4-4-12 hexadecimal digits separated by hyphens, ensuring that each identifier is globally unique. This column is essential for maintaining the uniqueness of product models across the database.", + "Name": "rowguid", + "SampleValues": [ + "217E7475-D3F4-46FA-836A-D9E53103E71B", + "37D261A7-00CF-4880-AC1A-533B6B4365B0", + "ACA920B2-D0F9-49F3-B879-573202B08C2F", + "A7E65199-84A8-437E-AD55-360C1DF1D788", + "E3CDC5DD-27C3-4891-9D5E-0D46D1B8457F" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.ProductModel entity contains timestamps indicating the last time each record was modified. The data includes date and time down to the fraction of a second, which suggests that it is used for precise tracking of changes. The values follow the standard format of YYYY-MM-DD HH:MM:SS.SSSSSS. This column is crucial for auditing and synchronization purposes, allowing users to identify when updates occur to product model records.", + "Name": "ModifiedDate", + "SampleValues": [ + "2006-11-20 09:56:38.273000", + "2009-05-16 16:34:29.010000", + "2009-05-16 16:34:29.027000", + "2009-05-16 16:34:28.997000", + "2007-06-01 00:00:00" + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.ProductModel -> SalesLT.Product", + "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail", + "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", + "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", + "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", + "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", + "SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription" + ], + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.ProductModel entity contains information about the various product models offered by a company. It includes unique identifiers for each product model, descriptions useful for cataloging, and metadata such as modification dates. This entity is useful for questions related to product categorization, identifying specific models, updating product records, and managing product data changes over time.", + "Entity": "SalesLT.ProductModel", + "EntityName": "Product Model Information", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.Product", + "ForeignKeys": [ + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + }, + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + } + ] + }, + { + "ForeignEntity": "SalesLT.ProductModelProductDescription", + "ForeignKeys": [ + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + }, + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + }, + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + } + ] + } + ], + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.ProductModelProductDescription.json b/text_2_sql/data_dictionary/SalesLT.ProductModelProductDescription.json new file mode 100644 index 0000000..b3f1de6 --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.ProductModelProductDescription.json @@ -0,0 +1,105 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductModelID column in the SalesLT.ProductModelProductDescription entity contains numerical identifiers that represent specific product models. Each value in this column is unique and corresponds to a different product model in the database. The values are integers and do not follow a sequential pattern. This column is likely used as a foreign key to link product descriptions to their respective product models.", + "Name": "ProductModelID", + "SampleValues": [ + 110, + 121, + 79, + 109, + 13 + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductDescriptionID column in the SalesLT.ProductModelProductDescription entity contains unique identifier values for product descriptions. Each value in this column is an integer and serves as a reference to a specific product description within the database. The values are numeric and do not follow a specific sequence or pattern. This column is used to link product models to their respective descriptions.", + "Name": "ProductDescriptionID", + "SampleValues": [ + 692, + 1576, + 1654, + 1401, + 886 + ] + }, + { + "AllowedValues": null, + "DataType": "nchar", + "Definition": "The Culture column in the SalesLT.ProductModelProductDescription entity contains language and region codes that represent the culture or locale for product descriptions. The values are commonly in the format of ISO 639-1 language codes, sometimes combined with optional ISO 3166-1 alpha-2 region codes, such as 'en' for English, 'fr' for French, and 'zh-cht' for Traditional Chinese. These codes are used to determine the language and regional settings for displaying product information to users.", + "Name": "Culture", + "SampleValues": [ + "zh-cht", + "th ", + "en ", + "he ", + "fr " + ] + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.ProductModelProductDescription entity contains globally unique identifiers (GUIDs). Each value in this column is a unique 128-bit number expressed in the standard GUID format, consisting of 32 hexadecimal digits, displayed in five groups separated by hyphens. These GUIDs ensure that each row within the table can be uniquely identified, even across different databases.", + "Name": "rowguid", + "SampleValues": [ + "45E6E0A5-40C9-4E1B-8915-59F4DF737BF5", + "AAB93E95-9ECC-4C6B-8C8C-A1B71D35355C", + "A1DF627D-388D-4129-A9F7-ED3D6AC7F9AE", + "E617F14F-4954-485E-8AE2-F9503B8292C0", + "A1171E59-E086-4E69-9B82-0C523AF205B0" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.ProductModelProductDescription entity contains date and time values indicating when the record was last modified. The values are in the format 'YYYY-MM-DD HH:MM:SS'. This column helps in tracking changes or updates made to each record, ensuring data integrity and maintaining a historical record of modifications.", + "Name": "ModifiedDate", + "SampleValues": [ + "2007-06-01 00:00:00" + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" + ], + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.ProductModelProductDescription entity represents the relationship between product models and their respective descriptions within the database. It contains information that links a product model to its description and includes cultural context for localization purposes. This entity is useful for answering questions related to the detailed descriptions of specific product models in different languages or cultures, and for tracking modifications to these descriptions over time.", + "Entity": "SalesLT.ProductModelProductDescription", + "EntityName": "Product Model and Description Information", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.ProductDescription", + "ForeignKeys": [ + { + "Column": "ProductDescriptionID", + "ForeignColumn": "ProductDescriptionID" + } + ] + }, + { + "ForeignEntity": "SalesLT.ProductModel", + "ForeignKeys": [ + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + }, + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + } + ] + } + ], + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.SalesOrderDetail.json b/text_2_sql/data_dictionary/SalesLT.SalesOrderDetail.json new file mode 100644 index 0000000..f8e391c --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.SalesOrderDetail.json @@ -0,0 +1,157 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The SalesOrderID column in the SalesLT.SalesOrderDetail entity contains unique identifiers for each sales order. The values in this column are integer numbers that follow a sequential pattern, indicating they may be auto-incremented. It is used to link each sales order detail to its corresponding sales order record in the database. This column is essential for queries that need to filter or join sales order details based on specific sales orders.", + "Name": "SalesOrderID", + "SampleValues": [ + 71796, + 71923, + 71783, + 71863, + 71920 + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The SalesOrderDetailID column in the SalesLT.SalesOrderDetail entity contains unique identifier values for each sales order detail record. These values are numeric and incrementally assigned, ensuring that each sales order detail can be distinctly identified. The column serves as a primary key within the SalesOrderDetail table.", + "Name": "SalesOrderDetailID", + "SampleValues": [ + 110712, + 111455, + 110669, + 112996, + 113270 + ] + }, + { + "AllowedValues": null, + "DataType": "smallint", + "Definition": "The OrderQty column in the SalesLT.SalesOrderDetail entity contains numerical values representing the quantity of each item ordered in a sales transaction. These values are integers indicating how many units of a particular product were purchased. The column helps in assessing the volume of sales per order line item. Common values are positive whole numbers.", + "Name": "OrderQty", + "SampleValues": [ + 3, + 8, + 11, + 10, + 13 + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductID column in the SalesLT.SalesOrderDetail entity contains unique numerical identifiers for products involved in sales orders. The values in this column are integers that correlate to specific products within the product catalog. Each ProductID is linked to detailed product information, ensuring accurate tracking and management of sales transactions.", + "Name": "ProductID", + "SampleValues": [ + 994, + 809, + 886, + 951, + 793 + ] + }, + { + "AllowedValues": null, + "DataType": "money", + "Definition": "The UnitPrice column in the SalesLT.SalesOrderDetail entity contains the price of individual items sold in a sales transaction. The values are represented as monetary amounts with up to four decimal places, indicating precision in pricing. These unit prices likely reflect the sale price of products before any applicable discounts or taxes are applied.", + "Name": "UnitPrice", + "SampleValues": [ + "112.9980", + "29.9940", + "461.6940", + "40.5942", + "323.9940" + ] + }, + { + "AllowedValues": null, + "DataType": "money", + "Definition": "The UnitPriceDiscount column in the SalesLT.SalesOrderDetail entity represents the discount applied to the unit price of items in a sales order. The values are decimal numbers indicating the fraction of the discount; for example, a value of 0.4000 indicates a 40% discount, 0.1000 indicates a 10% discount, and so on. The values range from 0.0000 (no discount) to 1.0000 (100% discount). This column helps in calculating the discounted price for each item in the sales order.", + "Name": "UnitPriceDiscount", + "SampleValues": [ + "0.4000", + "0.1000", + "0.0500", + "0.0200", + "0.0000" + ] + }, + { + "AllowedValues": null, + "DataType": "numeric", + "Definition": "The LineTotal column in the SalesLT.SalesOrderDetail entity contains the total price for each sales order line item. The values are numeric and represent the monetary amount in the currency used for the sale. This column captures the final cost after any discounts and adjustments have been applied to the individual product within the sales order. The values typically have several decimal places indicating precise currency amounts.", + "Name": "LineTotal", + "SampleValues": [ + "238.659792", + "1943.964000", + "809.760000", + "135.597600", + "404.664000" + ] + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.SalesOrderDetail entity contains unique identifier values for each sales order detail row. The values in this column are in the format of a GUID (Globally Unique Identifier), which is a 128-bit number used to uniquely identify data in a database. Each value is unique and follows a standard format consisting of alphanumeric characters and hyphens. This column ensures that each row can be distinctly identified in a large and distributed data environment.", + "Name": "rowguid", + "SampleValues": [ + "A6E8D782-457A-413E-8ED9-ED74F8353CD9", + "9D987E75-E96D-4903-BE36-0CE579A6F47B", + "174A0011-0CD4-44CE-952B-CEA83042A4C9", + "D9D2A6AD-347A-4C99-85A0-F6F037A3A683", + "A96ADF3D-3F0E-439F-AD3C-23846C5F51EC" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.SalesOrderDetail entity contains timestamp values indicating the date and time when a particular sales order detail record was last modified. The values follow the standard date-time format of 'YYYY-MM-DD HH:MM:SS'. This column is typically used for tracking changes, performing audits, or identifying when the latest updates were made to the sales order details.", + "Name": "ModifiedDate", + "SampleValues": [ + "2008-06-01 00:00:00" + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.SalesOrderDetail -> SalesLT.Product", + "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel", + "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", + "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", + "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", + "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", + "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" + ], + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.SalesOrderDetail entity contains detailed information about individual sales order items. It includes data on the quantity of products ordered, the unit price, any discounts applied, and the total price for each line item within a sales order. This entity is useful for answering questions related to the specifics of a sales order, such as the breakdown of order quantities, pricing details, and discount information for individual products in each order. It also provides unique identifiers for sales orders and line items, along with modification timestamps for tracking changes.", + "Entity": "SalesLT.SalesOrderDetail", + "EntityName": "Sales Order Details", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.Product", + "ForeignKeys": [ + { + "Column": "ProductID", + "ForeignColumn": "ProductID" + } + ] + }, + { + "ForeignEntity": "SalesLT.SalesOrderHeader", + "ForeignKeys": [ + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + }, + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + } + ] + } + ], + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.SalesOrderHeader.json b/text_2_sql/data_dictionary/SalesLT.SalesOrderHeader.json new file mode 100644 index 0000000..aed0bc6 --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.SalesOrderHeader.json @@ -0,0 +1,307 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The SalesOrderID column in the SalesLT.SalesOrderHeader entity contains unique identifiers for each sales order. The values in this column are numeric and each value corresponds to a specific sales transaction. The column ensures that each sales order can be uniquely identified and referenced throughout the database.", + "Name": "SalesOrderID", + "SampleValues": [ + 71938, + 71832, + 71935, + 71917, + 71776 + ] + }, + { + "AllowedValues": null, + "DataType": "tinyint", + "Definition": "The RevisionNumber column in the SalesLT.SalesOrderHeader entity contains integer values representing the number of times a sales order has been revised. This column tracks the revision history of each sales order, allowing for version control and ensuring that changes are recorded accurately. The values are typically small integers, starting from 0 for the initial entry and incrementing with each modification to the order.", + "Name": "RevisionNumber", + "SampleValues": [ + 2 + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The OrderDate column in the SalesLT.SalesOrderHeader entity contains timestamps representing the date and time when the sales order was placed. The values follow the standard datetime format 'YYYY-MM-DD HH:MM:SS'. This column is useful for filtering sales orders based on their creation date and for generating time-based reports.", + "Name": "OrderDate", + "SampleValues": [ + "2008-06-01 00:00:00" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The DueDate column in the SalesLT.SalesOrderHeader entity contains dates and times indicating when the sales order is due to be fulfilled. The values follow the format YYYY-MM-DD HH:MM:SS, representing the precise due date and time for each order. This column is crucial for tracking and managing the delivery schedule of sales orders.", + "Name": "DueDate", + "SampleValues": [ + "2008-06-13 00:00:00" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ShipDate column in the SalesLT.SalesOrderHeader entity contains the dates and times when sales orders were shipped. The values in this column follow the format of 'YYYY-MM-DD HH:MI:SS', representing the year, month, day, hour, minute, and second. This timestamp indicates the precise moment the shipment occurred, allowing for tracking and analysis of shipping performance and timelines.", + "Name": "ShipDate", + "SampleValues": [ + "2008-06-08 00:00:00" + ] + }, + { + "AllowedValues": null, + "DataType": "tinyint", + "Definition": "The Status column in the SalesLT.SalesOrderHeader entity contains numeric codes representing the current status of a sales order. This column typically uses a specific range of integers, where each unique integer corresponds to a different status category within the sales order process. The status helps in identifying the stage or condition of an order, such as pending, completed, or cancelled. The numeric codes must be understood in context with the predefined status categories in the system.", + "Name": "Status", + "SampleValues": [ + 5 + ] + }, + { + "AllowedValues": null, + "DataType": "bit", + "Definition": "The OnlineOrderFlag column in the SalesLT.SalesOrderHeader entity indicates whether an order was placed online or through another channel. The values are stored as boolean values, where 'False' signifies the order was not placed online. The purpose of this column is to differentiate between online and offline order channels for sales analysis and reporting.", + "Name": "OnlineOrderFlag", + "SampleValues": [ + false + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The SalesOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique identifiers for sales orders. The values follow a specific format that includes a prefix 'SO' followed by a sequence of numbers. This column is essential for tracking and referencing individual sales orders within the sales system. The format ensures that each sales order is distinct and can be easily identified.", + "Name": "SalesOrderNumber", + "SampleValues": [ + "SO71796", + "SO71846", + "SO71935", + "SO71946", + "SO71863" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The PurchaseOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique identifiers for each purchase order associated with a sales order. The values in this column are alphanumeric strings that typically start with 'PO' followed by a series of digits. These purchase order numbers are likely used to track and reference individual purchase transactions within the sales system.", + "Name": "PurchaseOrderNumber", + "SampleValues": [ + "PO10353140756", + "PO5539125166", + "PO2697119362", + "PO16153112278", + "PO2378131604" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The AccountNumber column in the SalesLT.SalesOrderHeader entity contains account numbers in a specific numeric format. The pattern observed in the sample values suggests a format of two digits, followed by a hyphen, four digits, another hyphen, and a final set of six digits. This column likely represents a structured internal identifier used to track sales orders within the system. Each AccountNumber is unique and essential for managing and referencing sales transactions accurately.", + "Name": "AccountNumber", + "SampleValues": [ + "10-4020-000052", + "10-4020-000466", + "10-4020-000106", + "10-4020-000160", + "10-4020-000187" + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The CustomerID column in the SalesLT.SalesOrderHeader entity contains unique numeric identifiers assigned to each customer. These IDs are used to link sales orders to the corresponding customer in the database. The values in this column are integers and do not follow a recognizable pattern other than being distinct for each customer.", + "Name": "CustomerID", + "SampleValues": [ + 29877, + 29741, + 29847, + 30072, + 29736 + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ShipToAddressID column in the SalesLT.SalesOrderHeader entity contains numeric identifiers that correspond to specific ship-to addresses for sales orders. The values are unique integers representing the ID of each address where the order is to be shipped. These ID values are likely foreign keys that reference an address table, ensuring that each sales order is associated with a specific delivery location.", + "Name": "ShipToAddressID", + "SampleValues": [ + 999, + 637, + 993, + 1034, + 649 + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The BillToAddressID column in the SalesLT.SalesOrderHeader entity contains integer values that serve as unique identifiers for the billing addresses associated with sales orders. Each number corresponds to a specific billing address in the database. The values in this column are used to link sales orders to the addresses where the bill should be sent. The sample values are all integers, indicating a numerical identifier system.", + "Name": "BillToAddressID", + "SampleValues": [ + 1034, + 992, + 662, + 1086, + 1020 + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The column \"ShipMethod\" in the SalesLT.SalesOrderHeader entity contains shipping method names used for processing orders. The values in this column typically describe the type of service used to transport goods, such as specific courier or freight services. These shipping method names often include numerical identifiers, which may indicate the priority or version of the service. The values are descriptive text strings and could vary in format and length depending on the shipping service providers.", + "Name": "ShipMethod", + "SampleValues": [ + "CARGO TRANSPORT 5" + ] + }, + { + "AllowedValues": null, + "DataType": "varchar", + "Definition": "The CreditCardApprovalCode column in the SalesLT.SalesOrderHeader entity contains the approval code received from the credit card company after a purchase is made. This column stores alphanumeric strings that represent the authorization of the credit card transaction. It is typically used to verify that the transaction has been approved and may be referenced for reconciliations and audits. The data in this column is essential for tracking and validating credit card payments.", + "Name": "CreditCardApprovalCode", + "SampleValues": [] + }, + { + "AllowedValues": null, + "DataType": "money", + "Definition": "The SubTotal column in the SalesLT.SalesOrderHeader entity contains the numerical subtotal amounts for sales orders before any taxes or additional charges are applied. The values are represented as floating-point numbers with several decimal places, indicating precise financial figures. This column helps in understanding the initial cost of a sales order based on the individual items included in the order.", + "Name": "SubTotal", + "SampleValues": [ + "12685.8899", + "602.1946", + "38418.6895", + "108561.8317", + "88812.8625" + ] + }, + { + "AllowedValues": null, + "DataType": "money", + "Definition": "The TaxAmt column in the SalesLT.SalesOrderHeader entity contains the tax amount applied to sales orders. The values in this column are represented as decimal numbers, indicating the precise amount of tax calculated for each order. Each value corresponds to the total tax calculated based on the order's items and applicable tax rates. This column is crucial for financial reporting and accounting purposes to ensure accurate tax calculations for sales transactions.", + "Name": "TaxAmt", + "SampleValues": [ + "3.1163", + "196.3012", + "6242.3752", + "7862.2953", + "5924.7046" + ] + }, + { + "AllowedValues": null, + "DataType": "money", + "Definition": "The Freight column in the SalesLT.SalesOrderHeader entity contains numerical values representing the shipping cost associated with each sales order. The values are expressed as floating-point numbers, indicating the monetary amount spent on freight. The values can vary widely and are typically calculated based on factors such as shipment weight, distance, and carrier rates. This column is important for determining the logistical expenses incurred in fulfilling sales orders.", + "Name": "Freight", + "SampleValues": [ + "345.5927", + "2220.3216", + "22.0087", + "6.1685", + "15.0549" + ] + }, + { + "AllowedValues": null, + "DataType": "money", + "Definition": "The TotalDue column in the SalesLT.SalesOrderHeader entity contains the total monetary amount due for a sales order. The values are represented as decimal numbers and include currency amounts calculated to four decimal places. This column captures the comprehensive total, possibly including subtotals, taxes, and shipping costs, for each sales transaction.", + "Name": "TotalDue", + "SampleValues": [ + "7330.8972", + "45.1995", + "117.7276", + "972.7850", + "3673.3249" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Comment column in the SalesLT.SalesOrderHeader entity stores any additional notes or remarks related to a specific sales order. This could include special instructions, delivery preferences, or any other relevant information provided by the customer or sales representative. The data in this column is generally free-form text and is optional, meaning it may not be populated for every sales order. This column helps provide context and additional details that are not captured by other structured data fields in the sales order record.", + "Name": "Comment", + "SampleValues": [] + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.SalesOrderHeader entity contains unique identifier values in the GUID format (Globally Unique Identifier). These values are used to uniquely identify each row in the table and ensure there are no duplicates. The GUIDs are in the standard 8-4-4-4-12 hexadecimal digit format, which is typical for unique identifiers in databases. This column is likely used for indexing or ensuring data integrity in the sales order records.", + "Name": "rowguid", + "SampleValues": [ + "6228C9CB-1CAB-4E32-98CA-D0DAE5FE563E", + "3ED03B56-A4BF-4872-9471-BC6C7893EAB7", + "ADDB8620-432A-456E-8470-1BEDD4BC3457", + "10E3129D-657F-46F9-86F5-CEDD79B1901C", + "F9899F3F-B4B6-4756-B013-96C16BE20427" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.SalesOrderHeader entity contains the date and time when the record was last updated. The values are stored in the format 'YYYY-MM-DD HH:MM:SS', which represents the year, month, day, hour, minute, and second respectively. This column is used to track changes and updates to sales order records.", + "Name": "ModifiedDate", + "SampleValues": [ + "2008-06-08 00:00:00" + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail", + "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product", + "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel", + "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", + "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.SalesOrderHeader -> SalesLT.Address", + "SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", + "SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" + ], + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.SalesOrderHeader entity contains information on individual sales orders. It captures details such as the order dates, shipping dates, order status, customer identification, and the financial aspects of the order including subtotal, tax, and total amount due. This entity is useful for answering questions related to the overall order management process, tracking the status and dates of orders, understanding customer purchasing behavior, and analyzing sales performance and revenue.", + "Entity": "SalesLT.SalesOrderHeader", + "EntityName": "Sales Order Information", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.SalesOrderDetail", + "ForeignKeys": [ + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + }, + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + } + ] + }, + { + "ForeignEntity": "SalesLT.Address", + "ForeignKeys": [ + { + "Column": "BillToAddressID", + "ForeignColumn": "AddressID" + }, + { + "Column": "BillToAddressID", + "ForeignColumn": "AddressID" + }, + { + "Column": "ShipToAddressID", + "ForeignColumn": "AddressID" + } + ] + }, + { + "ForeignEntity": "SalesLT.Customer", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + }, + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ] + } + ], + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.vGetAllCategories.json b/text_2_sql/data_dictionary/SalesLT.vGetAllCategories.json new file mode 100644 index 0000000..d115d04 --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.vGetAllCategories.json @@ -0,0 +1,49 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The ParentProductCategoryName column in the SalesLT.vGetAllCategories entity contains the names of the top-level product categories. Each value represents a broad category under which multiple subcategories and products are grouped. Examples of these top-level categories include Components, Clothing, Bikes, and Accessories. This column helps in identifying and organizing products based on their primary category.", + "Name": "ParentProductCategoryName", + "SampleValues": [ + "Components", + "Clothing", + "Bikes", + "Accessories" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The ProductCategoryName column in the SalesLT.vGetAllCategories entity contains a list of names for different product categories. These names represent various types of products, such as cycling gear and accessories. Each value in this column is a descriptive name that helps categorize and organize products within the database.", + "Name": "ProductCategoryName", + "SampleValues": [ + "Panniers", + "Jerseys", + "Cranksets", + "Fenders", + "Caps" + ] + }, + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductCategoryID column in the SalesLT.vGetAllCategories entity contains unique identifier numbers for different product categories. The values are integers that represent specific categories within the product database. The column is used to categorize products into distinct groups for organizational and reporting purposes. Each number corresponds to a specific product category.", + "Name": "ProductCategoryID", + "SampleValues": [ + 35, + 12, + 11, + 20, + 9 + ] + } + ], + "CompleteEntityRelationshipsGraph": null, + "Database": "AdventureWorksLT", + "Definition": "SalesLT.vGetAllCategories is an entity that provides a hierarchical view of product categories, showing both parent and child categories along with their respective names and unique identifiers. This entity is useful for understanding the structure and relationships between different product categories within a catalog. It can be used to answer questions related to the organization of product categories, such as finding all subcategories under a specific parent category or determining the parent category of a given product category.", + "Entity": "SalesLT.vGetAllCategories", + "EntityName": "Product Categories Overview", + "EntityRelationships": null, + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.vProductAndDescription.json b/text_2_sql/data_dictionary/SalesLT.vProductAndDescription.json new file mode 100644 index 0000000..6eb049a --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.vProductAndDescription.json @@ -0,0 +1,76 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductID column in the SalesLT.vProductAndDescription entity contains unique numerical identifiers for products. These identifiers are integers and each number corresponds to a specific product in the product catalog. The values are used to distinguish between different products and are likely used as primary keys to facilitate database operations related to product data.", + "Name": "ProductID", + "SampleValues": [ + 808, + 988, + 872, + 773, + 948 + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Name column in the SalesLT.vProductAndDescription entity contains the names of various products. These product names often include descriptors such as size, color, and specification details. The values in this column are typically formatted as descriptive text strings, indicating product type and other attributes such as size (e.g., S, L, 54) and color (e.g., Blue). The information in this column can be used to identify and differentiate various products in the inventory.", + "Name": "Name", + "SampleValues": [ + "Racing Socks, L", + "HL Touring Frame - Blue, 54", + "LL Mountain Tire", + "HL Mountain Rear Wheel", + "Half-Finger Gloves, S" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The ProductModel column in the SalesLT.vProductAndDescription entity contains the names of various product models. The values are descriptive names indicating the type and purpose of the products, such as cycling equipment and clothing. The product model names often include keywords that describe the primary use, features, or target users of the products. These names help in identifying and differentiating between different product models within the catalog.", + "Name": "ProductModel", + "SampleValues": [ + "Mountain Bottle Cage", + "HL Touring Frame", + "Half-Finger Gloves", + "Classic Vest", + "ML Headset" + ] + }, + { + "AllowedValues": null, + "DataType": "nchar", + "Definition": "The Culture column in the SalesLT.vProductAndDescription entity contains culture codes that specify the language and regional formatting for product descriptions. The values are generally represented by a two-letter or a combination of letters and hyphen codes, denoting different languages and cultural contexts, such as 'en' for English, 'ar' for Arabic, 'fr' for French, 'zh-cht' for Traditional Chinese, and 'he' for Hebrew. These culture codes are used to ensure localized and culturally appropriate product information.", + "Name": "Culture", + "SampleValues": [ + "en ", + "ar ", + "fr ", + "zh-cht", + "he " + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Description column in the SalesLT.vProductAndDescription entity contains detailed product descriptions written in various languages. These descriptions provide specific features, benefits, and characteristics of the products, often highlighting unique aspects such as material, design, functionality, and advantages. The descriptions are intended to assist customers in understanding the products better and making informed purchasing decisions. The multi-language nature of the entries suggests a diverse international market for the products.", + "Name": "Description", + "SampleValues": [ + "\u771f\u6b63\u7684\u591a\u9879\u8fd0\u52a8\u81ea\u884c\u8f66\uff0c\u9a91\u4e58\u81ea\u5982\uff0c\u8bbe\u8ba1\u65b0\u9896\u3002\u7b26\u5408\u7a7a\u6c14\u52a8\u529b\u5b66\u7684\u8bbe\u8ba1\u7ed9\u60a8\u5e26\u6765\u4e13\u4e1a\u8f66\u624b\u7684\u4f53\u9a8c\uff0c\u6781\u4f73\u7684\u4f20\u52a8\u88c5\u7f6e\u53ef\u4ee5\u8f7b\u6613\u5f81\u670d\u9661\u5ced\u7684\u8def\u9762\u3002", + "Strong rear wheel with double-walled rim.", + "Tr\u00e8s pratique. Tient dans la poche. Corps en aluminium. 11,2\u00a0bars.", + "Carries 4 bikes securely; steel construction, fits 2\" receiver hitch.", + "\u0e40\u0e1a\u0e32\u0e30\u0e19\u0e31\u0e48\u0e07\u0e2b\u0e38\u0e49\u0e21\u0e1e\u0e34\u0e40\u0e28\u0e29\u0e0a\u0e48\u0e27\u0e22\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e02\u0e35\u0e48\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e2a\u0e1a\u0e32\u0e22\u0e15\u0e25\u0e2d\u0e14\u0e17\u0e31\u0e49\u0e07\u0e27\u0e31\u0e19 \u0e15\u0e30\u0e41\u0e01\u0e23\u0e07\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a\u0e43\u0e2b\u0e21\u0e48 \u0e21\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e40\u0e1f\u0e37\u0e2d\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e15\u0e30\u0e01\u0e23\u0e49\u0e32\u0e41\u0e25\u0e30\u0e01\u0e23\u0e30\u0e40\u0e1b\u0e4b\u0e32 \u0e02\u0e31\u0e1a\u0e02\u0e35\u0e48\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e21\u0e31\u0e48\u0e19\u0e04\u0e07 \u0e41\u0e21\u0e49\u0e02\u0e13\u0e30\u0e1a\u0e23\u0e23\u0e17\u0e38\u0e01\u0e02\u0e2d\u0e07" + ] + } + ], + "CompleteEntityRelationshipsGraph": null, + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.vProductAndDescription entity provides a comprehensive view that combines product information with their descriptions across different cultures. It includes data on the product ID, name, model, culture code, and description. This entity is useful for answering questions related to product details, multilingual product descriptions, and cultural variations of product descriptions. It is particularly helpful for businesses looking to understand and manage their product offerings in various cultural contexts.", + "Entity": "SalesLT.vProductAndDescription", + "EntityName": "Product and Description Details", + "EntityRelationships": null, + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/SalesLT.vProductModelCatalogDescription.json b/text_2_sql/data_dictionary/SalesLT.vProductModelCatalogDescription.json new file mode 100644 index 0000000..1fcbe6e --- /dev/null +++ b/text_2_sql/data_dictionary/SalesLT.vProductModelCatalogDescription.json @@ -0,0 +1,292 @@ +{ + "Columns": [ + { + "AllowedValues": null, + "DataType": "int", + "Definition": "The ProductModelID column in the SalesLT.vProductModelCatalogDescription entity contains integer values that serve as unique identifiers for different product models. Each number corresponds to a specific product model in the catalog, linking products to their respective descriptions and details. The values appear to be sequential or arbitrarily assigned numerical IDs.", + "Name": "ProductModelID", + "SampleValues": [ + 34, + 28, + 23, + 19, + 25 + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Name column in the SalesLT.vProductModelCatalogDescription entity contains the names of various product models. These names typically follow a pattern where they include a product category or type, followed by a numeric value. The product categories may include terms like 'Road', 'Touring', and 'Mountain', which describe the type of product, while the numeric value likely indicates the model or series number within that category. This pattern helps in identifying and distinguishing different models in the catalog.", + "Name": "Name", + "SampleValues": [ + "Road-450", + "Touring-1000", + "Mountain-500", + "Road-150", + "Mountain-100" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Summary column in the SalesLT.vProductModelCatalogDescription entity contains brief descriptions of various bicycle models. These descriptions highlight key features, benefits, and design elements of the bikes, such as performance, comfort, aerodynamics, and suitability for different types of riding conditions. The text is meant to provide potential customers with a quick overview of what to expect from each bike model. The descriptions often use marketing language to emphasize the unique selling points of each product.", + "Name": "Summary", + "SampleValues": [ + "A true multi-sport bike that offers streamlined riding and a revolutionary design. Aerodynamic design lets you ride with the pros, and the gearing will conquer hilly roads. ", + "Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame,super-smooth front suspension, and traction for all terrain. ", + "The plush custom saddle keeps you riding all day, and there's plenty of space to add panniers and bike bags to the newly-redesigned carrier.This bike has great stability when fully-loaded. ", + "Suitable for any type of riding, on or off-road.Fits any budget. Smooth-shifting with a comfortable ride. ", + "Travel in style and comfort. Designed for maximum comfort and safety.Wide gear range takes on all hills. High-tech aluminum alloy construction provides durability without added weight. " + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Manufacturer column in the SalesLT.vProductModelCatalogDescription entity contains the name of the manufacturer responsible for producing the products. It stores textual data representing the company name that manufactures the products listed in the catalog. This column typically includes the brand or corporate names of the product manufacturers.", + "Name": "Manufacturer", + "SampleValues": [ + "AdventureWorks" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Copyright column in the SalesLT.vProductModelCatalogDescription entity contains the year in which the copyright for a product model catalog description was established. The values are typically formatted as four-digit years, such as '2002'. This column helps to identify the year associated with the copyright information for the catalog description, which is important for legal and documentation purposes.", + "Name": "Copyright", + "SampleValues": [ + "2002" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The ProductURL column in the SalesLT.vProductModelCatalogDescription entity contains URLs pointing to product details on the Adventure Works website. These URLs are prefixed with \"HTTP://www.Adventure-works.com\" and follow the standard URL format. The column is used to provide web links where customers can find more information about various products offered by Adventure Works.", + "Name": "ProductURL", + "SampleValues": [ + "HTTP://www.Adventure-works.com" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The WarrantyPeriod column in the SalesLT.vProductModelCatalogDescription entity contains the duration of the warranty offered for a product. The values in this column are expressed in terms of years and typically include a numeric value followed by the word 'year' or 'years'. The data represents the length of time for which the warranty is valid from the date of purchase.", + "Name": "WarrantyPeriod", + "SampleValues": [ + "4 years", + "3 years", + "1 year" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The WarrantyDescription column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the warranty coverage provided for the product models. The descriptions typically include information about the type of warranty, such as parts and labor coverage. The values in this column are detailed and may vary depending on the specific warranty terms offered for each product model. This column helps customers understand what aspects of the product are covered under warranty and the extent of the coverage.", + "Name": "WarrantyDescription", + "SampleValues": [ + "parts and labor" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The NoOfYears column in the SalesLT.vProductModelCatalogDescription entity contains information about the duration in years for which a particular product model is valid or has been in service. The values follow a consistent format, indicating the length of time in numerical form followed by the word 'years'. This column helps in identifying the age or valid period of product models in a straightforward and standardized manner.", + "Name": "NoOfYears", + "SampleValues": [ + "7 years", + "5 years", + "3 years", + "10 years" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The MaintenanceDescription column in the SalesLT.vProductModelCatalogDescription entity contains text descriptions related to maintenance availability for products. The descriptions typically inform customers about the availability of maintenance contracts or services and where they can be obtained, such as through dealers or AdventureWorks retail stores. The content of this column is usually a sentence or two in length, detailing the options for purchasing maintenance services.", + "Name": "MaintenanceDescription", + "SampleValues": [ + "maintenance contract available through your dealer or any AdventureWorks retail store.", + "maintenance contact available through dealer or any Adventure Works Cycles retail store.", + "maintenance contact available through dealer" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Wheel column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various types of bicycle wheels. The descriptions provide details about the wheel's characteristics and performance attributes, such as durability, performance, material composition, and suitability for different types of riders. The information is intended to help consumers make informed decisions about the type of wheel that best meets their needs. The content typically emphasizes features like strength, stability, performance, aerodynamics, and material quality.", + "Name": "Wheel", + "SampleValues": [ + "Strong wheels with double-walled rims.", + "Stable, durable wheels suitable for novice riders.", + "High performance wheels.", + "Excellent aerodynamic rims guarantee a smooth ride.", + "Aluminum alloy rim with stainless steel spokes; built for speed on our high quality rubber tires." + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Saddle column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various types of bicycle saddles. The descriptions typically highlight specific features such as material, design, and comfort aspects. Descriptive phrases commonly include details about weight, anatomical design, pressure relief, and added comfort measures. These detailed sentences help potential customers understand the unique selling points of each saddle model available.", + "Name": "Saddle", + "SampleValues": [ + "Lightweight kevlar racing saddle.", + "Cut-out shell for a more comfortable ride.", + "Anatomic design and made from durable leather for a full-day of riding in comfort.", + "New design relieves pressure for long rides.", + "Comfortable saddle with bump absorping rubber bumpers." + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Pedal column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various types of pedals used in bicycles. These descriptions typically highlight specific features and benefits of the pedals, such as adjustable tension, platform size, and usability. The descriptions are in plain text and are designed to provide potential buyers with detailed information to aid in their purchasing decision.", + "Name": "Pedal", + "SampleValues": [ + "Top-of-the-line clipless pedals with adjustable tension.", + "Expanded platform so you can ride in any shoes; great for all-around riding.", + "A stable pedal for all-day riding." + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The BikeFrame column in the SalesLT.vProductModelCatalogDescription entity contains textual descriptions of different types of bike frames. These descriptions highlight various attributes and features of the bicycle frames such as the material used (commonly aluminum), quality, manufacturing process, and specific design characteristics aimed at enhancing comfort and performance. The descriptions often emphasize aspects like custom-shaping, heat-treatment, welding, and innovative design to convey both the durability and the technological advancements incorporated in the bike frames.", + "Name": "BikeFrame", + "SampleValues": [ + "The aluminum frame is custom-shaped for both good looks and strength;it will withstand the most rigorous challenges of daily riding.", + "Our lightest and best quality aluminum frame made from the newest alloy;it is welded and heat-treated for strength.Our innovative design results in maximum comfort and performance.", + "Our best value frame utilizing the same, ground-breaking technology as the ML aluminum frame.", + "Each frame is hand-crafted in our Bothell facility to the optimum diameterand wall-thickness required of a premium mountain frame.The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.", + "aluminum alloy frame and features a lightweight down-tube milled to the perfect diameter for optimal strength." + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Crankset column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various features and attributes of bicycle cranksets. The values are composed of text phrases highlighting specific aspects such as material, performance, and quality of the crankset. The descriptions may vary in length and detail, but generally provide information about the construction, durability, and functionality of the crankset components.", + "Name": "Crankset", + "SampleValues": [ + " Triple crankset; alumunim crank arm; flawless shifting. ", + " Super rigid spindle. ", + " High-strength crank arm. " + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The PictureAngle column in the SalesLT.vProductModelCatalogDescription entity contains text values that describe the angle from which a product picture is taken. This is likely used to identify different perspectives or viewpoints of a product, such as \"front\", \"side\", \"back\", etc. The values help differentiate pictures based on their angle, assisting users in understanding the visual presentation of the product.", + "Name": "PictureAngle", + "SampleValues": [ + "front" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The PictureSize column in the SalesLT.vProductModelCatalogDescription entity contains the size specification of a product's picture. The values in this column indicate the designated size of the images associated with product models in the catalog. The size is typically described using simple terms such as 'small,' which suggests that there might be other possible values like 'medium' or 'large' to represent different image dimensions. This information is used to categorize and manage different image sizes for products in the catalog.", + "Name": "PictureSize", + "SampleValues": [ + "small" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The ProductPhotoID column in the SalesLT.vProductModelCatalogDescription entity contains unique numeric identifiers for product photos. Each value corresponds to a specific product photo and is used to link the product model to its associated images. The values are integers with no apparent sequential order and serve as primary keys to reference the product photos stored in another table. This column helps in organizing and retrieving the correct photo for each product model in the catalog.", + "Name": "ProductPhotoID", + "SampleValues": [ + "87", + "126", + "118", + "111", + "1" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Material column in the SalesLT.vProductModelCatalogDescription entity contains the primary material description of a product. The values typically represent different types of materials used in the product's construction, such as various metals or alloys. The values may contain common industrial materials and their variations. The pattern in the sample values suggests that the entries may include common materials used in manufacturing, with potential misspellings or variations.", + "Name": "Material", + "SampleValues": [ + "Aluminum Alloy", + "Aluminum", + "Almuminum Alloy" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Color column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the color availability of products. The values indicate whether products are available in a wide range of colors, all colors, or specific exclusions such as not including metallic colors. The descriptions are in sentence form and provide information on the color options of the products.", + "Name": "Color", + "SampleValues": [ + "Available in most colors.", + "Available in most colors", + "Available in all colors.", + "Available in all colors except metallic." + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The ProductLine column in the SalesLT.vProductModelCatalogDescription entity contains the categories or types of bicycles available in the catalog. The values indicate different models of bicycles such as Touring bike, Road bike, and Mountain bike. This column helps in classifying products based on their intended use or design, providing useful information for organizing and filtering the product list in the sales catalog.", + "Name": "ProductLine", + "SampleValues": [ + "Touring bike", + "Road bike", + "Mountain bike" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The Style column in the SalesLT.vProductModelCatalogDescription entity contains information about the gender-specific style designation of a product. Common values include terms indicating whether a product is intended for men, women, or unisex use. The values provide insight into the target demographic for the product's design and aesthetic.", + "Name": "Style", + "SampleValues": [ + "Unisex", + "Men's" + ] + }, + { + "AllowedValues": null, + "DataType": "nvarchar", + "Definition": "The RiderExperience column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of rider skill levels that a particular product model is suitable for. These descriptions range from different experience levels such as Novice, Intermediate, Advanced, and Professional. The values are combinations of these skill levels indicating the span of rider expertise the product caters to. This helps in categorizing products based on the level of rider proficiency they are designed for.", + "Name": "RiderExperience", + "SampleValues": [ + "Novice to Intermediate riders", + "Novice to Advanced riders", + "Intermediate to Professional riders", + "Intermediate to Advanced riders", + "Advanced to Professional riders" + ] + }, + { + "AllowedValues": null, + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.vProductModelCatalogDescription entity contains unique identifier values in the UUID (Universal Unique Identifier) format. Each value is a 128-bit number used to uniquely identify information within the database. The values follow the standard UUID format, which consists of five groups of hexadecimal digits separated by hyphens. This column is typically used for ensuring the uniqueness of records across tables and databases.", + "Name": "rowguid", + "SampleValues": [ + "866DBAD3-5999-4329-BEAC-D826D959D9A1", + "FCA0665B-B956-489A-A5EC-6F0B4AA14D02", + "94FFB702-0CBC-4E3F-B840-C51F0D11C8F6", + "AA10D9E6-E33F-4DA8-ACE1-992FCD6BB171", + "52E7F2C1-DBFF-4518-927D-C7D46F9ED32E" + ] + }, + { + "AllowedValues": null, + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.vProductModelCatalogDescription entity contains timestamps indicating the last date and time when the corresponding product model catalog description was modified. The values are in the format of YYYY-MM-DD HH:MM:SS.SSSSSS. This column helps in tracking changes and updates made to the product model catalog descriptions.", + "Name": "ModifiedDate", + "SampleValues": [ + "2006-11-20 09:56:38.273000", + "2005-06-01 00:00:00" + ] + } + ], + "CompleteEntityRelationshipsGraph": null, + "Database": "AdventureWorksLT", + "Definition": "The SalesLT.vProductModelCatalogDescription entity contains detailed information regarding product models, including descriptions, manufacturer details, warranty information, and specifications related to bicycle components and features. This entity serves to provide comprehensive catalog descriptions useful for product listings and marketing materials. It can answer questions related to the attributes and features of specific product models, such as warranty details, material and color options, or the components involved in a particular bicycle model.", + "Entity": "SalesLT.vProductModelCatalogDescription", + "EntityName": "Product Model Catalog Description Information", + "EntityRelationships": null, + "Warehouse": null +} diff --git a/text_2_sql/data_dictionary/data_dictionary_creator.py b/text_2_sql/data_dictionary/data_dictionary_creator.py index 58d5d1f..ae56b86 100644 --- a/text_2_sql/data_dictionary/data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/data_dictionary_creator.py @@ -23,25 +23,33 @@ class ForeignKeyRelationship(BaseModel): column: str = Field(..., alias="Column") foreign_column: str = Field(..., alias="ForeignColumn") - model_config = ConfigDict(populate_by_name=True, arbitrary_types_allowed=True) + model_config = ConfigDict(populate_by_name=True, + arbitrary_types_allowed=True) class EntityRelationship(BaseModel): - entity: str = Field(..., alias="Entity") + entity: str = Field(..., alias="Entity", exclude=True) + entity_schema: str = Field(..., alias="Schema", exclude=True) foreign_entity: str = Field(..., alias="ForeignEntity") - foreign_keys: list[ForeignKeyRelationship] = Field(..., alias="ForeignKeys") + foreign_entity_schema: str = Field(..., + alias="ForeignSchema", exclude=True) + foreign_keys: list[ForeignKeyRelationship] = Field( + ..., alias="ForeignKeys") - model_config = ConfigDict(populate_by_name=True, arbitrary_types_allowed=True) + model_config = ConfigDict(populate_by_name=True, + arbitrary_types_allowed=True) def pivot(self): """A method to pivot the entity relationship.""" return EntityRelationship( entity=self.foreign_entity, + entity_schema=self.foreign_entity_schema, foreign_entity=self.entity, + foreign_entity_schema=self.entity_schema, foreign_keys=[ ForeignKeyRelationship( - source_column=foreign_key.foreign_column, - foreign_column=foreign_key.source_column, + column=foreign_key.foreign_column, + foreign_column=foreign_key.column, ) for foreign_key in self.foreign_keys ], @@ -55,8 +63,17 @@ def add_foreign_key(self, foreign_key: ForeignKeyRelationship): def from_sql_row(cls, row, columns): """A method to create an EntityRelationship from a SQL row.""" result = dict(zip(columns, row)) + + entity = "{EntitySchema}.{Entity}".format( + EntitySchema=result['EntitySchema'], Entity=result['Entity']) + foreign_entity = "{ForeignEntitySchema}.{ForeignEntity}".format( + ForeignEntitySchema=result['ForeignEntitySchema'], ForeignEntity=result['ForeignEntity'] + ) return cls( - foreign_entity=result["ForeignEntity"], + entity=entity, + entity_schema=result["EntitySchema"], + foreign_entity=foreign_entity, + foreign_entity_schema=result["ForeignEntitySchema"], foreign_keys=[ ForeignKeyRelationship( column=result["Column"], @@ -78,7 +95,8 @@ class ColumnItem(BaseModel): allowed_values: Optional[list[any]] = Field(None, alias="AllowedValues") sample_values: Optional[list[any]] = Field(None, alias="SampleValues") - model_config = ConfigDict(populate_by_name=True, arbitrary_types_allowed=True) + model_config = ConfigDict(populate_by_name=True, + arbitrary_types_allowed=True) @classmethod def from_sql_row(cls, row, columns): @@ -106,8 +124,8 @@ class EntityItem(BaseModel): None, alias="EntityRelationships" ) - complete_entity_relationship_graph: Optional[str] = Field( - None, alias="CompleteEntityRelationshipGraph" + complete_entity_relationships_graph: Optional[list[str]] = Field( + None, alias="CompleteEntityRelationshipsGraph" ) columns: Optional[list[ColumnItem]] = Field( @@ -139,7 +157,7 @@ def __init__( entities: list[str] = None, excluded_entities: list[str] = None, single_file: bool = False, - generate_descriptions: bool = True, + generate_definitions: bool = True, ): """A method to initialize the DataDictionaryCreator class. @@ -147,13 +165,13 @@ def __init__( entities (list[str], optional): A list of entities to extract. Defaults to None. If None, all entities are extracted. excluded_entities (list[str], optional): A list of entities to exclude. Defaults to None. single_file (bool, optional): A flag to indicate if the data dictionary should be saved to a single file. Defaults to False. - generate_descriptions (bool, optional): A flag to indicate if descriptions should be generated. Defaults to True. + generate_definitions (bool, optional): A flag to indicate if definitions should be generated. Defaults to True. """ self.entities = entities self.excluded_entities = excluded_entities self.single_file = single_file - self.generate_descriptions = generate_descriptions + self.generate_definitions = generate_definitions self.entity_relationships = {} self.relationship_graph = nx.DiGraph() @@ -188,7 +206,7 @@ def extract_columns_sql_query(self, entity: EntityItem) -> str: def extract_entity_relationships_sql_query(self) -> str: """An abstract method to extract entity relationships from a database. - Must return 4 columns: Entity, ForeignEntity, Column, ForeignColumn.""" + Must return 6 columns: EntitySchema, Entity, ForeignEntitySchema, ForeignEntity, Column, ForeignColumn.""" def extract_distinct_values_sql_query( self, entity: EntityItem, column: ColumnItem @@ -254,6 +272,11 @@ async def extract_entity_relationships(self) -> list[EntityRelationship]: relationship.foreign_entity: relationship } else: + if relationship.foreign_entity not in self.entity_relationships[relationship.entity]: + self.entity_relationships[relationship.entity][ + relationship.foreign_entity + ] = relationship + self.entity_relationships[relationship.entity][ relationship.foreign_entity ].add_foreign_key(relationship.foreign_keys[0]) @@ -263,6 +286,11 @@ async def extract_entity_relationships(self) -> list[EntityRelationship]: relationship.entity: relationship.pivot() } else: + if relationship.entity not in self.entity_relationships[relationship.foreign_entity]: + self.entity_relationships[relationship.foreign_entity][ + relationship.entity + ] = relationship.pivot() + self.entity_relationships[relationship.foreign_entity][ relationship.entity ].add_foreign_key(relationship.pivot().foreign_keys[0]) @@ -283,7 +311,7 @@ def get_entity_relationships_from_graph( return None if path is None: - path = [] + path = [entity] if result is None: result = [] if visited is None: @@ -294,16 +322,18 @@ def get_entity_relationships_from_graph( # For each successor (neighbor in the directed path) for successor in self.relationship_graph.successors(entity): - new_path = path + [f"{entity} -> {successor}"] - result.append(" -> ".join(new_path)) # Add the path as a string - self.get_entity_relationships_from_graph( - self.relationship_graph, successor, new_path, result, visited - ) + if successor not in visited: + new_path = path + [successor] + # Add the path as a string + result.append(" -> ".join(new_path)) + self.get_entity_relationships_from_graph( + successor, new_path, result, visited + ) return result - async def extract_entities_with_descriptions(self) -> list[EntityItem]: - """A method to extract entities with descriptions from a database. + async def extract_entities_with_definitions(self) -> list[EntityItem]: + """A method to extract entities with definitions from a database. Returns: list[EntityItem]: The list of entities.""" @@ -372,47 +402,49 @@ async def extract_column_distinct_values( elif column.distinct_values is not None: column.sample_values = column.distinct_values - async def generate_column_description(self, entity: EntityItem, column: ColumnItem): - """A method to generate a description for a column in a database. + async def generate_column_definition(self, entity: EntityItem, column: ColumnItem): + """A method to generate a definition for a column in a database. Args: entity (EntityItem): The entity the column belongs to. - column (ColumnItem): The column to generate a description for.""" + column (ColumnItem): The column to generate a definition for.""" - column_description_system_prompt = """You are an expert in SQL Entity analysis. You must generate a brief description for this SQL Column. This description will be used to generate a SQL query with the correct values. Make sure to include a description of the data contained in this column. + column_definition_system_prompt = """You are an expert in SQL Entity analysis. You must generate a brief definition for this SQL Column. This definition will be used to generate a SQL query with the correct values. Make sure to include a definition of the data contained in this column. - The description should be a brief summary of the column as a whole. The description should be 3-5 sentences long. Apply NO formatting to the description. The description should be in plain text without line breaks or special characters. + The definition should be a brief summary of the column as a whole. The definition should be 3-5 sentences long. Apply NO formatting to the definition. The definition should be in plain text without line breaks or special characters. - You will use this description later to generate a SQL query. Make sure it will be useful for this purpose in determining the values that should be used in the query and any filtering that should be applied.""" + You will use this definition later to generate a SQL query. Make sure it will be useful for this purpose in determining the values that should be used in the query and any filtering that should be applied.""" if column.sample_values is not None and len(column.sample_values) > 0: - column_description_system_prompt += """Do not list all sample values in the description or provide a list of samples. The sample values will be listed separately. The description should be a brief summary of the column as a whole and any insights drawn from the sample values. + column_definition_system_prompt += """Do not list all sample values in the definition or provide a list of samples. The sample values will be listed separately. The definition should be a brief summary of the column as a whole and any insights drawn from the sample values. - If there is a pattern in the sample values of the column, such as a common format or that the values are common abbreviations, mention it in the description. The description might include: The column contains a list of currency codes in the ISO 4217 format. 'USD' for US Dollar, 'EUR' for Euro, 'GBP' for Pound Sterling. + If there is a pattern in the sample values of the column, such as a common format or that the values are common abbreviations, mention it in the definition. The definition might include: The column contains a list of currency codes in the ISO 4217 format. 'USD' for US Dollar, 'EUR' for Euro, 'GBP' for Pound Sterling. - If you think the sample values belong to a specific standard, you can mention it in the description. e.g. The column contains a list of country codes in the ISO 3166-1 alpha-2 format. 'US' for United States, 'GB' for United Kingdom, 'FR' for France. Including the specific standard format code can help the user understand the data better. + If you think the sample values belong to a specific standard, you can mention it in the definition. e.g. The column contains a list of country codes in the ISO 3166-1 alpha-2 format. 'US' for United States, 'GB' for United Kingdom, 'FR' for France. Including the specific standard format code can help the user understand the data better. - If you think the sample values are not representative of the column as a whole, you can provide a more general description of the column without mentioning the sample values.""" - stringifed_sample_values = [str(value) for value in column.sample_values] + If you think the sample values are not representative of the column as a whole, you can provide a more general definition of the column without mentioning the sample values.""" + stringifed_sample_values = [str(value) + for value in column.sample_values] - column_description_input = f"""Describe the {column.name} column in the {entity.entity} entity. The following sample values are provided from { + column_definition_input = f"""Describe the {column.name} column in the {entity.entity} entity. The following sample values are provided from { column.name}: {', '.join(stringifed_sample_values)}.""" else: - column_description_input = f"""Describe the { + column_definition_input = f"""Describe the { column.name} column in the {entity.entity} entity.""" if column.definition is not None: - existing_description_string = f"""Use this existing description to aid your understanding: { + existing_definition_string = f"""Use this existing definition to aid your understanding: { column.definition}""" - column_description_input += existing_description_string + column_definition_input += existing_definition_string - description = await self.send_request_to_llm( - column_description_system_prompt, column_description_input + logging.info(f"Generating definition for {column.name}") + definition = await self.send_request_to_llm( + column_definition_system_prompt, column_definition_input ) - logging.info(f"Description for {column.name}: {description}") + logging.info(f"Definition for {column.name}: {definition}") - column.definition = description + column.definition = definition async def extract_columns_with_definitions( self, entity: EntityItem @@ -430,33 +462,33 @@ async def extract_columns_with_definitions( ) distinct_value_tasks = [] - description_tasks = [] + definition_tasks = [] for column in columns: distinct_value_tasks.append( self.extract_column_distinct_values(entity, column) ) - if self.generate_descriptions: - description_tasks.append( - self.generate_column_description(entity, column) + if self.generate_definitions: + definition_tasks.append( + self.generate_column_definition(entity, column) ) await asyncio.gather(*distinct_value_tasks) - if self.generate_descriptions: - await asyncio.gather(*description_tasks) + if self.generate_definitions: + await asyncio.gather(*definition_tasks) return columns async def send_request_to_llm(self, system_prompt: str, input: str): - """A method to use GPT to generate a description for an entity. + """A method to use GPT to generate a definition for an entity. Args: system_prompt (str): The system prompt to use. input (str): The input to use. Returns: - str: The generated description.""" + str: The generated definition.""" MAX_TOKENS = 2000 @@ -480,71 +512,76 @@ async def send_request_to_llm(self, system_prompt: str, input: str): token_provider = None api_key = os.environ["OpenAI__ApiKey"] - async with AsyncAzureOpenAI( - api_key=api_key, - api_version=api_version, - azure_ad_token_provider=token_provider, - azure_endpoint=os.environ.get("OpenAI__Endpoint"), - ) as client: - response = await client.chat.completions.create( - model=model, - messages=[ - { - "role": "system", - "content": system_prompt, - }, - { - "role": "user", - "content": [ - { - "type": "text", - "text": input, - }, - ], - }, - ], - max_tokens=MAX_TOKENS, - ) + try: + async with AsyncAzureOpenAI( + api_key=api_key, + api_version=api_version, + azure_ad_token_provider=token_provider, + azure_endpoint=os.environ.get("OpenAI__Endpoint"), + ) as client: + response = await client.chat.completions.create( + model=model, + messages=[ + { + "role": "system", + "content": system_prompt, + }, + { + "role": "user", + "content": [ + { + "type": "text", + "text": input, + }, + ], + }, + ], + max_tokens=MAX_TOKENS, + ) - return response.choices[0].message.content + return response.choices[0].message.content + except Exception as e: + logging.error(f"Unable to generate definition for {input}") + logging.error(f"Error generating definition: {e}") + return None - async def generate_entity_description(self, entity: EntityItem): - """A method to generate a description for an entity. + async def generate_entity_definition(self, entity: EntityItem): + """A method to generate a definition for an entity. Args: - entity (EntityItem): The entity to generate a description for.""" + entity (EntityItem): The entity to generate a definition for.""" name_system_prompt = """You are an expert in SQL Entity analysis. You must generate a human readable name for this SQL Entity. This name will be used to select the most appropriate SQL entity to answer a given question. E.g. 'Sales Data', 'Customer Information', 'Product Catalog'.""" name_input = f"""Provide a human readable name for the { entity.entity} entity.""" - description_system_prompt = """You are an expert in SQL Entity analysis. You must generate a brief description for this SQL Entity. This description will be used to select the most appropriate SQL entity to answer a given question. Make sure to include key details of what data is contained in this entity. + definition_system_prompt = """You are an expert in SQL Entity analysis. You must generate a brief definition for this SQL Entity. This definition will be used to select the most appropriate SQL entity to answer a given question. Make sure to include key details of what data is contained in this entity. Add information on what sort of questions can be answered using this entity. - DO NOT list the columns in the description. The columns will be listed separately. The description should be a brief summary of the entity as a whole. + DO NOT list the columns in the definition. The columns will be listed separately. The definition should be a brief summary of the entity as a whole. - The description should be 3-5 sentences long. Apply NO formatting to the description. The description should be in plain text without line breaks or special characters.""" + The definition should be 3-5 sentences long. Apply NO formatting to the definition. The definition should be in plain text without line breaks or special characters.""" - description_input = f"""Describe the {entity.entity} entity. The { + definition_input = f"""Describe the {entity.entity} entity. The { entity.entity} entity contains the following columns: {', '.join([column.name for column in entity.columns])}.""" - if entity.description is not None: - existing_description_string = f"""Use this existing description to aid your understanding: { - entity.description}""" + if entity.definition is not None: + existing_definition_string = f"""Use this existing definition to aid your understanding: { + entity.definition}""" - name_input += existing_description_string - description_input += existing_description_string + name_input += existing_definition_string + definition_input += existing_definition_string name = await self.send_request_to_llm(name_system_prompt, name_input) logging.info(f"Name for {entity.entity}: {name}") entity.entity_name = name - description = await self.send_request_to_llm( - description_system_prompt, description_input + definition = await self.send_request_to_llm( + definition_system_prompt, definition_input ) - logging.info(f"Description for {entity.entity}: {description}") - entity.description = description + logging.info(f"definition for {entity.entity}: {definition}") + entity.definition = definition async def build_entity_entry(self, entity: EntityItem) -> EntityItem: """A method to build an entity entry. @@ -559,8 +596,8 @@ async def build_entity_entry(self, entity: EntityItem) -> EntityItem: columns = await self.extract_columns_with_definitions(entity) entity.columns = columns - if self.generate_descriptions: - await self.generate_entity_description(entity) + if self.generate_definitions: + await self.generate_entity_definition(entity) # add in relationships if entity.entity in self.entity_relationships: @@ -569,7 +606,7 @@ async def build_entity_entry(self, entity: EntityItem) -> EntityItem: ) # add in the graph traversal - entity.complete_entity_relationship_graph = ( + entity.complete_entity_relationships_graph = ( self.get_entity_relationships_from_graph(entity.entity) ) @@ -577,7 +614,7 @@ async def build_entity_entry(self, entity: EntityItem) -> EntityItem: async def create_data_dictionary(self): """A method to build a data dictionary from a database. Writes to file.""" - entities = await self.extract_entities_with_descriptions() + entities = await self.extract_entities_with_definitions() await self.extract_entity_relationships() diff --git a/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py b/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py index 22b8073..ed7a9c8 100644 --- a/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/sql_sever_data_dictionary_creator.py @@ -86,7 +86,9 @@ def extract_columns_sql_query(self, entity: EntityItem) -> str: def extract_entity_relationships_sql_query(self) -> str: """A property to extract entity relationships from a SQL Server database.""" return """SELECT + fk_schema.name AS EntitySchema, fk_tab.name AS Entity, + pk_schema.name AS ForeignEntitySchema, pk_tab.name AS ForeignEntity, fk_col.name AS [Column], pk_col.name AS ForeignColumn @@ -96,14 +98,18 @@ def extract_entity_relationships_sql_query(self) -> str: sys.foreign_key_columns AS fkc ON fk.object_id = fkc.constraint_object_id INNER JOIN sys.tables AS fk_tab ON fk_tab.object_id = fk.parent_object_id + INNER JOIN + sys.schemas AS fk_schema ON fk_tab.schema_id = fk_schema.schema_id INNER JOIN sys.tables AS pk_tab ON pk_tab.object_id = fk.referenced_object_id + INNER JOIN + sys.schemas AS pk_schema ON pk_tab.schema_id = pk_schema.schema_id INNER JOIN sys.columns AS fk_col ON fkc.parent_object_id = fk_col.object_id AND fkc.parent_column_id = fk_col.column_id INNER JOIN sys.columns AS pk_col ON fkc.referenced_object_id = pk_col.object_id AND fkc.referenced_column_id = pk_col.column_id ORDER BY - Entity, ForeignEntity; + EntitySchema, Entity, ForeignEntitySchema, ForeignEntity; """ From 6634e48412459b2a3c169978e224aa6a5baae16f Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 17:53:47 +0000 Subject: [PATCH 12/17] Update schema store index --- deploy_ai_search/text_2_sql_schema_store.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/deploy_ai_search/text_2_sql_schema_store.py b/deploy_ai_search/text_2_sql_schema_store.py index 9e7093c..2f7afef 100644 --- a/deploy_ai_search/text_2_sql_schema_store.py +++ b/deploy_ai_search/text_2_sql_schema_store.py @@ -155,7 +155,7 @@ def get_index_fields(self) -> list[SearchableField]: ], ), SimpleField( - name="CompleteEntityRelationshipGraph", + name="CompleteEntityRelationshipsGraph", type=SearchFieldDataType.String, collection=True, ), @@ -270,6 +270,14 @@ def get_indexer(self) -> SearchIndexer: source_field_name="/document/EntityName", target_field_name="EntityName", ), + FieldMapping( + source_field_name="/document/Database", + target_field_name="Database", + ), + FieldMapping( + source_field_name="/document/Warehouse", + target_field_name="Warehouse", + ), FieldMapping( source_field_name="/document/Definition", target_field_name="Definition", @@ -291,12 +299,12 @@ def get_indexer(self) -> SearchIndexer: target_field_name="ColumnDefinitions", ), FieldMapping( - source_field_name="/document/ImmediateEntityRelationships", - target_field_name="ImmediateEntityRelationships", + source_field_name="/document/EntityRelationships", + target_field_name="EntityRelationships", ), FieldMapping( - source_field_name="/document/CompleteEntityRelationships", - target_field_name="CompleteEntityRelationships", + source_field_name="/document/CompleteEntityRelationshipsGraph", + target_field_name="CompleteEntityRelationshipsGraph", ), FieldMapping( source_field_name="/document/DateLastModified", From 5448a0eada50f3eb03032eece07fd79886f1e69e Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 20:00:27 +0000 Subject: [PATCH 13/17] Update outputs --- .../data_dictionary/SalesLT.Address.json | 167 ----- .../data_dictionary/SalesLT.Customer.json | 242 -------- .../SalesLT.CustomerAddress.json | 106 ---- .../data_dictionary/SalesLT.Product.json | 265 -------- .../SalesLT.ProductCategory.json | 108 ---- .../SalesLT.ProductDescription.json | 80 --- .../data_dictionary/SalesLT.ProductModel.json | 111 ---- ...alesLT.ProductModelProductDescription.json | 105 ---- .../SalesLT.SalesOrderDetail.json | 157 ----- .../SalesLT.SalesOrderHeader.json | 307 ---------- .../SalesLT.vGetAllCategories.json | 49 -- .../SalesLT.vProductAndDescription.json | 76 --- ...lesLT.vProductModelCatalogDescription.json | 292 --------- .../generated_samples/SalesLT.Address.json | 281 +++++---- .../generated_samples/SalesLT.Customer.json | 431 +++++++------ .../SalesLT.CustomerAddress.json | 168 +++-- .../generated_samples/SalesLT.Product.json | 471 +++++++------- .../SalesLT.ProductCategory.json | 165 +++-- .../SalesLT.ProductDescription.json | 126 ++-- .../SalesLT.ProductModel.json | 168 +++-- ...alesLT.ProductModelProductDescription.json | 164 +++-- .../SalesLT.SalesOrderDetail.json | 268 ++++---- .../SalesLT.SalesOrderHeader.json | 547 +++++++++-------- .../SalesLT.vGetAllCategories.json | 90 +-- .../SalesLT.vProductAndDescription.json | 144 ++--- ...lesLT.vProductModelCatalogDescription.json | 576 +++++++++--------- 26 files changed, 1991 insertions(+), 3673 deletions(-) delete mode 100644 text_2_sql/data_dictionary/SalesLT.Address.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.Customer.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.CustomerAddress.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.Product.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.ProductCategory.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.ProductDescription.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.ProductModel.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.ProductModelProductDescription.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.SalesOrderDetail.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.SalesOrderHeader.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.vGetAllCategories.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.vProductAndDescription.json delete mode 100644 text_2_sql/data_dictionary/SalesLT.vProductModelCatalogDescription.json diff --git a/text_2_sql/data_dictionary/SalesLT.Address.json b/text_2_sql/data_dictionary/SalesLT.Address.json deleted file mode 100644 index 34676f7..0000000 --- a/text_2_sql/data_dictionary/SalesLT.Address.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The AddressID column in the SalesLT.Address entity contains unique identifier values for each address record within the table. The data is represented as integer values, which are incremented to ensure each AddressID is unique. This column is likely used as a primary key to distinguish each address entry and to enable efficient querying and indexing of address data.", - "Name": "AddressID", - "SampleValues": [ - 541, - 1019, - 548, - 1100, - 1023 - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The AddressLine1 column in the SalesLT.Address entity contains the primary address information, typically including the street number and name. The values can also include additional details such as suite or floor numbers. The addresses may follow various formats and can include special characters or abbreviations, reflecting different address conventions and layouts. This column is used to store the main part of the physical address for a location.", - "Name": "AddressLine1", - "SampleValues": [ - "399 Clearing Green", - "595 Burning Street", - "2500-622 5th Ave Sw", - "600 Boul. Rene-levesque Ouest", - "6th Floor Ferguson Block" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The AddressLine2 column in the SalesLT.Address entity contains secondary address information which often includes building names, suite numbers, or P.O. Box numbers. The values in this column typically complement the primary address line by providing additional details that aid in locating a specific address. This column may contain a variety of formats and abbreviations relevant to secondary address components.", - "Name": "AddressLine2", - "SampleValues": [ - "Raven House, Kingsgate", - "Ste 1071", - "Suite 2501", - "P.O. Box 803", - "Box 8033" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The City column in the SalesLT.Address entity contains the names of cities where addresses are located. The values are typically in the form of full city names and are used to specify the municipality in which a particular address is situated. This column does not follow any specific standard format other than being a string representation of city names. The city names can vary widely based on geographic location.", - "Name": "City", - "SampleValues": [ - "Westminster", - "Whittier", - "Trabuco Canyon", - "Escondido", - "Birmingham" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The StateProvince column in the SalesLT.Address entity contains the names of states or provinces in the United States. The values are represented as full state names in English. This column is used to specify the state or province part of an address within the United States.", - "Name": "StateProvince", - "SampleValues": [ - "Utah", - "California", - "Washington", - "Texas", - "Minnesota" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The CountryRegion column in the SalesLT.Address entity contains a list of country or region names where the addresses are located. The values represent the full names of countries or regions. This column helps to identify the geographical location associated with each address entry. Examples include names such as 'United States', 'United Kingdom', and 'Canada'.", - "Name": "CountryRegion", - "SampleValues": [ - "United States", - "United Kingdom", - "Canada" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The PostalCode column in the SalesLT.Address entity contains postal codes, which are numerical codes used by postal services to identify specific geographic regions or delivery routes. The values are typically composed of five digits. This column is used to facilitate mail sorting and delivery as well as location-based services within the database. The values follow the pattern of US ZIP Codes.", - "Name": "PostalCode", - "SampleValues": [ - "90712", - "64106", - "92335", - "63103", - "92867" - ] - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.Address entity contains unique identifier values in the form of UUIDs (Universally Unique Identifiers). These values are 36-character strings formatted as 8-4-4-4-12 and are used to uniquely distinguish each record in the table. This ensures that each address entry has a distinct and non-repeating identifier, regardless of the data's context or usage. The use of UUIDs provides a method for uniquely identifying records in a distributed environment.", - "Name": "rowguid", - "SampleValues": [ - "C15ECA9A-6054-40E4-8D09-D4341AABCE2D", - "6D2D6846-3F17-474E-8D31-AD3A59C0CEB0", - "3438AFB3-390C-48D5-8CCF-5438278D981D", - "6D6A8E1A-FFD8-4D2D-A70D-88467049A880", - "726819A8-1B02-4EFD-AEB9-3FD801D9F153" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.Address entity contains timestamps indicating the date and time when each address record was last modified. The values are in the format 'YYYY-MM-DD HH:MM:SS', which includes both the date and time. This column is used to track changes and updates to the address data over time.", - "Name": "ModifiedDate", - "SampleValues": [ - "2006-10-01 00:00:00", - "2007-09-01 00:00:00", - "2007-06-01 00:00:00", - "2006-03-01 00:00:00", - "2006-09-01 00:00:00" - ] - } - ], - "CompleteEntityRelationshipsGraph": [ - "SalesLT.Address -> SalesLT.CustomerAddress", - "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", - "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader", - "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail", - "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product", - "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", - "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel", - "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", - "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription" - ], - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.Address entity stores information about customer addresses. It includes details such as the street address, city, state or province, country or region, and postal code. This entity can be used to answer questions related to customer locations, shipping addresses, and regional sales analysis. It also tracks when and by whom the address information was last modified.", - "Entity": "SalesLT.Address", - "EntityName": "Customer Address Information", - "EntityRelationships": [ - { - "ForeignEntity": "SalesLT.CustomerAddress", - "ForeignKeys": [ - { - "Column": "AddressID", - "ForeignColumn": "AddressID" - } - ] - }, - { - "ForeignEntity": "SalesLT.SalesOrderHeader", - "ForeignKeys": [ - { - "Column": "AddressID", - "ForeignColumn": "BillToAddressID" - }, - { - "Column": "AddressID", - "ForeignColumn": "BillToAddressID" - }, - { - "Column": "AddressID", - "ForeignColumn": "BillToAddressID" - }, - { - "Column": "AddressID", - "ForeignColumn": "ShipToAddressID" - } - ] - } - ], - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.Customer.json b/text_2_sql/data_dictionary/SalesLT.Customer.json deleted file mode 100644 index c47c33a..0000000 --- a/text_2_sql/data_dictionary/SalesLT.Customer.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The CustomerID column in the SalesLT.Customer entity contains unique numeric identifiers assigned to each customer. These identifiers are integers and do not follow a specific sequential order, ensuring that each customer can be uniquely distinguished. The values in this column are critical for linking customer information with transactional and operational data within the database.", - "Name": "CustomerID", - "SampleValues": [ - 508, - 30051, - 418, - 595, - 336 - ] - }, - { - "AllowedValues": null, - "DataType": "bit", - "Definition": "The NameStyle column in the SalesLT.Customer entity contains boolean values that indicate the formatting style used for the customer's name. A value of 'False' suggests that the name does not follow a specific format, whereas a value of 'True' would indicate adherence to a predefined naming convention. Generally, this column aids in distinguishing between different name formatting styles within the customer records.", - "Name": "NameStyle", - "SampleValues": [ - false - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Title column in the SalesLT.Customer entity contains honorifics or salutations used to address customers. The values typically include common titles such as 'Mr.' for Mister, 'Ms.' for Miss, 'Sr.' for Senior, and 'Sra.' for Senora, indicating a standard format for addressing individuals formally. The entries are usually abbreviations and may follow cultural norms for addressing people based on their gender or age.", - "Name": "Title", - "SampleValues": [ - "Sra.", - "Sr.", - "Ms.", - "Mr." - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The column contains a list of first names of customers. These values represent the given names of individuals in the SalesLT.Customer entity. The data includes various common personal names used by customers.", - "Name": "FirstName", - "SampleValues": [ - "Carolyn", - "Kara", - "Jane", - "Delia", - "George" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The MiddleName column in the SalesLT.Customer entity contains the middle initials of customers. The values are typically single letters followed by a period, representing the abbreviated form of the customer's middle name. This column helps to identify customers more precisely, especially in cases where they have common first and last names.", - "Name": "MiddleName", - "SampleValues": [ - "D.", - "F.", - "R", - "P.", - "B." - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The LastName column in the SalesLT.Customer entity contains the surnames of customers. This column holds textual data representing the last name or family name of each customer. The values are varied and do not follow a specific pattern, indicating they are typical last names from potentially diverse cultural backgrounds.", - "Name": "LastName", - "SampleValues": [ - "Tran", - "Holloway", - "Beebe", - "Chen", - "Lyeba" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Suffix column in the SalesLT.Customer entity contains suffixes used in customer names. These suffixes typically denote generational titles or academic and professional qualifications, such as 'Sr.' for Senior, 'PhD' for Doctor of Philosophy, 'Jr.' for Junior, 'IV' for the fourth in a generational sequence, and 'II' for the second. The values in this column help in distinguishing individuals with similar names and conveying additional information about their status or achievements.", - "Name": "Suffix", - "SampleValues": [ - "Sr.", - "PhD", - "Jr.", - "IV", - "II" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The CompanyName column in the SalesLT.Customer entity contains the names of companies that are customers of the business. The names in this column often include terms related to biking and sports, indicating that the customers are primarily businesses in the bike and outdoor sports industry. The values in this column represent the commercial identity or trade names of these customer companies.", - "Name": "CompanyName", - "SampleValues": [ - "Transport Bikes", - "Flawless Bike Shop", - "Two Bike Shops", - "Big-Time Bike Store", - "Outdoor Sports Supply" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The SalesPerson column in the SalesLT.Customer entity contains the usernames of sales representatives in the format of 'adventure-works\\username'. This format includes a common prefix 'adventure-works\\' followed by the individual's username, which typically consists of the employee\u2019s first name and a numerical digit. This column is used to identify which salesperson is assigned to or responsible for a particular customer within the Adventure Works organization.", - "Name": "SalesPerson", - "SampleValues": [ - "adventure-works\\garrett1", - "adventure-works\\linda3", - "adventure-works\\jae0", - "adventure-works\\pamela0", - "adventure-works\\jillian0" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The EmailAddress column in the SalesLT.Customer entity contains the email addresses of customers. The email addresses appear to follow a pattern where a combination of the customer's name followed by a digit and the domain 'adventure-works.com' is used. This pattern suggests that the email addresses are uniquely generated for each customer within the Adventure Works company.", - "Name": "EmailAddress", - "SampleValues": [ - "imtiaz0@adventure-works.com", - "george1@adventure-works.com", - "kerim0@adventure-works.com", - "scott6@adventure-works.com", - "bob2@adventure-works.com" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Phone column in the SalesLT.Customer entity contains customer phone numbers. The phone numbers follow a common format of three-digit area code, a three-digit central office code, and a four-digit station number, separated by hyphens. This column is used to store contact phone numbers for customers, ensuring that each number is correctly formatted for consistent data entry and retrieval.", - "Name": "Phone", - "SampleValues": [ - "327-555-0148", - "129-555-0164", - "570-555-0199", - "482-555-0174", - "436-555-0160" - ] - }, - { - "AllowedValues": null, - "DataType": "varchar", - "Definition": "The PasswordHash column in the SalesLT.Customer entity contains hashed representations of customer passwords. Each value is a base64-encoded string that represents a securely hashed password, created using a cryptographic hashing algorithm. The hash ensures that the original password cannot be easily retrieved or deciphered, providing a layer of security for user authentication. The pattern of the sample values suggests that they uniformly follow a base64-encoded format encoding the hashed value.", - "Name": "PasswordHash", - "SampleValues": [ - "jnz8GF/glxwiqqdUVHkoV+53Mp1HOnFR/azWzJ80Ktc=", - "S9Kf7AXqY19C/4rLMHjUwO+5Yh7mMhaPsuouZxizDpg=", - "NEJS/vq9oswLdLNa4VH0fbwb+fgxDYIHg2hPP1fn7t4=", - "5obs6LI7GwHZ55lps26uIsPyz7E4xBxF6pdB5KYAnn0=", - "yV4p9H28cp19QO/bcSjLxZFYAs22W5SR9HnmTXUEWkM=" - ] - }, - { - "AllowedValues": null, - "DataType": "varchar", - "Definition": "The PasswordSalt column in the SalesLT.Customer entity contains values that are used as salt for hashing customer passwords. These values are typically base64-encoded strings which add an additional layer of security by ensuring that even if two users have the same password, their hashes will be different due to the unique salt. This column helps in protecting against rainbow table attacks. The values are generally random and unique for each customer record.", - "Name": "PasswordSalt", - "SampleValues": [ - "BX3pcB8=", - "ke7sTgo=", - "DmNlCmQ=", - "dt/JUB4=", - "PiILPfc=" - ] - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.Customer entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). These values follow the standard 8-4-4-4-12 hexadecimal digit pattern separated by hyphens. Each GUID value is used to uniquely identify a customer record within the database, ensuring no two customer records have the same rowguid. This column is typically used for ensuring data integrity and for synchronizing records across different database systems.", - "Name": "rowguid", - "SampleValues": [ - "319FECC0-A652-417F-AF3A-4AA99B2FF8DC", - "68DC7932-128E-47CC-80CB-CF2B1A352F3C", - "838ACD04-5B60-459C-88CC-EF5D1D696E05", - "BAA99D94-2FC2-4A1C-8B67-2C3210EB90C3", - "E24193F1-F5DF-481E-AC1A-BAB86BD72C54" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.Customer entity contains timestamps indicating the last modification date and time for each customer record. The values are stored in a datetime format which includes both the date and the time down to fractional seconds. This column is typically used to track and audit changes made to customer information, ensuring data integrity and historical accuracy. The presence of specific timestamps and dates suggests that modifications may be tracked to the precise moment they occurred.", - "Name": "ModifiedDate", - "SampleValues": [ - "2009-05-16 16:33:33.107000", - "2009-05-16 16:33:33.077000", - "2005-07-01 00:00:00", - "2007-07-01 00:00:00", - "2006-06-01 00:00:00" - ] - } - ], - "CompleteEntityRelationshipsGraph": [ - "SalesLT.Customer -> SalesLT.CustomerAddress", - "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address", - "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader", - "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail", - "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product", - "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", - "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel", - "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", - "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription" - ], - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.Customer entity contains detailed information about customers, including their personal and professional data such as names, contact details, and company affiliation. It also includes security-related fields for login purposes, such as password hash and salt, as well as metadata like unique identifiers and modification dates. This entity can be used to answer questions about customer demographics, contact information, sales assignments, and account security details.", - "Entity": "SalesLT.Customer", - "EntityName": "Customer Information", - "EntityRelationships": [ - { - "ForeignEntity": "SalesLT.CustomerAddress", - "ForeignKeys": [ - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - }, - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - } - ] - }, - { - "ForeignEntity": "SalesLT.SalesOrderHeader", - "ForeignKeys": [ - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - }, - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - }, - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - } - ] - } - ], - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.CustomerAddress.json b/text_2_sql/data_dictionary/SalesLT.CustomerAddress.json deleted file mode 100644 index 4c7e873..0000000 --- a/text_2_sql/data_dictionary/SalesLT.CustomerAddress.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The CustomerID column in the SalesLT.CustomerAddress entity contains unique identifiers for each customer. These identifiers are numeric and do not follow a specific pattern, serving as primary keys to link customer records with their associated addresses. The values in this column are unique to each customer and are used to differentiate between individual customers within the database.", - "Name": "CustomerID", - "SampleValues": [ - 29950, - 29988, - 30036, - 29831, - 30106 - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The AddressID column in the SalesLT.CustomerAddress entity contains unique numeric identifiers for addresses. Each value in this column is a distinct integer that serves as a primary key to uniquely identify an address associated with a customer. The values do not follow a specific format other than being integers and are used to link customer records to their corresponding address records.", - "Name": "AddressID", - "SampleValues": [ - 592, - 655, - 633, - 582, - 544 - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The AddressType column in the SalesLT.CustomerAddress entity contains descriptive values that define the type of address associated with a customer. Examples include specific roles or purposes of the address, such as 'Shipping' or 'Main Office'. This information is used to categorize addresses and helps in distinguishing between different address functions related to a customer.", - "Name": "AddressType", - "SampleValues": [ - "Shipping", - "Main Office" - ] - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.CustomerAddress entity contains unique identifiers for each customer address record. The values in this column are in the form of globally unique identifiers (GUIDs), which follow the standard 128-bit format used to ensure that each entry is distinct across databases and tables. Each value is a string in the format of hexadecimal digits separated by hyphens, which makes it suitable for uniquely identifying records in a distributed system.", - "Name": "rowguid", - "SampleValues": [ - "6075EE51-F2EE-4E6D-97BB-6C0732A4C53F", - "4012A207-360D-4189-833C-61B0EBE4E593", - "2F99485B-952A-44D4-A5AF-5A94FACA240E", - "779CEF11-027C-4921-9F5B-6537A571C4AA", - "48F96EB4-5E50-42D7-B8E4-6390C2AB703A" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.CustomerAddress entity contains datetime values representing the date and time when a record was last updated. The values follow the standard datetime format 'YYYY-MM-DD HH:MI:SS'. This column is used to track changes and ensure data integrity by recording the timestamp whenever a modification occurs.", - "Name": "ModifiedDate", - "SampleValues": [ - "2005-08-01 00:00:00", - "2006-08-01 00:00:00", - "2007-02-01 00:00:00", - "2006-01-01 00:00:00", - "2005-10-01 00:00:00" - ] - } - ], - "CompleteEntityRelationshipsGraph": [ - "SalesLT.CustomerAddress -> SalesLT.Address", - "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader", - "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail", - "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product", - "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", - "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel", - "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", - "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", - "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.Customer" - ], - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.CustomerAddress entity stores the relationship between customers and their addresses. It includes details on the type of address (such as billing or shipping) associated with each customer. This entity can be used to answer questions related to the specific addresses associated with a customer, the types of addresses a customer has, or when the address information was last modified.", - "Entity": "SalesLT.CustomerAddress", - "EntityName": "Customer Address Information", - "EntityRelationships": [ - { - "ForeignEntity": "SalesLT.Address", - "ForeignKeys": [ - { - "Column": "AddressID", - "ForeignColumn": "AddressID" - } - ] - }, - { - "ForeignEntity": "SalesLT.Customer", - "ForeignKeys": [ - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - }, - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - } - ] - } - ], - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.Product.json b/text_2_sql/data_dictionary/SalesLT.Product.json deleted file mode 100644 index efeb18b..0000000 --- a/text_2_sql/data_dictionary/SalesLT.Product.json +++ /dev/null @@ -1,265 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductID column in the SalesLT.Product entity contains unique numeric identifiers assigned to each product in the database. Each value in this column is an integer and serves as the primary key for the Product table, ensuring that each product can be individually referenced. The values do not follow a specific pattern beyond being unique and numeric.", - "Name": "ProductID", - "SampleValues": [ - 742, - 912, - 890, - 966, - 781 - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Name column in the SalesLT.Product entity contains the names of various products. The product names typically include a description of the product type, and may also include additional attributes such as size, color, and specific variants. This column provides a concise identification label for each product, combining multiple characteristics into a single descriptive name.", - "Name": "Name", - "SampleValues": [ - "Road Bottle Cage", - "ML Mountain Frame-W - Silver, 38", - "LL Road Frame - Black, 52", - "ML Mountain Frame-W - Silver, 40", - "HL Mountain Pedal" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The ProductNumber column in the SalesLT.Product entity contains alphanumeric codes used to uniquely identify products. The values follow a pattern that includes a combination of uppercase letters and numbers, often separated by hyphens. This pattern seems to represent information about product types and possibly product variations such as size or color. The codes are formatted in a way that likely allows easy recognition and categorization of different products within the inventory system.", - "Name": "ProductNumber", - "SampleValues": [ - "FW-T905", - "BK-T18U-44", - "TI-M267", - "FR-R38B-44", - "BK-T18U-50" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Color column in the SalesLT.Product entity contains the color descriptions of products. The values in this column represent various colors and sometimes combinations of colors that identify the product's appearance. The values include both single colors and combinations separated by a forward slash. This column can help in filtering products based on their color attributes.", - "Name": "Color", - "SampleValues": [ - "Red", - "Black", - "Grey", - "Silver/Black", - "Blue" - ] - }, - { - "AllowedValues": null, - "DataType": "money", - "Definition": "The StandardCost column in the SalesLT.Product entity contains the manufacturing or acquisition cost of a product, expressed as a numerical value with four decimal places. This cost represents the base amount required to produce or procure each unit of the product. The values are typically used for cost accounting and financial analysis purposes. The values in this column do not follow a specific standard and vary depending on the production costs associated with different products.", - "Name": "StandardCost", - "SampleValues": [ - "13.0900", - "352.1394", - "17.3782", - "10.3125", - "884.7083" - ] - }, - { - "AllowedValues": null, - "DataType": "money", - "Definition": "The ListPrice column in the SalesLT.Product entity contains the standard selling prices of various products. The values in this column are represented as decimal numbers with four decimal places, indicating precise pricing for each product. This column is used to store the regular prices before any discounts or promotions are applied.", - "Name": "ListPrice", - "SampleValues": [ - "9.5000", - "742.3500", - "300.2150", - "3374.9900", - "2384.0700" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Size column in the SalesLT.Product entity contains a variety of values that represent the size of the product. The values can include both numerical measurements and letter-based descriptors. Numerical values appear to be measurements, likely in centimeters, while letter-based values are common size designations such as S (Small) and L (Large). This column captures the physical dimensions or size classification of each product.", - "Name": "Size", - "SampleValues": [ - "S", - "60", - "L", - "54", - "70" - ] - }, - { - "AllowedValues": null, - "DataType": "decimal", - "Definition": "The Weight column in the SalesLT.Product entity contains numerical values representing the weight of products. These values are stored with two decimal precision, indicating that weight measurements may be critical for the products listed. The weights can vary significantly, ranging from a few hundred to over ten thousand units. The unit of measurement is not provided, but it seems consistent within the column. The values represent the physical weight of each product in the catalog.", - "Name": "Weight", - "SampleValues": [ - "7869.79", - "10945.13", - "635.00", - "1306.34", - "1070.47" - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductCategoryID column in the SalesLT.Product entity contains numeric identifiers that correspond to different product categories. Each unique number represents a distinct product category within the product catalog. The values are integers and indicate the category classification for each product.", - "Name": "ProductCategoryID", - "SampleValues": [ - 36, - 15, - 26, - 33, - 10 - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductModelID column in the SalesLT.Product entity contains numeric identifiers for different product models. Each value in this column is a unique integer that serves as a primary key to relate the product to its specific model. This helps in categorizing and organizing the products based on their models within the database. These identifiers are essential for joining tables and querying detailed information about the product models.", - "Name": "ProductModelID", - "SampleValues": [ - 95, - 93, - 48, - 80, - 69 - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The SellStartDate column in the SalesLT.Product entity contains the date and time representing when a product became available for sale. The values are in the datetime format 'YYYY-MM-DD HH:MM:SS'. Each entry indicates the specific start date and time down to the second that a product was first introduced to the market. This information is typically used to track and manage product availability timelines.", - "Name": "SellStartDate", - "SampleValues": [ - "2007-07-01 00:00:00", - "2006-07-01 00:00:00", - "2005-07-01 00:00:00", - "2002-06-01 00:00:00" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The SellEndDate column in the SalesLT.Product entity contains the date and time when the product was last available for sale. The values in this column follow the datetime format 'YYYY-MM-DD HH:MM:SS', indicating the precise end date and time. This column helps to track when products were discontinued or no longer sold.", - "Name": "SellEndDate", - "SampleValues": [ - "2007-06-30 00:00:00", - "2006-06-30 00:00:00" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The DiscontinuedDate column in the SalesLT.Product entity contains the date on which a product was discontinued. This column holds date values indicating when a product is no longer available for sale. It is used to track the lifecycle of products and manage inventory by identifying products that are no longer active. If the value is NULL, it signifies that the product is still active and available.", - "Name": "DiscontinuedDate", - "SampleValues": [] - }, - { - "AllowedValues": null, - "DataType": "varbinary", - "Definition": "The ThumbNailPhoto column in the SalesLT.Product entity contains binary data representing thumbnail images of the products. The data is in GIF (Graphics Interchange Format) as indicated by the initial bytes 'GIF89a'. It stores encoded image information which is used for displaying small preview images of the products within the database. This column ensures that each product has a related visual representation, aiding in product identification and visual presentation capabilities in applications and interfaces.", - "Name": "ThumbNailPhoto", - "SampleValues": [ - "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\xc5\\xc2\\xbeTRQ\\xd1\\xd1\\xd1ECC\\xfe\\xfe\\xfe\\xf7\\xf7\\xd8\\xa6\\xa3\\x9e\\xf0\\xf0\\xf0\\xe1\\xe0\\xde\\xf4\\xf4\\xf4\\xda\\xda\\xd9\\xaa\\xaa\\xaa\\xec\\xec\\xec\\xf6\\xf6\\xf6LKJ\\xbb\\xb9\\xb4\\xfb\\xfb\\xfb\\x97\\x94\\x10\\xb4\\xb2\\xad\\xf8\\xf8\\xf8\\xf2\\xf2\\xf2\\x93\\x8e\\x88ecb\\xb1\\xae\\xaa|{{\\xc2\\xc2\\xc2trquqm+\\x06+\\x99\\x99\\x99\\xb4\\xb4\\xb4323\\xb1\\xb1\\xb1\\xfd\\xfe\\xf9\\x8c\\x8c\\x8b\\xcb\\xcc\\x13\\xea\\xea\\xea\\xd4\\xd2\\xce\\xfa\\xfb\\xea\\x87\\x83}\\xaa\\xa6\\xa1\\xe1\\xe2xqnj\\xf2\\xf3\\xc37%7\\xec\\xed\\xa8}zt\\xe2\\xe2\\xe2\\xad\\xa9\\xa5\\xe9\\xea\\x99\\x9e\\x9b\\x95\\x85\\x84\\x84\\xe4\\xe4\\xe4\\xe8\\xe8\\xe8KBI\\xce\\xce\\xce\\xdc\\xdc\\xdc\\xcb\\xc9\\xc5\\xaf\\xaf\\xafXUT\\x9f\\x9f\\x9f\\xd4\\xd4\\xd4\\xc8\\xc6\\xc3\\xdd\\xdd\\xda\\xb9\\xb9\\xb9iec\\xee\\xef\\xef\\xda\\xdbVD;B\\xd7\\xd7\\xd7$$#\\xca\\xca\\xca\\xd7\\xd8K\\xc6\\xc4\\xc1ca^?>>ti\\x15nkk\\x88\\x86\\x83\\xe6\\xe6\\xe6,,+\\xa1\\x9e\\x99\\xbc\\xbc\\xbc\\xe6\\xe6\\x8a\\xd5\\xd4\\xd1.\\x11(\\xfc\\xfc\\xf1\\xfd\\xfd\\xf6\\xf1\\xf1\\xbb\\xa1\\xa1\\xa0\\xc8\\xc8\\xc8\\xd9\\xd8\\xd6\\x96\\x96\\x96\\xd5\\xd6=OLLZH\\x1a\\xc6\\xc6\\xc6\\xe5\\xe4\\xe2:\\x1d#\\xb8\\xb6\\xb1\\xdf\\xdf\\xdf\\xc4\\xc4\\xc4lie\\x91\\x91\\x90\\xcc\\xcc\\xcc\\x95\\x92\\x8d___\\x8c\\x88\\x84\\xf8\\xf8\\xe0eT3\\x81~{\\xc0\\xbe\\xba\\xf0\\xf0\\xee\\x9e\\x9c\\x9axvs[YU@<=\\xb6\\xb4\\xb0\\xe9\\xe8\\xe6\\xfe\\xfe\\xfbb_[\\xbf\\xbd\\xb8\\xcd\\xce\\x1a\\xc0\\xc0\\xc0\\xec\\xec\\xea>3>\\x9a\\x97\\x93\\xe0\\xe0\\xe0][X:99RPN\\x9b\\x98\\x94\\xc5\\xc3\\xc0\\xcd\\xcc\\xc9\\xd0\\xcf\\xcb\\xab\\xab\\xab\\xec\\xeb\\xe9\\xb1\\xb0\\xafJHGD*\"\\x9c\\x9c\\x9c2\\x182GFF\\xf6\\xf6\\xf5\\xb6\\xb6\\xb6\\xcd\\xcb\\xc7\\xf5\\xf4\\xf3745\\xa5\\xa4\\xa3B@?\\x1d\\x1c\\x1c<:9\\xba\\xba\\xba\\x94\\x93\\x92\\xf1\\xf1\\xf1\\xe7\\xe6\\xe3UOP\\xdd\\xdd\\xdd\\xea\\xea\\xe8YYY\\xa7\\xa7\\xa7\\xb2\\xaf\\xab\\xb0\\xad\\xa8\\xf5\\xf5\\xd0\\xe3\\xe2\\xe0\\xef\\xee\\xed\\xd8\\xd7\\xd4\\xd1\\xd2/\\x96\\x94\\x91_]Y\\xbc\\xbb\\xb8\\xaf\\xae\\xac\\xa6\\xa5\\xa4\\x9d\\x9b\\x99\\xdc\\xdb\\xdb\\xd7\\xd6\\xd4\\xc7\\xc6\\xc4\\xc5\\xc5\\xc5\\xc3\\xc2\\xc0\\xbb\\xba\\xb9\\xc5\\xc6h976=<<\\xbf\\xbf\\xbf\\xbe\\xbe\\xbe\\xa4\\xa4\\xa4\\xfd\\xfd\\xfd3\\x063\\xfc\\xfc\\xfc\\xfd\\xfe\\xfe\\xb8\\xb5\\xaf\\x9d\\x99\\x93L6\\x1e\\xfc\\xfd\\xfc\\xfc\\xfd\\xfd\\xf3\\xf3\\xf3\\xfa\\xfa\\xf9\\xf8\\xf8\\xf7\\xb1\\xb2\\x0f\\x9e\\x9e\\x9d\\xfd\\xfe\\xfd\\xbe\\xbf\\x10\\xce\\xcf h[\\x17?:<\\xf5\\xf6\\xf6\\xf9\\xfa\\xfa\\xf7\\xf7\\xf7\\xad\\xad\\xad\\xc1\\xc1\\xc0\\xbf\\xbf\\xbd\\xfd\\xfd\\xfc\\xf7\\xf8\\xf8\\xb5\\xb5\\xb5\\xf9\\xf9\\xf9\\xcf\\xce\\xcc\\x7ftQ\\xeb\\xeb\\xeb\\xdd\\xdd\\x99c]_\\xe3\\xe3\\xe3-%)\\xa6\\xa1n100\\xf5\\xf5\\xf5\\xa6\\xa6\\xa5\\xe0\\xdf\\xdc\\x95\\x93-\\xc9\\xcayqoo\\xe1\\xe1\\xe10./\\xdb\\xdc\\xdc((\\'\\xcf\\xd1&\\xcb\\xccL\\xc8\\xc8=O9,\\xe4\\xe2\\xdf\\xa4\\xa5\\x0e\\xa8\\xa6\\x11\\x9b\\x95t\\x95\\x8a~\\xd5\\xd3\\xd0\\xb6\\xb3\\xae]WX\\xbe\\xbf\\xbf\\xc2\\xc1\\xc2\\xe7\\xe7\\xe4\\xee\\xef\\xb1\\xa3\\xa3\\xa3\\xad\\xab\\xa8\\x95\\x90[\\xa5\\xa5Hfff\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00o\\xfd\\x1bH\\xb0\\xa0\\xc1\\x83\\x06\\t(\\\\H@\\x97C]\\xbc\"B\\x80@\\x8c\\x98\\xb5\\t\\xcf\\x9e5\\x00\\x97`\\x98\\xa6\\x03B\\x180 Q\\xe3\\t\\x8d\\x17d:)(\\xd2C\\xc0\\x8d#`2\\xe0\\x02\\xe2A\\xc7\\x82\\\\<\\x04\"\\xdc\\xc9\\xf3\\x1f\\xc3\\x85\\x0f!J\\x84`\\xcd\\x1a\\xb5g\\xcd8\\x0e\\xa3\\xa0I\\x93\\x90\\x90#K\\x9eL\\xb9\\xb2\\xe5\\xcb\\x983k\\xde\\xcc\\xd9\\xb3k\\xc2\\x9f\\r\\x1fF\\xe4\\x05\\xc1\\x19\\xb5G\\x14B\\x92\\xb4C\\x82D\\xb6l\\x0c\\xb2\\xb5\\xadA\\x83\\x1bJ\\x95,]\\xc2\\x94I\\xd3&N\\x9d^\\x11*\\xec\\xd5\\x0b\\x99Ca\\xc2\\x82\\x8a%k\\xadS&A\\x8a\\x1c\\r\\xa8\\x94J\\xc3\\x99U[p\\x883\\xf7\\xc2\\xee\\x0bs\\x7f\\xc8\\xe0\\xa8\\xaa\\x17k\\xdf\\xad\\x80\\x03\\x13$\\xd0+\\x18\\x84b\\x8f\\xc0I\\x92\\x04\\xee\\x99\\xb5\\x89c\\xc9\\x12\\xfb\\x83!\\x80\\x8b_\\x15N\\xb8P\\x11$\\x80\":\\x93>a\\xf0\\xd7\\xe4X\\x8f\"\\np\\xe0pE\\xfa*_\\xad\\x7fU\\xafF\\x06A\\x0b\\x06\\x0bJ\\xd4\\xa8\\xff\\x11\\xc1\\xe5A\\x18;|\\xe0\\x0c\\xab\\x9d\\x11\\x88\\xa38\\xf4P\\x00\\x17N\\x1c\\xcf\\x1c\\x07\\xe7\\x8c(\\x121#\\x90\\x83\\x1d:\\xdc \\xc0s=X\\xb5WV~q\\xa5]C:8\\x90\\x8a\\x1b\\xc1\\r\\x07\\x88\\x03\\x03\\xd4\\x12\\x00\\x06\\x94`\\x90I\\x19$\\x1c\\x11@\\x12\\x00\\xc47\\xdfpA\\xcc\\x01\\x05\\x14\\x01\\xf8\\xe3\\x80\\x08M8\\xe0\\xcf\\'\\x1f\\x04p\\x8b\\x16\\x02\\nP\\xdau\\t\\xa6\\xd6U/\\x07XP\\x8e((\\xc8\\x10\\xe1\\x06A(1\\x87 \\x95\\x18a\\xcb\\x0c38\\xa2\\xc6\\x07\\xd2\\x18\\x02\\x80\\x04\\xf2E\\xa8\\xc2\\x0eF|\\xa2\\x06\\x11,\\xb0`\\x03\\x0b\\x8d0\\xa3\\x86?\\x01\\xa4\\xc3\\x8a\\x14`\\xa0q\\x83u\\x08\\xa2\\xa6\\x1a\\x01\\x07|\\x82\\n\\x00\\xbe\\x04i\\xa5\\x19x$\\x19\\xc8\\'\\x0e`\\xe0\\x86\\x8b\\x8e\\xa4\\xa3A\\x88U\\n\\xe7\\x88\\x11j\\xf4\\xc1\\x01\\x07\\xc04Z\\x05\\x07\\xbbp`\\x03\\x99\\x95\\xe8\\xe3A\\x06G\\xa0q\\xe0i\\xd9y\\xd5\\x90\\x1b\\x99\\x94@\\xa7\\x9d\\xc2m\\xa0\\x84\\x11\\x81\\x90I\\xc4\\x07\\x9f8\\xc2\\x82\"\\xfe\\xf8\\xff\\xe3\\x88\\x17\"\\x06W\\xe6\\'\\x8d\\x88\\xc1\\xcf\\x14)\\x9c2\\xc2\\x08\\x11,\\x12\\xe9\\xa4\\xa9\\xc6\\x01B4Zh\\x11\\x0b\\x8enz\\xd5\\xcb\\x0bJ\\xb8#j\\x9dB\\ngF:\\x9fx\\xd1\\xc8\\xa2\\xdc\\xee\\xb2K\\x15^\\x90\\x19@\\x95.\\xa4\\xa3\\x06\\x07L(\\xc3\\x06A\\xf9\\x0c\\xa1G2\\xc2r\\xf0\\x89?\\xdf\\xcc\\xc0\\x03$\\x19(\\xcbl\\xa7]\\xe9\\x92\\xc5\\x02\\xd2\\x8eZ\\xed\\x06\\xe6*\\xdaF?H\\xfcj\\x0c\\x13UxK\\xeco\\x15\\xd4\\xa2F#L\\xa4p\\x90\\t)(\\x13\\x81\\xb7,\\xf8\\x03E\\x13\", E\\x19\\xcb\\xb6\\xc9/O\\x04\\xf0\\xe2D4\\x01S\\x1b\\x1c\\xa2,,\\xf2\\xce\\n\\x03Y1E\\x17\\xef\\xc6;\\xef\\x12\\xbf\\xb8\\xf1\\x01\\x11\\xed 1\\x05B&\\x0c1\\x82\\x18\\xdf\\xfa\\xf3\\x01 \\x18\\x1cSM4e\\xec\\xab`O\\x04\\x10c\\xc10-\\xdb\\x19\\x80#},\\xb2\\xce(\\x06\\x15\\x90\\x82\\x1e\\x1b\\xef\\xd21\\x14\\xbf(\\xf2I\\x15\\xaa\\xf0t\\x05\\x16#\\x00\\x13\\xa9\\xd2\\x9c\\x94\\x93\\x89\\x0e\\xb8d \\xb5\\x8e\\x08\\xf5\\xffb\\xcd\\x0c,Ok\\'\\x8aU\\x18\\x83\\xc4Aw\\x14=B\\xbc\\xfe,\\xe1B-\\x0eTa1Bw\\\\1\\xca\\x10rs\\xa0\\xb4\"A\\x84,E\\x06\\xd1\\x98<5O\\xbdLp\\x86\\x07Y\\xcb`\\x81\\xab\\xf2\\xf0\\x14\\x02\\x16z,3\\xb7\\x03\\x1b\\x9cC\\x040\\xa7$4\\xd0\\x1dV\\xac0\\x85\\xb0\\x8d\\xf8c\\x84\\r\\x9d\\x83\\xf2y\\xe8\\x9c\\x8e\\xbeS\\xe9\\xb3\\x9c\\x91z%\\xe7\\xd2\\xe2v\\x01C01\\xb7\\xe3\\x1f\\xf4\\x01\\xcc\\x08-\\x14\\x14\\xc2\\x15\\xff$\\x8e\\x059\\x90\\xb2\\xa0\\x86%\\xc4{\\x0e\\xba\\xe8|\\x1fT\\xba*\\xce\\x0b.\\xc3\\x12\\x91\\xeb\\xb1\\x13\\x01V\\x8c\\x12\\xc3\\x17s\\xa3\\rE\\x1fb\\x18\\x01\\x12B@\\x90+\\xb0\\xc1\\n\\x06\\\\A\\x1b\\xbc\\xe5\\x85\\x0f|\\xc3\\x0bM8\\x034\\xf2\\x86<\\xec(\\xafo\\xc5\\x80_\\xea\\x960\\x80\\xedu\\x8f w\\xb8C\\xf8z\\x17\\x83\\x86\\x05\\xef\\x1b\\xbf\\xa8\\x85#v\\xf1\\x0e=\\xc4\\x80 \\xf9[A\\x08V\\xe0\\r\\x8e\\x9d\\x8f\\x08\\x9c\\xd0@\\x07@\\xb0\\x87\\xa8\\xb1\\xaf+\\r\\x81\\xc6\\x12\\xff\\xe2\\'\\xb0%8\\x82\\x03\\x02\\x04\\xdf@B\\xc0\\x86+$n\\x05\\xf1\\xf0\\x16\\x11\\x1c\\x10\\x84_\\x08\\xe2\\x13\\x8c\\x1a\\x81:^\\xc8\\xbb\\x15\\xc4@c\\r\\xe3\\x80\\x1a\\x8c\\xd0\\x07\\x1blc\\x06\\x94\\x00B\\x06|\\x98\\xbc\\xf6\\xad\\x86\\x17\"\\xf8\\x80#\\x88H\\xadK8\\x80\\x03\\x11\\xd0\\xc3\\x07\\xff\\x11\\x82\\x02\\xac\\xe0\\n\\x05\\xd0F#\"\\xa5\\x86t\\xc8\\xe0\\x17\\'\\xb0\\xdd.\\xbe`\\x8c\\x11\\x0c!\\x1f\\xf9\\xa3\\x05\\xff\\xbe\\x85\\xa5s\\xd8`\\x07vK\\xc4-\\xc0P\\xb26\\x92\\xaeGK\\xb3\\xc5\\x0ex ?A\\x04 \\x8b\\xa7\\xa0\\x19\\xfeF\\xd1\\x82!\\xb0CX\\xbbPD &a\\x0b<\\x9c`\\x00K`A\\xa4\\x80\\xc1\\x04&,c\\x11\\x90\\xdaE#>\\x91\\x8en\\xe00\\x08N8S,\\xf4\\xf5\\xc3\\x83\\xb0\\x06\\x020\\n\\xc0\\x07\\x1c`\\x9c%h\\xc0\\x00Ar\\x82\"\\xbf\\x90\\x0c=\\xa4\\xe0\\x80+hA\\x04\\x90&\\xa92\\xc5*\\x00K\\xa8\\x85%\\x021\\x80\\x86y\\xeb\\x9dU\\x18\\x80\\x03,1\\t\\x1bxa\\x1bn`D50\\xb5\\xff)\\x0b\\xf2\\x8d5E\\xb0\\xc0\\x07>\\x10\\x089\\xa8`^\\x94\\x12\\x84\\x06*P\\tW}k\\x19\\x11\\x88\\xc08\\xb0!\\x86`\\xda\\xc0\\x11P\\x88\\x95Fc\\x15(G8\\xa0\\x0f %\\xc2\\xd6,\\x01\\x05f\\x10\\xc1\\x8c\\x18\\xf0C\"\\xee\\x91\\xa9~\\xe6(!\\xbdH\\xc4\\x07R\\x81\\x8aOT\\xc0\\t\\x16@h\\xac\\xd4\\xe0\\x00#Z\\x82k\\xc1|g\\xa4\\x1a!\\xcd\\x0fl\\xf4\\xa8\\x8d\\x83\\xc2@\\x07\\n\\x05G\\xf8c\\x07t\\xb0A=4\\x90\\th\\xec\\xe1\\x08kri\\xb3\\x08\\xd2\\x0b)|@\\x03%\\xc8\\x03\\n\\xd2p\\x023\\xe8t\\xa3Z\\xfa\\x00\\x14\\x1c\\xc0\\xa5F4\\x82\\x05\"]B:\\x06`\\x01@\\x04\\xc0\\x0b\\x8e\\xa8\\x04\\x1df\\x89\\xaa%,\\x81\\x0e\\x80e\\x86`\\x99A\\x07E\\xec\\xa0\\tkX\\x804\\na#6yr5\\x07\\xb0&\\x15\\xdep\\x81(\\x0c\"\\r.H\\x11R5\\n#\\xa5.\\xf5D\\x01\\xb0@\\x10*\\xe0\\x06\\x15\\x18\\xc9\\x0b\\x03\\xb0\\xc5\\x07\\x8c`\\xca\\x00\\x04`\\x07\\x01\\xe0\\x84l9\\x11\\x80z\\xff\\x98\\xc1\\rq\\x00\\xc2\\x11\\x06t\\xa3f\\x0e\\x04\\x19\\xfa\\xb0E!\\xa6\\x04\\x03\\x18\\x88B\\x02\\x12h\\xc2\\x1c\\x02\\xe0\\x80\\xc8\\xe0r\\t\\r\\x1d\\x80#\\xa6+\\xddJ4\\xc1\\x1fx\\x00\\xc4\\x1aN \\x87 \\xa4\\x022\\x95\\x08\\x84%\\x02\\xa0\\x04\\x0b\\x98\\xa1\\x1c\\x1bHo9T\\x80^98a\\x10\\x12\\xd0B\\t\\n\\xd4\\xdb\\xc7\\xfa\\x84\\x17\\x16\\xd0@\\x0e\\xc6 \\x8aP\\xe4!\\x12T\\xa0B\\x12`\\xb0\\x06\\x15\\x00b\\x00\\x03\\xb5\\x85GM\\xb9\\x83\\x06O\"\\x1c?HB(\\xa2\\xb0\\x86\\xe1\\xe0a\\x07\\x14\\xb2\\x05\\x14.\\xa1\\x019\\xb8a\\r\\xa8\\x18D+d0\\x88A\\xf8a\\x10Q@\\xc1\\x18`!\\x80\"\\xe4\\xc5\\xb1\\xfe\\xe4*1>\\x90\\x85<\\\\ \\x14o\\xa0B\\x18\\x18\\x80\\x88\\x1f\\x00\\xc0\\x00f\\x98\\xc4$\\xfe\\xd3`@(\\xa1\\t\\x1b\\x90C\\x8b\\xf0a\\x88\\x07\\x18\\x80\\xacD:\\x92#\\xd2i\\t78A\\x04\\x1d\\xd8\\x87*\\x08\\xe1\\x83$\\x10\\x02\\x00\\xb2\\x88\\x06!`q\\x8d\\x1e(\\xa0:Z\\xe5W/\\xb2\\xf1\\x01V\\xf0w\\xff\\x0c\\x85\\x08\\x03\\x05&\\xd0\\x00D\\x98Bi\\x80p\\xc1\\x06\\xcc`\\x06\\x15\\xc8\\xc1\\x0f\\xb2\\xf0A\\x16*!\\x8b-\\x00@\\x14\\xbf\\xa80\\x9e\\x98\\x1b^#X\\xe0\\x0c\\x998F\"b\\xf1\\nq \\x00\\x01\\xe2\\xf8\\x01u\\xce\\xec\\x8aN\\xa0\\x03\\xcd\\xa6\\x89\\xf1@\\x84\\x11\\x8b\\x0f\\xbc\\x81\\x1e\\xfe5E)\\xac\\x01\\x91a\\xc8\\xc1\\x16Nx\\xf2\\x1a\\x9c\\xb0\\x86A\\xe0\\xa0 7\\x90B$|a\\x00\\xd2n\\xc0\\x02s\\xc0+r\\xa0\\xc0\\x05.\\x1c\\x03\\x1ae\\xd8\\xc2\\x13\\xe02\\x12\\x92\\xd0\\xe0$\\xe6\\x10\\r\\xa8\\xf7F\\x10]\\x0c\\xe3\\x03q@.\\x00\\xc4A\\x01^\\xf4b\\x1a\\x18\\xb0E\\x1d\\xde\\x00\\x83(D\\xc1\\x00\\xa1 \\xc5An\\x90\\x06\\x18\\xf8\\xc1\\tr0C*\\x8c\\x13^K`\\x80\\x0b\\x8c0^\\x0fh\\xc0\\x00\\x90\\x84D.R\\xb9\\xcb\\xb4}\\xcb\\x0b\\n`\\x1b\\xb9>@@\\x02\\x1c\\xa2\\x8f6\\xef\\x17\\x06\\xfb\\xf0E\\x12\\xb6\\xb0\\x13\\x11D\\x81\\xb4\\xa6\\xdd\\x01jm\\xf1\\r[p\\xa1\\x03Y\\xa8\\x06\\x1a\\xfe\\xc0\\x80\\xa6\\x80D$$\\xff1\\x89\\xc0_\\x9c\\xe6\\xa9\\x05\\x83\\x02;\\x90\\x03\\xc2\\x15>\\r!,\\x01\\x03\\x86PE\\x7fUQ\\x08q\\x0cc\\'\\xafP\\x01w\\x83\\x00\\x08\\xf0\\x8a\\xf7\\x0c\\xf8^@\\x06\\x8aP\\x83\\x030\\xe5\\xe4QQ9UX\\x1e\\xea\\x97\\x8e\\xda\\xd5;@.!\\xb8M\\x0c\\x0c8\"\\x07o\\x08\\xc5\\x05Ta\\x08R\\x94\\x02\\x02<\\xf1\\x82\\x851<\\x80K\\xa4\\xc3\\x0b\\x1d\\xe8@.\\x80 \\x00n\\x94\\x82\\x02O\\x87J\\xca\\xa7\\x82\\x17\\x03U}\\xab\\xba\\x00\\xc7*>\\xb0\\x0f\\x1c+\\xa0\\x14$XB+|P\\x07Q\\xc0\\x99\\x14\\x9ax\\x06/xB\\xbb\\x12\\tb\\xca\\xea\\x8c\\xfb1t\\x00\\x86Nd\\x83\\x02\\xc3\\xf0\\x08\\xd4\\xf7\\xber\\xbfS{ \\xbdx\\xc6\\x0f>p\\x82P\\xa8b\\x1e\\x9eX\\x80-|\\xf0\\x80\\x0b\\xd0\\xc3\\x07\\xe28@Q&\\x8f\\x10\\n(b\\xd1\\x0e\\xa8\\xc4%\\x8c\\xa0\\xc3|K\\xa1\\x07M\\x1fFG>\\xa2\\xf7\\x80O\\xdd\\xf4\\xbe\\xed\\x051\\xf8\\xa0\\x81\\x00H\\xe0\\x01\\x86\\x08\\xc3u}@\\x8f\\x0b\\xe4\\x81\\n\\x88(\\x06\\xff/\\x881\\x81\\x9dd\\xa1\\xbc;\\x10\\xc4\\x00\\xe8\\xf0\\x81t\\xc4=\\x0b 8\\xc2\\x1fJ\\xa1\\xfc\\xe5\\x8f\\xde\\xf9}\\xaf\\xaf\\xa8\\xef\\xab\\x89\\x1cda\\x0c<\\x87\\x00\\xfb\\x11v\\xb7\\x87\\x00\\xc3\\xc0\\x0b\\x04\\x00\\x01\\x0b\\x87\\x10; o\\xf4&^N\\xd0\\x01\\x8cp\\x08{P\\x04$@\\x01\\x1ca\\x7f\\xcd\\'u\\xf9\\x07cV\\xe7\\x13\\xba\\xf0\\x08\\xf8P\\x02I\\x90\\x04% \\x0em\\xf6\\x00\\xa1\\x80}\\x9e0\\x01\\xba\\x902\\x8fp\\x00\\xba`\\x10\\xfe\\xe0\\x05\\x8a |\\xedg\\x04\\x18 \\x81sw\\x034p\\x00\\xe0\\x10\\x84\\x1a\\x88r\\xf87p\\xf6\\xf5\\x0f\\xd2\\x07\\x07\\xa4`\\nT\\xf0\\x03\\xb2\\xf0\\x01uP\\x078\\xb6\\x05g7\\x18\\x13\\xa0\\t5 \\x04\\x13 \\x047p\\x06r \\x07\\x1aP\\x0eb\\xa8C<\\xe8\\x01G@\\x06\\x0c\\x90\\x00\\r\\xb0\\x11C\\x18u|g\\x84\\xfb\\x07\\x82\\xcfP\\nv\\xb0\\tv\\xa0\\n\\x1f\\x90\\x04\\xda\\xf6\\x03\\xdd\\xb6\\x10\\x10\\xd0\\x0c\\xd9\\x80\\x03G\\x80\\x0b\\x1e\\x00\\r\\xe1\\x90\\x05\\xc7\\xc0\\x08\\x12x\\x0c\\xc7\\x90\\x05\\xa0\\xff\\xe0\\x01e\\xa0\\x00\\x17\\xb8\\x86l(z\\x1b\\xf8\\x86Twz\\\\\\x15\\x0c\\xd6\\xc0\\x11\\x14 \\r\\x1f0%\\x05(\\t\\xc20\\x10\\r\\xe1\\x0c\\xc3P\\x03\\xae \\x00\\xb1 \\x05\\xd5\\x90\\x08\\xd0p\\x08\\xd0\\x00\\r:\\x90\\x08\\xd5 \\x05G\\xa0\\x005\\xa0\\t\\r\\x90\\x11\\x95\\xc8|D\\xc8\\x81p\\xf8\\x81\\xab\\xa1\\x0b\\xc1\\xc0\\x0b\\xd6\\x10\\r\\x1f\\xb0\\n\\x12\\xe0\\x0b9\\xe0\\x0e\\xe00\\x83>\\xd1\\x10\\xd60\\x0c$\\xf0\\x02\\n \\x00\\x9a\\x92,G\\xd0\\x8dh\\xd0b\\xe60\\x89\\x19\\xa1\\x11J\\x01\\x8cnXz\\xfaG\\x8c\\xab\\xc1\\x1a\\xbcp\\x00\\x1f\\xd0\\n\\x120\\x069\\x10\\x06\\x8f\\xd0\\x0b\\xeb\\xa8\\x0b\\xc4\\x00\\x0e\\x9a\\xc0\\x00t\\xc1\\r\\xdc\\xf0l\\xcf\\xf6\\x04$Pr\\t\\xf0\\x0c\\x13\\x80\\x11\\xe4\\xd8\\x86\\xa4\\xf7|\\xe9\\xb8U\\xce\\xc4\\x0b\\x9a\\xb0\\x04qP\\x07\\x0f\\x10\\t\\xf4h\\x8f\\xf7H\\x14\\xcf\\xa0\\x14\\t\\xd0\\x91\\x1e\\xd9\\x8b\\x07y\\x11\\x08\\xf9\\x8b\\xf7\\'\\x8c\\x99\\xe8[\\x08\\x11\\x0c\\xc3`\\n\\x91\\xa0\\noP\\x02\\xf8\\xd0\\x00\\x18y\\x8fB1\\x1169\\x11\\x15yQ\\x11\\xd6`\\x11#Y\\x8e%\\x89\\x89\\xd0w\\x84\\x07\\x11\\x82v\\xf0\\n9\\x10\\t\\n\\x80\\x08\\xd60\\x934\\xa9\\x18\\x0e1\\x168\\xc9\\x93\\xbe\\xe8\\x93\\x97\\x88\\x8e\\x1e\\xb8\\x15:p\\x0bZ\\xb9\\x95\\\\i\\x0f\\xae\\x08\\r\\xa0\\x00\\x03\\xd0\\x00\\tR\\xc0\\x95fy\\x96\\xb8\\x90\\x96j)\\x05l\\xd9\\x96m\\x89\\t@\\x10\\x97@\\x00\\ttY\\r\\x1e\\xe0\\x01 \\x90\\x08\\x89\\xa0\\x03\\xb1\\xb8\\x00\\xa0\\x00\\n\\xb9\\xa0\\x0f\\x88\\xa8\\x88\\x1d\\xc0\\x05gp\\x06\\x01\\x01\\x00;'", - "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00twx\\x9e\\xa4\\xaa;AD.1i\\xc1\\xc2\\xc2xw\\xaf\\x19n\\xfb\\xca\\xca\\xda\\xcb\\xcb\\xcc\\xba\\xbc\\xbb\\xfd\\xfd\\xf1us\\xf0/c\\xef\\xfc\\xfc\\xfc\\xf6\\xf6\\xf7q\\x82\\xe2\\xed\\xed\\xedehiTYZ0V\\xf6\\xfa\\xfa\\xfaPrQ\\x8e\\x8a\\xed\\xf5\\xf4\\xed\\xf8\\xf8\\xf8\\xaa\\xac\\xac\\'4\\x9bTq\\xf0Pj\\xd4\\xb2\\xc0\\xaf\\xa7\\xbc\\xa1\\xfe\\xfe\\xfe\\xf6\\xf6\\xf9]bc\\xb2\\xb8\\xad\\xee\\xed\\xf0|}\\xad/0\\xf4\\xa1\\xa4\\xa4W\\\\k\\xb2\\xb4\\xb4 \\x1ap\\xbe\\xbe\\xbf\\xd9\\xda\\xee\\xc0\\xc0\\xd9\\xe9\\xe9\\xea\\xb8\\xb5\\xeb\\xf4\\xf4\\xf4w\\x88vI[\\xecKRT\\x82\\x82\\x84}\\x83\\x8318:\\xf2\\xf2\\xf2AGL\\x92\\x93\\x95D[\\xce\\xf1\\xeb\\xf3#\\'*\\xe5\\xe5\\xe6\\x0e\\x15\\xf1\\x99\\x9c\\x9c\\x8a\\x8c\\x8bRZ\\x8f0:\\xcf\\xff\\xff\\xf8+27\\x1a\"\\'\\xf4\\xf4\\xf7mrr\\xd3\\xd2\\xdc\\x00D\\xfa\\xf2\\xf2\\xf3cq\\xdd\\x8d\\x95\\xd0\\x84\\xa8{\\xc4\\xc5\\xc7(-2\\xd9\\xd9\\xda\\x12\\x18\\x1c\\x9c\\x9e\\xa3\\xc0\\xc1\\xcd\\x8d\\x93\\x93JT\\xb2\\xd0\\xd1\\xd2\\xbf\\xc7\\xba;D\\x9d\\xe0\\xe0\\xe1\\xb6\\xb6\\xd7\\xff\\xff\\xfc\\xea\\xea\\xeb\\xd5\\xd6\\xd6\\x96\\x99\\x98\\xa4\\xa4\\xaa\\xc6\\xca\\xe7\\x0c\\x13\\x17HLQ\\x8d\\x8e\\x93\\xa9\\xa4\\xe9\\xcb\\xd1\\xc6>J\\xcd\\x9b\\xa8\\x98Kp\\xa7\\x17M\\xf6\\x19^\\xfc\\xa7\\xa9\\xa9\\xaf\\xad\\xd9\\xf8\\xf8\\xfa\\xd9\\xd7\\xf5z}\\x7f\\x16\\x1d!\\x92\\x9b\\x92\\xe1\\xdd\\xd4\\xf9\\xf6\\xf6\\xf0\\xf0\\xf0\\xa4\\xa7\\xa4\\xb6\\xb9\\xb7\\xca\\xc9\\xc2\\xf1\\xf0\\xf2\\x02O\\xfa\\xde\\xde\\xdf\\xe6\\xe5\\xe8\\xf4\\xf2\\xf4\\x97\\x90\\x8d/t\\xce\\x8c\\x94\\x8bkmq\\x02\"\\xfb\\xab\\xaf\\xa8\\xce\\xd1\\xd1\\xe9\\xeb\\xe1\\x83\\x8f\\x81\\xb8\\xb7\\xb9\\xec\\xe9\\xf6\\x95\\x98\\xb9\\xaf\\xb1\\xaf\\xe2\\xe1\\xe3\\xb1\\xae\\xed\\x86\\x89\\x89j\\x85\\x95\\xda\\xd9\\xdb\\xf8\\xf8\\xf1\\x84\\x86\\x89\\xb3\\xb0\\xab\\xee\\xef\\xe8\\x01\\x08\\x0b\\xff\\xfc\\xfc\\xd7\\xd9\\xd6\\xa8\\xa8\\xf2\\x83~\\xbb\\x00<\\xeb\\x00=\\xfe\\x94\\x95\\x98\\xb7\\xb1\\xbf\\x9f\\xa3\\x9f\\xe6\\xe3\\xf3\\xc6\\xc6\\xc1dpl\\x16(\\xf6\\xf7\\xf4\\xf5\\xec\\xe5\\xf9\\xfd\\xfc\\xfe\\xde\\xe3\\xe0\\x9c\\x9b\\x95\\x06\\x0e\\x11\\xf6\\xf6\\xf1 J\\xec\\xd8\\xd7\\xda\\xe9\\xec\\xea\\xe5\\xe8\\xe6\\xf6\\xf7\\xf4\\xf4\\xf7\\xf7\\x00C\\xef\\xe7\\xe2\\xe2\\xd2\\xd3\\xd3\\xfd\\xfd\\xfd\\xfc\\xfa\\xfd\\xf9\\xf9\\xf9\\xf7\\xf7\\xf7\\xf2\\xf2\\xf0\\xf4\\xef\\xf3\\xdf\\xe0\\xdb\\x158\\xfe\\xfb\\xfc\\xfd\\x9f\\x9f\\xa1\\xc8\\xc9\\xcb\\x1e!!\\xfb\\xfb\\xfb\\xec\\xec\\xed\\xf9\\xfa\\xfa\\xf9\\xf9\\xfa\\xf1\\xf1\\xf3\\xd3\\xd4\\xd4\\xfa\\xfb\\xf7\\xef\\xef\\xf0rmnev\\x91#.\\xe4\\xe1\\xda\\xdc\\xa6\\xae\\xb8\\xf9\\xfc\\xfa\\xc7\\xc6\\xc8~\\x91\\x92\\x02\\x01\\xd9f\\x81\\xb6\\xce\\xce\\xd0\\xfc\\xf9\\xf9_u\\x95t}\\xa4qpt\\xd1\\xd5\\xd3\\xd4\\xd3\\xd6o\\x83\\x8e\\xd0\\xcc\\xf2\\x18<\\xecy\\x8b\\x95jo\\x8ehh\\xa2\\xdc\\xdb\\xd5iq\\x86\\xe6\\xe5\\xe1\\xda\\xdd\\xd9\\xc8\\xca\\xc5\\xdb\\xdb\\xdc\\xf3\\xf4\\xf4\\xc3\\xbf\\xb8\\xf3\\xf3\\xf3\\xbe\\xbe\\xfe\\xf3\\xf3\\xf4(0119.\\x1fB\\xd7\\x0fb\\xed\\xea\\xe3\\xe4\\xa9\\xa4\\xcc\\xf2\\xef\\xec\\xd5\\xce\\xe0\\xe7\\xe7\\xe8\\xc2\\xbe\\xf0\\xa8\\xba\\xde\\x9d\\x9c\\xee\\xe4\\xe4\\xe5\\xd0\\xcd\\xc6PQR\\xed\\xef\\xee\\xfd\\xfe\\xfe\\x9f\\xa0\\xd7\\xf5\\xf6\\xf5ba\\xf2\\xf5\\xf5\\xf6\\xf7\\xf8\\xf9\\x91\\x8f\\xa8\\x8e\\x98\\xb5\\xa8\\xa8\\xab\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0a\\xc3:\\x11\\xb88\\x9cH\\xb1\\xa2C\\x1f5\\xde\\x14\\xb2\\xc8\\xb1c\\xc5\\x06\\x19\\xc0\\xec\\x90\\x90\\xc1\\xa3\\xc9\\x93\\x08\\xb9H\\x90\\x11bS*Y\\x18P\\n\\x84\\x95D\\x9f\\xcc\\x8a\\xa8\\xc4\\x80sG\\x00G.J\\x9d$R\\x0c\\xd6e\\xca\\x8f\\x19\\x8b~\\xb8\\x11\\xa3bS\\x84W7\\x1d\\xda\\x80%\\xb0^\\x1eD4\\xfe\\xc8\\xab\\xa8,\\x97\\x1a\\x7f&p\\xdcpB\\x8f^\\r\\x1f\\xf8\\xa2V\\xa4\\xf0\\xe4\\x1e\\x80\\x04\\'U\\x84\\t#O\\x85P\\xb5\\x15\\xa5\\x18\\xa3\\xd2\\xeed\\xae\\x1aQ\\xf0v\\xd4b\\t\\x0f 4\\x1b*\\x85\\xd2b\\x11\\xd6\\x0c1\\x82;\\xc6\\xe1\\x80\\xa7\\xc4\\x06\\x06|b\\x8c\\x12\\x07\\x10\\xff]\\xd0/\\x11\\xa0J\\x0f\\x02\\x93<\\xf3\\x02,w\\xc8B\\x01\\xd5\\xbc`@A\\xb2\\xbd\\x14\\x12\\x02\\x18\\xa5\\xf8P\\x90,\\xf4\\x80aN.\\xfd\\xfd3N\\x03\\xb2\\xcc\\xc1\\x8b\\x03\\x1f\\xfc\\xe2\\x08<\\xe9\\xf4\\xa5\\x8f\\r\\x8f\\x80\\xe9\\x843\\x05q\"]\\x19\\xd6&\\x14E\\xac7\\x10 \\xd0\\x0b\\xe3P\\xf0\\xc2\\x0b\\x8f\\xff\\xf3\\xcb/\\x0e\\xf0r\\x87\\xf0\\x19\\xc8P\\n\\x11\\x94\\x10D\\x07\\xae34\\xf2\\xcf\\x1c\\x1f|P\\x8e\\xc6\\x0ePM\\x81#\\x0fp \\xc486\\r#\\xcd\\x99!\\xacK\\x905\\x13\\xa4\\xb3\\x80q\\x06\\xe9!\\xc0\\x1bCxq\\xb1\\x1c\\r\\xdca\\x03\\x06#`\\xc0\\xc6?O\\x17q8\\x06\\xe1\\xb8\\x03F$\\x11\\x82\\x81\\xf8\\xe2\\x06\\xa5\\xa0\\x87\\n\\xc6\\xf1\\x01^\\xd8\\xe0\\x1f\\xbc(\\x82\\x03z\\xb1\\x0f\\x08\\xda\\xe2\\n\\xeb\\x10FL\\x1eW\\x850\\xf4\\xab\\t\\x05\\xd1\\x82\"&\\x90\\x06\\x0b$D\\x0cox\\x03\\x00(\\xa0\\x0f\\x0c\\xe0b\\x16\\x93\\xc8\\xde\\x16*\\xf8\\x0f\\x07\\xe8c\\x18\\xbc\\xd0\\x87>\\xeaE\\x8d\\x08$j\\x1a\\x02i\\x02\\x18\\xff\\xde \\x06\\xa6\\x8d\\x03\\x16\\xb2\\x18\\x07\\xff\\xca\\xd1\\x0b\"\\xfd\\xa2\\t\\x11\\xc0\\x02Udq\\xbc\\x7f|\\x97\\xacr\\xb8!L 4\\x080\\xa43\\x01C|\\x80\\x16\\x83\\xa8\\xc7?h\\xb0\\xbc\\\\\\x10\\x84\\x02\\x10\\x18\\xc10 \\x90\\x81\\x10Hb\\x08\\xa8\\xc8\\xd9>\\x8a\\xd0\\x00\\x0c\\xbc\\xc0\\x1d\\xc7\\x84\\xc24\\xea1\\x040\\xcc\\x00\\x1cN\\x93\\x05/x\\x01\\x8ca\\xf4\\xa2\\t\\th\\x814N\\x10\\xff\\x01\\t\\xb8!\\x11E\\x18\\x86>f\\xa1C\\x13\\x9c\\xcar\\x07YA\\x0c\\xd0\\xa1\\r\\x11l\\xc2\\x07Qh\\xc2\\x1f\\x04 \\x80\\x04\\\\ \\x12\\x8e\\xb8\\x800\\x14p\\x81n\\x04\\xc2\\x0f00\\x82\\x0cp\\x90\\xacY\\xcc\\xab\\x1c\\xa9\\xfc@&\\xccQ\\nD\\x80\\x03\\x8b8\\xd8B\\x03~\\x81\\x01\\x93\\xce\\xa2\\x1cyP\\x813\"0\\x04\\x01\\xd4\\xe0\\x06!PF90\\xb02\\x81\\xa8@\\x8c3H\\xc8\\x17BP\\x01&t\\xc0\\n>\\xf0\\xc09\\x06p\\x85\\x02X\\xe2\\xaaV-\\x00\\t\\xb4\\x01\\x84\\xae\\x16\\x03\\x00\\x11(\\xc40Z\\xd0\\x0b`\\xbc@\\x1f\\xe5x\\xc1\\x1d%1\\x85W\\xec\\x82\\x08\\x99\\xe8\\x05,:4\\x90DT\\xc1\\x1f\\xfdZ\\xd5\\rPP:\\x0cdO\\x82\\x04\\xb8\\x01\\x14\\xb8\\x86\\x10]\\x98\\x81\\x100p\\xaa\\t\\xcc \\x01\"T`\\x19\\xcb\\xc0F5\\xaa\\xc1\\x08F@\\x03\\x08W\\xd0@\\x8c\\xae\\xe0\\x89E\\xc8\\x03\\x18\\xe5p\\x00Q\\xeb\\x85\\x02<\\xd2\\x80\\x0bo\\xc5\\x81<\\xb2\\xa7C\\x07\\xec\\xa3\\x1c\\\\(\\x84\\t\\x9c\\xe0\\x04i\\xff\\xf8#\\x13\\x85\\x15,a\\r\\x02\\x0b\\x13\\x08\\xa2\\x03 \\x85\\x83\\x0f\\x02Q\\x81\\x01P\\xa1\\x19g\\xa0\\x02\\x15\\xca\\xc0\\xdc 8\\xf7\\nW(A\\x10\\x08Sh\\x10\\x82\\x00\\x13d \\xff\\x10n\\xa0C\\x06\\xbe\\xf1\\x07I\\x08@\\x10:\\x84E\\x03\\xc61\\xc7\\x0f\\xe8\\xc2\\xc6\\xe3r\\x06\\x16\\xb8\\x00\\x81aP\\x80Cl\\t\\x01\\x14J\\x01\\xbb\\x0c\\x94\\xc2\\t]\\xe0\\x81Mfa\\x83z\\xe9\\xa3\\x05[\\x10\\x88\\x1e\\xa8\\xf7\\x8f\\x16\\xcek\\x9e\\xa80B\\xd2\\x80\\x91\\x10X\\xd4!\\x10]\\x80\\x03\\x01\\xea\\xb0\\nD\\x80\\x81\\x08\\x19\\xa0\\xda,\\x8e\\xd84Y\\xe8B\\x06\\x08H\\xc4+T\\xe0\\x0e\\x0c\\xfc\\xc2\\x06f-\\x07,\\x12\\x10\\x06I\\xd4`\\x8e\\xbd\\xd8\\x01\\x18\"\\xa0\\x0b\\xcf)\\xf1\\x03wp@\\x0b\\x00\\xd6\\x80^\\x8c\\x80H\\x9e\\x8b\\x9a>(p\\xd4\\xc1.\\xe4\\x17\\t \\xc4&:\\xd1\\x02\\n\\xe8a\\x08\\x920\\x02\\x0f\\xb2w\\xb1\\xde\\xed!\\x114h\\xda0\\x08\\x05\\x8c3\\xbf\\xac\\x05\\x8b\\xc0\\xe3n\\xdd`l\\x1c`\\x81j\\r\\x10\\xdd\\x1c\\x80\\xa1\\xbd\\x17@\\xe0\\xa6\\x17\\xab4,\\xa8A\\x83~5[!\\xf5\\x08\\xc47`1\\x0c,\\xe4!\\x11F\\xf8\\xa9\\x1aH-\\n\\x9b\\xfc\\xe2\\x0eG\\x08A\\x1e>\\xb0bR\\xf3\"\\t\\xff\\xff\\xb8\\x03/T\\xe0CF\\x0f\\x04\\x0b\\xca&\\x89\\x9e\\x8715\\x08\\xc8\\xc2&0\\x01F#\\xb5\\xe7\\x80\\x11\\xc0\\x18\\n\\x11`\\x08%6\\x01\\x01\\x82\\xc0\\x82\\x0b>\\x8d\\x00\\x01\\xaa\\x80\\nw$B\\x1e\\x18x\\x84$\\xdc\\xf0\\x8b\\x17\\x0c\\xd5&\\xfa\\xa0\\x9a3\\x16\\x81\\xee\\xa0\\x13\\xc4\\x07\\xcb{\\x8b\\x121\\x00\\xbe\\xd1\\xd5\\xda\\x01\\xc2\\x1e\\xe8?F\\xa0\\x02\\t\\xc0Oz\\xa5n\\x80\\x1a\\xe8p\\x107,\\xaf\\x0b\\xe1\\xdcB\\x1e.\\xee\\x0f#\\xa0\\xc0\\x01\\xb2\\x00\\x86\\xf5~\\xd1\\xb4\\xe0\\x06a\\x80.;\\x80P7\\xf1\\x04\\x1f\\x03\\x06C`\\x04~0n*\\xd0\\t\\x90\\x00\\t\\x81@\\x032@\\x04\\xa5`\\x0ep\\xd1\\x10\\t X\\xa5\\x90+7@\\x0f+\\xc1\\'\\xa8\\xb2\\x03\\x11P\\x05\\x821\\x0b?\\xc0R\\xcb#\\x002\\xd0*|\\xa25D`\\x04\\xaa\\x80|\\xb8@\\x01\\x84\\xb7r\\x00P\\x03\\x94\\x032`\\x00\\x06\\xbb \\x003\\x80\\x83QQ=\\xb0@\\x01\\xe1\\xd0\\x00X0\\x057\\xf0\\x06\\xa5 \\t`\\x08\\x86`P\\x03n \\x08\\xc9\\xe0\\x0b\\r0\\x7f4v\\x85P3\\x10\\xf5\\x90\\x01`\\x15\\x01\\x110\\x03\\x080G\\xff\\xb067\\xa1g\\xb2\\x80\\x0f\\xf5\\xb0\\x05\\xa9P\\x0f\\xa3\\x80\\x029\\xb2#\\x12\\xe0\\t]@\\x06\\xaa\\xe0\\x0e\\xaa\\x90\\n\\xab\\x00\\x0bj\\x04\\xf8\\x0f\\x01\\x01\\x00;'", - "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\x9f\\x9f\\x9f{z\\\\\\xc2\\xc1\\xb2\\xb6\\xb4\\x9d\\xb9\\xb9\\xb9\\xd9\\xd9\\xd2\\xef\\xee\\xe8FHI\\xad\\xab\\x93\\xaf\\xaf\\xaf\\xaa\\xaa\\xaa_^\\x10\\xf8\\xf8\\xf6EC\\x1b\\xe2\\xe2\\xe2[Y=dcC\\xec\\xec\\xec\\xe2\\xe1\\xdekj+rr,\\x7f~D\\xfa\\xfa\\xf9\\xe6\\xe6\\xe6{zU\\xea\\xe9\\xe2\\xf6\\xf6\\xf2\\x85\\x84TsqVfe\\x13ed-\\xe5\\xe5\\xde\\xb4\\xb4\\xb4\\xa1\\x9e\\x85ZY\\x0e<:\\x12\\xa6\\xa4\\x8a\\xe8\\xe8\\xe8\\xfa\\xfa\\xf8QSF\\x9b\\x9a{db<\\xef\\xef\\xef\\xa4\\xa2\\x86][4rqA\\xd5\\xd5\\xcd\\xda\\xd9\\xcc\\xf2\\xf2\\xed\\xfc\\xfc\\xfbml=rr6\\x8a\\x89dZX\\x17nm4\\xc3\\xc2\\xaeusK\\xb9\\xb8\\xa0\\xf8\\xf8\\xf8\\xb1\\xb1\\xb1poD\\xd1\\xd0\\xc1\\xf6\\xf6\\xf5\\x8b\\x8aX\\xed\\xec\\xe5fe$\\xee\\xee\\xee\\xea\\xea\\xearr:cb5\\xcd\\xcc\\xbc\\xf4\\xf4\\xf4xy%\\x95\\x92s\\xc1\\xbf\\xaaKI#yxLJ\\x1e{{G\\x7f~N\\xbe\\xbc\\xadcb\\x0f\\xab\\xa9\\x8e\\xb1\\xaf\\x96\\x9c\\x9a\\x82\\xe8\\xe8\\xe5\\xe4\\xe4\\xe2\\xe3\\xe2\\xe0]\\\\\\x18fe\\x19usWljD\\xf3\\xf3\\xf2\\x94\\x94b\\x9a\\x98\\x80mm\\x13\\xcd\\xcc\\xc0\\x83\\x80`\\x8d\\x8d]\\x91\\x91`TS*\\xe4\\xe3\\xddB@\\x1f`_&\\xde\\xdd\\xd8\\x9f\\x9e\\x7f\\x86\\x83h\\x7f\\x7f9\\xc0\\xbf\\xb0kjL\\xbb\\xba\\xa8\\x8a\\x88m\\x94\\x94\\x94\\x8e\\x8cp\\\\[%\\xf7\\xf7\\xf5a`\\x1f\\xcc\\xcb\\xbb\\xf0\\xef\\xeahfB\\xa2\\xa2\\xa2\\x99\\x99\\x99\\xd6\\xd5\\xc5\\x82\\x81M\\xb7\\xb7\\xb6\\xc6\\xc5\\xb3\\xd0\\xcf\\xc3\\xe3\\xe2\\xd8US&\\xb5\\xb3\\xa0~|a\\xa9\\xa6\\x91\\xc8\\xc6\\xb8\\x8b\\x8bYSR\\x15fe\\x1e\\x97\\x97d\\xbe\\xbd\\xab\\x90\\x91^\\xde\\xdc\\xd0\\xda\\xda\\xd3_^.\\xc9\\xc8\\xb6\\x87\\x87V\\x90\\x8et\\xd8\\xd6\\xc9\\xd3\\xd2\\xc8\\xd0\\xce\\xbe\\xbc\\xbc\\xba\\xbd\\xbd\\xbd\\x88\\x88Xa_BYW.XW\\x1aQO\\'\\x98\\x9a\\x0f\\xbf\\xbf\\xbf\\xfe\\xfe\\xfe\\xbe\\xbe\\xbe\\xa4\\xa4\\xa4\\xdf\\xdf\\xdf\\xd1\\xd1\\xd1\\xd4\\xd4\\xd4\\xdd\\xdd\\xdd\\xce\\xce\\xce\\xd7\\xd7\\xd7\\xe4\\xe4\\xe4\\xda\\xda\\xda\\xca\\xca\\xca\\xc2\\xc2\\xc2\\xc6\\xc6\\xc6\\xfd\\xfd\\xfdYX)\\xfe\\xfe\\xfd\\xe5\\xe5\\xe5\\xfc\\xfc\\xfc\\xfd\\xfd\\xfc@>\\x15\\x88\\x87a\\x7f\\x80\\x0e\\x98\\x99$\\xe4\\xe3\\xe2\\xe5\\xe6\\xe5\\xbe\\xbf\\xbe\\xb6\\xb6\\xb5ii\\x18\\xd4\\xd3\\xc4\\xb9\\xb8\\xa7\\xf4\\xf3\\xef\\xe4\\xe3\\xd9\\xbd\\xbe\\xbd\\xeb\\xeb\\xea\\xbc\\xbb\\xab\\x98\\x98e\\x8e\\x8e[\\xa8\\xa8\\xa8cb\\x1dxwH\\xd3\\xd2\\xc3\\xc7\\xc6\\xb8qoPRP\\x1bxuPNL)\\x7f~H\\xf1\\xf1\\xf1\\x90\\x8en\\xb0\\xae\\x9a\\x98\\x96\\x7f\\x98\\x95w\\xfb\\xfb\\xfa\\xe0\\xdf\\xdb\\xed\\xed\\xedll#\\xe9\\xe9\\xe9\\xd7\\xd6\\xd0\\x8e\\x8f1\\xeb\\xea\\xe3oo,\\x89\\x88^]\\\\0\\xe7\\xe7\\xe6\\x8f\\x8f\\x8faeWXZc\\xe7\\xe6\\xde\\x9d\\x9b\\x84z{\\x0f\\xd8\\xd8\\xd0\\xcb\\xca\\xbd\\xfd\\xfc\\xfc\\xe5\\xe5\\xe3\\xe5\\xe4\\xe4\\x91\\x93\\x0eKJ\\x17\\x93\\x94a\\xe8\\xe8\\xe0fe4gf\\x10\\x98\\x98f\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00W\\xfd\\x1bH\\xb0\\xa0\\xc1\\x83\\x06Y)\\\\\\xc8J\\x97C]\\xbe\"\\x86\\x0bg\\xa1\\xa2\\x0e\\x1d\\x82|\\xf88\\xb2\\x86\\x9b\\n\\x15\\xe3\"\\x0c)q\\xa1\\x96\\x83W\\xb2l\\xd1\\x8a\\x05k\\xd6\\xad\\\\\\xb8Z\\x11\\x00\\x91@\\x81+\\x00\\x02\\x11\\xea\\xdc\\xf9\\x8f\\xe1\\xc2\\x87\\x10%R\\xb4(H\\x87F\\x8e\\x1eA\\x8a$i\\x12\\xa5J\\x96.a\\xca\\xa4i\\x13\\'\\xcf\\xab=Y\\r\\xf4\\xa9\\x10hD_\\x13+Z\\xb8\\x98qc\\xc7\\x8f!G\\x96<\\x99re\\xcb\\x971g\\xd6\\xbc\\x99\\x13\\xebAV\\xbct\\xe5\\xe5\\x95W\\x17C\\xafB-2\\xc8x\\x84\\xe3Y\\xa5j\\x9b\\xb6\\x85\\nw\\xea\\\\\\xabv\\r\\xf2\\xeas\\x83\\x81\\x13A\\x0c&\\xc6\\xf8\\xf5\\xcb\\xe1\\xaf\\x18\\xa0\\'\\x0ee\\xc0\\xc0,\\xb7\\xd3\\xa8\\xd1.]\\xeb\\xd4m\\xd4\\xb8T\\xe9F.\\xc8\\n\\x1d\\xa7GZ\\xf0(y\\x01\\x04\\xc62\\r\\x820\\x0f\\x0e\\xae\\xa1\\xb8\\xa3\\x1e\\x8c\\x10\\x84\\t&\\x03\\x07\\x9d\\x0fd\\xc6}D\\xcc\\x94\\xed\\xd3\\xb7R\\xe5V\\xad\\x1b\\x19/\\x89\\x16\\xfc\\xb8\\x88\\xff\\xdf\\xc5\\tC\\xb0\\xf3\\xe8\\xd3k\\xe1\\xc7i\\xd7#.\\xf9\\xb8\\xf0[\\x87\\xa0Q\\x01:\\xce\\x84Pg\\xbd\\x18;\\xec\\xc7\\xdc\\xd9\\xc5\\xca28\\xf8c \\x1b\\x94\\x80wJ\\x03\\\\4\\x00\\xcc\\x83\\x10\\x8e\\x00\\x05\\x14\\xc04\\xb0K\\x0b\\x1b\\xb0\\xe1\\x0f5[x#@\\x14\\x1fD DZ\\xd5\\xb5\\xc6Xv\\xb1A\\xd6\\x1d/bl`\\xe0\\x8b0\\xfa#\\x07%4\\xd6X\\xa3\\x861\\xfa\\xd3\\x00 \\x92\\x08\\xb0\\t\\x19#\\xae\\xa6\\xd8u\\xaf9\\xb6\\xddl=\\x81\"\\x83\\rLT@\\x89\\x1c9F)\\xe5\\x8b2<\\xf0\\x897FH\\x10\\xc1\\x96\\x89Y\\xe7Zc\\xda\\xc9\\xd6\\xdd/xX2M?hv\\x80F:3T\\xb0\\x01%SN\\x99I\\x1d\\x91\\x8c\\x81\\xc9\\x1e\\xf4\\xd3\\x05\\x8c?L\\x00\\xc6\\xaagD+-%\"L;\\xc1\\xb5\\xc8\\xfc\\xb0\\xe1\\x12\\x91\\x84\\xe0#;\\xe5\\xfc\\xfa%\\x8a\\xe6b\\x85W\\x0e\\x96,\\x00e\\x8c\"\\xacZC\\xb4\\xc3L[\\xaf\\x81\\x1b\\xb8\\x8b\\xad\\xb6#p\\xf0\\t$\\xa1\\x84+\\xf0\\x89\\xff\\x1dip\\x0c\\xc7N\\x13e\\xc3\\xaa>\\x0cm\\xc4\\xf4\\xc6\\xa8H\\x10\\xef\\xa6\\xe3\\xcf#[\\xe4!\\t\\x15w\\xb0\\xf3\\xf1\\xa7~\\x0e\\x8b\\x10+\\xe1\\xc8\\xd0O\\xb29\\xa2|\\xa8\\xca\\xaa\\xb0\\'\\x14\\x03\\n]T\\xe0z\\x05\\x9e\\xfc\\xf0\\x03\\x8dBc\\xbe\\xf2\\xb4\\x9bK\\xd9\\xf9\\xe7\\x01\\xf8\\xbb\\x89=\\xc5\\xc0}z\\xcf\\x06\\x9b@\\xc3\\x8b\\x18\\x9c@\\x89>l\\xb0q\\t\\x0fc\\xdf\\xaey\\x9cDx\\x0eA\\x00U\\xf8XF\\xf0^\\x0e/,\\xa0\\x0c\\xc8\\xf0\\xa2;\\x07P\\x13G4r\\xb0\\x01\\xbd\\xed\\xaa<\\x81;\\xf5\\x96\\xf0\\x9e}\\x01\\xdb\\x0b\\xcf\\xf3\\xf7W\\xe9\\xf2A\\x0b\\x06B\\xc3F\\xec\\x9e(E\\x1c\\xf4\\xb1\\xbe\\xa3E\\xcb}\\x94 B\\x9cf\\x80\\x06\\x0f\\\\o~\\xf5\\xeb\\xde\\xfd\\n\\xc6\\x93_P\\x81\\x7f\\xfe\\xb8\\x04\\x1b\\xa2Q\\x8a\\rx\\xe2I\\x054\\x14*\\x0e8\\xad\\x05P.\\x08(D!\\x11\\x88P(\\x07bo\\x0f\\xf43\\xdd\\x04\\xb9\\xf6\\xb8_ @\\x1d\\xfdcC&~\\x10\\xc08\\xc8!\\x84h\\xb2\\x830\\xff\\xa0\\xe5\\xbeh\\xcc\\xe0\\x88G\\xa4\\x80\\x12\\x97H\\x8e~\\xb8pW\\x05 \\x86\\x0c\\xfb\\x84?b\\xc5`\\x00Z\\xe8\\x02\\x11l\\xc0\\x0f\\x0fp\\xe2\\x8b\\x1e\\xf0\\x00?V%D\"\\xc6iZ\\xa5`\\x82\\x13!\\x80\\x811\\xc0P\\x8a\\xf6\\xa3\"\\x05\\x1f\\x17\\x0e\\x04\\xd8`\\x89\\x14H\\x87\\x1e\\xf5H\\x81\\t\\\\\\xceP\\x81\\x18b\\xfb^\\xf4(/\\xf0\\x80\\x07\\xfc\\xe8b\\x11\\x12\\xc9\\x8f\\x14\\x04\\xc0\\x8d\\xf3\\x80\\xa3\\x04\\xe5H\\xc3\\x9f\\x85c\\x05p:\\x10\\x062q\\x89N\\xfa\\xa3s\\xaa\\xe2\\x82 \\xcf\\x01\\x1eF\\x9a\\xf2\\x94\\x894\\xc5\\x0b#9\\xc5rU\\xf2.&\\x08\\x06\\xde0\\xf0\\x8e\\x07\\xc0\\x88\\x12hP\\x150\\x04i\\x05T\\xfa\\x92\\x91\\xaa\\xac\\xc2\\x1b[\\xb9\\xb5\\xb9\\xfd\\x8c\\x01\\xc1\\x80\\x11\\x1b\\x02\\x90I\\\\\\xe5\\xb2V\\xc0\\x90\\x07\\xb4\\x90\\xf0\\xcb_\\x06s\\x98qt\\xa51\\xef\"\\x08\\xf1\\xc5\\t\\x97\\x87B\\xc3\\x08\\xdc\\x00-\\nT\\xd3\\x97\\xd7\\x8c\"1\\xe5\\xe6\\xb8\\x83\\xf0\\xc2\\t\\xde\\x9c\\x128\\r%Nr\\xaa\\xc2\\x9c\\xe7<\\xa5*w\\x15\\xff\\xc9^d\\xb3\\x98\\xed4\\x88.\\x80\\x80\\xc1)\\xc9\\xe1\\x99h:\\xc38\\xcb\\x99O}6\\x01\\x92\\xc4\\xf0\\xe7$\\xb5\\x19P\\x82\\x14\\xab\\x1a\\x05\\x9d\\x12B\\xfb\\x81\\x8a\\x06 \\x83\\xa1\\r\\x05\\xe6C\\xbf`\\x8e\\x88\\xfe\\x93\\x9d\\xa9\\xdb\\xca/\\xaa\\xc1\\x0f$\\xce\\x80\\x08^\\x88\\xa9LK\\xb1Ql4 ^\\xf7\\x0c)#\\xb705\\x92\\x9at\\xa2\\x00MiO\\xea1\\x80 8\\xeb\\xa8h\\xca\\xc7\\x12\\xb2\\x00R\\x9dn!\\r\\xdfx\\x86\\x0b~\\xea)Jn\\x936u\\xb4\\x04R\\x8f\\xda\\x80%\\x0c\\xa2\\xa9!}\\xea7\\xfa\\xe0\\x023H\\xb4\\xaa\\x14\\x15*\\xd0V\\xb0\\xd1\\xad\\xa6i\\x04\\xa7\\x08\\x04\\xb4\\xd2\\xa1\\xd3Dn\\x81\\x03S \\xab\\x04\\xceJ\\xae\\xa0\\xf2\\x84\\x15\\xb1l\\xab[+\\x01\\x8cS\\x9c\\x02Zu\\xb5+^\\x95\\xe1\\x82\\xbd\\x9e\\x14u\\x7f5\\x01\\n\\x80!\\x85\\xcaV\\xa2\\x06\\x98\\x1d\\x84fge\\xa8A\\x8c \\x15,\\xd8\\x02b\\x13{\\xd7)0\\xd6\\xb1@Eid\\x81\\x80\\t@\\\\\\x83\\x05Kh\\x80lG@[\\xda\\xff>\\xc8A\\xc0`\\x81!\\x0c!\\x0ca\\xec\\xe2\\xb7\\xc0\\r\\xaep\\xc9S\\xda\\xd3\\xf2Uk\\xaa%V8\\x0c\\x00\\x8a\\x01$\\x01\\x03jH\\x81t\\xa7+]\\x16\\xb0`\\x0es\\xd0-\\x06\\xe0`\\x88\\x14\\x9c\"\\x15\\xb1\\xad\\x83x\\xc7K^\\xf1.\\xc1\\x14S\\x93\\xaaY\\x1fK<+.\\x83\\x19\\x9d@\\x008h\\x00\\x078h\\xe1\\xbe\\xf7\\xc5@6p\\xc0\\x83k\\xe0@\\x0bI \\x01\\x02V@\\x83l\\x18\\xc2\\x14[x\\x80\\x82\\x17\\xcc\\xe0\\x07\\x98\\xa2p$\\x10@\\x14\\x8f\\xcb\\xb8\\xf6>\\x8e\\x17\\x0c(\\xc4\\x15D\\xa1\\x84\\x01\\x88\\x01\\x01\\xca\\tC\\x18H\\xb0\\x02<\\xa0\\x00\\x1cI@\\xc1\\n\\x06p\\x03F\\xe4`\\x05\\xdd\\x80C\\x00\\x9a@\\xe3\\x1a\\xd38\\r8nB\\x00\\xf2\\x10\\x0fH\\xbcA\\x16\\xf7X\\'d\\xff\\xfa\\x0b\\x06\\xc0 \\x03W\\xd0\\xc4\\x0b@\\x91\\x88dT\\xa3\\x07\\xa2 D\\'n\\xa0\\x04%\\xdc\\xa0\\x13\\xc9\\xd0\\x84&\\x92q\\x031\\x8cx\\x05+\\x08\\x81\\x98\\xc7\\\\\\x852Wa\\x05\\x08P\\x06=\\xd4)d\\x0b\\x13\\xeb\\xab3\\x0c\\xd0\\xc02`\\x00\\x83B\\x14\\xc2\\x00\\x06\\x00\\x02:\\xf6\\x01\\x0ff8\\x82\\x19\\xf0\\x00\\x82\\x9d\\x91\\x0c\\n(\\x1b\\xc1\\x08\\x84H4\\x15\\x16=\\x89FO\\x82\\no\\x88\\xc2\\x1d\\xcc\\xc0\\x8e\\xb7\\xa5v\\xc8WQ\\x08/8\\xf3\\x99\\xd0L\\x844N(\\x8e\\x06\\x9c\\xc0\\x00\\x13\\xc4\\x19\\x06yFG\\x06V\\x9d\\x81}\\xf0\\x19\\x1e\\x1f\\xa0\\x83\\xacem\\x0f\\x80\\x05\\xac\\xcd)J\\xc0*v\\xcd\\xeb^\\xfb\\xfa\\xd7\\xbb6\\x86\\xb0\\x8d\\xd1\\x8ab\\x1b\\xbb\\x19\\xcd \\x05)F\\xc1l\\x028\\xfb\\xd9\\x04X\\x84\\xb4\\x8fA\\xedjS\\x1b\\x04 \\xd8A\\x02\\xb6]\\x13\\x05HC\\x1a\\xae8\\xc4!\\x00\\x00\\x00D \\xe2\\x0f\\x7fhG@\\x00\\x00;'", - "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\x95\\x94\\x93\\xfd\\xfd\\xfdvll\\x8c\\x8b\\x8a\\xe6\\xe6\\xe6z=N\\xb8\\x84\\x93\\xb2\\xb2\\xb2\\xf8\\xf8\\xf8\\x87\\x1a8\\xa3\\x9d\\x9c\\xc6\\xc6\\xc6\\x91\\x8d\\x8e\\xaa\\xaa\\xaajab\\xe4\\xe4\\xe4\\x99\\x99\\x99\\xfa\\xfa\\xfaSRQ][YyGR\\xdd\\xdd\\xdd\\x88\\x82*\\x8e\\x83\\x83\\x81{#\\xc2\\xc2\\xc2\\xe2\\xe2\\xe2qpl\\xf3\\xf3\\xf3\\xee\\xee\\xee\\xda\\xda\\xda\\x9b\\x92\\x92\\xae\\xae\\xae\\xd7\\xd7\\xd7QON\\xca\\xca\\xca}zy\\x80~z\\xd1\\xd1\\xd1\\xb8\\xb8\\xb8ysr\\xcc\\xcc\\xcd\\x86*CLLL\\xdc\\xdc\\xdc\\xb4\\xb4\\xb4\\x9f\\x9f\\x9f433\\xac\\xa4L\\x98\\x0c3\\xb8\\xa7\\xac\\xab\\xa6\\xa4\\x85\\x83\\x82\\x92\\x83\\x86???\\xce\\xce\\xcev\\'m*\\x8b\\x16\\xe9\\xda\\xa5n\\x9d\\xc6\\x8dJ\\x97\\xea\\xdd\\xabz\\x116l\\xa7d\\x1d\\x88`pJ\\xa5pe\\xa0\\x16+\\x03) \\x90\\xf3`\\t\\xdbb\\xa3i\\x93\\xb2e\\xfa\\xf6\\xa9\\\\\\xa9u\\xab\\xe2\\xcd|\\xb0R\\x05\\x00\\x10R\\xc8je\\n\\xd6\\xab\\x181h\\xe5\\xba\\xc5*\\x85\\xb7%d\\xe2i\\x02U\\xf6\\xa8Z\\xa5m\\x9b\\xc2\\x85:w\\xaa]\\xabyy\\x0f\\xff\\xac\\xe4\\xa8\\x93,T\\xc8\\x13\\xa8\\xc0e\\xcb\\x81?\\x7f\\x14b8\\x07\\xb7\\xc4\\x11\\x01\\x0e\\xd5c?\\xce^{r\\xf7\\xdc\\x97\\x85\\xa7\\x17_\\x08@\\xe0J\\x0cI\\xbc\\xb0\\xc2\\x04^\\xbc\\xf7\\x9e-1\\xac\\xc2@\\rQ\\xd0a\\x8d(\\xafY\\'\\x1bd\\xda\\xd9F\\x99w\\xbaa6`%7ha\\x11(C\\xac\\x82\\xe0\\x0b\\x9e\\x0c2\\x88\\x04\\x0e\\xfa\\x13\\x83+\\x10\\xf0\\x00\\x0e$\\xf1p\\x92\\xa1~\\xd8\\xd1&\\x19w\\xb8Y\\x06\\x1eo\\x95\\xd0p\\xc5\\x06\\xd9\\x84\\x14L\\n1\\x14\\x12\\xc4\\x15at\\x92\\x1a\\t\\xe8D\\x12\\x03jR,\\xb2\\x84\\x0e\\x99P\\xd7\\xd8u\\xb3E\\xb6\\xddm\\x95}\\xb7[f\\x95\\x00 \\x82!\\x07\\xc0\\xa3\\xc1\\x92\\xac\\xf02\\t\\x0e\\x14\\xac\\xc2\\xca,\\xad\\xa4r\\xc0<\\x10@P\\x0e\\x03c\\xdc@\\x006\\xa3X\\x07&\\x87\\xfd\\x01Yf\\x88\\x02\\xf2\\xd4\\x90\\x12\"L\\xd0\\xc4\\x1dZ\\xb8\\x90\\x82)1\\xbc\\x02K\\r\\xb5\\xc8\\x99@\\x0c\\xb0\\xa8\\xb2J\\'\\x00\\x8cc\\x86\\x0b\\xf1X\\xd2\\xc1\\'\\x1c\\x84\\xe2*\\x07\\xd8d\\xff\\x13f\\x87\\xfe\\x05i\\xa6\\x88X5\\x84\\xc4\\x00X\\x10\\x00\\xc1\\x02\\x07\\x1c\\x90B)\\x0c\\x90p@,\\x85\\xbc \\x82\\x0f\\x14\\xa8@\\xcb+\\xad\\x04\\xdb\\t\\x04.\\xb0\\x13\\x82%\\x9at \\xce\\'J!\\xfa#\\x99 \\x06\\x88f\\x009Tp\\x0e#V B\\t\\x10\\xde|\\x90N\\x17\\xab\\xec\\xf1\\x88\\rB4\\xf8\\x9e\\n\\xa6@\\x90\\n,\\xb5\\xb82,\\x1cCd\\xa0\\x01\\x01\\x99h\\xc2\\x89H\\xa4\\x88\\xe9\\xe1\\x7fB\\x9e\\x99UC\\r\\xec\\x82\\xc5\\x06c\\xd0\\xd0\\x82\\x12?\\xf0\\xa1\\x807\\xaa\\xb8\\x11\\xc4\\x17\\x13\\xd8\\xe1\\xe0-\\xad@`\\x80\\x1bh\\xd0\\x82\\n,\\x06\\xe8\\xf9KNL\\x10LJ\\xc2\\xb4*\\x1a\\xee\\x90\\x03\\x06\\x00\\x8a$\\xc0\\x0c\\x00\\x04\\x14.\\xacs\\xc9\\x13\\xc4@\\xd0\\n*{\\xd0i\\xc4{R\\xc8\\x07\\x01,S\\xbc\\xe0\\xcb\\x19\\x05\\xa8\\x10C,\\xad\\xa4@\\x03?Hh`I&\\n\\xd7\\xba\\xa8\\xb89\\x8f\\xe2\\xcf\\x1dD\\x0c\\x00\\xc0\\x06 \\xc41B\\x9f}\\xeabJ,1\\xa8P\\x00.\\xb0@\\xc0\\x0f\\x82\\x92H\\xff`\\xaf\\x03x\\x1f\\xc0\\xc0\\x12X\\xc4\\xf3\\xc0)a\\xdb\\x0c \\xce\\x0f\\x07\\x80\\xc0%\\xfe\\xf4!\\x01\\t\\x86\\xc0qB\\np\\xa4\\xe2\\xca\\xa8}\\xd6`\\x00,1\\x94\\xec\\x8a\\x1bbd1\\x88\\xc8\\xf7\\xaa2@:\\n\\x10c\\x02\\x13\\x96\\x9cR3\\xb8\\x8b;\\xfcp\\x04\\x9c\\x04B\\xcd\\x069l\\xb0\\x812\\x0b\\xfc2\\x8b\\x1fW\\x9b\"Kj}\\x1e\\x00\\xc1y~\\xe0\\xf0\\xc7\\xd2\\xef\\xd1\\xb2\\x8a\\x00<|\\xc0G\\n\\xb0\\xcb\\x9e(\\xed\\r\\xe3\\x9ak;\\xd8\\x18QE=v$\\xc3\\x0c\\x1c\\x00t\\xf2J\\x12\\x81\\xa0\\xa3\\xc2-\\xa8\\xe0\\x99\\xc2\\x00p\\xebR\\xcb+\\xb4\\xa8@\\x01\\x05\\xaft\"\\x05=\\x8b\\xe0\\xc3\\r`\\x978\\xee\\xdd\\xaaQ\\x8e\\n\\xc0(.!\\x841,\\x0b\\x06\\xc9 \\x81.\\xfc\\xf0\\x08\\xd3\\x89\\xcc\\x16\\xb8\\xa0\\x85\\x01\\x82\\xe3\\n=\\xc5M\\x15\\xac\\x88\\x81)\\x18\\xb0\\x83\\xea\\xb1A\\x0b\\x87+\\xe0\\x87j\\xe7\\xbd\\\\!\\x80\\x13/\\x98\\xc1\\x04\\xd4\\x00\\x03|\\xa4\\xa0\\x13\\xf6xA\\x18&\\x00=\\x7f\\xdcB\\x16\\x10P\\xc5\\x1e\\xffb\\xc0\\nQM\\xabO\\x9d@\\xc1\\x0e.\\xa0\\x80\\' \\x81`*d\\xd8\\x01\\xc5S\\x89vd\\xc3\\x08P0\\x84\\x1a\\xee\\xa1\\x0e\\n\\xcc\\xe2x.\\xd8\\xc0 \\x1e\\x84\\x8aN\\x94\\x02Y\\xdcp\\xdf\\xb3\\xfa\\x95\\x02v\\x9ca\\x07\\xe9\\x98\\x01\\x16*`\\t\\x9amo\\x85\\xddC`\\x027\\x11\\x07*\\xe4\\xe0\\x08\\xf7\\xd8B>\\x90\\x13\\x0bU\\xa4\\xa2\\x13\\x030D\\x01f\\xa1\\xaf\\x18)\\xc5u\\x12\\xa9\\x18)\\xa0\\xc4#\\xc4\\x90\\x84+\\xf4\\xd0A\\xb8\\xb8RpR\\x90\\x8a}L`\\r\\x0c\\xe8\\x04qR\\xa1D\\n\\xdd\\xc1\\x03\\xa78\\x18:\\x176L\\xb2\\x8d\\xab\\x017\\xb4\\xda\\x1f\\x0c\\xe1\\x05#\\xdcTe\\xa90\\xdaq\\x88\\xd8\\x0c\\x1a8\\xa1\\x0b4\\x80\\x80\\x14x\\x10\\xc0\\x14\\xc0\\x83\\x14\\x1dXi:[\\xea\\xd4\\x01iB4*\\xa2\\x85\\x08\\x840\\x01\\xaa\\xda\\xc1\\xaa\\xf1\\x99E)d\\x80\\n\\n\\xf8\\xc3\\x01*hN) `\\x86\\xff]\\x00\\x1c\\xc4@a\\xb6\\xd4\\xca\\xd4\\x85\\xda.+\\x01\\x10V\\nT\\x11\\x83I\\xd8\\xe0\\n\\x82\\x90\\xc0 \\xea\\xea\\x05V\\x02\\xd1\\x14*p\\x907W\\xb1SW\\\\\\x80\\x04\\x0c\\xf8\\x81\\x16\\xe0aNMxr\\xadMeh\\xae\\x02`\\xa9\\x14\\xff\\x84\\x10\\rAxA \\xb2@\\x85\\xb9\\x9e!S\\x9d\\xc0\\x84)p\\xc1 \\xab\\x92\\xac\\x14\\x98\\x9af-\\x0e\\x00\\x9c\\x10\\xc4\\x0cl\\n\\xbd\\xd9c{RE8X\\x93\\xb21\\xd8\\x03/\\x9c\\x14\\x08I\\\\\\x01\\x071PEp\\x0c\\xb0\\x07\\x1b\\xac`\\x10\\x7f@\\x85\\xd1ha\\x8b\\xbf\\xde\\xc2\\x14\\xa9\\xa1\\x84\\tX@\\x80\\xd8\\xcdN\\x9dm\\xcd\\xd51\\x81#\\x9cZ\\xa0\\'\\x06~\\x98\\x82\\x18^0\\xc4T\\x94b\\x00)\\x98\\xc5\\x1e\\xe6\\xa4SVP\\x00z\\xb6@\\x05?\\xbcQ\\x05%\\x90\\xa3\\x02\\x04\\xd0\\x1eKc;]Gi#\\x1b\\x15\\xb8\\x03\\rh \\x1a\\x03\\x84\\x109V\\x9a\\xc5\\r\\xcf\\x10\\x86.\\x98\\xc3\\x14\\xa6XE):\\xc1\\nt\\xf8\\xa0\\xaa\\xdeLA\\x17>0\\x86; \\xe1\\x01\\x96\\xb8/[eK\\xddv@\\x83\\x00z\\x80D\\x14. \\x80\\xa0\\xae\\xe2~\\xc8\\xf1\\x977.\\xbb\\x02I\\x88\\x80\\x06\\xd3\\xbaT\\x1bl \\x88A\\xe0\\r\\x08\\xf4HG\\x14(\\x11\\x02 \\x0b\\x99\\xc3-L \\x02\\xc4Q\\x8dD\\xfc@\\xff\\x01P\\xe8B\\x18\\xbc`]W\\x1c/\\x05+\\xb0\\x81\\x9e=!\\x89\\x17|A\\x04\\x03HE,\"1\\x89\\x04\\xa0B\\x16\\x02\\x08s\\x85\\x9e\\xa8a\\xd8:6\\xcd\\x1eV\\x02\\x106\\xe0\\x89@\\x04\\x82\\xca|\\xde\\x85\\x94J\\x91\\x05O\\\\\\xe1\\xd3\\x95\\x16\\xc4\\x19\\x1c\\xe0\\x83q\\xb8\\xc3\\x14\\x86\\\\B\\x17\\xc8:\\x06,\\xd0\\xb7\\xd1\\x8d\\x95.\\xa4\\xf7\\x12\\x00#\\xbc\\xc0\\x06}\\xb6\\xc1n\\xb3\\x90\\x85\\x15TY\\x04\\x12\\xf0\\xb5\\x08V\\xe0\\tO\\xe8P\\x02\\x0e \\xc1\\x05\\xcc`\\x06 tb\\x1c<\\xa8\\x018\\xd8`\\x02\\xaf\\xc1Zl\\xb2\\xd6\\xe3^\\xda\\xe1\\x8db{\\xfa\\xb2W\\xf0\\x04\\xb0% \\x01\\x1b\\x88 \\xdcW\\xb8\\xac\\rn-\\x08\\xb0\\x12\\x81\\x10\\xe0X\\x04\\n\\xcc\\x90\\x8e\\x0fT\\xe1\\xa8P<\\xf3\\xa3\\xb5\\xad\\x19m\\xb0#\\xdd6\\xc8B\\xb8\\x03qn\\td!\\xe0\\xc6^w\\x16\\x84\\xf0\\x02\\xdd\\x8a\\xa0\\x0b@x\\xc3\\x0f26\\x03BDa\\x0c\\x8dX\\xed)^\\x1bk\\x16\\xf2\\xbb7\\x11\\xb8\\x83y;\\xediO\\x08a\\x05\\x06\\xff\\'6\\xaf\\x03\\xd1\\xf0,\\xb4\\\\\\x029\\x00\\xc02\\xf4\\xa0\\x039\\x90\\xe1\\t\\x8d\\xb8\\xc3\\x85\\x81\\xc9ql{\\x9c\\x8a\\x11\\x00F\\xc0I\\xbe\\x82O\\xdb\\xc0\\x13zNww/\\x1b\\x86/8}\\x10f \\x04\\x19\\xc2A\\x00\\x02X\\xc3\\x03\\xf1\\xf0\\x00<\\x80\\xe9\\xda\\xe8\\xfe\\x9cH\\xda\\x10\\x87\\x08Z\\xb4\\x02\\x96\\xf79\\xd7Y\\x08\\x83\\'|\\x11\\x86\\xa6\\xfbb\\xae\\x86\\xd8\\xc0\\x00\\xf8 \\x07\\x02\\x88\\xe2\\x13\\x1d \\x05\\xe2H\\xc1\\x89\\xb4.\\xd5\\xe7yd\\'6r\\xc0rv\\x83\\x9a\\na\\xa0Bf\\xe9\\xea\\x85.\\xe4\\x00\\x05%\\xc0\\x03\\x11\\xde@\\x86\\npB,\\xa1\\x88\\x95(@\\xe2-Gg\\x9b\\x8a\\x01\\xe8\\x852\\x9a\\xc0;!PA\\xf1\\x9a\\xf5\\x81\\x1dzG\\x02(\\xf8\\xac\\x1eQx\\x830\\xe8\\x90\\x88r\\x12\\xca1\\xd8\\xe8\\x91\\xd7\\x03O\\xc5m\\xa4\\xa1\\x0fV\\xa0\\xc1\\x06\\xba\\xd0\\x85\\r\\x98!\\xf2@ \\xc2\\xc5\\x97\\xf0\\x03:0B\\x0f\\xd4\\xc8\\x83\\x06\\xd2\\xd0\\x01\\x0e\\x14\\x8aG\\xb3\\xba\\xe3\\x90;L\\xdd\\x08\\x88#\\x0fO\\xb0\\x02w\\x00\\x80\\x00\\x80zXA\\xf6O C\\x1f\\xae\\xf1\\x8dp\\xbc#\\r\\xd38\\x0428\\xd0\\x8bhdDC\\xfb\\xf9\\xbb\\xe2\\xba\\xa7\\x0cJ\\xf8\\xff\\xff\\x00\\x18\\x80\\xff7\\x13\\x07`\\x05\\x100~\\x00\\xf02\\xc1\\xc0\\x0e\\x88\\x00\\x02\\x07\\xb0\\x04up\\x02\\'\\x00\\x06JP\\x81\\x16x\\x81J\\x00\\x06\\xc5\\xb0\\x81\\x12X\\x07u\\xb0\\x0e\\xc1r\\x00\\xca\\xa0\\x0c \\x00\\x02\\x88\\xd0\\x00\\x8a\\xa0\\x08\\x98\\x10\\x0cC\\xe0\\x02p\\xf0\\x0b\\x07\\x08\\x00\\x0c\\x10\\x10\\x00;'", - "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\xee\\xed\\xf8\\xf2\\xf1\\xf2\\xed\\xed\\xf5\\xe0\\xde\\xe7\\xbb\\xb9\\xbd\\xa7\\xac\\xb5\\xf5\\xf5\\xfd\\xcd\\xca\\xcb\\xef\\xee\\xf5\\xb4\\xb1\\xb2\\xed\\xed\\xed\\x98\\x9c\\xa1\\xcd\\xd1\\xd6SZc\\xa4\\xa2\\xa4d]c\\x88\\x8b\\x926ET\\xc3\\xbd\\xc3\\x92\\x91\\x93\\x04\\x07\\tglu\\xe3\\xe3\\xeb\\xe3\\xe1\\xf4v|\\x85\\x9c\\xa2\\xad\\xe1\\xda\\xdc\\x9d\\x9a\\x9d\\xd4\\xd1\\xdb\\xc4\\xc5\\xcb\\xf1\\xf1\\xf7\\xb1\\xad\\xb2\\x92\\x8e\\x926\\xaa\\xa5\\xab[`g\\x83\\x86\\x8eRMRSPT\\xa3\\xa5\\xaa+18ZV[KRZ\\xf8\\xf6\\xf6\\x8c\\x91\\x9bJEL\\xf7\\xf7\\xfdmlm\\xce\\xcd\\xd9\\xc6\\xc1\\xc5\\xf6\\xf6\\xf6Z\\\\^\\xf1\\xee\\xee\\x84\\x80\\x86\\xfa\\xfa\\xfa\\xf2\\xf1\\xfd\\xf5\\xf3\\xf5,%+\\xde\\xdd\\xde\\xed\\xeb\\xf2D@E\\xf8\\xfc\\xff\\xf8\\xf8\\xfc\\xd6\\xd3\\xe2ADJ\\xce\\xcb\\xd0\\xb1\\xad\\xad,(,\\xfc\\xfb\\xfc\\xfa\\xfa\\xfe\\xed\\xea\\xed\\xd7\\xd6\\xd7\\xe1\\xdf\\xe0\\xeb\\xea\\xf2\\xf4\\xf2\\xfarjn\\xef\\xf0\\xef\\xd7\\xda\\xdc{z}\\xf9\\xf8\\xf8\\xf4\\xf1\\xf4\\xd0\\xd0\\xd1\\xb5\\xb3\\xb9\\xf4\\xf4\\xfbts|659\\xa9\\xb3\\xc1\\xc5\\xc6\\xc7\\xbd\\xb5\\xbc\\xf6\\xf4\\xf5UTX\\xe8\\xe6\\xe4\\x88\\x83\\x86ehkcck\\xdd\\xd8\\xd6\\x1d#)LIN325\\xea\\xe8\\xf6\\xeb\\xea\\xea\\xd9\\xd9\\xd9\\xf9\\xf9\\xfc\\x95\\x95\\x99\\xe6\\xe8\\xea\\xa8\\x9b\\x9c\\xc3\\xbe\\xbf\"\"#\\xf8\\xf8\\xfa2-1\\xe7\\xe6\\xf3\\xcc\\xc7\\xd0\\xf6\\xf4\\xf7\\xf6\\xf6\\xfa\\xa0\\x9e\\xa1\\xe5\\xe5\\xe6\\xc3\\xc0\\xc2\\x13\\x1a!\\xdd\\xda\\xda\\x97\\x91\\x96\\xf8\\xf7\\xf7\\xf6\\xf5\\xf5\\xf0\\xef\\xfb\\xf2\\xf2\\xf7\\x90\\x8d\\x90\\xa7\\xa7\\xa7\\xc4\\xcb\\xd4\\x80y}\\xec\\xea\\xf5\\xe4\\xe1\\xe4\\xda\\xd7\\xd8\\xfc\\xfb\\xfa\\xf7\\xf7\\xf6ibg\\xfc\\xfc\\xfb\\xf2\\xf0\\xf9#\\x1e\"\\xc7\\xc9\\xca\\xb4\\xbc\\xc9\\xb6\\xb9\\xbc\\xf9\\xf9\\xf8\\r\\x11\\x15@9?\\xed\\xec\\xeb\\xea\\xec\\xee\\xd1\\xd3\\xd5\\xfa\\xfa\\xf9\\xdc\\xdb\\xdd\\x95\\x99\\x9c`Za\\xc3\\xbf\\xc8\\xf4\\xf4\\xf8\\'\"\\'\\xf2\\xf1\\xfaPHN37<\\xfe\\xfe\\xfd\\xfd\\xff\\xfe\\xfd\\xfd\\xfd\\xf8\\xfa\\xf9$).\\xf5\\xf5\\xf5\\xf4\\xf3\\xfd\\xf3\\xf3\\xf2/+.\\xda\\xd7\\xe6\\xd4\\xd2\\xd3\\xf7\\xf5\\xfb\\xf7\\xf4\\xf8\\xe5\\xe3\\xe3817BHPWY^\\x1d\\x1c\\x1f\\xf3\\xf5\\xf8\\xf4\\xf4\\xf3\\xd5\\xd3\\xd4\\xf9\\xf8\\xfd\\xb6\\xb6\\xb6\\xb7\\xb4\\xc4\\xbe\\xbf\\xc1\\xe2\\xe5\\xe5\\xc4\\xc2\\xc4\\xb8\\xb5\\xc1\\x99\\x99\\x99\\xc6\\xc4\\xc5\\xdf\\xe2\\xe4\\xe7\\xe4\\xe3\\'%\\'\\x86\\x9d\\xc5\\x9b\\xa8\\xbc\\xa4\\xa9\\xad\\xac\\xa8\\xa7\\xea\\xee\\xf0\\xfc\\xfd\\xfd\\xfa\\xfc\\xfb\\xfd\\xfd\\xff\\xcf\\xd6\\xe1\\x88\\x88\\x8a\\xd4\\xdc\\xe2qw~ysx\\xf2\\xf2\\xf9\\xef\\xf1\\xfaYQXi\\x84\\xab\\xf3\\xf5\\xfc\\xf5\\xf6\\xf5\\xd6\\xd0\\xc8HCF\\xbe\\xc7\\xd3\\xbe\\xc0\\xc8\\xcb\\xc8\\xd9\\xdf\\xdd\\xef\\xfa\\xf9\\xf9\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0\\xa1\\xc3\\x87\\x10#J\\\\\\x98l\\xc7\\xc4\\x8b\\x18%\\xba(\\x11(\\xa3@W\\x05\\xdb\\xccc\\xc0\\xcb\\x98G\\x89b\\xa2\\x8c\\x08\\xe0\\xd1\\x1b\\x86\\x12\\x10&,0W\\xae^\\x84\\r\\'#\\xd6\\x98\\x10\\xe6\\x01\\x10M&/\\xd2\\x12\\x13n\\xdf\\x11iPB@\\xd1\\x943\\xa2\\x97\\x03Ul\\x8dp\\xb0,\\xe7\\x012s\\xd4$h:\\x11\\xc4\\x90\\x11\\x9f>\\x90\"U\\x15\\xa3\\xa4\\x04\\xd7\\xb8^\\\\\\xd6\\x88V\\x9e\\x16\\xd2\\xaa\\xdc\\xc2x\\x07\\x05\\x1c\\xb5\\'W\\xb0\\xd8\\x8aqS\\xa9\\xb2x\\'Z3\\xd5@\\xc5\\x1fJ\\x18\\t8\\x08\\x8c\\xd1F\\x06D\\x9d\\x90\\t\\x82\\xd0\\xc1\"DcHf0\\x9e(\\xa2]!\\n*\\xc8Q\\xa0\\xd0\\x89\\x0c\\xbc\\x15\\xe2\\x1cF\\x1b1wsD#\\xb2\\xfa\\x9c0G\\x87\\x80\\x9d$\\xb5F\\x9fX\\xb2 W\\xb2\\x8452\\x14`\\xe5:\\xa2\\x05*\\x8a\\x9c\\xa0\\xf1#\\xd0\\xd8\\x1bM[&\\x8d\\xae\\x96\\x88\\t7\\\\\\x06_\\x9c`R\\x1cbgC}\\x10\\xd5\\xffZ^\\x90\\x0e\\xb7\\xdb\\xb9k\\r\\xbb\\xe2B\\x8c:\\x81\\x04:\\xfd\\xe9\\xfe\\xd0\\x9a\\x9f!\\'\\x1a4\\xa85M\\xd6A\\x11u\\xb8SM-\\x04\"C\\x8d&y\\xf0\\x01\\x05q\\xf45d\\x03\\x13\\xcc\\x84\\x00I\\x19\\x11\\xf0gBBi\\x082\\t\\x14\\xc8 RM\\x08\\xc3\\x08\\xd1\\xa0A\\x01\\xc0q@\\x112x\\xc2\\x08%\\xfaPs\\xc2|\\xff\\x18\\x81F-*\\xe8\\x93\\x10(\\x13@1\\r\\x04\\x0b,\\x81\\x886\\x07\\x05p\\x80\\x03\\xa4\\xfc@\\xc3#\\t\\xdc\\xe5\\x11\\x1d3\\x80\\x00\\x04\\x12QDAM/\\x0f\\xfcP\\xc0\\t\\x05\\x10\\x94\\xce0\\xb5Ha\\x8aA\\xc5\\x88 \\xd0\\x01*@A\\xc5\\x11\\'\\xa4E\\xd0\\x1b\\x9f\\xf42D\\x1fI\\xb0\\x90\\x84\"\\x8a$\\xd1J\\x02\\xc7L\\xe4\\x85\\x12\\x0f$b\\x8b \\x86\\x1c\\xc1\\x07\\x1f\\x86\\x08B\\x02\\t\\xc8\\x04\\xc1\\x08A\\x90@\\xd1\\x89\\x14\\x0c(D\\x0b\\r\\x8a\\x0c#\\x05\\x17\\x031\\x02\\x820\\x950#\\x88\\x10L\\x18\\xd9E0\\x80\\x01\\x8c\\xe2\\x1f\\x8eP@*21\\x8fb\\xb0\\x0b\\x0c \\xc3$V\\x80\\x90\\rTb\\x040\\x00\\x83:\\xac\\x90=\\x7fL\\x01\\x15\\x960\\x80\\x15:\\x90\\x08~\\xdc\\xe0\\x1f\\xa8\\x18\\xc3?v\\xd1\\x05\\x16\\x8c@j\\x04)@-\\x86\\x10\\x02\\x15\\xa0\\x01\\x19\\x93\\x98\\x04\\x9c\\n!\\x84!\\x0ca\\x03\\xe6\\xfb\\x07\\x16\\xff\\n1\\x0c*p\\xc0\\x17\\x97x\\x83\\x18z\\xa0\\x83b\\x98A\\x00l`E\\x16ZA\\x8e-\\x84k \\xba\\x88\\x02\\x0b>\\x91\\n\\x11\\x84\\xc2\\x0bV\\x10\\xc5?\\xfc\\xf1\\x82\\x0bX!\\x00\\x13@\\x82\\x07\\xfea\\x89\\x1d\\xb0\\x01\\x00\\x08\\x98A\"\\x86\\xa0\\n\\x83d`\\x86$0\\x02#r\\x81\\x81Zl\\x01\\r\\xd5@\\xc6\\t\\xc8P\\x08&\\xccB\\x1c\\x96p\\x00\\x1a0\\xc0\\x84\\x078\\x81\\x1b\\x99\\xf8\\x87\\x19Pq\\x07:$#\\x19?`\\x013\\xea`\\x101\\xb0@\\x18\\x80\\x08@ \\x02\\x11\\x80k\\xc8!\\x18\\xffP\\x00\\x07\\xce\\x00\\x03$\\xf4\\n\\x00;\\xd8\\x03\\x00(\\x913!HC\\t\\x07\\xe1\\x85z0`\\x84\\x17h\\x02\\x1e\\x83P\\x85&\\xb7@\\x82\\x06\\xc8OG@X\\x022\"0\\ri\\xa8ay\\xa8p\\xc3&\\xc6\\xc0\\x03\\x0f(\\xa1\\n\\xb0\\x00RAf\\xb0\\x86V\\\\\\xc2\\x18\\xc6`\\x03\\x1b\\xa6\\x10\\x801\\xa0\\x02\\x0e>\\xf0E\\t\\xfa \\x84.\\xe0@\\x00c\\x08E(@\\xf1\\x02RH\\xa3\\x0b\\x08\\x81@\\'\\x1a \\xff\\x84\\x12\\xccA\\x08\\x1fP\\x83-\\x84\\xe1\\x80[\\x8c\\xe3\\r\\xdcx\\x02\\x13*`\\xcc\\x08@\\xa1\\x15\\xa5(\\x02\\x16,\\xd0\\x83Qd\\xc2\\x0b\\xff8\\x80 `\\x81\\x93\\x82\\x94\"\\x0c\\xf1\\xc8\\x81\\x0ex \\x00\\x00\\x00@\\x00=\\xe0@\\x0e\\xbe\\xc1\\x87$$\\x81\\x0c\\x0f\\xe8\\xc7+\\xe4\\xf0\\x0c+\\xb4a\\x07\\x0eH]B\\x98\\xb0\\x04j\\x9c\"\\x12\\x0e\\xe8\\xc2\\x0f\\x801\\x84\\x19h!\\x19\\xa1\\x98\\xc2*\\x88\\x01\\x8a\\x0fq\\x8aV\\xff\\xc0\\xea\\x13\\x82\\x08C\\x13b\\xe1\\x81`d\\xd5\\x00\\x02\\x18\\x80\\x1e\\x08P\\nB8\\xa1\\x00\\x1d@\\x85\\x0e|\\xe0Y\\x1d\\xec\\x81\\xab\\xb0\\x00\\x82AfP\\x899\\xc8\\xe0\\x1f\\xe14\\x03\\x0f,q\\x01K4\\xe3\\x12J\\xf0\\x05\\x0e\\x9a\\x91\\x82E|\\xc1\\x00\\xe8\\xd5\\xc1&6\\xc0\\x82\\x16 $\\x14\\x13 \\x05\\x1fH\\xd0\\x0b\\x148`\\x04\\x95\\xa8\\xc2|j\\xe0A7\\x14\\x90\\x03z\\xf8\\xc0\\x0c\\x1c\\xc0\\x89\\x1e\\xa4`\\x00X\\xd0\\xc13\\xda \\x82,D\\x01\\x16\\xb8+H#X\\x10\\x05\\t\\x08@\\x1e\\xdbE\\x85I\\xd9\\xc8\\x8f\\x01\\xf0#\\x15\\xff\\x00@\\x1c\\x10\\x10\\x0c\\x11\\xb2C\\x0c%\\x90\\xc6\\'\\x12\\xf2\\x81xd\\x80\\x04s D\\t8\\x11\\'=,\\x8d\\x0e\\x16\\x88\\x03\\x0f\\x94\\xe1\\x06BL\\xc0\\x01\\x84P\\xc35\\xc6\\x90\\x038\\xf4@\\x00\\x02\\xe0\\x81&\\xaa0\\tm\\x12\\x84\\x15N\\x18\\x82\\x12\\xdc\\xe0\\x08\\x008\\xe2\\x17\\xca\\xb3B?,w\\x01\\x0b\\x10#\\xc4\\x98\\x08\\x04&\\xcc\\x10\\x0co \\x81\\x05\\x9cH\\xc8\\x1d6@\\x02!\\xc4\\x83\\xff\\x14\\xb9\\xf8G\\xa9&@\\x87\\'\\x9aA\\x07\\xa8\\xccC+8\\x11\\x80\\x1c\\x04A\\x0fF\\xb6\\x82?\\x02\\xb0\\n7\\x94`N\\x9b8\\x08)*Q\\x82K\\xd8\\xc3\\x18<@\\xa5,\\x07\\x10\\x87\\x10[\\x00\\x0c5\\x10\\x81\\x95\\xa7@\\x8b\\x178\\x80\\x0cNHXB\\xeaP\\x81G\\xa8\\xe1\\r\\xcb\\x08\\xc5\\'\\xc2 \\x884\\xc8\\xe1\\x1f\\xa2P\\x1e+\\x12@\\n\\x8c\\xf2 \\x0e\\xa20\\xc3\\xd6\\xf6\\xe0\\x8a)H`\\x04k\\xb8\\xacAv\\xa1\\xb6\\x0f\\xc4@\\x19:8\\xdf+v\\xb0\\x885\\x06#\\x0e\\xaf\\x08\\x851\\xb0w\\x03J(\\x8e\\x05 X\\xc8\\x13H\\xf0eZ\\xd0\\x81\\x11y\\xe8E\\x136\\x10\\rK\\xf4\\xc0\\x15t\\xb8\\x05\\x12\\xe6P\\x15\\x92\"\\x00\\x01|\\x0bF6\\xdc\\x00\\x81*\\xac!\\x1c\\t!\\x844Z\\xe0\\x0b\\x04\\x84\\xd8\\x03\\xa0\\xb0\\xc0H\\xff\\xc1\\x83\\x00,\\xa2\\r`\\x10\\xc1\\r\\xbe\\xf0\\x86 \\x90\\xa1\\t1P\\xc82*\\xe0\\x02\\x83\\xfc\\x80\\x19M\\x98\\x01\\x1cnq\\x081\\x1cb\\x04Wh\\xc4?\\x10\\xf0\\x8c\\x1e\\xbc\\x91o\\x08\\xffp\\x01\\xb0\\xafp\\xc5\\x82@\\xa2\\t>\\x93\\xc1\\x18x}\\x0b\\x0fXAy:\\xb8\\x83\\x07\\xbe`\\x0c<\\xfc\\xe3\\rJp\\x02\\x0b*\\x9e\\x10:\\xa0\\xe3\\n\\t\\x00EA\\x18Q\\x05`\\x8c \\x17\\x8cHF\\r\\x18q\\x0b\\xc2\\x8d\\xdc\\x11\\x1e\\x08\\x80\\x08t\\xb0\\x83\\x19t\\x01NbX\\xc8\\x1f\\xc8P\\x85s\\xed`\\x07\\xc7\\xe0A\\x1b\\xd6\\xa8\\x03/ha\\x0f\\xec\\x08E\\x1a\\\\\\xd0\\x0b\\x16\\x94 (\\x08I\\xc6\\x01\\xe0\\xf0\\x06\\xbc\\x0f\\xa4\\x08}\\x086\\x0c\\x14\\xc0\\x05\\x7f\\xd0A\\x04,A\\xc0\\rx@\\t-\\xc4\\x80\\x004\\x18\\x023\\x9c\\xac\\x10m\\x90\\x81\\x0c?\\x90\\x80\\x06\\xa6\\xa0\\xbc\\xa2}\\xe1\\x1f\\xa1\\xb8\\x83\\x0f\\xb2\\x10\\x04z\\xb0\\x00\\x08\\xbf\\xc9\\x08\\x01X\\x10\\x86(|\\x00\\x1b\\\\HXZ\\xe6a4.\\xc8@\\x0f%`A%J\\xf1\\x10n\\xf8i\\x04\\x9a8\\x80\\x06b\\x80\\x0bZ\\xec\\x80\\x0e\\xce\\xf0\\x86\\x12\\x80@\\x06\\x16\\x10\"\\xf5-\\xd9\\x964\\xe2\\xa1\\x06|\\x10\\x81\\x08\\x83\\xe0\\x80\\x06d\\x80\\x02\\x10\\xd0#\\x0cI\\xa0\\xfc\\x8e\\xaan3\\x84\\x07\\x94`\\x03\\x1f\\x00D\\x024\\xf1\\x83\\x11TA\\x1aN\\x10\\xbfG6\\xe14XT\\xa2\\tB \\xc4\\x0f~\\xf0W2\\x90\\x83\\x19W\\x10v\\x13\\xf1\\x07v\\xb0>/U\\x05d0\\x04\\xd2\\xc0\\x02\\x82\\xb0\\x01\\x8b\\x12\\x18y`\\x07\\xf9\\xb0\\x06\\xb0\\x00\\x0c\\x16\\x08\\x0b\\x93\\x90\\x04@\\xe08\\x8f\\x13\\x11\" &5\\xd0\\x08\\x1bQ\\x08\\x86P\\x08@@\\n\\x92\\xa0\\x00\\x02\\x01[\\'Q\\x0c\\x02\\xc1\\x08\\xdc\\x00\\x0e4\\xe0\\x0e\\xee@\\n.\\xd0\\x08Zp\\x07\\xac\\xe0\\x05\\x996\">\\xf8\\x83@\\x98\\x10\\x01\\x01\\x00;'" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The ThumbnailPhotoFileName column in the SalesLT.Product entity contains the file names of thumbnail images associated with products. The file names typically include a brief description of the product and end with a common image file extension such as .gif. The pattern in the file names suggests they are in a format that includes the product name followed by '_small', indicating they are smaller versions of the images suitable for thumbnails.", - "Name": "ThumbnailPhotoFileName", - "SampleValues": [ - "sprocket_small.gif", - "water_bottle_small.gif", - "racer02_yellow_f_small.gif", - "handpump_small.gif", - "handlebar_small.gif" - ] - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.Product entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). Each value is a 128-bit identifier typically used to uniquely identify records. The format follows the standard 8-4-4-4-12 hexadecimal representation. This ensures that each product can be distinctly identified across different systems and databases.", - "Name": "rowguid", - "SampleValues": [ - "1B486300-7E64-4C5D-A9BA-A8368E20C5A0", - "D28B3872-5173-40A4-B12F-655524386CC7", - "408435AA-15C0-41E5-981F-32A8226AF15F", - "9D458FD5-392D-4AB1-AFEF-6A5548E48858", - "12E4D5E8-79ED-4BCB-A532-6275D1A93417" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.Product entity contains timestamps indicating the date and time when a product record was last modified. The values follow a precise datetime format including the date, hours, minutes, seconds, and fractional seconds. This information is crucial for tracking changes and updates to product records over time.", - "Name": "ModifiedDate", - "SampleValues": [ - "2008-03-11 10:03:55.510000", - "2008-03-11 10:01:36.827000" - ] - } - ], - "CompleteEntityRelationshipsGraph": [ - "SalesLT.Product -> SalesLT.ProductCategory", - "SalesLT.Product -> SalesLT.ProductModel", - "SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", - "SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", - "SalesLT.Product -> SalesLT.SalesOrderDetail", - "SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", - "SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", - "SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", - "SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" - ], - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.Product entity contains detailed information about products sold by a company. It includes specifics such as unique product identifiers, names, numbers, and descriptions related to size, weight, and color. Additionally, it tracks financial details like standard and list prices, as well as key dates for product availability and discontinuation. This entity can be used to answer questions related to product inventory, pricing, product categorization, sales periods, and historical modifications.", - "Entity": "SalesLT.Product", - "EntityName": "Product Information", - "EntityRelationships": [ - { - "ForeignEntity": "SalesLT.ProductCategory", - "ForeignKeys": [ - { - "Column": "ProductCategoryID", - "ForeignColumn": "ProductCategoryID" - } - ] - }, - { - "ForeignEntity": "SalesLT.ProductModel", - "ForeignKeys": [ - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - }, - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - } - ] - }, - { - "ForeignEntity": "SalesLT.SalesOrderDetail", - "ForeignKeys": [ - { - "Column": "ProductID", - "ForeignColumn": "ProductID" - }, - { - "Column": "ProductID", - "ForeignColumn": "ProductID" - } - ] - } - ], - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.ProductCategory.json b/text_2_sql/data_dictionary/SalesLT.ProductCategory.json deleted file mode 100644 index d6d0a9c..0000000 --- a/text_2_sql/data_dictionary/SalesLT.ProductCategory.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductCategoryID column in the SalesLT.ProductCategory entity contains unique identifier values for each product category. These values are integers that serve as primary keys, distinguishing different categories of products within the database. The values do not follow a specific pattern other than being unique identifiers for each category.", - "Name": "ProductCategoryID", - "SampleValues": [ - 16, - 27, - 8, - 17, - 9 - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ParentProductCategoryID column in the SalesLT.ProductCategory entity contains numeric identifiers that indicate the parent category of a given product category. Each value represents a unique product category ID that serves as the parent to one or more sub-categories, establishing a hierarchical relationship between product categories. This structure helps organize product categories into a tree-like format, providing meaningful relationships among them. The sample values 4, 3, 2, 1 suggest sequential identifiers for parent categories.", - "Name": "ParentProductCategoryID", - "SampleValues": [ - 4, - 3, - 2, - 1 - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The column contains the names of product categories in a sales inventory. The values are in plain text and typically consist of common nouns describing various types of products, such as accessories, clothing, and components. This column helps classify and organize the types of products available in the inventory.", - "Name": "Name", - "SampleValues": [ - "Gloves", - "Wheels", - "Bike Stands", - "Bottom Brackets", - "Bib-Shorts" - ] - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.ProductCategory entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). Each value is a 128-bit number that is typically represented as a sequence of hexadecimal digits separated by hyphens. These GUIDs are used to ensure the uniqueness of each record within the ProductCategory table. The format follows the standard structure for UUIDs.", - "Name": "rowguid", - "SampleValues": [ - "6D24AC07-7A84-4849-864A-865A14125BC9", - "43521287-4B0B-438E-B80E-D82D9AD7C9F0", - "FE4D46F2-C87C-48C5-A4A1-3F55712D80B1", - "09E91437-BA4F-4B1A-8215-74184FD95DB8", - "9AD3BCF0-244D-4EC4-A6A0-FB701351C6A3" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.ProductCategory entity contains timestamps indicating the last time a product category record was modified. The dates and times are represented in the format 'YYYY-MM-DD HH:MM:SS'. This column helps track changes and updates to the product categories over time. The value is typically updated whenever a change is made to a record in the ProductCategory table.", - "Name": "ModifiedDate", - "SampleValues": [ - "2002-06-01 00:00:00" - ] - } - ], - "CompleteEntityRelationshipsGraph": [ - "SalesLT.ProductCategory -> SalesLT.Product", - "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.ProductModel", - "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", - "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", - "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail", - "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", - "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", - "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", - "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" - ], - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.ProductCategory entity contains information about the various product categories within a sales database. It includes details about the unique identifier for each product category, the ID of the parent product category (if applicable), the name of the category, and metadata about when the entry was last modified. This entity can answer questions related to the hierarchy and classification of products, such as identifying parent and child product categories, retrieving the names of product categories, and monitoring updates to category information.", - "Entity": "SalesLT.ProductCategory", - "EntityName": "Product Category Data", - "EntityRelationships": [ - { - "ForeignEntity": "SalesLT.Product", - "ForeignKeys": [ - { - "Column": "ProductCategoryID", - "ForeignColumn": "ProductCategoryID" - } - ] - }, - { - "ForeignEntity": "SalesLT.ProductCategory", - "ForeignKeys": [ - { - "Column": "ParentProductCategoryID", - "ForeignColumn": "ProductCategoryID" - }, - { - "Column": "ParentProductCategoryID", - "ForeignColumn": "ProductCategoryID" - }, - { - "Column": "ProductCategoryID", - "ForeignColumn": "ParentProductCategoryID" - } - ] - } - ], - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.ProductDescription.json b/text_2_sql/data_dictionary/SalesLT.ProductDescription.json deleted file mode 100644 index 614400e..0000000 --- a/text_2_sql/data_dictionary/SalesLT.ProductDescription.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductDescriptionID column in the SalesLT.ProductDescription entity contains unique numeric identifiers for each product description. These values are integers and help in uniquely identifying and referencing specific product descriptions within the database. Each ProductDescriptionID is unique and serves as a key to distinguish one product description record from another.", - "Name": "ProductDescriptionID", - "SampleValues": [ - 1387, - 1448, - 1712, - 1479, - 1391 - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Description column in the SalesLT.ProductDescription entity contains detailed textual descriptions of products. These descriptions provide specific information about the product's features, benefits, usage, or durability. The content of the descriptions may vary in language, indicating that the descriptions are catered to a diverse customer base. The purpose of this column is to give prospective buyers a better understanding of the product to assist in their purchasing decision.", - "Name": "Description", - "SampleValues": [ - "\u062a\u0645\u0646\u0639 \u0627\u0644\u062e\u0631\u0637\u0648\u0634\u0629 \u0645\u062d\u0643\u0645\u0629 \u0627\u0644\u0625\u063a\u0644\u0627\u0642 \u0627\u0644\u0623\u0648\u0633\u0627\u062e \u0645\u0646 \u0627\u0644\u062f\u062e\u0648\u0644.", - "For true trail addicts. An extremely durable bike that will go anywhere and keep you in control on challenging terrain - without breaking your budget.", - "\u516c\u8def\u8d8a\u91ce\u4e24\u7528\u7684\u5168\u529f\u80fd\u8f66\u628a\u3002", - "\u0639\u0644\u0628 \u062e\u0641\u064a\u0641\u0629 \u0627\u0644\u0648\u0632\u0646\u060c \u0648\u0645\u0642\u0627\u0648\u0645\u0629 \u0644\u0644\u0631\u064a\u062d\u060c \u062a\u0646\u0627\u0633\u0628 \u062d\u062c\u0645 \u0627\u0644\u062c\u064a\u0628.", - "Cuissards r\u00e9sistants \u00e0 l'usure pour utilisation intensive, doubl\u00e9s \u00e0 l'int\u00e9rieur en Spandex, sans couture, peau de chamois anti-bact\u00e9rie pour un meilleur confort." - ] - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.ProductDescription entity contains globally unique identifier (GUID) values. Each value is a unique 128-bit number used to identify records in the table, ensuring there are no duplicates. The format of these values is a standard GUID format: 32 hexadecimal characters displayed in five groups separated by hyphens (8-4-4-4-12). This column is typically used for scenarios requiring unique identifiers that are unique across different databases.", - "Name": "rowguid", - "SampleValues": [ - "BAC5D6F9-8C13-4DDD-9B85-AD65F9820FD5", - "3452CDE5-DE87-4992-B75E-F5BD1982C0AF", - "F07E5B84-4CA8-4276-84A6-FC071A4C44E7", - "12C887D5-3875-4E5E-B291-5A592B061392", - "C5458DF7-44A0-47F8-8053-D252C5C6E564" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.ProductDescription entity contains timestamps indicating the most recent date and time when a product description was modified. The values follow a pattern of including both date and time components, typically using the format 'YYYY-MM-DD HH:MM:SS.sss'. This column helps track changes or updates made to product descriptions over time, which can be useful for auditing and historical data purposes.", - "Name": "ModifiedDate", - "SampleValues": [ - "2008-03-11 10:32:17.973000", - "2007-06-01 00:00:00" - ] - } - ], - "CompleteEntityRelationshipsGraph": [ - "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription", - "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel", - "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product", - "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.ProductCategory", - "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail", - "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", - "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", - "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", - "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" - ], - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.ProductDescription entity contains detailed information about product descriptions within a sales system. This entity includes unique identifiers for each product description along with the description text itself. It also tracks the date and time when the product description was last modified, as well as a globally unique identifier (GUID) for each entry. This entity can be used to answer questions related to specific product descriptions, their updates, and historical modifications.", - "Entity": "SalesLT.ProductDescription", - "EntityName": "Product Descriptions", - "EntityRelationships": [ - { - "ForeignEntity": "SalesLT.ProductModelProductDescription", - "ForeignKeys": [ - { - "Column": "ProductDescriptionID", - "ForeignColumn": "ProductDescriptionID" - } - ] - } - ], - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.ProductModel.json b/text_2_sql/data_dictionary/SalesLT.ProductModel.json deleted file mode 100644 index 90e05fb..0000000 --- a/text_2_sql/data_dictionary/SalesLT.ProductModel.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductModelID column in the SalesLT.ProductModel entity contains unique identifiers for different product models. The values in this column are integer numbers that serve as primary keys to distinguish each product model record. These IDs are used to link product models to other related data within the database. The integers do not follow a specific sequential order and are used solely for identification purposes.", - "Name": "ProductModelID", - "SampleValues": [ - 68, - 92, - 90, - 45, - 111 - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Name column in the SalesLT.ProductModel entity contains the names of various product models available. The values in this column are descriptive and often include a combination of product type and model specifications. The names can refer to different kinds of biking and cycling equipment, including components and accessories, and may vary from simple product names to more detailed descriptions.", - "Name": "Name", - "SampleValues": [ - "HL Bottom Bracket", - "Mountain Pump", - "HL Mountain Tire", - "Men's Bib-Shorts", - "ML Crankset" - ] - }, - { - "AllowedValues": null, - "DataType": "xml", - "Definition": "The CatalogDescription column in the SalesLT.ProductModel entity contains detailed text descriptions of the products listed in the catalog. This information is typically used to provide additional details and features about each product, which can be useful for marketing and sales purposes. The content in this column is stored in an XML format, allowing for a structured representation of the descriptive data. The descriptions may include product specifications, usage instructions, and benefits to potential customers.", - "Name": "CatalogDescription", - "SampleValues": null - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.ProductModel entity contains unique identifier values in the form of UUIDs (Universally Unique Identifiers). Each value is a 128-bit number used to uniquely identify a specific product model within the entity. The UUID format typically follows a pattern of 8-4-4-4-12 hexadecimal digits separated by hyphens, ensuring that each identifier is globally unique. This column is essential for maintaining the uniqueness of product models across the database.", - "Name": "rowguid", - "SampleValues": [ - "217E7475-D3F4-46FA-836A-D9E53103E71B", - "37D261A7-00CF-4880-AC1A-533B6B4365B0", - "ACA920B2-D0F9-49F3-B879-573202B08C2F", - "A7E65199-84A8-437E-AD55-360C1DF1D788", - "E3CDC5DD-27C3-4891-9D5E-0D46D1B8457F" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.ProductModel entity contains timestamps indicating the last time each record was modified. The data includes date and time down to the fraction of a second, which suggests that it is used for precise tracking of changes. The values follow the standard format of YYYY-MM-DD HH:MM:SS.SSSSSS. This column is crucial for auditing and synchronization purposes, allowing users to identify when updates occur to product model records.", - "Name": "ModifiedDate", - "SampleValues": [ - "2006-11-20 09:56:38.273000", - "2009-05-16 16:34:29.010000", - "2009-05-16 16:34:29.027000", - "2009-05-16 16:34:28.997000", - "2007-06-01 00:00:00" - ] - } - ], - "CompleteEntityRelationshipsGraph": [ - "SalesLT.ProductModel -> SalesLT.Product", - "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.ProductCategory", - "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail", - "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", - "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", - "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", - "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", - "SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", - "SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription" - ], - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.ProductModel entity contains information about the various product models offered by a company. It includes unique identifiers for each product model, descriptions useful for cataloging, and metadata such as modification dates. This entity is useful for questions related to product categorization, identifying specific models, updating product records, and managing product data changes over time.", - "Entity": "SalesLT.ProductModel", - "EntityName": "Product Model Information", - "EntityRelationships": [ - { - "ForeignEntity": "SalesLT.Product", - "ForeignKeys": [ - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - }, - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - } - ] - }, - { - "ForeignEntity": "SalesLT.ProductModelProductDescription", - "ForeignKeys": [ - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - }, - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - }, - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - } - ] - } - ], - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.ProductModelProductDescription.json b/text_2_sql/data_dictionary/SalesLT.ProductModelProductDescription.json deleted file mode 100644 index b3f1de6..0000000 --- a/text_2_sql/data_dictionary/SalesLT.ProductModelProductDescription.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductModelID column in the SalesLT.ProductModelProductDescription entity contains numerical identifiers that represent specific product models. Each value in this column is unique and corresponds to a different product model in the database. The values are integers and do not follow a sequential pattern. This column is likely used as a foreign key to link product descriptions to their respective product models.", - "Name": "ProductModelID", - "SampleValues": [ - 110, - 121, - 79, - 109, - 13 - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductDescriptionID column in the SalesLT.ProductModelProductDescription entity contains unique identifier values for product descriptions. Each value in this column is an integer and serves as a reference to a specific product description within the database. The values are numeric and do not follow a specific sequence or pattern. This column is used to link product models to their respective descriptions.", - "Name": "ProductDescriptionID", - "SampleValues": [ - 692, - 1576, - 1654, - 1401, - 886 - ] - }, - { - "AllowedValues": null, - "DataType": "nchar", - "Definition": "The Culture column in the SalesLT.ProductModelProductDescription entity contains language and region codes that represent the culture or locale for product descriptions. The values are commonly in the format of ISO 639-1 language codes, sometimes combined with optional ISO 3166-1 alpha-2 region codes, such as 'en' for English, 'fr' for French, and 'zh-cht' for Traditional Chinese. These codes are used to determine the language and regional settings for displaying product information to users.", - "Name": "Culture", - "SampleValues": [ - "zh-cht", - "th ", - "en ", - "he ", - "fr " - ] - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.ProductModelProductDescription entity contains globally unique identifiers (GUIDs). Each value in this column is a unique 128-bit number expressed in the standard GUID format, consisting of 32 hexadecimal digits, displayed in five groups separated by hyphens. These GUIDs ensure that each row within the table can be uniquely identified, even across different databases.", - "Name": "rowguid", - "SampleValues": [ - "45E6E0A5-40C9-4E1B-8915-59F4DF737BF5", - "AAB93E95-9ECC-4C6B-8C8C-A1B71D35355C", - "A1DF627D-388D-4129-A9F7-ED3D6AC7F9AE", - "E617F14F-4954-485E-8AE2-F9503B8292C0", - "A1171E59-E086-4E69-9B82-0C523AF205B0" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.ProductModelProductDescription entity contains date and time values indicating when the record was last modified. The values are in the format 'YYYY-MM-DD HH:MM:SS'. This column helps in tracking changes or updates made to each record, ensuring data integrity and maintaining a historical record of modifications.", - "Name": "ModifiedDate", - "SampleValues": [ - "2007-06-01 00:00:00" - ] - } - ], - "CompleteEntityRelationshipsGraph": [ - "SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", - "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel", - "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product", - "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.ProductCategory", - "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail", - "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", - "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", - "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", - "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" - ], - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.ProductModelProductDescription entity represents the relationship between product models and their respective descriptions within the database. It contains information that links a product model to its description and includes cultural context for localization purposes. This entity is useful for answering questions related to the detailed descriptions of specific product models in different languages or cultures, and for tracking modifications to these descriptions over time.", - "Entity": "SalesLT.ProductModelProductDescription", - "EntityName": "Product Model and Description Information", - "EntityRelationships": [ - { - "ForeignEntity": "SalesLT.ProductDescription", - "ForeignKeys": [ - { - "Column": "ProductDescriptionID", - "ForeignColumn": "ProductDescriptionID" - } - ] - }, - { - "ForeignEntity": "SalesLT.ProductModel", - "ForeignKeys": [ - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - }, - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - } - ] - } - ], - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.SalesOrderDetail.json b/text_2_sql/data_dictionary/SalesLT.SalesOrderDetail.json deleted file mode 100644 index f8e391c..0000000 --- a/text_2_sql/data_dictionary/SalesLT.SalesOrderDetail.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The SalesOrderID column in the SalesLT.SalesOrderDetail entity contains unique identifiers for each sales order. The values in this column are integer numbers that follow a sequential pattern, indicating they may be auto-incremented. It is used to link each sales order detail to its corresponding sales order record in the database. This column is essential for queries that need to filter or join sales order details based on specific sales orders.", - "Name": "SalesOrderID", - "SampleValues": [ - 71796, - 71923, - 71783, - 71863, - 71920 - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The SalesOrderDetailID column in the SalesLT.SalesOrderDetail entity contains unique identifier values for each sales order detail record. These values are numeric and incrementally assigned, ensuring that each sales order detail can be distinctly identified. The column serves as a primary key within the SalesOrderDetail table.", - "Name": "SalesOrderDetailID", - "SampleValues": [ - 110712, - 111455, - 110669, - 112996, - 113270 - ] - }, - { - "AllowedValues": null, - "DataType": "smallint", - "Definition": "The OrderQty column in the SalesLT.SalesOrderDetail entity contains numerical values representing the quantity of each item ordered in a sales transaction. These values are integers indicating how many units of a particular product were purchased. The column helps in assessing the volume of sales per order line item. Common values are positive whole numbers.", - "Name": "OrderQty", - "SampleValues": [ - 3, - 8, - 11, - 10, - 13 - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductID column in the SalesLT.SalesOrderDetail entity contains unique numerical identifiers for products involved in sales orders. The values in this column are integers that correlate to specific products within the product catalog. Each ProductID is linked to detailed product information, ensuring accurate tracking and management of sales transactions.", - "Name": "ProductID", - "SampleValues": [ - 994, - 809, - 886, - 951, - 793 - ] - }, - { - "AllowedValues": null, - "DataType": "money", - "Definition": "The UnitPrice column in the SalesLT.SalesOrderDetail entity contains the price of individual items sold in a sales transaction. The values are represented as monetary amounts with up to four decimal places, indicating precision in pricing. These unit prices likely reflect the sale price of products before any applicable discounts or taxes are applied.", - "Name": "UnitPrice", - "SampleValues": [ - "112.9980", - "29.9940", - "461.6940", - "40.5942", - "323.9940" - ] - }, - { - "AllowedValues": null, - "DataType": "money", - "Definition": "The UnitPriceDiscount column in the SalesLT.SalesOrderDetail entity represents the discount applied to the unit price of items in a sales order. The values are decimal numbers indicating the fraction of the discount; for example, a value of 0.4000 indicates a 40% discount, 0.1000 indicates a 10% discount, and so on. The values range from 0.0000 (no discount) to 1.0000 (100% discount). This column helps in calculating the discounted price for each item in the sales order.", - "Name": "UnitPriceDiscount", - "SampleValues": [ - "0.4000", - "0.1000", - "0.0500", - "0.0200", - "0.0000" - ] - }, - { - "AllowedValues": null, - "DataType": "numeric", - "Definition": "The LineTotal column in the SalesLT.SalesOrderDetail entity contains the total price for each sales order line item. The values are numeric and represent the monetary amount in the currency used for the sale. This column captures the final cost after any discounts and adjustments have been applied to the individual product within the sales order. The values typically have several decimal places indicating precise currency amounts.", - "Name": "LineTotal", - "SampleValues": [ - "238.659792", - "1943.964000", - "809.760000", - "135.597600", - "404.664000" - ] - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.SalesOrderDetail entity contains unique identifier values for each sales order detail row. The values in this column are in the format of a GUID (Globally Unique Identifier), which is a 128-bit number used to uniquely identify data in a database. Each value is unique and follows a standard format consisting of alphanumeric characters and hyphens. This column ensures that each row can be distinctly identified in a large and distributed data environment.", - "Name": "rowguid", - "SampleValues": [ - "A6E8D782-457A-413E-8ED9-ED74F8353CD9", - "9D987E75-E96D-4903-BE36-0CE579A6F47B", - "174A0011-0CD4-44CE-952B-CEA83042A4C9", - "D9D2A6AD-347A-4C99-85A0-F6F037A3A683", - "A96ADF3D-3F0E-439F-AD3C-23846C5F51EC" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.SalesOrderDetail entity contains timestamp values indicating the date and time when a particular sales order detail record was last modified. The values follow the standard date-time format of 'YYYY-MM-DD HH:MM:SS'. This column is typically used for tracking changes, performing audits, or identifying when the latest updates were made to the sales order details.", - "Name": "ModifiedDate", - "SampleValues": [ - "2008-06-01 00:00:00" - ] - } - ], - "CompleteEntityRelationshipsGraph": [ - "SalesLT.SalesOrderDetail -> SalesLT.Product", - "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", - "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel", - "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", - "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", - "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader", - "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address", - "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", - "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" - ], - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.SalesOrderDetail entity contains detailed information about individual sales order items. It includes data on the quantity of products ordered, the unit price, any discounts applied, and the total price for each line item within a sales order. This entity is useful for answering questions related to the specifics of a sales order, such as the breakdown of order quantities, pricing details, and discount information for individual products in each order. It also provides unique identifiers for sales orders and line items, along with modification timestamps for tracking changes.", - "Entity": "SalesLT.SalesOrderDetail", - "EntityName": "Sales Order Details", - "EntityRelationships": [ - { - "ForeignEntity": "SalesLT.Product", - "ForeignKeys": [ - { - "Column": "ProductID", - "ForeignColumn": "ProductID" - } - ] - }, - { - "ForeignEntity": "SalesLT.SalesOrderHeader", - "ForeignKeys": [ - { - "Column": "SalesOrderID", - "ForeignColumn": "SalesOrderID" - }, - { - "Column": "SalesOrderID", - "ForeignColumn": "SalesOrderID" - } - ] - } - ], - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.SalesOrderHeader.json b/text_2_sql/data_dictionary/SalesLT.SalesOrderHeader.json deleted file mode 100644 index aed0bc6..0000000 --- a/text_2_sql/data_dictionary/SalesLT.SalesOrderHeader.json +++ /dev/null @@ -1,307 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The SalesOrderID column in the SalesLT.SalesOrderHeader entity contains unique identifiers for each sales order. The values in this column are numeric and each value corresponds to a specific sales transaction. The column ensures that each sales order can be uniquely identified and referenced throughout the database.", - "Name": "SalesOrderID", - "SampleValues": [ - 71938, - 71832, - 71935, - 71917, - 71776 - ] - }, - { - "AllowedValues": null, - "DataType": "tinyint", - "Definition": "The RevisionNumber column in the SalesLT.SalesOrderHeader entity contains integer values representing the number of times a sales order has been revised. This column tracks the revision history of each sales order, allowing for version control and ensuring that changes are recorded accurately. The values are typically small integers, starting from 0 for the initial entry and incrementing with each modification to the order.", - "Name": "RevisionNumber", - "SampleValues": [ - 2 - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The OrderDate column in the SalesLT.SalesOrderHeader entity contains timestamps representing the date and time when the sales order was placed. The values follow the standard datetime format 'YYYY-MM-DD HH:MM:SS'. This column is useful for filtering sales orders based on their creation date and for generating time-based reports.", - "Name": "OrderDate", - "SampleValues": [ - "2008-06-01 00:00:00" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The DueDate column in the SalesLT.SalesOrderHeader entity contains dates and times indicating when the sales order is due to be fulfilled. The values follow the format YYYY-MM-DD HH:MM:SS, representing the precise due date and time for each order. This column is crucial for tracking and managing the delivery schedule of sales orders.", - "Name": "DueDate", - "SampleValues": [ - "2008-06-13 00:00:00" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ShipDate column in the SalesLT.SalesOrderHeader entity contains the dates and times when sales orders were shipped. The values in this column follow the format of 'YYYY-MM-DD HH:MI:SS', representing the year, month, day, hour, minute, and second. This timestamp indicates the precise moment the shipment occurred, allowing for tracking and analysis of shipping performance and timelines.", - "Name": "ShipDate", - "SampleValues": [ - "2008-06-08 00:00:00" - ] - }, - { - "AllowedValues": null, - "DataType": "tinyint", - "Definition": "The Status column in the SalesLT.SalesOrderHeader entity contains numeric codes representing the current status of a sales order. This column typically uses a specific range of integers, where each unique integer corresponds to a different status category within the sales order process. The status helps in identifying the stage or condition of an order, such as pending, completed, or cancelled. The numeric codes must be understood in context with the predefined status categories in the system.", - "Name": "Status", - "SampleValues": [ - 5 - ] - }, - { - "AllowedValues": null, - "DataType": "bit", - "Definition": "The OnlineOrderFlag column in the SalesLT.SalesOrderHeader entity indicates whether an order was placed online or through another channel. The values are stored as boolean values, where 'False' signifies the order was not placed online. The purpose of this column is to differentiate between online and offline order channels for sales analysis and reporting.", - "Name": "OnlineOrderFlag", - "SampleValues": [ - false - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The SalesOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique identifiers for sales orders. The values follow a specific format that includes a prefix 'SO' followed by a sequence of numbers. This column is essential for tracking and referencing individual sales orders within the sales system. The format ensures that each sales order is distinct and can be easily identified.", - "Name": "SalesOrderNumber", - "SampleValues": [ - "SO71796", - "SO71846", - "SO71935", - "SO71946", - "SO71863" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The PurchaseOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique identifiers for each purchase order associated with a sales order. The values in this column are alphanumeric strings that typically start with 'PO' followed by a series of digits. These purchase order numbers are likely used to track and reference individual purchase transactions within the sales system.", - "Name": "PurchaseOrderNumber", - "SampleValues": [ - "PO10353140756", - "PO5539125166", - "PO2697119362", - "PO16153112278", - "PO2378131604" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The AccountNumber column in the SalesLT.SalesOrderHeader entity contains account numbers in a specific numeric format. The pattern observed in the sample values suggests a format of two digits, followed by a hyphen, four digits, another hyphen, and a final set of six digits. This column likely represents a structured internal identifier used to track sales orders within the system. Each AccountNumber is unique and essential for managing and referencing sales transactions accurately.", - "Name": "AccountNumber", - "SampleValues": [ - "10-4020-000052", - "10-4020-000466", - "10-4020-000106", - "10-4020-000160", - "10-4020-000187" - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The CustomerID column in the SalesLT.SalesOrderHeader entity contains unique numeric identifiers assigned to each customer. These IDs are used to link sales orders to the corresponding customer in the database. The values in this column are integers and do not follow a recognizable pattern other than being distinct for each customer.", - "Name": "CustomerID", - "SampleValues": [ - 29877, - 29741, - 29847, - 30072, - 29736 - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ShipToAddressID column in the SalesLT.SalesOrderHeader entity contains numeric identifiers that correspond to specific ship-to addresses for sales orders. The values are unique integers representing the ID of each address where the order is to be shipped. These ID values are likely foreign keys that reference an address table, ensuring that each sales order is associated with a specific delivery location.", - "Name": "ShipToAddressID", - "SampleValues": [ - 999, - 637, - 993, - 1034, - 649 - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The BillToAddressID column in the SalesLT.SalesOrderHeader entity contains integer values that serve as unique identifiers for the billing addresses associated with sales orders. Each number corresponds to a specific billing address in the database. The values in this column are used to link sales orders to the addresses where the bill should be sent. The sample values are all integers, indicating a numerical identifier system.", - "Name": "BillToAddressID", - "SampleValues": [ - 1034, - 992, - 662, - 1086, - 1020 - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The column \"ShipMethod\" in the SalesLT.SalesOrderHeader entity contains shipping method names used for processing orders. The values in this column typically describe the type of service used to transport goods, such as specific courier or freight services. These shipping method names often include numerical identifiers, which may indicate the priority or version of the service. The values are descriptive text strings and could vary in format and length depending on the shipping service providers.", - "Name": "ShipMethod", - "SampleValues": [ - "CARGO TRANSPORT 5" - ] - }, - { - "AllowedValues": null, - "DataType": "varchar", - "Definition": "The CreditCardApprovalCode column in the SalesLT.SalesOrderHeader entity contains the approval code received from the credit card company after a purchase is made. This column stores alphanumeric strings that represent the authorization of the credit card transaction. It is typically used to verify that the transaction has been approved and may be referenced for reconciliations and audits. The data in this column is essential for tracking and validating credit card payments.", - "Name": "CreditCardApprovalCode", - "SampleValues": [] - }, - { - "AllowedValues": null, - "DataType": "money", - "Definition": "The SubTotal column in the SalesLT.SalesOrderHeader entity contains the numerical subtotal amounts for sales orders before any taxes or additional charges are applied. The values are represented as floating-point numbers with several decimal places, indicating precise financial figures. This column helps in understanding the initial cost of a sales order based on the individual items included in the order.", - "Name": "SubTotal", - "SampleValues": [ - "12685.8899", - "602.1946", - "38418.6895", - "108561.8317", - "88812.8625" - ] - }, - { - "AllowedValues": null, - "DataType": "money", - "Definition": "The TaxAmt column in the SalesLT.SalesOrderHeader entity contains the tax amount applied to sales orders. The values in this column are represented as decimal numbers, indicating the precise amount of tax calculated for each order. Each value corresponds to the total tax calculated based on the order's items and applicable tax rates. This column is crucial for financial reporting and accounting purposes to ensure accurate tax calculations for sales transactions.", - "Name": "TaxAmt", - "SampleValues": [ - "3.1163", - "196.3012", - "6242.3752", - "7862.2953", - "5924.7046" - ] - }, - { - "AllowedValues": null, - "DataType": "money", - "Definition": "The Freight column in the SalesLT.SalesOrderHeader entity contains numerical values representing the shipping cost associated with each sales order. The values are expressed as floating-point numbers, indicating the monetary amount spent on freight. The values can vary widely and are typically calculated based on factors such as shipment weight, distance, and carrier rates. This column is important for determining the logistical expenses incurred in fulfilling sales orders.", - "Name": "Freight", - "SampleValues": [ - "345.5927", - "2220.3216", - "22.0087", - "6.1685", - "15.0549" - ] - }, - { - "AllowedValues": null, - "DataType": "money", - "Definition": "The TotalDue column in the SalesLT.SalesOrderHeader entity contains the total monetary amount due for a sales order. The values are represented as decimal numbers and include currency amounts calculated to four decimal places. This column captures the comprehensive total, possibly including subtotals, taxes, and shipping costs, for each sales transaction.", - "Name": "TotalDue", - "SampleValues": [ - "7330.8972", - "45.1995", - "117.7276", - "972.7850", - "3673.3249" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Comment column in the SalesLT.SalesOrderHeader entity stores any additional notes or remarks related to a specific sales order. This could include special instructions, delivery preferences, or any other relevant information provided by the customer or sales representative. The data in this column is generally free-form text and is optional, meaning it may not be populated for every sales order. This column helps provide context and additional details that are not captured by other structured data fields in the sales order record.", - "Name": "Comment", - "SampleValues": [] - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.SalesOrderHeader entity contains unique identifier values in the GUID format (Globally Unique Identifier). These values are used to uniquely identify each row in the table and ensure there are no duplicates. The GUIDs are in the standard 8-4-4-4-12 hexadecimal digit format, which is typical for unique identifiers in databases. This column is likely used for indexing or ensuring data integrity in the sales order records.", - "Name": "rowguid", - "SampleValues": [ - "6228C9CB-1CAB-4E32-98CA-D0DAE5FE563E", - "3ED03B56-A4BF-4872-9471-BC6C7893EAB7", - "ADDB8620-432A-456E-8470-1BEDD4BC3457", - "10E3129D-657F-46F9-86F5-CEDD79B1901C", - "F9899F3F-B4B6-4756-B013-96C16BE20427" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.SalesOrderHeader entity contains the date and time when the record was last updated. The values are stored in the format 'YYYY-MM-DD HH:MM:SS', which represents the year, month, day, hour, minute, and second respectively. This column is used to track changes and updates to sales order records.", - "Name": "ModifiedDate", - "SampleValues": [ - "2008-06-08 00:00:00" - ] - } - ], - "CompleteEntityRelationshipsGraph": [ - "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail", - "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product", - "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", - "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel", - "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription", - "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", - "SalesLT.SalesOrderHeader -> SalesLT.Address", - "SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress", - "SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer" - ], - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.SalesOrderHeader entity contains information on individual sales orders. It captures details such as the order dates, shipping dates, order status, customer identification, and the financial aspects of the order including subtotal, tax, and total amount due. This entity is useful for answering questions related to the overall order management process, tracking the status and dates of orders, understanding customer purchasing behavior, and analyzing sales performance and revenue.", - "Entity": "SalesLT.SalesOrderHeader", - "EntityName": "Sales Order Information", - "EntityRelationships": [ - { - "ForeignEntity": "SalesLT.SalesOrderDetail", - "ForeignKeys": [ - { - "Column": "SalesOrderID", - "ForeignColumn": "SalesOrderID" - }, - { - "Column": "SalesOrderID", - "ForeignColumn": "SalesOrderID" - } - ] - }, - { - "ForeignEntity": "SalesLT.Address", - "ForeignKeys": [ - { - "Column": "BillToAddressID", - "ForeignColumn": "AddressID" - }, - { - "Column": "BillToAddressID", - "ForeignColumn": "AddressID" - }, - { - "Column": "ShipToAddressID", - "ForeignColumn": "AddressID" - } - ] - }, - { - "ForeignEntity": "SalesLT.Customer", - "ForeignKeys": [ - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - }, - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - } - ] - } - ], - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.vGetAllCategories.json b/text_2_sql/data_dictionary/SalesLT.vGetAllCategories.json deleted file mode 100644 index d115d04..0000000 --- a/text_2_sql/data_dictionary/SalesLT.vGetAllCategories.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The ParentProductCategoryName column in the SalesLT.vGetAllCategories entity contains the names of the top-level product categories. Each value represents a broad category under which multiple subcategories and products are grouped. Examples of these top-level categories include Components, Clothing, Bikes, and Accessories. This column helps in identifying and organizing products based on their primary category.", - "Name": "ParentProductCategoryName", - "SampleValues": [ - "Components", - "Clothing", - "Bikes", - "Accessories" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The ProductCategoryName column in the SalesLT.vGetAllCategories entity contains a list of names for different product categories. These names represent various types of products, such as cycling gear and accessories. Each value in this column is a descriptive name that helps categorize and organize products within the database.", - "Name": "ProductCategoryName", - "SampleValues": [ - "Panniers", - "Jerseys", - "Cranksets", - "Fenders", - "Caps" - ] - }, - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductCategoryID column in the SalesLT.vGetAllCategories entity contains unique identifier numbers for different product categories. The values are integers that represent specific categories within the product database. The column is used to categorize products into distinct groups for organizational and reporting purposes. Each number corresponds to a specific product category.", - "Name": "ProductCategoryID", - "SampleValues": [ - 35, - 12, - 11, - 20, - 9 - ] - } - ], - "CompleteEntityRelationshipsGraph": null, - "Database": "AdventureWorksLT", - "Definition": "SalesLT.vGetAllCategories is an entity that provides a hierarchical view of product categories, showing both parent and child categories along with their respective names and unique identifiers. This entity is useful for understanding the structure and relationships between different product categories within a catalog. It can be used to answer questions related to the organization of product categories, such as finding all subcategories under a specific parent category or determining the parent category of a given product category.", - "Entity": "SalesLT.vGetAllCategories", - "EntityName": "Product Categories Overview", - "EntityRelationships": null, - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.vProductAndDescription.json b/text_2_sql/data_dictionary/SalesLT.vProductAndDescription.json deleted file mode 100644 index 6eb049a..0000000 --- a/text_2_sql/data_dictionary/SalesLT.vProductAndDescription.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductID column in the SalesLT.vProductAndDescription entity contains unique numerical identifiers for products. These identifiers are integers and each number corresponds to a specific product in the product catalog. The values are used to distinguish between different products and are likely used as primary keys to facilitate database operations related to product data.", - "Name": "ProductID", - "SampleValues": [ - 808, - 988, - 872, - 773, - 948 - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Name column in the SalesLT.vProductAndDescription entity contains the names of various products. These product names often include descriptors such as size, color, and specification details. The values in this column are typically formatted as descriptive text strings, indicating product type and other attributes such as size (e.g., S, L, 54) and color (e.g., Blue). The information in this column can be used to identify and differentiate various products in the inventory.", - "Name": "Name", - "SampleValues": [ - "Racing Socks, L", - "HL Touring Frame - Blue, 54", - "LL Mountain Tire", - "HL Mountain Rear Wheel", - "Half-Finger Gloves, S" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The ProductModel column in the SalesLT.vProductAndDescription entity contains the names of various product models. The values are descriptive names indicating the type and purpose of the products, such as cycling equipment and clothing. The product model names often include keywords that describe the primary use, features, or target users of the products. These names help in identifying and differentiating between different product models within the catalog.", - "Name": "ProductModel", - "SampleValues": [ - "Mountain Bottle Cage", - "HL Touring Frame", - "Half-Finger Gloves", - "Classic Vest", - "ML Headset" - ] - }, - { - "AllowedValues": null, - "DataType": "nchar", - "Definition": "The Culture column in the SalesLT.vProductAndDescription entity contains culture codes that specify the language and regional formatting for product descriptions. The values are generally represented by a two-letter or a combination of letters and hyphen codes, denoting different languages and cultural contexts, such as 'en' for English, 'ar' for Arabic, 'fr' for French, 'zh-cht' for Traditional Chinese, and 'he' for Hebrew. These culture codes are used to ensure localized and culturally appropriate product information.", - "Name": "Culture", - "SampleValues": [ - "en ", - "ar ", - "fr ", - "zh-cht", - "he " - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Description column in the SalesLT.vProductAndDescription entity contains detailed product descriptions written in various languages. These descriptions provide specific features, benefits, and characteristics of the products, often highlighting unique aspects such as material, design, functionality, and advantages. The descriptions are intended to assist customers in understanding the products better and making informed purchasing decisions. The multi-language nature of the entries suggests a diverse international market for the products.", - "Name": "Description", - "SampleValues": [ - "\u771f\u6b63\u7684\u591a\u9879\u8fd0\u52a8\u81ea\u884c\u8f66\uff0c\u9a91\u4e58\u81ea\u5982\uff0c\u8bbe\u8ba1\u65b0\u9896\u3002\u7b26\u5408\u7a7a\u6c14\u52a8\u529b\u5b66\u7684\u8bbe\u8ba1\u7ed9\u60a8\u5e26\u6765\u4e13\u4e1a\u8f66\u624b\u7684\u4f53\u9a8c\uff0c\u6781\u4f73\u7684\u4f20\u52a8\u88c5\u7f6e\u53ef\u4ee5\u8f7b\u6613\u5f81\u670d\u9661\u5ced\u7684\u8def\u9762\u3002", - "Strong rear wheel with double-walled rim.", - "Tr\u00e8s pratique. Tient dans la poche. Corps en aluminium. 11,2\u00a0bars.", - "Carries 4 bikes securely; steel construction, fits 2\" receiver hitch.", - "\u0e40\u0e1a\u0e32\u0e30\u0e19\u0e31\u0e48\u0e07\u0e2b\u0e38\u0e49\u0e21\u0e1e\u0e34\u0e40\u0e28\u0e29\u0e0a\u0e48\u0e27\u0e22\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e02\u0e35\u0e48\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e2a\u0e1a\u0e32\u0e22\u0e15\u0e25\u0e2d\u0e14\u0e17\u0e31\u0e49\u0e07\u0e27\u0e31\u0e19 \u0e15\u0e30\u0e41\u0e01\u0e23\u0e07\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a\u0e43\u0e2b\u0e21\u0e48 \u0e21\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e40\u0e1f\u0e37\u0e2d\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e15\u0e30\u0e01\u0e23\u0e49\u0e32\u0e41\u0e25\u0e30\u0e01\u0e23\u0e30\u0e40\u0e1b\u0e4b\u0e32 \u0e02\u0e31\u0e1a\u0e02\u0e35\u0e48\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e21\u0e31\u0e48\u0e19\u0e04\u0e07 \u0e41\u0e21\u0e49\u0e02\u0e13\u0e30\u0e1a\u0e23\u0e23\u0e17\u0e38\u0e01\u0e02\u0e2d\u0e07" - ] - } - ], - "CompleteEntityRelationshipsGraph": null, - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.vProductAndDescription entity provides a comprehensive view that combines product information with their descriptions across different cultures. It includes data on the product ID, name, model, culture code, and description. This entity is useful for answering questions related to product details, multilingual product descriptions, and cultural variations of product descriptions. It is particularly helpful for businesses looking to understand and manage their product offerings in various cultural contexts.", - "Entity": "SalesLT.vProductAndDescription", - "EntityName": "Product and Description Details", - "EntityRelationships": null, - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/SalesLT.vProductModelCatalogDescription.json b/text_2_sql/data_dictionary/SalesLT.vProductModelCatalogDescription.json deleted file mode 100644 index 1fcbe6e..0000000 --- a/text_2_sql/data_dictionary/SalesLT.vProductModelCatalogDescription.json +++ /dev/null @@ -1,292 +0,0 @@ -{ - "Columns": [ - { - "AllowedValues": null, - "DataType": "int", - "Definition": "The ProductModelID column in the SalesLT.vProductModelCatalogDescription entity contains integer values that serve as unique identifiers for different product models. Each number corresponds to a specific product model in the catalog, linking products to their respective descriptions and details. The values appear to be sequential or arbitrarily assigned numerical IDs.", - "Name": "ProductModelID", - "SampleValues": [ - 34, - 28, - 23, - 19, - 25 - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Name column in the SalesLT.vProductModelCatalogDescription entity contains the names of various product models. These names typically follow a pattern where they include a product category or type, followed by a numeric value. The product categories may include terms like 'Road', 'Touring', and 'Mountain', which describe the type of product, while the numeric value likely indicates the model or series number within that category. This pattern helps in identifying and distinguishing different models in the catalog.", - "Name": "Name", - "SampleValues": [ - "Road-450", - "Touring-1000", - "Mountain-500", - "Road-150", - "Mountain-100" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Summary column in the SalesLT.vProductModelCatalogDescription entity contains brief descriptions of various bicycle models. These descriptions highlight key features, benefits, and design elements of the bikes, such as performance, comfort, aerodynamics, and suitability for different types of riding conditions. The text is meant to provide potential customers with a quick overview of what to expect from each bike model. The descriptions often use marketing language to emphasize the unique selling points of each product.", - "Name": "Summary", - "SampleValues": [ - "A true multi-sport bike that offers streamlined riding and a revolutionary design. Aerodynamic design lets you ride with the pros, and the gearing will conquer hilly roads. ", - "Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame,super-smooth front suspension, and traction for all terrain. ", - "The plush custom saddle keeps you riding all day, and there's plenty of space to add panniers and bike bags to the newly-redesigned carrier.This bike has great stability when fully-loaded. ", - "Suitable for any type of riding, on or off-road.Fits any budget. Smooth-shifting with a comfortable ride. ", - "Travel in style and comfort. Designed for maximum comfort and safety.Wide gear range takes on all hills. High-tech aluminum alloy construction provides durability without added weight. " - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Manufacturer column in the SalesLT.vProductModelCatalogDescription entity contains the name of the manufacturer responsible for producing the products. It stores textual data representing the company name that manufactures the products listed in the catalog. This column typically includes the brand or corporate names of the product manufacturers.", - "Name": "Manufacturer", - "SampleValues": [ - "AdventureWorks" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Copyright column in the SalesLT.vProductModelCatalogDescription entity contains the year in which the copyright for a product model catalog description was established. The values are typically formatted as four-digit years, such as '2002'. This column helps to identify the year associated with the copyright information for the catalog description, which is important for legal and documentation purposes.", - "Name": "Copyright", - "SampleValues": [ - "2002" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The ProductURL column in the SalesLT.vProductModelCatalogDescription entity contains URLs pointing to product details on the Adventure Works website. These URLs are prefixed with \"HTTP://www.Adventure-works.com\" and follow the standard URL format. The column is used to provide web links where customers can find more information about various products offered by Adventure Works.", - "Name": "ProductURL", - "SampleValues": [ - "HTTP://www.Adventure-works.com" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The WarrantyPeriod column in the SalesLT.vProductModelCatalogDescription entity contains the duration of the warranty offered for a product. The values in this column are expressed in terms of years and typically include a numeric value followed by the word 'year' or 'years'. The data represents the length of time for which the warranty is valid from the date of purchase.", - "Name": "WarrantyPeriod", - "SampleValues": [ - "4 years", - "3 years", - "1 year" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The WarrantyDescription column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the warranty coverage provided for the product models. The descriptions typically include information about the type of warranty, such as parts and labor coverage. The values in this column are detailed and may vary depending on the specific warranty terms offered for each product model. This column helps customers understand what aspects of the product are covered under warranty and the extent of the coverage.", - "Name": "WarrantyDescription", - "SampleValues": [ - "parts and labor" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The NoOfYears column in the SalesLT.vProductModelCatalogDescription entity contains information about the duration in years for which a particular product model is valid or has been in service. The values follow a consistent format, indicating the length of time in numerical form followed by the word 'years'. This column helps in identifying the age or valid period of product models in a straightforward and standardized manner.", - "Name": "NoOfYears", - "SampleValues": [ - "7 years", - "5 years", - "3 years", - "10 years" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The MaintenanceDescription column in the SalesLT.vProductModelCatalogDescription entity contains text descriptions related to maintenance availability for products. The descriptions typically inform customers about the availability of maintenance contracts or services and where they can be obtained, such as through dealers or AdventureWorks retail stores. The content of this column is usually a sentence or two in length, detailing the options for purchasing maintenance services.", - "Name": "MaintenanceDescription", - "SampleValues": [ - "maintenance contract available through your dealer or any AdventureWorks retail store.", - "maintenance contact available through dealer or any Adventure Works Cycles retail store.", - "maintenance contact available through dealer" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Wheel column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various types of bicycle wheels. The descriptions provide details about the wheel's characteristics and performance attributes, such as durability, performance, material composition, and suitability for different types of riders. The information is intended to help consumers make informed decisions about the type of wheel that best meets their needs. The content typically emphasizes features like strength, stability, performance, aerodynamics, and material quality.", - "Name": "Wheel", - "SampleValues": [ - "Strong wheels with double-walled rims.", - "Stable, durable wheels suitable for novice riders.", - "High performance wheels.", - "Excellent aerodynamic rims guarantee a smooth ride.", - "Aluminum alloy rim with stainless steel spokes; built for speed on our high quality rubber tires." - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Saddle column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various types of bicycle saddles. The descriptions typically highlight specific features such as material, design, and comfort aspects. Descriptive phrases commonly include details about weight, anatomical design, pressure relief, and added comfort measures. These detailed sentences help potential customers understand the unique selling points of each saddle model available.", - "Name": "Saddle", - "SampleValues": [ - "Lightweight kevlar racing saddle.", - "Cut-out shell for a more comfortable ride.", - "Anatomic design and made from durable leather for a full-day of riding in comfort.", - "New design relieves pressure for long rides.", - "Comfortable saddle with bump absorping rubber bumpers." - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Pedal column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various types of pedals used in bicycles. These descriptions typically highlight specific features and benefits of the pedals, such as adjustable tension, platform size, and usability. The descriptions are in plain text and are designed to provide potential buyers with detailed information to aid in their purchasing decision.", - "Name": "Pedal", - "SampleValues": [ - "Top-of-the-line clipless pedals with adjustable tension.", - "Expanded platform so you can ride in any shoes; great for all-around riding.", - "A stable pedal for all-day riding." - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The BikeFrame column in the SalesLT.vProductModelCatalogDescription entity contains textual descriptions of different types of bike frames. These descriptions highlight various attributes and features of the bicycle frames such as the material used (commonly aluminum), quality, manufacturing process, and specific design characteristics aimed at enhancing comfort and performance. The descriptions often emphasize aspects like custom-shaping, heat-treatment, welding, and innovative design to convey both the durability and the technological advancements incorporated in the bike frames.", - "Name": "BikeFrame", - "SampleValues": [ - "The aluminum frame is custom-shaped for both good looks and strength;it will withstand the most rigorous challenges of daily riding.", - "Our lightest and best quality aluminum frame made from the newest alloy;it is welded and heat-treated for strength.Our innovative design results in maximum comfort and performance.", - "Our best value frame utilizing the same, ground-breaking technology as the ML aluminum frame.", - "Each frame is hand-crafted in our Bothell facility to the optimum diameterand wall-thickness required of a premium mountain frame.The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.", - "aluminum alloy frame and features a lightweight down-tube milled to the perfect diameter for optimal strength." - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Crankset column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various features and attributes of bicycle cranksets. The values are composed of text phrases highlighting specific aspects such as material, performance, and quality of the crankset. The descriptions may vary in length and detail, but generally provide information about the construction, durability, and functionality of the crankset components.", - "Name": "Crankset", - "SampleValues": [ - " Triple crankset; alumunim crank arm; flawless shifting. ", - " Super rigid spindle. ", - " High-strength crank arm. " - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The PictureAngle column in the SalesLT.vProductModelCatalogDescription entity contains text values that describe the angle from which a product picture is taken. This is likely used to identify different perspectives or viewpoints of a product, such as \"front\", \"side\", \"back\", etc. The values help differentiate pictures based on their angle, assisting users in understanding the visual presentation of the product.", - "Name": "PictureAngle", - "SampleValues": [ - "front" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The PictureSize column in the SalesLT.vProductModelCatalogDescription entity contains the size specification of a product's picture. The values in this column indicate the designated size of the images associated with product models in the catalog. The size is typically described using simple terms such as 'small,' which suggests that there might be other possible values like 'medium' or 'large' to represent different image dimensions. This information is used to categorize and manage different image sizes for products in the catalog.", - "Name": "PictureSize", - "SampleValues": [ - "small" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The ProductPhotoID column in the SalesLT.vProductModelCatalogDescription entity contains unique numeric identifiers for product photos. Each value corresponds to a specific product photo and is used to link the product model to its associated images. The values are integers with no apparent sequential order and serve as primary keys to reference the product photos stored in another table. This column helps in organizing and retrieving the correct photo for each product model in the catalog.", - "Name": "ProductPhotoID", - "SampleValues": [ - "87", - "126", - "118", - "111", - "1" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Material column in the SalesLT.vProductModelCatalogDescription entity contains the primary material description of a product. The values typically represent different types of materials used in the product's construction, such as various metals or alloys. The values may contain common industrial materials and their variations. The pattern in the sample values suggests that the entries may include common materials used in manufacturing, with potential misspellings or variations.", - "Name": "Material", - "SampleValues": [ - "Aluminum Alloy", - "Aluminum", - "Almuminum Alloy" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Color column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the color availability of products. The values indicate whether products are available in a wide range of colors, all colors, or specific exclusions such as not including metallic colors. The descriptions are in sentence form and provide information on the color options of the products.", - "Name": "Color", - "SampleValues": [ - "Available in most colors.", - "Available in most colors", - "Available in all colors.", - "Available in all colors except metallic." - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The ProductLine column in the SalesLT.vProductModelCatalogDescription entity contains the categories or types of bicycles available in the catalog. The values indicate different models of bicycles such as Touring bike, Road bike, and Mountain bike. This column helps in classifying products based on their intended use or design, providing useful information for organizing and filtering the product list in the sales catalog.", - "Name": "ProductLine", - "SampleValues": [ - "Touring bike", - "Road bike", - "Mountain bike" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The Style column in the SalesLT.vProductModelCatalogDescription entity contains information about the gender-specific style designation of a product. Common values include terms indicating whether a product is intended for men, women, or unisex use. The values provide insight into the target demographic for the product's design and aesthetic.", - "Name": "Style", - "SampleValues": [ - "Unisex", - "Men's" - ] - }, - { - "AllowedValues": null, - "DataType": "nvarchar", - "Definition": "The RiderExperience column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of rider skill levels that a particular product model is suitable for. These descriptions range from different experience levels such as Novice, Intermediate, Advanced, and Professional. The values are combinations of these skill levels indicating the span of rider expertise the product caters to. This helps in categorizing products based on the level of rider proficiency they are designed for.", - "Name": "RiderExperience", - "SampleValues": [ - "Novice to Intermediate riders", - "Novice to Advanced riders", - "Intermediate to Professional riders", - "Intermediate to Advanced riders", - "Advanced to Professional riders" - ] - }, - { - "AllowedValues": null, - "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.vProductModelCatalogDescription entity contains unique identifier values in the UUID (Universal Unique Identifier) format. Each value is a 128-bit number used to uniquely identify information within the database. The values follow the standard UUID format, which consists of five groups of hexadecimal digits separated by hyphens. This column is typically used for ensuring the uniqueness of records across tables and databases.", - "Name": "rowguid", - "SampleValues": [ - "866DBAD3-5999-4329-BEAC-D826D959D9A1", - "FCA0665B-B956-489A-A5EC-6F0B4AA14D02", - "94FFB702-0CBC-4E3F-B840-C51F0D11C8F6", - "AA10D9E6-E33F-4DA8-ACE1-992FCD6BB171", - "52E7F2C1-DBFF-4518-927D-C7D46F9ED32E" - ] - }, - { - "AllowedValues": null, - "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.vProductModelCatalogDescription entity contains timestamps indicating the last date and time when the corresponding product model catalog description was modified. The values are in the format of YYYY-MM-DD HH:MM:SS.SSSSSS. This column helps in tracking changes and updates made to the product model catalog descriptions.", - "Name": "ModifiedDate", - "SampleValues": [ - "2006-11-20 09:56:38.273000", - "2005-06-01 00:00:00" - ] - } - ], - "CompleteEntityRelationshipsGraph": null, - "Database": "AdventureWorksLT", - "Definition": "The SalesLT.vProductModelCatalogDescription entity contains detailed information regarding product models, including descriptions, manufacturer details, warranty information, and specifications related to bicycle components and features. This entity serves to provide comprehensive catalog descriptions useful for product listings and marketing materials. It can answer questions related to the attributes and features of specific product models, such as warranty details, material and color options, or the components involved in a particular bicycle model.", - "Entity": "SalesLT.vProductModelCatalogDescription", - "EntityName": "Product Model Catalog Description Information", - "EntityRelationships": null, - "Warehouse": null -} diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.Address.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.Address.json index ef5c083..bc99f51 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.Address.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.Address.json @@ -1,122 +1,163 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The AddressID column in the SalesLT.Address entity contains unique numeric identifiers for each address record in the database. The values are integers and are uniquely assigned to each address, ensuring that no two addresses share the same AddressID. This column acts as the primary key for the Address entity, facilitating indexing and efficient retrieval of address records.", - "Name": "AddressID", - "SampleValues": [ - 667, - 674, - 893, - 506, - 561 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The AddressLine1 column in the SalesLT.Address entity contains street addresses used to identify the location of various entities. The values in this column may include street names, numbers, and sometimes the name of a place or building such as a mall or marketplace. The format of the addresses can vary, including numeric street addresses and named locations. The data is primarily used for mailing and location identification purposes.", - "Name": "AddressLine1", - "SampleValues": [ - "2574 Milton Park", - "White Mountain Mall", - "Vista Marketplace", - "2505 Gateway Drive", - "6333 Cote Vertu" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The AddressLine2 column in the SalesLT.Address entity typically contains additional address information that complements the primary address line. The values may include PO boxes, apartment numbers, suite numbers, floor numbers, or other secondary address details. This column is used to provide further specificity to a mailing address beyond the main street address.", - "Name": "AddressLine2", - "SampleValues": [ - "Box 8033", - "PO Box 4023", - "Edward Way", - "Ste 1071", - "19th Floor" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The City column in the SalesLT.Address entity contains names of cities where the addresses are located. The values in this column are generally proper nouns representing various geographical locations. The city names are diverse and do not follow any apparent pattern or standard. These values will mostly be unique or may have limited repetition based on the addresses stored in the database.", - "Name": "City", - "SampleValues": [ - "Carrollton", - "Etobicoke", - "Burnaby", - "Waterloo", - "Great Falls" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The StateProvince column in the SalesLT.Address entity contains names of states and provinces for various addresses. The values can include both U.S. states and Canadian provinces, as indicated by sample values such as Missouri, Montana, British Columbia, Quebec, and Wyoming. This column is likely used to specify the regional subdivision within a country for each address.", - "Name": "StateProvince", - "SampleValues": [ - "Missouri", - "Montana", - "British Columbia", - "Quebec", - "Wyoming" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The CountryRegion column in the SalesLT.Address entity contains the names of countries or regions associated with addresses. The values are represented as full names of countries or regions, such as \"United States\", \"United Kingdom\", and \"Canada\". This column likely stores the standard names of countries or regions where addresses are registered.", - "Name": "CountryRegion", - "SampleValues": [ - "United States", - "United Kingdom", - "Canada" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The PostalCode column in the SalesLT.Address entity contains postal codes from various regions. The values include a mix of formats, such as alphanumeric patterns typical of UK postal codes (e.g., SW8 4BG, L4 4HB) and numeric patterns that can represent US ZIP codes (e.g., 98036, 97123, 84065). This column likely stores postal codes that identify specific locations, which may vary in format depending on the country.", - "Name": "PostalCode", - "SampleValues": [ - "SW8 4BG", - "98036", - "L4 4HB", - "97123", - "84065" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The column \"rowguid\" in the SalesLT.Address entity stores globally unique identifiers (GUIDs). These values are in the standard 32-character hexadecimal format divided into five groups separated by hyphens, following the common GUID notation. The unique nature of these identifiers helps ensure that each address entry can be distinctly recognized across different systems and databases.", - "Name": "rowguid", - "SampleValues": [ - "79972B72-7D84-4A33-AE27-44A5EFAEF39D", - "FBAC273F-934E-474F-9CCB-F96CA9AE889D", - "C1A9793E-50B5-431C-82DD-8B36ACC9AC4E", - "17A96F13-8658-4F02-A557-2BC4463ADE21", - "D9928CCC-FC35-435A-8A0F-6887813E0E06" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The ModifiedDate column in the SalesLT.Address entity contains timestamps indicating the last date and time a particular address record was updated. The values are in the format 'YYYY-MM-DD HH:MM:SS', which shows the date down to the second. This column is used to track changes and updates to address records over time, ensuring there is a history of modifications for auditing and data integrity purposes.", - "Name": "ModifiedDate", - "SampleValues": [ - "2006-12-01 00:00:00", - "2007-04-01 00:00:00", - "2006-09-01 00:00:00", - "2006-11-01 00:00:00", - "2007-09-01 00:00:00" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.Address entity contains detailed information about physical addresses, including primary and secondary address lines, city, state or province, country or region, and postal code. It also includes unique identifiers such as AddressID and rowguid, alongside a timestamp for the last modification of the record. This entity can be used to answer questions related to the location details of customers or facilities, verify address information, or analyze the geographic distribution of sales or services.", - "Entity": "SalesLT.Address", - "EntityName": "Customer Address Information" + "Entity": "SalesLT.Address", + "Definition": "The SalesLT.Address entity contains information related to physical addresses. This includes details such as address lines, city, state or province, country or region, and postal code. It also includes metadata like a unique row identifier and the date the record was last modified. This entity can be used to answer questions about specific location details, mailing addresses, and geographic data associated with other records in the database.", + "EntityName": "Address Information", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.CustomerAddress", + "ForeignKeys": [ + { + "Column": "AddressID", + "ForeignColumn": "AddressID" + } + ] + }, + { + "ForeignEntity": "SalesLT.SalesOrderHeader", + "ForeignKeys": [ + { + "Column": "AddressID", + "ForeignColumn": "BillToAddressID" + }, + { + "Column": "AddressID", + "ForeignColumn": "BillToAddressID" + }, + { + "Column": "AddressID", + "ForeignColumn": "BillToAddressID" + }, + { + "Column": "AddressID", + "ForeignColumn": "ShipToAddressID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress" + ], + "Columns": [ + { + "Name": "AddressID", + "DataType": "int", + "Definition": "The AddressID column in the SalesLT.Address entity contains unique numeric identifiers for each address record in the table. These values are likely automatically generated and incremented, ensuring that each address entry has a distinct identifier. The IDs do not follow a specific pattern other than being unique integers.", + "AllowedValues": null, + "SampleValues": [ + 1063, + 618, + 855, + 11382, + 508 + ] + }, + { + "Name": "AddressLine1", + "DataType": "nvarchar", + "Definition": "The AddressLine1 column in the SalesLT.Address entity contains the primary street address or location name for an address. This column includes a variety of values such as street names, shopping centers, and specific building or suite numbers. The addresses may include a combination of numbers, street names, and locations, reflecting various formats commonly used for physical addresses. This column is essential for identifying the main location associated with an address record.", + "AllowedValues": null, + "SampleValues": [ + "Johnson Creek", + "Hanford Mall", + "258 King Street East", + "5700 Legacy Dr", + "Natomas Marketplace" + ] + }, + { + "Name": "AddressLine2", + "DataType": "nvarchar", + "Definition": "The AddressLine2 column in the SalesLT.Address entity contains secondary address information that complements the main address provided in AddressLine1. This may include room numbers, suite numbers, P.O. Boxes, building names, or floor numbers. The values are often in a format that specifies a particular part of a building or complex, aiding in precise delivery or identification of location within a larger address structure.", + "AllowedValues": null, + "SampleValues": [ + "Room 99767c", + "Raven House, Kingsgate", + "Suite 2501", + "Box 8033", + "Ste 1071" + ] + }, + { + "Name": "City", + "DataType": "nvarchar", + "Definition": "The City column in the SalesLT.Address entity contains the names of cities associated with the addresses. These city names can vary widely and do not follow a specific format or standard. The column stores city names as text and includes a mix of small and large cities from various regions.", + "AllowedValues": null, + "SampleValues": [ + "Etobicoke", + "Pleasanton", + "Orange", + "Federal Way", + "Mesquite" + ] + }, + { + "Name": "StateProvince", + "DataType": "nvarchar", + "Definition": "The StateProvince column in the SalesLT.Address entity contains the names of states or provinces for addresses. The values represent distinct geographical regions within countries, and in this case, they appear to be U.S. states. This column helps in identifying the specific state or province associated with an address record.", + "AllowedValues": null, + "SampleValues": [ + "Nevada", + "Wyoming", + "California", + "Texas", + "Arizona" + ] + }, + { + "Name": "CountryRegion", + "DataType": "nvarchar", + "Definition": "The CountryRegion column in the SalesLT.Address entity contains the names of countries or regions associated with each address. The values in this column are represented by full country names such as \"United States,\" \"United Kingdom,\" and \"Canada.\" This column helps identify and categorize the geographical location of the addresses stored in the entity.", + "AllowedValues": null, + "SampleValues": [ + "United States", + "United Kingdom", + "Canada" + ] + }, + { + "Name": "PostalCode", + "DataType": "nvarchar", + "Definition": "The PostalCode column in the SalesLT.Address entity contains postal codes used to identify specific geographic regions for mailing purposes. The values can be alphanumeric and vary significantly in format, as they include both Canadian and UK-style postal codes as well as numeric-only US ZIP codes. This suggests that the column includes postal codes from multiple countries, without adhering to a single standard format.", + "AllowedValues": null, + "SampleValues": [ + "H1Y 2H7", + "SW6 SBY", + "SL4 1RH", + "93291", + "59801" + ] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.Address entity contains globally unique identifier (GUID) values. These values are typically used to uniquely identify rows in the table and ensure that each entry can be distinctly recognized across distributed systems. The values follow the standard GUID format: a series of hexadecimal digits grouped into five sections separated by hyphens (e.g., 8-4-4-4-12).", + "AllowedValues": null, + "SampleValues": [ + "A35C7AC7-5AE8-43D9-92E7-180D78A9A7B8", + "034076FD-CD0E-4EAD-864E-8CE7F47D6612", + "079E5DE8-169F-4EB6-BE75-813B40A0143E", + "C418C2F4-6B32-4404-AAB1-E0BEC3958C11", + "85C88CD6-682C-4358-9F8C-5A24F4CCFD98" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.Address entity contains the timestamp indicating when the address record was last updated. The values are in the datetime format, typically represented as 'YYYY-MM-DD HH:MM:SS'. These timestamps are used to track changes to address records, ensuring that any modifications can be accurately traced back to the specific date and time they occurred.", + "AllowedValues": null, + "SampleValues": [ + "2006-03-01 00:00:00", + "2006-09-01 00:00:00", + "2006-08-01 00:00:00", + "2005-12-01 00:00:00", + "2006-12-01 00:00:00" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.Customer.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.Customer.json index 9b03dce..b30c8fd 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.Customer.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.Customer.json @@ -1,197 +1,238 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The CustomerID column in the SalesLT.Customer entity contains unique numeric identifiers assigned to customers. The values in this column are integers and likely follow a sequential or semi-sequential pattern, which ensures that each customer can be uniquely identified within the database. The column does not contain any special formatting or non-numeric characters.", - "Name": "CustomerID", - "SampleValues": [ - 471, - 30118, - 668, - 29522, - 30104 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The NameStyle column in the SalesLT.Customer entity contains Boolean values indicating whether the customer's name should be in a specific format. In this case, the sample value 'False' suggests that the column can store either 'True' for names that follow a special format, or 'False' for names that do not. This Boolean flag allows for easy identification and separation of different name formatting styles within the customer data.", - "Name": "NameStyle", - "SampleValues": [ - false - ], - "Type": "bit" - }, - { - "AllowedValues": null, - "Definition": "The Title column in the SalesLT.Customer entity contains honorifics or titles used to address individuals. These values are typically abbreviations that precede a person's name and indicate their gender or marital status. Common titles include those such as 'Sr.' for Senior, 'Sra.' for Senora, 'Ms.' for Miss, and 'Mr.' for Mister.", - "Name": "Title", - "SampleValues": [ - "Sra.", - "Sr.", - "Ms.", - "Mr." - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The FirstName column in the SalesLT.Customer entity contains the first names of customers. The values are generally common first names in English, which might vary in length and formality. This column is expected to store unique entries for each customer's given name.", - "Name": "FirstName", - "SampleValues": [ - "Ted", - "Edna", - "Lucy", - "Esther", - "Chad" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The MiddleName column in the SalesLT.Customer entity contains the middle names or initials of customers. The values can range from full middle names to single letter initials, which may or may not be followed by a period. The column captures personal information that helps in identifying customers more precisely, especially when first and last names may be common.", - "Name": "MiddleName", - "SampleValues": [ - "B.", - "M.", - "I.", - "Francesca", - "Greg" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The LastName column in the SalesLT.Customer entity contains the last names of customers. These values represent a diverse set of family names, indicating it likely holds surnames from various cultural and ethnic backgrounds. The names appear to follow a standard format of single-word strings, typically capitalized. This column serves to identify and differentiate individual customers based on their last names.", - "Name": "LastName", - "SampleValues": [ - "Manzanares", - "Cheng", - "Farino", - "Caprio", - "Steele" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Suffix column in the SalesLT.Customer entity contains suffixes used in customer names. These values are typically abbreviated titles or rankings such as generational identifiers (e.g., Jr., Sr., IV) or academic/professional titles (e.g., PhD). The data in this column helps to distinguish between individuals with similar names by adding specific identifiers or qualifications.", - "Name": "Suffix", - "SampleValues": [ - "Sr.", - "PhD", - "Jr.", - "IV", - "II" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The CompanyName column in the SalesLT.Customer entity contains the names of companies that are customers. The values typically include the full names of businesses, often reflecting their services or products such as shipping, bike sales, and sports merchandise. The names are written in title case with spaces between words and usually include descriptive terms indicating the type of business.", - "Name": "CompanyName", - "SampleValues": [ - "Timely Shipping Service", - "Number One Bike Co.", - "Sports Merchandise", - "A Typical Bike Shop", - "Valley Bicycle Specialists" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The SalesPerson column in the SalesLT.Customer entity contains the usernames of sales representatives within the Adventure Works organization. The values follow a common format of 'adventure-works\\' followed by the representative's first name and a numerical digit. This pattern indicates a structured naming convention used by the company to uniquely identify each salesperson.", - "Name": "SalesPerson", - "SampleValues": [ - "adventure-works\\michael9", - "adventure-works\\jos\u00e91", - "adventure-works\\shu0", - "adventure-works\\jae0", - "adventure-works\\garrett1" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The EmailAddress column in the SalesLT.Customer entity contains the email addresses of customers registered with Adventure Works. Each email address appears to follow the format of a username followed by the domain \"adventure-works.com\". The usernames usually consist of the customer's first name or a combination of first name and a numeric value. This standard format ensures consistency in the storage and retrieval of customer email information.", - "Name": "EmailAddress", - "SampleValues": [ - "lindsey0@adventure-works.com", - "sairaj1@adventure-works.com", - "jean3@adventure-works.com", - "john16@adventure-works.com", - "suzanadeabreu0@adventure-works.com" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The column contains phone numbers in a standardized format, specifically in the North American Numbering Plan (NANP) format. Each phone number follows the pattern of three digits, a hyphen, another three digits, a hyphen, and then four digits (XXX-XXX-XXXX). This suggests the phone numbers are likely from the United States or Canada.", - "Name": "Phone", - "SampleValues": [ - "834-555-0132", - "695-555-0158", - "833-555-0167", - "351-555-0131", - "357-555-0161" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The PasswordHash column in the SalesLT.Customer entity contains hashed representations of customer passwords. The hash values typically consist of a long string of alphanumeric characters and symbols derived from cryptographic algorithms. These hashes are used for securely storing customer passwords and ensuring that the original passwords are not easily decipherable. The values do not follow a simple or predictable pattern, as they are designed to be unique and secure.", - "Name": "PasswordHash", - "SampleValues": [ - "hbXMO61Cy3vQxyCiHA7HyFryiQNgK7GAqMxsht+DVBI=", - "muiJ85PHJTw5ocOM+yS+gq+w8REzzCOfzXZNFyDZniI=", - "4wMARaGSdJ36NMWSghaEHOvqGA6TSKb3JZJ8QlNfnok=", - "FV6z03ywMJOumcU+TEoL/Z/s4YP2fe8B3MJUUTA0CHU=", - "gCWE10xc3haq9E82Ksvg2GS6WBBD0H0ZF25YAS0CfJ8=" - ], - "Type": "varchar" - }, - { - "AllowedValues": null, - "Definition": "The PasswordSalt column in the SalesLT.Customer entity contains salt values used for hashing customer passwords. These values are typically base64-encoded strings, which provide an added layer of security by ensuring that even if two users have the same password, their hashed versions will differ. The salt values help protect against rainbow table attacks and enhance password security.", - "Name": "PasswordSalt", - "SampleValues": [ - "wt1HllQ=", - "WWk6sxA=", - "ekE0M9I=", - "DKu7/UM=", - "sQMfTfM=" - ], - "Type": "varchar" - }, - { - "AllowedValues": null, - "Definition": "The rowguid column in the SalesLT.Customer entity contains unique identifier values in the form of globally unique identifiers (GUIDs). These values are typically used to uniquely identify each customer record within the database. The GUID format follows a standardized 32-character string representation separated by hyphens, ensuring that each value is unique across space and time.", - "Name": "rowguid", - "SampleValues": [ - "ED1FF0E0-836D-42B3-A9DC-F8FAAF32ADBA", - "C6A84BC4-4131-4F49-9865-1F05530318CD", - "40984282-13F9-4B14-90B3-E7A17180195D", - "91154406-0118-4A11-BB1B-366EDFB5C97A", - "A029F31E-433B-4FA4-B442-B291D16A1B9F" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The ModifiedDate column in the SalesLT.Customer entity contains timestamps indicating the last date and time when a customer's information was modified. The values are in the datetime format, typically including both date and time down to fractions of a second. This column is used to track changes and updates made to customer records, facilitating auditing and data consistency.", - "Name": "ModifiedDate", - "SampleValues": [ - "2009-05-16 16:33:33.090000", - "2006-08-01 00:00:00", - "2007-05-01 00:00:00", - "2007-08-01 00:00:00", - "2005-08-01 00:00:00" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.Customer entity contains detailed information about individual customers and companies in the sales database. It includes personal attributes such as names and titles, contact information like email addresses and phone numbers, and security details like password hashes and salts. This entity is useful for answering questions related to customer identification, communication preferences, and sales representative assignments. Additionally, it can help track the latest modifications to customer records.", - "Entity": "SalesLT.Customer", - "EntityName": "Customer Information" + "Entity": "SalesLT.Customer", + "Definition": "The SalesLT.Customer entity contains information about customers including their personal details, contact information, and authentication data. It tracks individual names, company associations, and salesperson assignments as well as security details for customer logins. This entity is useful for answering questions related to customer identity, contact preferences, sales assignments, and tracking modifications or updates to customer records.", + "EntityName": "Customer Information", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.CustomerAddress", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + }, + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ] + }, + { + "ForeignEntity": "SalesLT.SalesOrderHeader", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + }, + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + }, + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress" + ], + "Columns": [ + { + "Name": "CustomerID", + "DataType": "int", + "Definition": "The CustomerID column in the SalesLT.Customer entity contains unique numerical identifiers assigned to each customer. These values are integers and are used to distinguish and reference individual customers within the database. The numeric values do not follow a particular sequence, indicating they may be system-generated and assigned according to specific business logic or rules.", + "AllowedValues": null, + "SampleValues": [ + 181, + 30040, + 383, + 38, + 185 + ] + }, + { + "Name": "NameStyle", + "DataType": "bit", + "Definition": "The NameStyle column in the SalesLT.Customer entity contains Boolean values that indicate whether the customer name is stored in a special format. The value 'False' means that the customer's name is stored in a standard format. This column helps differentiate between names that might require unique formatting and those that follow the regular format.", + "AllowedValues": null, + "SampleValues": [ + false + ] + }, + { + "Name": "Title", + "DataType": "nvarchar", + "Definition": "The Title column in the SalesLT.Customer entity contains a list of honorifics or titles used to address individuals. These are commonly used prefixes that denote the gender or marital status of the customer, such as 'Mr.' for males, 'Ms.' for females, and other equivalent titles. The values in this column are typically abbreviated and offer a formal way to refer to the customers.", + "AllowedValues": null, + "SampleValues": [ + "Sra.", + "Sr.", + "Ms.", + "Mr." + ] + }, + { + "Name": "FirstName", + "DataType": "nvarchar", + "Definition": "The FirstName column in the SalesLT.Customer entity contains the first names of customers. It generally includes a variety of common first names and does not follow a specific pattern or format. The values are typically presented as capitalized proper nouns.", + "AllowedValues": null, + "SampleValues": [ + "Brenda", + "Juanita", + "Kari", + "Kirk", + "Kara" + ] + }, + { + "Name": "MiddleName", + "DataType": "nvarchar", + "Definition": "The column contains the middle initials of customers. Each value is a single uppercase letter followed by a period, representing the initial of the customer's middle name. This column helps to uniquely identify individuals by providing an additional character from their full name.", + "AllowedValues": null, + "SampleValues": [ + "D.", + "A.", + "C.", + "R.", + "N." + ] + }, + { + "Name": "LastName", + "DataType": "nvarchar", + "Definition": "The LastName column in the SalesLT.Customer entity contains the surnames of customers. The values in this column are typically English surnames but can include surnames from various cultural backgrounds. The values are stored as text strings and each entry represents the family or last name of a customer.", + "AllowedValues": null, + "SampleValues": [ + "Jordan", + "Krow", + "Trau", + "Goldstein", + "Carmody" + ] + }, + { + "Name": "Suffix", + "DataType": "nvarchar", + "Definition": "The Suffix column in the SalesLT.Customer entity contains suffixes used in customer names. These suffixes indicate titles or generational identifiers such as Sr. for Senior, Jr. for Junior, PhD for Doctor of Philosophy, and Roman numerals like II and IV. These identifiers are often appended at the end of the customer's last name to provide additional information about their status, education level, or generational position.", + "AllowedValues": null, + "SampleValues": [ + "Sr.", + "PhD", + "Jr.", + "IV", + "II" + ] + }, + { + "Name": "CompanyName", + "DataType": "nvarchar", + "Definition": "The CompanyName column in the SalesLT.Customer entity contains the names of companies that are customers. The names generally reflect the type of business or industry the company operates in, such as manufacturing, transportation, and fitness supplies. This column likely includes a variety of company names representing different sectors and regions. The information is primarily used to identify and catalog the customers' businesses.", + "AllowedValues": null, + "SampleValues": [ + "Transportation Options", + "Regional Manufacturing", + "National Manufacturing", + "Running and Cycling Gear", + "Fitness Supplies" + ] + }, + { + "Name": "SalesPerson", + "DataType": "nvarchar", + "Definition": "The SalesPerson column in the SalesLT.Customer entity contains the names of sales representatives associated with each customer. The values follow a pattern consisting of a domain prefix 'adventure-works\\' followed by the first name of the salesperson and a numeric suffix. This format indicates the salesperson's unique identifier within the adventure-works domain, representing individual sales personnel.", + "AllowedValues": null, + "SampleValues": [ + "adventure-works\\jos\u00e91", + "adventure-works\\linda3", + "adventure-works\\david8", + "adventure-works\\garrett1", + "adventure-works\\shu0" + ] + }, + { + "Name": "EmailAddress", + "DataType": "nvarchar", + "Definition": "The EmailAddress column in the SalesLT.Customer entity contains email addresses associated with individual customers. The values follow a common format of local-part followed by the domain name \"adventure-works.com.\" Each local-part typically includes a first name followed by a numeral. The data is used to identify and communicate with customers via email.", + "AllowedValues": null, + "SampleValues": [ + "william1@adventure-works.com", + "marjorie0@adventure-works.com", + "della0@adventure-works.com", + "linda7@adventure-works.com", + "erin1@adventure-works.com" + ] + }, + { + "Name": "Phone", + "DataType": "nvarchar", + "Definition": "The Phone column in the SalesLT.Customer entity contains customer phone numbers. The values typically include a sequence of digits separated by dashes, and may sometimes include country code prefixes or parentheses for area codes. The format varies slightly but generally follows standard phone number conventions, indicating regional and local numbers.", + "AllowedValues": null, + "SampleValues": [ + "158-555-0154", + "554-555-0110", + "1 (11) 500 555-0115", + "994-555-0194", + "990-555-0141" + ] + }, + { + "Name": "PasswordHash", + "DataType": "varchar", + "Definition": "The PasswordHash column in the SalesLT.Customer entity contains hashed representations of customer passwords. These hash values are used for securely storing user passwords to prevent unauthorized access. The values are typically a result of applying a cryptographic hash function to user passwords, ensuring that the original passwords cannot be easily retrieved. The hashed values are stored in a format such as Base64 encoding, which is evident from the sample values provided.", + "AllowedValues": null, + "SampleValues": [ + "NLAR7H8spiCb/C0qY+3qkJm3VuoSOqDw7yspRc1CTTg=", + "YYTwMHBzX9ZM2XoYAzTo7bVfsHm05BO3Sl1+sokcRjM=", + "o1GVo3vExeNzo0/ctdRGf2eDK3uzTlcUbr18tN+Slf8=", + "muiJ85PHJTw5ocOM+yS+gq+w8REzzCOfzXZNFyDZniI=", + "6eApe0lB1ZkvyJB3Uo3LaYGV8sm2/NE9fUHXM7a0RYU=" + ] + }, + { + "Name": "PasswordSalt", + "DataType": "varchar", + "Definition": "The PasswordSalt column in the SalesLT.Customer entity contains cryptographic salt values used in conjunction with passwords to enhance security. Each value is a unique and randomly generated string, likely encoded in Base64 format, which helps protect against dictionary attacks and rainbow table attacks by adding an additional layer of complexity to the hashed passwords.", + "AllowedValues": null, + "SampleValues": [ + "wmfLAOE=", + "Ze2j4rQ=", + "jA7oD80=", + "qUowBt4=", + "l32Vf08=" + ] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.Customer entity contains unique identifier values in the form of globally unique identifiers (GUIDs). These values are represented in a standard 36-character string format, including hyphens, following the pattern of 8-4-4-4-12 characters. The purpose of this column is to uniquely identify each customer record without duplication, ensuring consistency and integrity of data.", + "AllowedValues": null, + "SampleValues": [ + "C610F872-6183-4D98-ADA3-E3A5B1A3588D", + "9DEF17D4-B251-405F-A854-70A33DEBBBE9", + "5F5BE7AD-3CD2-481C-93D2-66208B113DF8", + "0C316F6F-5D54-41FD-86A3-6ECAF31A01DD", + "8C81DD5F-EA36-47B0-A5F1-7583BC5DABC2" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.Customer entity contains the date and time when the customer record was last updated. The values follow the format YYYY-MM-DD HH:MM:SS, indicating year, month, day, and the exact time of the modification. This column is used to track changes to customer records over time. The dates reflect when modifications occurred within the system.", + "AllowedValues": null, + "SampleValues": [ + "2005-11-01 00:00:00", + "2007-03-01 00:00:00", + "2006-10-01 00:00:00", + "2007-05-01 00:00:00", + "2007-04-01 00:00:00" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.CustomerAddress.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.CustomerAddress.json index 2cbd13a..3d0df2c 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.CustomerAddress.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.CustomerAddress.json @@ -1,69 +1,103 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The CustomerID column in the SalesLT.CustomerAddress entity contains unique numerical identifiers assigned to customers. Each value is an integer and serves as a key to distinguish one customer from another. These IDs are crucial for linking customer information with their respective addresses and other related data within the database. The values are randomly assigned and do not follow a discernible sequential pattern.", - "Name": "CustomerID", - "SampleValues": [ - 30115, - 29969, - 29871, - 30051, - 30039 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The AddressID column in the SalesLT.CustomerAddress entity contains unique numeric identifiers for each address associated with a customer. The values are integers and are likely assigned sequentially or randomly generated to maintain uniqueness. This column serves as the primary key for addressing records in the table.", - "Name": "AddressID", - "SampleValues": [ - 478, - 893, - 865, - 644, - 589 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The AddressType column in the SalesLT.CustomerAddress entity contains types of addresses associated with customers. It includes designations such as 'Shipping' and 'Main Office', indicating the purpose or function of the address. This column helps categorize the addresses for various customer-related operations, such as shipping destinations or principal business locations.", - "Name": "AddressType", - "SampleValues": [ - "Shipping", - "Main Office" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The rowguid column in the SalesLT.CustomerAddress entity contains uniqueidentifier values in the GUID format. These values are unique for each row and are typically used to provide a unique reference for each customer address. The format consists of a series of alphanumeric characters grouped into five sections separated by hyphens, ensuring each identifier is distinct across the database.", - "Name": "rowguid", - "SampleValues": [ - "882C6728-41E4-4BA5-9B26-F1341A0BFB11", - "D2500013-41B3-40CE-9135-8EA6C762D1BB", - "88D1889D-E045-40CC-A9CE-51C8614947E5", - "C6078B9A-2F95-4029-BE72-511345BE2A9A", - "33AA20BE-4DB5-42E4-83C6-64F377BE8E6C" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The ModifiedDate column in the SalesLT.CustomerAddress entity stores date and time information indicating when a record was last updated. The values follow the YYYY-MM-DD HH:MI:SS format. This column is useful for tracking the most recent changes made to customer addresses.", - "Name": "ModifiedDate", - "SampleValues": [ - "2006-11-01 00:00:00", - "2007-05-01 00:00:00", - "2006-01-01 00:00:00", - "2007-03-01 00:00:00", - "2007-02-01 00:00:00" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.CustomerAddress entity stores the relationship between customers and their addresses, specifying the type of address (e.g., billing or shipping) for each customer. It includes identifiers for both the customer and address, as well as metadata for tracking changes. This entity can be used to answer questions about where customers reside, the types of addresses associated with customers, and when address information was last updated.", - "Entity": "SalesLT.CustomerAddress", - "EntityName": "Customer Address Information" + "Entity": "SalesLT.CustomerAddress", + "Definition": "The SalesLT.CustomerAddress entity captures the association between customers and their addresses. It details the type of address (e.g., billing or shipping) linked to each customer, as well as metadata such as the unique identifier (rowguid) and the date when the record was last modified. This entity can be used to answer questions related to which addresses are associated with specific customers, what type of addresses customers have, and when the address information was last updated.", + "EntityName": "Customer Address Information", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.Address", + "ForeignKeys": [ + { + "Column": "AddressID", + "ForeignColumn": "AddressID" + } + ] + }, + { + "ForeignEntity": "SalesLT.Customer", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + }, + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.CustomerAddress -> SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.Customer", + "SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.Address" + ], + "Columns": [ + { + "Name": "CustomerID", + "DataType": "int", + "Definition": "The CustomerID column in the SalesLT.CustomerAddress entity contains unique numerical identifiers assigned to each customer. These values represent individual customer records and are likely used to establish relationships with other tables in the database, such as customer information and their associated addresses. The numbers are integer values and appear to be auto-incremented, indicating a sequential assignment as new customers are added to the system.", + "AllowedValues": null, + "SampleValues": [ + 30035, + 30095, + 29637, + 29787, + 29562 + ] + }, + { + "Name": "AddressID", + "DataType": "int", + "Definition": "The AddressID column in the SalesLT.CustomerAddress entity is a unique identifier for the addresses associated with customer records. It contains numerical values that likely serve as the primary key for the address entries in this table, ensuring each entry is distinct. The values are integers and appear to be auto-incremented, indicating the order in which addresses were added to the database. This column is used to uniquely identify and link customer addresses with other records.", + "AllowedValues": null, + "SampleValues": [ + 28, + 585, + 1033, + 503, + 461 + ] + }, + { + "Name": "AddressType", + "DataType": "nvarchar", + "Definition": "The AddressType column in the SalesLT.CustomerAddress entity specifies the type or purpose of an address associated with a customer. Sample values indicate that this column includes designations such as 'Shipping' and 'Main Office', suggesting that it categorizes addresses based on their usage or function. This column is likely used to differentiate between multiple addresses for the same customer, indicating whether the address is used for shipping, billing, office locations, or other specific purposes.", + "AllowedValues": null, + "SampleValues": [ + "Shipping", + "Main Office" + ] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.CustomerAddress entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). These values are used to uniquely identify each record in the table, ensuring that no two records have the same identifier. GUIDs follow the standard 128-bit format, typically represented as a string of hexadecimal numbers separated by hyphens. This column is crucial for maintaining data integrity and enabling precise record referencing and linking across databases.", + "AllowedValues": null, + "SampleValues": [ + "5D215B08-8954-48D2-8254-447D2415FC8B", + "C7A8A997-0817-42D2-A150-5785F7A4E47F", + "AA005E64-2103-433D-AC7E-886222396936", + "3AB25485-C5FD-4132-AA0B-2A9B2915068C", + "40E68361-485D-45F4-B18C-282D13F4552E" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.CustomerAddress entity contains timestamp values indicating the date and time when the customer address record was last modified. The values follow the format of 'YYYY-MM-DD HH:MM:SS'. This column helps in tracking changes to address information, ensuring that the most recent updates are recorded and can be audited if necessary. The typical format seen in the sample values is compatible with standard SQL datetime formats.", + "AllowedValues": null, + "SampleValues": [ + "2006-11-01 00:00:00", + "2008-06-01 00:00:00", + "2006-01-01 00:00:00", + "2006-07-01 00:00:00", + "2005-07-01 00:00:00" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.Product.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.Product.json index bf8f333..6a27e22 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.Product.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.Product.json @@ -1,215 +1,260 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The ProductID column in the SalesLT.Product entity contains unique numeric identifiers for each product. These identifiers are represented as integer values. Each ProductID is distinct and used to uniquely reference products in the database.", - "Name": "ProductID", - "SampleValues": [ - 797, - 840, - 922, - 993, - 956 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The Name column in the SalesLT.Product entity contains product names that include both descriptive terms and technical specifications. These names often feature details such as model names, colors, sizes, and additional product features. The values generally exhibit a pattern of including specific features and identifiers that distinguish each product uniquely.", - "Name": "Name", - "SampleValues": [ - "Road-150 Red, 48", - "Road-650 Red, 52", - "Touring-3000 Yellow, 50", - "Taillights - Battery-Powered", - "ML Crankset" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The ProductNumber column in the SalesLT.Product entity contains unique alphanumeric codes assigned to each product. These product numbers typically follow a pattern that includes both letters and numbers, often separated by hyphens. The codes may have prefixes like 'BK', 'CS', or 'FR', which might indicate a category or product type, followed by a series of characters that likely represent specific attributes of the product.", - "Name": "ProductNumber", - "SampleValues": [ - "BK-R68R-48", - "BK-M82B-38", - "BK-M82S-44", - "CS-4759", - "FR-M21B-40" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Color column in the SalesLT.Product entity contains a list of color descriptions for the products. The values are generally common color names, occasionally combined to indicate multiple colors within a product (e.g., \"Silver/Black\"). These color descriptions are used for categorizing and identifying products based on their appearance.", - "Name": "Color", - "SampleValues": [ - "Grey", - "Silver", - "Silver/Black", - "White", - "Yellow" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The StandardCost column in the SalesLT.Product entity contains numerical values representing the standard cost of products. The values are typically precise decimal numbers, implying they might be calculated with a high degree of accuracy. This column is likely used for tracking the baseline cost associated with producing or purchasing each product within the database, and it plays a crucial role in financial and inventory management tasks.", - "Name": "StandardCost", - "SampleValues": [ - "199.3757", - "747.2002", - "55.3801", - "110.2829", - "8.0373" - ], - "Type": "money" - }, - { - "AllowedValues": null, - "Definition": "The ListPrice column in the SalesLT.Product entity contains the selling price of each product. The values are represented as decimal numbers with four decimal places, indicative of precision in pricing. These prices range from moderately low to high, reflecting a variety of products with different price points in the inventory.", - "Name": "ListPrice", - "SampleValues": [ - "209.0250", - "337.2200", - "120.2700", - "769.4900", - "2443.3500" - ], - "Type": "money" - }, - { - "AllowedValues": null, - "Definition": "The Size column in the SalesLT.Product entity contains values that represent the size of the product. The values include both numeric sizes such as '70', '44', and '50', and alphanumeric sizes such as 'M' for medium and 'S' for small. This indicates that the column accommodates a variety of size notations, likely depending on the product type.", - "Name": "Size", - "SampleValues": [ - "M", - "70", - "44", - "S", - "50" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Weight column in the SalesLT.Product entity contains numerical values representing the weight of products. The values are recorded with up to two decimal places and can range significantly. The weight is likely measured in a consistent unit, such as grams. This column is used for tracking the mass of different products in the inventory.", - "Name": "Weight", - "SampleValues": [ - "9130.77", - "6994.36", - "9430.14", - "8808.72", - "9715.90" - ], - "Type": "decimal" - }, - { - "AllowedValues": null, - "Definition": "The ProductCategoryID column in the SalesLT.Product entity contains numerical identifiers that correspond to specific product categories. Each unique ID represents a different category within the product catalog. The values are integers and are used to link products to their respective categories within the database.", - "Name": "ProductCategoryID", - "SampleValues": [ - 27, - 38, - 30, - 8, - 19 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The ProductModelID column in the SalesLT.Product entity contains numeric identifiers that uniquely represent different product models. These values are integers and serve as foreign keys that link products to their respective models. The column helps to categorize and manage products based on their model specifications.", - "Name": "ProductModelID", - "SampleValues": [ - 37, - 44, - 7, - 45, - 94 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The SellStartDate column in the SalesLT.Product entity contains datetime values representing the date and time when a product became available for sale. The format follows the standard SQL datetime format 'YYYY-MM-DD HH:MM:SS'. This column is used to track the sales start dates of products within the database.", - "Name": "SellStartDate", - "SampleValues": [ - "2007-07-01 00:00:00", - "2006-07-01 00:00:00", - "2005-07-01 00:00:00", - "2002-06-01 00:00:00" - ], - "Type": "datetime" - }, - { - "AllowedValues": null, - "Definition": "The SellEndDate column in the SalesLT.Product entity contains datetime values that indicate the end date for when a product is available for sale. The dates follow the format YYYY-MM-DD HH:MM:SS and represent specific points in time. This column is used to determine the cutoff date after which a product is no longer sold.", - "Name": "SellEndDate", - "SampleValues": [ - "2007-06-30 00:00:00", - "2006-06-30 00:00:00" - ], - "Type": "datetime" - }, - { - "AllowedValues": null, - "Definition": "The DiscontinuedDate column in the SalesLT.Product entity records the date a product was discontinued. This column contains date values indicating when a product is no longer available for sale. If the product is still active and available for purchase, this column may have a NULL value.", - "Name": "DiscontinuedDate", - "SampleValues": [], - "Type": "datetime" - }, - { - "AllowedValues": null, - "Definition": "The ThumbNailPhoto column in the SalesLT.Product entity contains binary data representing the thumbnail photo images of products in GIF format. The binary data adheres to the GIF file structure, starting with the \"GIF89a\" header, followed by image data encoded in binary. These values include image metadata, color tables, and pixel data, all encoded in a compressed format suitable for storage and rapid retrieval. This column is utilized for storing compact visual representations of the products for use in front-end applications, catalogs, or reports where a small preview image of each product is needed.", - "Name": "ThumbNailPhoto", - "SampleValues": [ - "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\xd2\\xcd\\xc8yld\\xd5\\xd1\\xcc\\x82vn\\x9f\\x9f\\x9f\\xe9\\xe6\\xe3\\xc8\\xc2\\xbc\\xcd\\xc9\\xc4\\xda\\xd6\\xd2vib\\xa4\\xa4\\xa4\\xda\\xda\\xda\\xe3\\xe0\\xdd\\x94\\x8a\\x82\\x93\\x86~\\xb4\\xaa\\xa3\\xe1\\xde\\xdb~rk\\xca\\xc5\\xc0\\xdd\\xda\\xd5\\xeb\\xe9\\xe5\\xef\\xef\\xef\\xaf\\xaf\\xaf<0-\\xaa\\xaa\\xaaMA<\\xbb\\xb6\\xb1qd]\\xf0\\xee\\xecLLK\\xf1\\xf0\\xee\\xc4\\xbf\\xb9[ZY{{z\\xca\\xca\\xca\\xde\\xdc\\xd9\\xf3\\xf3\\xf3oaZ\\xee\\xec\\xea\\t\\x08\\x07\\xbc\\xb8\\xb5\\xb5\\xae\\xa8ECA\\x8b\\x8b\\x8abTM\\x94\\x91\\x8d\\x89}uUIC\\xd0\\xcb\\xc5\\x9d\\x99\\x94\\x99\\x8d\\x85lif]QJTSR\\x1d\\x1c\\x1b\\x86yq\\x8e\\x81y#\\x1d\\x1c\\x9d\\x92\\x8a\\xb9\\xb9\\xb9\\xaa\\xa6\\xa1\\xa5\\x9c\\x95\\xe4\\xe4\\xe4ea]\\xb4\\xb4\\xb4\\xae\\xa5\\x9d432865\\xf7\\xf6\\xf5\\xa1\\xa1\\xa1\\xb1\\xb1\\xb1\\x95\\x93\\x91-,,\\xf4\\xf2\\xf1i\\\\U\\xe6\\xe4\\xe1\\xf5\\xf4\\xf2,#!\\xfa\\xf9\\xf8\\xa1\\x97\\x8fdZT\\x9b\\x96\\x913-*a^[qnj\\xf7\\xf6\\xf48-*\\xdd\\xdd\\xdd\\xdb\\xd8\\xd5A51\\xa6\\xa1\\x9dmki\\x84\\x81~\\x81\\x7f{\\xf6\\xf5\\xf4\\xbe\\xbe\\xbe\\xec\\xeb\\xea\\x8a\\x87\\x84\\xbc\\xbc\\xbc\\xb9\\xb0\\xa9kfb\\xfa\\xfa\\xf9RPN\\xa1\\x98\\x92\\xbd\\xb5\\xae???\\xe4\\xe2\\xe1dc`\\xc1\\xbc\\xb7C>;yvsE84PMJ\\x1a\\x15\\x14\\x14\\x13\\x12\\xa9\\xa0\\x99J=9\\xba\\xb3\\xad\\xbc\\xbb\\xb9vtr\\xc0\\xb8\\xb1\\x87\\x85\\x83\\xa5\\xa3\\xa03)&999RFA\\x9d\\x94\\x8d\\xf8\\xf8\\xf7\\xd7\\xd4\\xd2) \\x1e\\xb3\\xb0\\xad&%%\\x9a\\x93\\x8d\\xdd\\xdb\\xd9\\xfc\\xfb\\xfbk_XPC>]YV\\xb0\\xa6\\x9f|og\\xeb\\xea\\xe8wql\\xa2\\x9e\\x9b\\x85|t\\x99\\x99\\x99JHF\\xf3\\xf2\\xf0\\xe7\\xe6\\xe5\\xe7\\xe5\\xe4\\xba\\xba\\xba\\xb6\\xb6\\xb6H:6rg`\\xd8\\xd3\\xce\\xc2\\xba\\xb3\\xac\\xa2\\x9a\\xa7\\x9e\\x96XKF<:9\\xa4\\x9a\\x92\\xf3\\xf1\\xf0+(&\\xc4\\xbd\\xb7\\x88\\x80y\\xa5\\x9b\\x941&$\\x81yr\\xbe\\xbc\\xb9\\xb8\\xaf\\xa7\\\\NH\\xef\\xed\\xec\\x8f\\x84|\\x83{u\\x7fyt\\xa7\\x9c\\x94XVT\\x1a\\x18\\x18\\x13\\x10\\x0f\\x0e\\r\\r\\xe6\\xe6\\xe6\\xe2\\xe2\\xe2\\xd4\\xd4\\xd4\\xc6\\xc6\\xc6\\xce\\xce\\xce\\xd1\\xd1\\xd1\\xc2\\xc2\\xc2\\xdf\\xdf\\xdf\\xd7\\xd7\\xd7\\xfd\\xfd\\xfd\\xe8\\xe8\\xe8\\xea\\xea\\xea\\xfc\\xfc\\xfc\\xed\\xed\\xed\\xec\\xec\\xec\\xfb\\xfb\\xfb\\xf7\\xf7\\xf7\\xf0\\xf0\\xf0\\xf1\\xf1\\xf1\\xf4\\xf4\\xf4\\xfa\\xfa\\xfa\\xf9\\xf9\\xf9\\xf5\\xf5\\xf5\\xfd\\xfd\\xfc\\xf6\\xf6\\xf6\\xf8\\xf8\\xf8\\xfc\\xfc\\xfb\\xfb\\xfb\\xfa\\xe7\\xe7\\xe7\\xeb\\xeb\\xeb\\xfe\\xfe\\xfd\\xe9\\xe9\\xe9\\xf8\\xf7\\xf6\\xf9\\xf8\\xf8\\xfb\\xfa\\xfa\\xf9\\xf9\\xf8\\xe7\\xe6\\xe6\\xe3\\xe2\\xe0\\xfd\\xfc\\xfc\\xeb\\xeb\\xea\\xed\\xec\\xec\\x98\\x91\\x8a\\xeb\\xea\\xeaHEC\\xcd\\xcc\\xca\\x9f\\x93\\x8b\\xcd\\xcb\\xc8\\xc4\\xc2\\xc0\\x8c\\x80w\\xd6\\xd3\\xd0\\xe9\\xe8\\xe8\\xea\\xe9\\xe9\\xac\\xac\\xab\\xdf\\xdb\\xd7=;;?3/\\x95\\x90\\x8a\\xb0\\xa9\\xa3\\xac\\xa3\\x9c\\xab\\xa5\\x9f;76\\xb6\\xb3\\xaf\\x8b\\x89\\x87\\xb7\\xb5\\xb2\\xf1\\xf0\\xf0\\xb7\\xaf\\xa8\\x9d\\x9c\\x9a\\xa3\\x9c\\x97\\xd7\\xd5\\xd3\\xd7\\xd6\\xd4\\xf5\\xf4\\xf4\\xf5\\xf5\\xf4\\xef\\xee\\xed\\xfe\\xfe\\xfe\\xbf\\xbf\\xbf\\x00\\x00\\x00\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00\\xfb\\xfd\\x1bH\\xb0\\xa0\\xc1\\x83\\x06\\xf9)\\\\\\xc8\\x8f\\x97C^\\xbf\"\\n\\x13v\\xec\\x182f\\xc3\\x86-Kf\\x8cD1b\\x15\\x80\\x05\\xf3\\xd5k\\x96\\x0fZ\\xba\\xae,\\xd8U\\x0b\\xd7-\\x11\\xb6r}\\xd9\\x01\\xc4\\x02\\x06\\x05\\x04\\x04\"\\xdc\\xc9\\xf3\\x1f\\xc3\\x85\\x0f!J\\xa4h\\x11\\xa3F\\x8e\\x1eA\\x8a$i\\x12\\xa5J\\x96.a\\xca\\xa4i\\x13\\xa7\\xce\\x9eX\\t\\xfeT\\x184\\xe2\\xaf\\x89\\x15/f\\xdc\\xd8\\xf1c\\xc8\\x91%O\\xa6\\\\\\xd9\\xf2e\\xcc\\x995o\\xe6\\xccJ\\xd7\\xe7\\xd6\\xaeC\\xc3\\x1a%\\x9b\\xf4,S\\xb5O\\xdbJ\\x85[un]\\xac\\x0cy)S\\xd6\\xac\\xda\\xb12\\x15\\'\\x12\\x15{\\xb4\\xacR\\xb4M\\xd7Bu;5\\xae\\xd5\\xc3\\x88\\xbf\\x96\\xb16\\xcd\\x0b\\x13&\\x92@%!\\xc1\\xc4\\xcb\\xb4?\\xc8(\\xf35\\xbb4\\xadS\\xb6Q\\xdfR\\x95{\\x15tA~\\xd1\\xb29\\x99\\xc6\\x84\\x03\\x85%\\x0c\\xd0aA\\xc0\\x1c\\x1d\\x83\\x02&@\\xe5\\xcb8\\x16)m\\xcc\\x80qs&\\xcc\\xdb\\xb7\\xd6h\\xca\\x0c\\x11\\xffWu\\xa0\\x8b\\x8a!\\xb2dI\\x91\\x02\\xe7G\\x83\\x07h\\x0c\\x00@G\\x81\\x03\\x93e\\xf8\\xad_\\xfe{{\\xf3\\xe0\\xdd\\x9f\\xf9\\xd6\\xd0/eT\\xe1\\x81\\x1e]\\xa4\\xe3\\xcf\\x82\\x0c6\\xe8O,48\\xe0\\xca\\x18\\x07L@A\\x05\\xc6$\\xa3\\x9f_\\xb6i&\\x98n\\x9e\\x19V\\x17p\\xcd8\\xe1\\xc59y\\x80P\\x03\\x1f\\x830x\\x82\\x83\\x0b\\x820\\x08,J<\\xf2D\\x1d\\x000\\xb0\\x8d$\\xc6X\\xc6af\\x81\\xe5\\xd6Ya\\xbd!\\xa6L\\x19\\xd7\\x1c1\\x05\\x08H\\xc8\\x82\\x84\\x1c\\x0c\\x06r\\x81\\x15\\xa5\\xe4\\xf0\\xe2\\x82\\'x\\x93\\xc6\\t\\x19\\x94\\x80C\\x10\\x12\\x8c\\x00\\xc6<$\\xf4U\\x1b\\x90\\xda\\xfd\\x17b\\x91;5$\\x1e\\x17\\x91\\xd4\\x00\\x8b?\\'t D\\x1ct6\\xd1D \\x814QJ\\x95W\\xfa\\x93\\x06\\x1f\\'dA\\xc3\\x00\\x9f|0\\x01#\\xc4\\x98\\x89]\\x7f\\x1f\\x0e\\xd9\\x9d\\x91\\xd5\\xec0\\x04\\x93m\\xb4\\xe1\\x8f\\n\\x83\\xec\\xb1` 9\\x84\\x1aH)V\\xa83e,\\x0cv\\x00\\xcb\\t{\\xbc\\xb0\\xc8\\x13\\x8a2\\xffR\\xc1u\\xfcy($w\\x01\\xf2\\xc4\\x8f2N\\x84 D\\r*p\\xd3\\x88?H\\x08!\\x05\\xaaq\\x84\\x9aC\\x13V\\xbc\\x81H*4\\xbc@\\x07\\x9e\\xfe\\xc8\\x02\\xc2\\x82\\xa5\\xf4\\xb1H\\x0f\\x06\\x8c k\\x05?f\\xe7\\x1f\\x88D\\xf6\\xb4\\xab\\x13 \\xa4\\xd1A+\\x9c4\\x90\\x83?\\x1d\\xc4\\x91\\x05\\x9d|6\\xb1\\x87:\\x88(\\xb1\\x88\\x0b8\\xdc\\x90\\x00\\rW\\xa6\\xf1\\xae?\\xa5t2@;\\x07@\\xc0\\xc8>\\xfb\\x9c)n\\xa4\\xb8\\x8ax\\xd0\\xb9\\xe9\\xaeq\\xc6\\x13\\xe3@\\xe1\\x8f\\r\\xc66\\xe1O\\x1c\\xa5\\xeca\\xc5%4\\x04\\xd0@\\x10h\\xe0Q\\xc7&\\r\\xbc\\xb0 ,|0h\\x05\\x0b8\\xd0\\x03\\x006\\x8c\\x00\\xe30\\xa4\\xb7\\x02(\\xb1A\\xbc8\\x13B\\x1ak\\xb4\\x03\\xce#\\x01\\\\@l\\x1c\\x88\\xbc\\xdb\\xc4\\x05Yd\\xc0\\xc2\\x00O\\xe0!\\x00\\x04\\xc8e\\xf2A;\\xb2,\\xd8A\\xb5t\\xd2\\xb1\\x81\\x0ex\\x00\\xb2\\x846\\xc1\\xb39\\x10?\\xcd\\x88\\x80D\\x07g\\xe8\\xe0o\\ts\\xaa\\x00\\x0b\\x14P\\xaa\\xff\\xf3\\x86\\xd4\\x8b\\x80\\x83\\x07\\x02\\x8c$\\xe1\\x85\\x17\\x1e,!\\x80\\x82\\xf0\\xfa\\xb3\\xaa?\\x81\\xa42\\xc0\\x1c\\x06L0\\t4\\xd0\\xd4\\x1a$\\xdbk\\xee\\xc4k:\\x83\\xb8\\xf1\\x89\\x0b\\x01l\\x80\\x89\\r\\xfe\\x98\\x01K\\t\\xef^\\x90A\\'^>\\x00@\\x01DT\\xd3L3\\xd4xA\\xc1\\x16^\\xfb\\x93\\x03\\x9e\\\\n\\xd0\\xc0\\x18\\xe10\\xd0\\x8b/\\x9a\\xa7I\\xee\\xa4\\t5c\\x8b?\\x83\\x04\\xe1\\xc0\"\\x98$0\\xc0\\xbb\\x89\\xd8\\x90\\x80\\xa7V\\xf4\\xc1B\\x002\\xa0\\x81\\x05\\x07e4\\xe3\\xd0/N0q\\x87\\xe3\\x846\\x91C\\xd7{\\xb0p\\x03\\'\\x1f \\xb0\\x844\\xc9\\x8f+i\\xae\\x05\\xf1\\xd2\\xab?T\\x00\\x87\\xbf\\x12p\\x03\\x19\\x84\"u|\\xe8\\xc4\\x1b6\\xd6\\t\\x16\\x04N\\x13\\xe8\\xf0\\x803~q>aP\\xe3Z|\\xb0A\\x1c\\xf6\\xd0\\x849\\xe5\\xa0d2H\\x01\\x00 \\xf0\\x0cithsj*\\xd7A\\x94A\\x04O\\xf8\\xa3\\x07\\x0e\\x88@\\x00\\x06 \\x03v\\xd4\\xc0\\x1f\\x9e\\xa8\\xc1 X\\xf0\"\\xc0\\x91m|\\xb6\\xab 5\\xffP\\xb7*+P\\xc9S\\xb1H\\xc5\\x06\\xc6A9,P\\xc2\\x84h\\xd2_\\xc4\\xd8\\x047&\\xc8\\xe2\\x04\\xae\\x18\\xc7\"\"\\xb0\\x8aM\\x18\\xe0\\x08\\xfexG\\x07\\x06\\xf1\\x02\\x8f\\xc1\\x82\\x05\\tx\\x8f\\x00(P\\x852P\\x90@;`P\\x1c2`\\x85=\\\\\\xe0\\x04\\'`A\\t\\x06\\xe0\\x07<\\x90C\\r\\xbd8\\xa1\\xf2\\xf6\\xf7\\xb3\\x7fD\\xc3\\x19\\x1e\\xf0G(\\x04\\x18\\x81\\x1b\\x80\\x03\\r\\x99(\\x00\\xea\\xa4\\xf0\\xb1Nt-\\x07%p\\x01\\xfd\\xd0\\xa1\\n/\\x94a4^@\\x02\\x83\\x10q\\t#\\xbe\\x01UP(A\\x04d`3\\x06<\\xe3\\x19Q\\x84X\\xdb\\x0e\\xe2?\\x13(R\\x067\\x18@\\x17%\\xc0\\x80\\x03\\xf9C\\x0eP\\xca\\xc1\\x1b^\\x14\\x88\\r8@\\x11\\x95+\\x80*<\\xc0\\x81\\xf5-\\xa8\\r/\\xc8\\x82\\x15\\xb2\\x80\\x08<\\x96\\xa0\\x04\\x01p\\x00;\\x0e0\\x82k\\xc0\\xf2a=\\xeb\\x9cAxE\\x01Y\\xc8\\xa1\\x01\\x03\\xb8\\xc1{\\x00@\\x01/\\x80\\xe2\\x15\\x0fZP\\x1c\\xd4\\xf1\"Yd\\x00\\x07\\xed\\xd0\\x04\\x0c2\\x81\\xff\\x80\\x100(\\x034\\xb8\\xc4\\x05.@\\x07\\x16l,\\x01\\x1b\\x08\\xc0*\\xc04\\x82Y|\\x93g\\x9cSaA\\x941\\r\\n\\x0c\\xc1\\x1f.H\\xa7\\x0cP\\x91\\t\\x13L\\xa3\\n\\x050C\\x83N\\xf0;\\x7f\\xf0\\xa1X\\xa1@\\x82\\'\\xae$\\x0b\\x1a\\xb0\\x80\\x0e\\xa6zC*:\\xe1\\x0f)\\x94N\\xa1\\x0c\\xa5\\xc4C\\xd7\\x96B\\xe6\\x11D\\x19\\xd4\\xa0\\xc0\\xb5\\xa0\\xa0Q\\x8e\\x9a\\x80\\x1aN\\xf0\\x00:\\xe0\\xe9 <\\x0eB]\\x1d\\xf0\\xc6\\x9cB\\xc1\\x82\\x17\\\\\"\\xa6/\\xd8\\x80\\xa6\\\\\\x95\\xd0U(\"L\\x0e\\x8de8%\\xfaS\\'0\\xa2\\x05\\xfe\\xb0\\x82FeG\\x01\\'8\\x83\\x08\\x14 G\\x03\\x0e\\x08\\xa3\\x06\\xe5\\x80\\x0e\\x88\\xa0C\\x16\\x06\\x9a\\x85\\x17x\\tU\\x03\\xa0\\xde\"\\xb4\\xc9Mo\\x8a5\\xa2>\\x1dH4\\x9c`\\x02\\x01\\\\1\\x02\\x03p@\\x10\\x0eP\\x80*4\\xc3\\x10IX\\x02\\x00\\xe8a\\x8aw\\xcc\\xc9E\\xb1\\x08\\x84:\\xb2`\\xaa\\x81\\xaa\\xe3\\x12\\xb0\\xc3A\\x04\\xa0\\xb7\\x8a\\x00`b\\x95\"\\xd4\\xc5+\\x0f\\xdbS\\xfe\\xff)\\x16\\x91\\x08\\x88\\x84?20\\x00\\x1c\\xb8B\\x14\\xe8\\x00\\x85!J\\xe4\\x01\\x06\\xc0`\\x0c\\x02\\xdc@U3p\\t\\xd2\\x0e\\xd4\\xb4\\xce\\xfa\\x9edE9\\x05\\x17$\\xc0z\\xe0\\xd0\\x80\\x00\\xb0\\x11H\\xda.\\xcf\\xb6>iF\\x12 \\xc0\\x0e:)\\xa1\\x80c\\x10@\\x01\\xbc\\xe0\\x0c\\x13\\xa9\\xc2\\xb8hp\\xc5*\\x16Q\\x82\\xaa\\xe6\\xf5\\x12o\\xb8\\x04\\x1d\\xfa@\\x83\\x128\\xf2\\x01\\xeb\\x93\\x83\\x0c\"\\xb0\\x81\\x04\\x8c\\x83~X\\xf0\\x01\\x14\\xc1\\x89X\\xf0\\xfeC\\x19 =\\x00\\x1c\\xe8\\x84\\x84\\x00pB\\x14\\x13\\x00\\x03\\x04\\xc2a\\x8bB\\x14\\x00\\x1d\\x00\\xd0\\x84\"t\\xa0ZL\\x1c\\x82\\x05\\x9d\\xc8@\\x1f\\x94@@\\x19\\xf8\\x81\\n\\x03#\\x83u\\xb1I\\xd8n.\\x18\\xa2\\xb5-\\xe4?j\\x99\\tN\\xd0)\\x14Bx\\xc7\\x0f\\xba\\xa0\\x85\\x1f\\xe4\\xc0\\x06\\xaf\\x98\\xc1\\x14\\xa6\\x00\\x87!\\x98\\xc1\\x0cB\\x80&\\x12r\\x10\\x0bY\\xfc \\x01?0\\x03\\x12\\x86\\xb0*X\\xac\"\\x01\\x87\\xd8\\xa3\\x0e\\xd0\\xb0\\xddr\\xe4O\\x96\\xe2L\\x88!@A^X\\xd8 \\xff\\x1dB@\\x82\\n~@\\x08Q\\xfa\\xa3\\x06kxE$\\xb6`\\x068$\\xc2\\x13\\x9e\\x88\\x84\\n\\xba\\xe6\\x8fV\\x8cb\\n\\xde\\x10\\xc2\\x10\\xd2!\\x8bPD\\xe0\\x10P\\xd8\\x80\\x0b(W\\x88I O\\x90R\\x9c%BXX\\x00\\x00\\xcc@\\x05\\x9e@\\x02\\x12\\xda0\\x85u\\x0cZ\\x16[\\x98\\xc1\\x16B\\xb0\\x865P\\x81\\x0bp\\x98\\x81\\x1b\\xe0`\\x83+\\x1ea\\x1dd\\x88D\\x90\\xd3\\x90\\x86\\xea)A\\t&K\\x01\\x0c\\xb0\\x81\\xbf3\\x8f5\\xb1\\x04\\xe1E58\\x80\\x0eQ4@\\x05\\xa2&\\xf5:\\xec\\xdc\\x01\\x10\\xc0\\xa1\\x06\\xc0\\xeas$\\xe0\\xa0\\x82A/(\\n1\\x98A\\x07\\x86\\xc0\\x072pc\\x14\\xa5\\xc3\\x84\\x0bH!\\n\\x04\\\\.s\\x98F3Y\\x7f\\x93\\r/t\\xba\\x0e\\x9fh\\x84\\x19\\xbc\\xf1\\x03n\\x9cZ\\xd5[X\\x81\\x1b\\xf2p\\x84z\\xac\\xe1\\x08]\\x88\\x07\\xea\\xfc\\x11\\x83\\x18P!\\x11[ \\x84\\x16b\\x10\\x06V\\x0c\\xe0\\x11~\\xb0\\x19\\x04\\xa0\\x916c7X\\xc7\\x8a\\xadFqa\\xa0\\x01w\\xccA\\x0bZ\\xff\\xe0\\x01\\xae\\x131\\x856\\xd0\\xe0\\x15\\x97Z2\\x9e\\x97d\\x06A\\x93\\xa1\\x11\\x8b\\x18\\x057\\x1c\\xa1\\x07w\\xc4\\x80\\x10\\x84 E\\n$P\\x08J\\xe8Lm(\\xfc.\\xc8\\x07\\xc2\\x8bi\\x14W\\x00\\x12`\\xc3)N\\x81\\x82s\\xf4\\xa0\\x01\\x8fXD\\x02\\xa8@\\x85;\\x84\\xe0\\xeb_w\\xc3\\x1d\\xa80\\x83\\xeaq1\\n<\\x10\\x84<\\xe0\\x01\\x8f:\\xb0\\xe1\\x00XX\\x024\\x1a\\x86\\xf4AN\\xd1\\\\\\xcd0P\\x01 \\x80\\x85{\\xe0\"\\x1c_H\\xc1\\xd5G\\xc1\\nVt!\\x0faX\\xc1\\n\\xe2\\x11\\x8f\\x88\\xb1\\x9fx\\x1f\\xdb\\xc1\\xbfi\\x880\\x901\\x8cd\\x14c\\x1f\\x94\\x18\\x01\\xd4E\\x81\\x82\\xee\\x9f\\xe2\\x0b\\xfd\\x08\\xff\\xff\\x17\\xc4`\\x07\\x14h\\xe0\\xfc\\x1f8\\x009F\\xe0\\x03_\\x00\\xa3\\x02\\xc4(F\\x99h\\xe5\\xfc\\x8f\\x97>\\xfa\\n\\x11\\xcd0H\\xa0\\x8a\\x020`\\x04X\\x10\\x80\\x0b0\\x80\\x04\\xb8\\x12\\xf8p\\x0f\\x80\\x80\\x05#\\xf0\\x1c`\\xd0($\\xd0#e\\xe2(\\x1e\\x97c\\xf7\\x97\\x10@\\xf1\\x0b\\xce`\\r^\\x90\\x04\\x1c\\xa0\\n\\xaa\\xb0\\r:\\x13\\x82\"\\x819`\\x00\\x06&\\xb0\\x0f\\x1e\\xc0#\\xf8\\x91\\x1f\\x1b\"zIGH\\x1581@\\xa1\\x0c\\x18\\xe8\\x0c\\xceP\\x06\\xb1\\x91\\x83\\x17\\xc1\\x0c<\\x98\\x11\\x7f0\\x0c\\x7f\\x00\\x1b=X\\x19\\x12X\\x7f\\x14\\xe8\\x1do\\x93\\x18\\xe7\\xe3\\x15C!\\x19\\x92\\xa1\\x17\\xd5\\xe1#.hw\\x9a\\x86\\x84\\x16\\xf8\\x13x\\xf1\\x15\\x93\\xb1\\x17-Xw\\x99\\x96fV\\xa8\\x15w\\xf1\\x10^\\x01\\x16E\\x11\\x85E\\xe8]\\x84d\\x01\\xe1\\xd7\\x86n\\xf8\\x86p\\x18\\x87q\\xf8\\x05tX\\x87t(\\x06x\\x98\\x87bP\\t;\\xd0\\x87;`\\t\\x80\\x08\\x04\\x82h\\x04\\x16P\\x88\\xe7p\\x0e\\x18p\\x13\\n\\xa0\\x00E\\xa0{\\x90\\x08\\x00\\tGp\\x04-\\x10\\x10\\x00;'", - "b'GIF89aP\\x002\\x00\\xf7\\xff\\x00\\xd8\\xc4\\xba\\xc4\\xa6\\x98\\xcd\\x0e\\x08\\xbaeM\\xf8\\x88h\\xadZEeE;\\xfb\\'\\x16\\xfa\\xf9\\xf9\\x94\\x0f\\x07\\xf9\\x9a{\\xe5\\xd4\\xca\\xd6\\xd5\\xd5\\xc9\\xb3\\xa8\\xb4\\xb4\\xb4\\xd4\\xb6\\xa9\\xf9\\xf5\\xf3\\xec\\xe3\\xdc\\xa4\\xa4\\xa3\\xf8:$\\xe2\\xb9\\xa6\\x9f\\x9f\\x9f\\xb2\\xa2\\x9b\\xf5\\xf5\\xf5\\xcf&\\x17\\xa9\\x84w\\xb8\\x97\\x87{nj\\xed\\xed\\xed\\xfaU:\\x90J:\\xf3\\xed\\xe9\\xc5yd\\xe6\\xe6\\xe6\\xde\\xde\\xde\\xb2\\x88wl%\\x1b\\xca\\xb9\\xb1\\xf0\\xf0\\xf0\\xea|_\\xa4wf\\xf2\\xea\\xe5\\xab2#\\xe8\\xe8\\xe8\\xf9\\xa5\\x87\\xe5vZ\\xbe\\xbe\\xbe\\xc7YI\\x93i[\\xe7\\x87j\\x8ccU\\xdd\\xcb\\xc1\\xea]CvTJ\\xfe\\x01\\x01\\xfbB*\\xf9\\xb5\\x9b\\xfc\\xfa\\xf8\\x84#\\x18\\xd8\\xaa\\x96\\xfb\\x16\\x0c\\xaf\\xaf\\xaf\\xa4\\x9b\\x96\\xe3\\xce\\xc5\\xe7\\xd9\\xd0\\xe7\\x9c\\x82\\xa4F3\\xfc\\xfc\\xfb\\xa5!\\x16\\xc8\\x99\\x86\\xe6fI\\xc77$\\xb2\\x11\\x0b\\xf6\\xf1\\xeeN\"\\x1c\\x994(\\xe4\\xde\\xda\\x9awh\\xebC+5\\x03\\x05\\xfbkL\\x83WL\\xfbrT\\xea\\xe5\\xe2\\xb9\\xb9\\xb9\\xd7M4\\xc8\\x88w\\xdd\\xd1\\xca\\xfaK0\\xd5\\xbe\\xb2\\xe2\\x04\\x02\\xec(\\x18\\x9b\\x83z\\x87\\x86\\x86\\xaa\\xaa\\xaa\\xd8x]\\xb8\\xac\\xa6\\xf9\\xf7\\xf6\\xf93\\x1fE*#i\\t\\x06\\xdc\\x82f\\x876)\\x84lc\\xee\\xe8\\xe4x4*\\xfb\\x1e\\x12\\x9aVH\\xe8\\x8dr\\xb2I5\\xdb\\xd6\\xd3\\x8btjw\\\\S6/,\\xfe\\xfd\\xfc\\xe6\\x94z\\x99}q\\xd5\\x93z\\xb5ze\\xfd\\xfc\\xfbsKB\\xf9\\xc1\\xaa\\xe7S;8#\\x1e\\xc4r]\\xa7\\x95\\x8dl>3\\xca\\xca\\xca\\xe2\\xe2\\xe2\\xe9\\xdd\\xd5\\xda\\xda\\xda\\x85\\\\PH\\x05\\x03\\xb9\\xb7\\xb5\\xd1\\xd1\\xd1\\xe9\\xaa\\x92\\xfa}\\\\Y;3\\xfb`BZ\\' \\xf5\\xf2\\xf1T6-I\\x1a\\x14\\xb7U?\\xc3kR\\xce\\xce\\xce\\x83NC\\xdd\\x8ds\\xc7\\x81iW\\x06\\x03\\xa7\\x8b\\x80\\xc2\\xc2\\xc2\\xe9nT\\xf2sT\\xe3\\xc4\\xb4W\\x1c\\x15b4*\\xfb\\xad\\x91%\\x17\\x13\\x93\\x93\\x93\\x96\\x87\\x80\\xc9R3\\x0c\\x00\\x00\\xf4_A\\xc9\\xac\\x9e\\x98?1\\xeb\\xea\\xea\\xf2}^h\\x1a\\x16\\x9d\\x91\\x8c\\xe28#\\xf3\\x01\\x00\\xcd\\x94}\\x86>4\\xc6\\xc6\\xc6\\xce\\xcb\\xc9l\\x11\\x0c\\xf6\\xf3\\xf2\\x8a, D\\x11\\x0e\\xcbcJc+#x+\"tA6\\xd8eK\\xc6\\xbf\\xbb9\\x0e\\x0b\\xc5\\xc3\\xc2\\xac>-z\\x1b\\x11\\xdf\\x14\\x0bT\\x11\\x0c\\xdeH/\\xdcX>\\xbd\\xba\\xb9\\x98o`\\x91[Q\\xd5\\xd3\\xd2N/(\\xf2lM\\xe0\\xd9\\xd5\\xe4\\xe4\\xe4\\xfbgI\\xa3O?\\xf0\\xec\\xe9\\xfb,\\x1b\\xcd\\xc9\\xc6\\xe6 \\x12\\xf3\\n\\x05\\x99.!\\xad\\xa5\\xa0\\xe6\\xe1\\xde\\xc1\\xbd\\xba\\xca\\xc4\\xc0\\xa9\\x80o\\xa1bO\\x8a\\x7fz\\xa8\\xa7\\xa7\\xfb\\x81`\\xf3fG\\xfe\\xfe\\xfe\\xfe\\xfe\\xfd\\xd1\\xa4\\x91\\xfd\\xcf\\xbb\\xf5pQ\\xc1\\xa0\\x90\\xd0=\\'\\xb1\\xab\\xa7\\xad\\xac\\xac\\xd6\\xa0\\x9c\\xb3\\x8f~mVN\\xb6oZ\\xdfqU\\xef\\x8bz\\xba\\x9f\\x92\\xfa\\x90q\\xb0C10\\x11\\x0e.\\r\\n\\xe0\\xbc\\xb3\\xbf\\xbf\\xbf\\xff\\xff\\xff\\xff\\xff\\xff!\\xf9\\x04\\x01\\x00\\x00\\xff\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00+\\xf4\\x1bH\\xb0\\xa0\\xc1\\x83\\x07](\\\\\\xc8p\\xa13\\x17T\\x9cQ\\x998\\xb1\\x90E\\x07\\x18\\x1d\\xf4\\xd8\\x08\\xcf\\x8b\\x97r\\x12$T\\x18Y\\xe1\\x93\\xc9O]Rv!\\xb7\\xa1\\x9f\\xbf\\x970c\\xca\\x9c)\\x13\\x9d\\xcd\\x9b\\xe8\\xe4\\xe8\\x943\\xa4gO\\x04@\\xc3\\x08\\xbd@\\x94\\x91\\x89\\xa3\\x1c8\\xc8Z\\x11\\xa2\\x1a \\x11\"\\x041``\\xe8\\xcf\\x1f]\\x97 j,7\\xd2%\\xcd\\xaf`\\xfd\\xe1\\xbc\\xb9\\x93\\xa7\\xcf!@\\x11\\x08\\rC\\xf4\\x82Q\\xa4J\\x99:\\x85*5\\x9a\\xa1HW\\xb3R\\xd1\\xe8E\\xa4\\xd7\\xb0\\x80a\\xe6,\\xabsH\\xe1\\xb3i\\xd7\\xb6}k\"\\xe9\\xd2\\xa6O\\xa3N\\xbd\\x9bWk\\x8f\\xbe\\x02\\x03\\xd3\\xb4\\x99\\x8e\\xf0\\x9d\\xcf\\xa0\\xef\\x9c\\xcd\\x81\\x16m\\xd0\\xa1E\\x8f6\\x8e\\x0b\\x99.\\x03\\xbbx\\xb1Z\\xc6\\xfcW\\xf3`\\x9d\\x9fs\\xe8V\\xbb\\xb6\\xf7\\xda\\xb4j\\x83\\xa3v\\xab\\xda\\xb1\\xdc\\xc8R\\xa9\\xc6\\xd6\\xcb\\xd7\\xaf\\xed\\x9d\\xb9\\xc3@\\x80\\xd0+I\\x92\\x0f\\x1fRh\\xd7\\x8e\\x1d\\xbb\\xf5^\\x10\\x14_\\xff`\\xbb\\xb88\\xeb\\xb9\\x92aW\\xde{\\xd9y\\xd8\\xc1\\x9f\\x11@\\xe0W\\x8a\\xcf\\x8b\\x17G\\xf2\\xbb\\xcb\\x7f\\xa4\\xd5}\\x10\\xa5\\xf0\\x13H\\x04\\x11\\xa0\\x91\\x026\\x1f\\xf4\\xd2K[\\xe5\\xc1\\xf5\\x18z\\xc9Q&\\x1b{\\xb4\\x81\\xd5\\x99\\x1cw\\x84\\xf1\\x83\\x15\\x8f``\\x8b\\x13\\x1d(\\xa2\\x885P@!\\xc5\\x89PX\\xa3H\\x07\\x1d8q\\x04\\x06\\x8fX\\x01\\xc0\\x02@\\x0c\\x88\\x066&0\\xa2\\xa3\\x8e\\xe6=\\x88\\xdck\\x122\\xd7^f3\\xc1\\x97B<\\xad(\\xb3\\x85\\x187`\\x11\\xa25\\'\"\"\\xa59R\\x9e\\xa8b\\x07X\\xdc0\\xc1\\x16\\x02\\xb4Q\\x04\\x00?,\\xc0D\\x818\\xe6\\xd8\\xe3q\\xae)\\xb7^sD\\xc64\\x18\\x02V\\x08\\xa0\\x8c\\x1a\\xd90\\xe9\\xa4\"&\"b\\x0e\\x01|\\xe2\\xc3\\'\\x95R@\\xb1b\\x96\\x13\\x1c\\xa0\\x86\\x00D\\x94\\x92\\x05\\x00W\\x00\\xf1\\xcd\\x8dH\\xad\\xe6\\xa3k\\xeaM\\xc8fmba\\xf8\\x83\\n\\xb7\\xb0\\xc2\\x83\\x1abLp\\xa7\\x89{\\xe2\\xa3\\xc0\\xa9\\xa7\\xe2\\xe3\\xa79\\x81\\x0e:A6j\\xf0\\xff`\\x83\\x00\\xc8\\xb4\\xf3@\\x16\\x8d>\\x9a\\xd4\\xae\\x93J\\xa6\\xa6\\xa5C\\xd6\\x96\\xd3\\x1d\\xf1\\x08`\\x83\\r\\xac\\xa8q\\xc0\\x04M\\xe2)E\\xa9\\n\\xb0\\xc0B\\'\\x9dH\\xab\\xc0\\xaaR\\xa8\\x98\\xa5\\x18\\x86\\xb2b\\xc3-D\\x88\\x13@\\x03321\\x85,J\\x9d\\xf7c\\xa5BV\\x08\\x93N\\xf1hq\\xac\\r\\x9ff#j\\x07\\xd6\\xb0\\x83\\x08\\x01\\xa6N\\x8b\\xc3\\xbf8T{-\\x01\\x88H\\xe1*\\xac\\xde\\x1e\\x8b\\x04\\n\\x1a\\xc0\\x82\\xab\\xb9\\xb2D\\xdck\\x84\\xcb\\xcd\\xe6^\\xa6?\\x18;/\\x0f\\x07\\xd8y\\xc3\\r\\xd6\\xccB@\\xb4\\x9d\\xe0\\x90\\xc7\\xc9y\\x04\\xcc\\xc2\\xb5\\xe6t *\\x16\\x13\\x88\\x11k\\xc26\\x84+O\\x00Y\\xcc`\\xee\\n\\x11\\xa3\\x99^\\x90\\x16\\xb7\\x89\\xe1\\x0b\\xb7\\xcc\\xebi\\xc7\\x13p\\x9c\\r\\x0f\\x1d\\x8c\\xcc\\x82\\xc98\\x9cx2\\x0e+\\x13`(\\xac\\xcb\\x8a\\xb1\\x05\\x0f\\xdc\\xcc\\xab\\x85\\x07M\\xdc\\\\\\xc2\\x15;\\xaf\\xe03\\xc5k\\x06\\xfb\\x12:w\\xa0\\xa1\\xf1\\xb1\\xc9.\\xcb\\xc3\\r\\xcfv\\xa0\\xc6\\tl\\x04q\\x08\\x0ej4\\xff)F\\xca\\x87(\\xd0\\xc1\\x01\\xd6\\x98\\x03E6[l\\xb1\\r\\xd7E\\x1fK\\x84\\x0ca\\xe3|\\xc57S\\x98\\xdd\\xda\\xcf\\x15S\\xe8\\x1e\\x86\\xfc\\xc8k4\\x9dI[\\x83\\xc3:\\x04\\x88AC\\x19s\\xacb\\x8f\\x18At2\\x81=\\x87\\x04\\xa1@6X(\\xb0\\x0e\\x0b\\x1dl\\xa3\\xb82\\xdc4>k\\r20\\x0c\\x0b\\x00\\xd4|\\xc3\\xd4\\xe5h\\x03\\xeb\\xae\\x1c\\x08t>/\\xb2\\xa0\\xf3\\xa0H\\'y\\x98\\x93M3_\\x94a\\x8a=[\\xf0\\x9b\\xcd\\x1cA\\xcc\\xc1\\x06\\x93\\n\\xe4\\xa1\\x00\\x16\\xdb`\\xb0\\r\\xef\\xb74.\\x80(Q\\xc0 \\xce=c3\\x11\\xc2\\xfd\\x10\\x02\\x99\\xf9\\xa5be\\xf8\\xc0\\xdb\\xd0[\\x16\\xa8\\xa0\\x84\\x85-\\x00\\x03\\x12_\\x98\\xc4*\\xf4@\\'L\\x98b\\x121(\\x03\\r\\xd4\\xd0\\x01\\x83\\xa9\\x01\\x03\\x18P\\x862\\xb4\\xa0\\x85\\xc6%\\xc0\\x00x\\x18\\xc43\\xe41\\xc6\\xe1\\x8fq\\xe8B4\\x18 \\x88B\\xd6\\x05h\\x9a\\xcbL:\\xee\\x90\\x84\\x08\\xac\\xe1\\x1a\\x9e\\xa3\\xd7\\x01\\xec5F2\\x86\"\\x14\\xc0Hc\\x19&1\\x879\\xb4\\xf1\\x8dF\\xa0\\x81\\x1e\\x98\\xe1\\x0e%2\\xd1\\x89H\\x88\\xc2\"\\x0c\\xe0\\x8aV\\xba\\xb2\\x95\\xf3(\\x048\\xc2\\xb1\\x0bCD\\x036\\xfbS\\xdb\"{\\x11\\x01zd \\x16\\x9e\\x9b\\xa1\\x13\\xc6X\\xc6P4\\x03\\x18\\xf5(\\x03\\x1b\\x96\\x19\\xc1\\x16\\xd4\\x03\\x8e4h\\x063lQGe4Q\\x0bH\\x90\\x84\\x1f\\xf4\\xb1\\x0f}8\\xc2\\x11\\x9b\\xe0\\x858+A\\x0baD\\xc1\\x12`(D1\\xc2\\xa1\\x8d]X\\xe5\\x18,\\xcc\\x0c:r\\x00\\x81\\x08\\xcc@\\x08\\x96X\\x03\\x12:\\xa5\\xff\\xb4\\tT\\xb2\\n\\xcdh\\x061\\xeaq\\x82\\x18\\xb0!\\x0618A\\x0b0\\x81\\x89P\\xaab\\x9a\\xd4\\xd4 \\x07\\x890\\x088,c\\x0f\\xdf\\xdc\\x04\\t\\x84a\\x06!\\x08\\xa1\\r\\xc8\\xe8\\x86\\x0ex\\x91\\x0cI\\xf4\\xc1\\x02\\xa4pF1\\x8eq\\x8c~\\x04\\xcd%.D\\xc3\\x0f\\xda\\x11\\x0b.(\\xa1\\x89\\x1f\\xe0\\xe2\\x11\\x86F\\x05\\x19~q\\x8a1\\x18\\xe0\\x0c\\xb5\\xa8\\xc0\\xc5^\\x82l\\x08| \\x02\\x92~@\\x89\\xe5!\\x8e&\\x80\\xd9\\x03d\\xa8\\xf6\\x13\\x08\\xc1\\x0bl\\x07\\x83\\x13~0F\\xaa\\tQ\\t^\\xa4a\\x1c#\\xb0C\\x01\\xba\\x91\\x80k\\x8c@\\x1d\\x0f\\xe0\\xc7\\x0ez\\x9d\\x0f\\x10P@\\x13u\\xff\\x80\\xb7g\\xe5\\xfd\\x0bO\\xec\\xa1\\x11p\\x00\\x85\\xbe\\x8d\\xfd\\x12\\x9d\\xe4 \\x0cI\\xd8\\xf2\\x02f\\xd0\\xecvh`\\x04\\x05\\xf7\\x80\\x0ePAV^\\x90\\xc1\\xe8\\tp\\x84\\x12\\x16\\x01q<\\xfc\\x82\\xe2\\x95\\xa8\\xc4\\xd1u`\\x063\\xf8\\xc2\\x0ck\\x80\\xee\\x08\\x8a\\xa0\\x0eu\\xe0\\x82\\x0f\\x1e\\x15B,\\xba1\\n\\x1aW\\x82\\x10\\x9e8\\x854\\xe61\\xec\\xae\\xd0\\xa43w\\xa0gv\\x02\\x01\\x04f\\x0b\\xbc\\x1d\\x04?\\xb1\\x0e\\x84\\xb1\\x08%\\x9c\\xe2\\x9b\\xa3P\\x02\\xc4%\\x11\\x85`\\xfc\"\\xeaR\\'\\xe9F\\xcd\\x90\\x0b\\x0f@C\\xc1\\x0c\\xc6\\x05%\\xe8Q\\x80X\\x98A\\x07\\xc90\\xba\\x8c\\xa3\\xder\\xb5\\xcf\\x03\\x14>p\\xfbfpC\\xcf\\xebD \\x10;\\xef\\xf9\\x08\\x9e\\x11\\x85\\\\p\"\\x18}_D0\\x82\\xe1\\x07I\\xc8\\xe0\\x190\\x18\\x06!f<\\x8ad\\xe8\\xe0\\xea\\x8d\\xcf:=\\xec ]\\x10\\x0c\\xe0\\x1a\\xb1\\xf0\\x05\\xe65_\\x89\\'\\xf4Q\\x1f/\\x8f\\xf9\\xcc1%\\x93\\x0b\\xc5\\x9d:\\x1f@\\x03\\xc0\\x99\\x1d\\x80\\x11\\xa0\\x00\\x1a\\x92\\x18\\x86\\xff\\x1f\\xc6\\xef\\x07<\\xc4O\\x1c#\\xc8\\x00\\x0c8Aq\\xa2\\xfb\\xfe\\xea\\xb1\\xf0\\xc05\\n\\x00]]C\\xa2\\x00\\xd7X\\x82\\xf2\\x93!\\xef\\xe6\\xf71\\xed\\xf6\\x86o\\xd3\\x07\\x18\\xe8`}9 \\x1f9\\x17\\x01\\x0b\\xd0l\\x1a\\xf0e2\\x00\\rQ\\x00\\r2\\x00\\x03(0\\x02\\x1a\\x10\\x00\\x01`\\t2\\xd0c\\x15\\x97\\x00:\\xd0\\r\\xdd\\x10\\x0bB0\\x7f\\x030\\x00\\x99\\xa5YB\\x80]:0\\n\\xcb@\\x08\\xfa\\x90vi\\xb7\\x07\\x89\\xc0v\\xc4\\xb6o\\xef\\x01\\x1d7\\xd7H@\\x00\\x00\\x0f\\x80w@\\'\\x0e\\xe2\\x90\\x01\\xf2p\\x81\\xb7\\x02\\x00\\r`\\t\\x83`\\x00J\\xb0\\x0c\\xb4@\\x02:\\xa0\\x03K\\x80\\x0cm\\xf0UT\\xe8d\\xdd\\xe0\\x0b\\xc2@\\x02\\x9b@o\\xa7\\xd0\\x85\\xf5\\xd6\\x085PeXF}\\x04\\x88!\\x19\\x92s\\xcb\\xc6\\x83\\xb0\\x80\\x81\\xb0\\x00\\x0b\\r\\xf0\\x00`\\x02\\x04\\xb3v\\x842`\\x00\\x8d\\x00N\\x8bP{\\x92 \\t\\xd0\\xd0\\x87}\\x18\\x05Q0\\x08~\\xb0\\x08\\xa7\\xb0\\x07^X\\x88\\xd2\\x10l\\x1a\\xe6\\rWf\\x83\\x9a\\xff\\x91)w\\x10b\\xff\\x86z?0\\x03\\x96\\xf8\\x03a\\x02\\x04\\x05\\x92\\x02h@\\r%\\xa0\\x01\\xcfP\\x03\\x89 \\rc\\x80Q\\xa2\\x96\\x08R$\\n\\xa3h\\x88{\\xd0\\x8a\\x85\\xd8\\x8ac\\xd0\\x08\\x18F\\x0e}P\\x0e\\xef\\xe0a4\\xf7\\x88\\x99\\x82Z\\x10p\\x1dh\\xa0}\\x04R h\\xe0\\x1d\\n\\x92\\x02L\\x00\\x00\\xf7`Wx\\x90\\x08\\x8d0\\x06\\xceX\\x8a\\xad\\x18\\x8d\\xd2\\xb8\\x07\\xd9f\\x00a\\x08z\\xef\\xa0\\x11\\xa6\\xa5\\x8bnbs7\\xd7\\x8b\\xd6\\x11\\x8e\\xe0\\xe1\\x1bI0\\x05W\\xd0\\x00\\x1a`W\\x9a\\x96\\x08\\xa38j\\xa4\\xe8\\x8c\\xeeXjR\\x94a\\xdf\\x15^\\xceP\\x08m\\xc5\\x8d5a\\x86\\xbaq\\x80\\x07\\x08\\x1c\\x08@\\x1aj\\x91\\x04\\xb2\\xc0\\x04\\x93v\\x0f\\x96pi\\x83P\\x03x\\xb0i\\x06\\xf0\\x90\\x9bV\\x035\\x90\\no@\\x07\\x96`\\x01\\xe9\\x04\\x0e\\xe0\\xf0R\\xfa\\x08\\x16l#\\x1a\\x9fq\\x18g\\x81\\x16lA\\x90\\xdfp\\x05Fh\\x01\\x1a`\\t\\x19@\\x07t\\xd0\\x040\\xe9\\x92\\x96`\\t\\'\\x95N+\\xc5R\\xf1\\x86D\\x86\\x1d)\\x16cq\\x1bf\\xe1\\x13A\\xe1\\x16\\xd80\\x05L\\xb0\\x00\\xbb\\x00\\x00%P\\x02\\r\\xd0\\x00\\xa4\\xc0\\x94\\rP\\x02\\xeb\\xd4N\\xbb\\xe0N[\\xe4\\x88;\\xc9\\x93cQ\\x16#\\x99\\x18la\\x14\\xd8\\x80\\x06S\\xf0\\rL \\x08\\xd4\\xe0\\x06fy\\x96f\\xa9?UY\\x01=\\x80\\x10n\\xf9\\x96p\\xd9\\x10\\x0c\\xf1\\x10tI\\x11T\\x80\\x8f\\xf8\\xd8\\x03\\xda\\xb8\\x11=\\xd0a\\x1e\\xd1\\x88\"A\\x12\\'\\xf1\\t\\xffP\\x98\\x86y\\x98\\x88\\x99\\x98\\x8a\\xb9\\x98\\x8c\\xd9\\x98\\x8e\\xf9\\x98\\x85\\x19\\x10\\x00;'", - "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\xc6\\xc6\\xc6tsr988\\xec\\xec\\xec\\xf4\\xf4\\xf4\\xc3\\xbb\\xb8\\x8ahf|zy\\xf0\\xf0\\xf0\\\\[Z\\xf9\\xf9\\xf9lXV\\xbd\\xb6\\xb2TSS\\xce\\xce\\xce\\x96\\x96\\x95\\xc3\\xbf\\xbc\\xb2\\xb0\\xad[JH\\xa0\\x9d\\x9c\\xb1\\xb0\\xb0\\xf2\\xf2\\xf2\\'\\'\\'\\x7f}{\\x9a\\x9a\\x98\\x9b\\x96\\x93\\xfc\\xfc\\xfcKJJ\\xee\\xee\\xee\\xa5\\x8a\\x86\\xe2\\xe2\\xe2\\x94\\x8d\\x8b\\xb1\\xac\\xa9\\x88\\x87\\x85\\x92\\x91\\x91\\x95kj\\xe6\\xe6\\xe6D95\\xd4\\xd4\\xd4\\xe8\\xe8\\xe8\\xa2\\xa2\\xa1\\x8f\\x8e\\x8dl_Z\\xad\\xa4\\xa1\\xdf\\xdf\\xdf\\xa4\\xa4\\xa4\\xaf\\xaf\\xafxut\\xe4\\xe4\\xe4\\xda\\xda\\xda\\xe3\\xe1\\xde\\xa1\\xa0\\x9e\\xcb\\xc8\\xc5\\xd2\\xce\\xcbuTS\\xea\\xea\\xea\\xa9\\xa8\\xa6\\xb4\\xb4\\xb4\\x1d\\x1c\\x1c\\xc2\\xc2\\xc2\\xca\\xca\\xca\\xd0\\xd0\\xd0efe\\x90\\x90\\x8fqlkuqn\\xdc\\xdc\\xdcaa`\\xb8\\xb8\\xb7\\xb9\\xb8\\xb5\\xaa\\xaa\\xaa\\x83\\x7f}\\xd7\\xd6\\xd6\\x9f\\x9f\\x9f\\x98\\x97\\x97Y\\x18\\x18\\x8a\\x89\\x89/\\x1c\\x1b\\xa2zwjjh\\x9a\\x82\\x7f\\xbe\\xbe\\xbeEEE\\xbc\\xbc\\xbb\\x8d\\x8c\\x8a\\xba\\xba\\xba[\\x06\\x07\\x9b~{\\xe0\\xe0\\xe0\\x8c|z\\x9e\\x86\\x82idc\\xe2\\xdd\\xd9gDD\\x93rp1&$\\xad\\xac\\xabzxw\\xa5\\xa4\\xa1ZAA\\xd8\\xd6\\xd4\\xd3\\xd2\\xd2\\x9e\\x91\\x8be\\x07\\x08v_]\\xc8\\xc7\\xc7\\xbc\\xbc\\xba\\x86\\x85\\x85\\x9c\\x9b\\x9a\\x9d\\x9c\\x9b\\x83sr\\xcc\\xcb\\xcazcb}mk\\xcc\\xcc\\xcb\\x03\\x02\\x02\\xdd\\xdc\\xdaonl\\xc5\\xc5\\xc3\\xd5\\xd4\\xd2\\xd1\\xd0\\xce\\x91\\x85\\x82\\x85\\x84\\x83\\x95\\x94\\x93\\xd6\\xd0\\xd0\\x8c\\x8a\\x89hhfmlj\\x8b\\x87\\x86\\xb8\\xa2\\x9d\\x9d\\x8c\\x88\\x8eom\\xa4\\xa3\\xa1\\x9anm\\xc0\\xc0\\xc0\\xab\\xaa\\xa8\\x83\\x82\\x82\\xa2\\x82\\x7fY\"\"\\xa8\\xa8\\xa7\\xb6\\xb6\\xb6JCB\\xd9\\xd8\\xd8\\x9dtr\\x86\\x82\\x81\\x94\\x93\\x91\\xc5\\xc3\\xc1\\x9c\\x9c\\x9c\\x9a\\x88\\x85\\xdb\\xda\\xd8@))\\xa0\\x95\\x93oii\\xe4\\xe4\\xe2\\xbb\\xbb\\xb9\\xa7\\xa6\\xa5\\xa6\\xa6\\xa6\\xcc\\xc5\\xc2cba\\xaa\\x90\\x8c\\xac\\xad\\xacpc`\\xda\\xd9\\xd8I\\x16\\x16\\xdf\\xde\\xdd\\xb5\\xb4\\xb2\\xae\\xae\\xac\\xb8\\xb6\\xb3\\x9f\\x9e\\x9d\\xcc\\xca\\xc7\\xea\\xea\\xe9\\xbc\\xba\\xb7\\xd5\\xd5\\xd5\\xd3\\xd2\\xcf\\xed\\xed\\xededbWUU\\xba\\xae\\xac\\xc3\\xc2\\xbf\\x9e\\x9d\\x9c\\xa1\\x9b\\x98\\x97|yD\\x0c\\r\\xb3\\xb3\\xb2\\xac\\xab\\xaa\\xed\\xec\\xec\\xa6\\xa5\\xa4\\xdd\\xdd\\xdd\\xc9\\xc9\\xc9\\xb9\\xb9\\xb9\\xa8\\xa2\\x9e\\x11\\x0e\\x0e\\xfb\\xfb\\xfb\\xf7\\xf7\\xf7\\xfa\\xfa\\xfa\\xf6\\xf6\\xf6\\xaa\\xa9\\xa8\\xe1\\xe1\\xe1\\xf7\\xf7\\xf6xke\\xab\\xa0\\x97poo\\xe9\\xe9\\xe9ddd\\xf8\\xf8\\xf8\\xaf\\xad\\xac.--\\xf3\\xf3\\xf3\\xb0\\x8f\\x8c\\xed\\xee\\xee\\xf4\\xf3\\xf4Y\\x0f\\x0f\\xf6\\xf7\\xf7\\xb6\\xa2\\xa1\\xb8\\xa7\\xa6\\xf5\\xf6\\xf6\\xc7\\xb4\\xb0\\xf1\\xf1\\xf1\\xf5\\xf5\\xf5\\xd1\\xd1\\xd1\\xfc\\xfc\\xfb\\xc1\\xc1\\xc0\\xef\\xef\\xefPOO\\x8c\\x8b\\x8cmIIZ22\\xd7\\xd7\\xd7?>>\\xe7\\xe7\\xe7\\xdb\\xdb\\xdb\\x89`_YXX]QO\\xf4\\xf4\\xf3\\x89yw\\xeb\\xeb\\xeb\\xb4\\xb3\\xb3\\xf0\\xf0\\xee\\xd9\\xd9\\xd9\\xaa\\xa9\\xaa\\xa9\\xa9\\xa9\\xa8\\x99\\x95__^\\xbd\\xbd\\xbd\\xd8\\xd7\\xd6\\xfb\\xfb\\xfa\\xef\\xf1\\xf1\\xf6\\xf6\\xf5\\xb5\\xb5\\xb4\\x9a{w\\x95wu\\xbf\\xbf\\xbf\\xfd\\xfd\\xfd\\xfe\\xfe\\xfe\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00\\xf9\\xfd\\x1bH\\xb0\\xa0\\xc1\\x83\\x06\\xfd)\\\\\\xe8\\xaf\\x9f\\xc3~\\x1a\"\\x02\\x03&L\\x98\\x02f\\xc1\\x82\\r\\xd3F\\xe0Y6\\x04\\xde\\\\\\r\\xb8q\\x82\\x04\\x0c\\x0f,v\\xc5\\x18gb\\x9b\\x03\\x1e\\x00vD\\xe9\\x95\\xc3\\x85\\x91\\x16I\\x04\"\\xdc\\xc9\\xf3\\x1f\\xc3\\x85\\x0f!J\\xa4h\\x11\\xa3F\\x8e\\x1eA\\x8a$i\\x12\\xa5J\\x96.a\\xca\\xa4i\\x13\\xa7\\xce\\x9eX\\t\\xfeT\\x184\\xa2\\x86\\x89\\x15/f\\xdc\\xd8\\xf1c\\xc8\\x91%O\\xa6\\\\\\xd9\\xf2e\\xcc\\x995o\\xe6\\xccJ\\xd7\\xe7\\xd6\\xaeC\\xc3\\x1a%\\x9b\\xf4,S\\xb5O\\xdbJ\\x85[un]\\xac[\\x1b>\\xf4\\n\\xb6\\xe8X\\xa4f\\x97\\xa6u\\xca6\\xea[\\xaar\\xaf\\x1e\\xde\\x99\\x18\\xefW\\xa2b\\x8f\\x96U\\x8a\\xb6\\xe9Z\\xa8n\\xa7\\xc6\\xb5\\xba\\xb9g\\xe7\\xc5y\\x1d\\x8b\\xee+\\xd9t`\\xcb\\xaa\\x0bkn\\x9d\\xf0\\xae\\xd0\\x89\\xa0\\x15\\x84\\xe6\\x1b\\xb94\\xe0\\xca\\xa9\\tg\\xe6\\xe9\\xef\\x19p\\x87\\n9\\xdf\\xfdj1\\x981|\\xc6\\x86e\\xdcN\\x9c\\xf4_\\xca\\xa8\\x07c\\xfff\\x8d0M\\x14\"\\xd1\\xaei\\x0b\\x06\\x0cz\\xf4\\x82?\\x1dj\\xbbC\\x0b\\xd2\\x8b=\\xf5\\x94\\xb9\\xf2V\\xe1\\x99\\xb6a\\x1bA\\xe6\\xddd\\xa7\\tv\\xd9j\\x86%\\xc4\\x02\\x05\\xa6\\xa4qG\\x0f\\x08h\\xa3\\x800\\x1a\\xf4\\xb3\\x90V\\\\AD\\n\\x19\\x0c\\x1cSB\\x13\\xbf\\xe8\\x90L/t\\xc0\\xa0\\n\\x7f\\x04p4\\x9a_\\x04\\xde\\x96\\xdcx\\tjU\\x857,TB\\x87,\\x9b\\xdcB\\xc4\\t\\x15h\\xc3\\x8c=\\x162\\x04\\x110\\xae4c\\x06\\x17\\x1d~\\xf8\\xcb\\x1cs\\x90\\xb3H\\x1a\\x95x\\xc0N6\\xcf\\x10\\xb0bm\\xc7\\x85w\\xa0n\\x07\\xf5#\\x84\\x11\\xe5`Q\\x86&-D\\xf2\\xc2\\x1a\\xef\\x94\\xe3\\xca3\\xccpc!D\\x048\\x80B\\x00\\xc7\\x1c\\xd9a#_4\\x92\\xcc\\x92\\x88\\xb4\\x90F\\x19,(\\x83\\xc03\\x84\\x16\\xc7\\x94\\x07\\xc5\\x90\"\\x04r\\xe2!\\xb8\\x9b?\\x1aPc\\x87(\\xfc\\xec\\x80\\x0b\\n\"\\x04\\xe0\\x03 rT\\x92\\x89+\\xea\\x04S\\x01\\x1f\\xd6\\xb8\\xf1\\x8d\\x00%,`\\xe7\\x11G\\x88A\\x0c1k\\xcc\\xff\\xf1\\xcd,\\xb8t\\xb3\\r\\x16\\xaa\\x0cZ\\x81\\xa1$\\xa0$\\xc4;\\xe3 aB\\x19\\xb8)G\\x9eV\\x1a(0\\x80(3\\x98B\\xcc\\x0c?\\xbc\\xb0\\x80\\r\\x06P\\x02\\x02\\x03\\xb1T\\x93E::\\xcc\\xf1K\\x13%\\x84BK\\x04\\x18\\xfc\\x91\\xcc\\x0f\\x84\\x88\\xb1I\\x08\\xe4\\xb0\\xd1F;\\x92\\xb0\\x02\\x83+\\x15\\xec\\xaa\\xd4\\r&\\xf8\\xa2B#\\xe8\\xcc\\x12\\x05\\x0fo\\x04\\xfc\\x06/[.\\x07\\x1f0\\np@\\n\\x18\\x9a\\x80\\x81B\\x18\\x12\\x84\\x83\\xc69^$\\x02M\\x1c\\x160\\xc9d\\tu\\xb0\\xd1\\x0c\\x18l$AE\\x00T\\xa4\\x80\\xc8\\x0c\\x87`0\\x8b\\x12\\x87\\x10\\xf1\\x06\\x1d\\xcad\\xb3kH\\x8eD \\x83\\x19\\x12|\\xb1d\\xbb\\xf9\\xf0#\\t\\x00\\x00\\xd8\\x91\\x9b\\xc1\\xc8*pO1\\x9aP\\x90D\\x02\\x11\\xdb\\x80\\xc6 W|r\\x8c\\xc6\\xbf`\\x82\\xc2-.\\x80q\\x081mP\\xc1\\x86.(Dr\\xc4\\x0bO\\x80\\xd3B\\x1b\\x84\\x98\"\\x0b\\x120p\\x80\\x00\\x07\\xe6p\\x12\\x0727\\xa7\\xa3\\xb33sX\\xd0B<\\xf9L\\xff\\xd1\\xcd\\x0eC\\x1fKP?\\xc2\\xb0\\x12\\x803\\xbf8\\xb3A\\x17N\\x1b\\x10u \\r0\\xe9\\x0c\\x068\\xe0@\\xcc!\\xb8\\x98B\\x01\\x18\\x9c\\x88@\\xc8!{\\xa4p\\xc0\\x13\\xc9\\xc0s\\x01\\x1b\\x9b\\x14\\xe1\\x00)\\xef\\xc4\\xd2G\\x02\\xe9\\xa8@\\xb7\\x19\\xa1\\x04\\xd1\\x07\\x06\\x02\\xcc\\x11\\t\\x06b\\xb8\\xd0\\x0b?\\x86\\xd0\\x03\\xe3\\xa3\\xfdD\\xf2\\x0b9\\t4@\\x8e\\x0e\\x12\\xa0a@-\\x9f\\x04\\x82\\r-\\x02\\x08\\x80\\x01\\x06\\x13\\xb8J\\x01#\\x9atc\\x87\\x1dU\\xcc\\xf2\\x03\\x06{ \"\\x85\\x08\\r`\\xe2\\x06$\\x1f\\\\BI:\\x88\\xebP\\x82\\n\\xb4P\\xc0\\x06\\x06J\\xe4\\xff\\x80\\x00\\x01(\\xf1\\x00\\n\\xbe\\x8b\\x82\\xf0\\x1c\\x95\\x90*\\xfc\\xe0\\x00\\xce@\\x07,\\xbe\\xb1\\x01\\x1d|#\\x0e\\x1d\\x90^\\'\\x18\\x10\\x01\\x14\\xa4@\\x04\\x18\\xd0\\x05\\x05\\xd4\\x00\\x00\\x07\\xb0\\x02X&0\\x05(t\\xc1\\x860\\xe8\\xe0\\x00\\xbfX\\xc0\\x02\\xe0\\x90\\x8e\\x8c1I\\x07\\xe98\\xc2\\x0cf\\x81?\\x0c\\xb4\\x01\\x15I@E\\x1bD\\x80\\x82>(A\\x17\\xb7\\xd0\\xc4\\x14\\xff\\x86\\x07\\x9f~\\xfc\\xc1\\x7f\\xe0\\x10\\xc07\\x96\\xa8\\x03t$\\xc0\\x0f\\x97\\xc0F\\rR\\x91\\nY\\xe8\"\\x05JH\\x1d\\x0f\\xeaQ\\x8c\\x13\\xa8B\\x19\\xc5\\xa0\\x07(f1\\x04\\x0b\\x08\\xe0x\\x0b@C:4\\xe6\\x8c5lB\\x0c3@\\xc5,P1\\x03]\\x10Cs\\x14\\xc0\\x018\\xae(\\x02T\\x98\\x82\\x08\\x9a \\xa2V\"\\xa0\\x08\\xff\\xed\\x81\\t\\xe4\\xd8\\xc07,\\xb0\\x81!$#\\x05 \\xa0\\x01\\x19dP\\t^4c\\x0f\\xbaPC+<\\xe0\\n\\x02\\x18\\x83\\x15>\\xb0\\x80\\x0et \\x859 N\\x05\\xa1\\x88\\x039\\x98\\x94\\x00\\x0c\\xa0\\x82\\x8e(\\xd0\\x05\\x0e@q\\x8b\"\\xd0c\\x07\\xdf\\xd3C<\\xc2\\xf0\\x83\\x14`\\xe0\\x10\\xf9\\xa8\\x82 \\x07\\xd2\\x0f3X\\xe1\\x00\"\\x10\\xc1\\x1e\\x94@\\x0er,\\xf2\\x1b/\\xc8@\\x04\\xde \\x03W\\xe4B\\x084\\x88\\xc0\\x0cJ\\xf1\\x06,\\xb8B\\x1beh\\x80\\x0e\\xe6\\x01\\x0bq\\xc2\\xc2\\x0f\\xb0@C\\x1c\\xd6\\x11\\x86\\r\\xd8\\xad\\x08\\xfa\\xe0K#\\x10\\xc1\\x10\\xdd0V\\x8c|\\x02\\x0ci\\x90\\xc0\\x01]X\\xc2\\x0b\\xa8\\xf0\\x83=<`\\xac\\xcbX\\x86\\x1f\\x02\\x90\\x88)W\\xd9\\x0b\\x80HA\\x1f\\xf4\\xc0\\xaat\\x08`\\x0b\\x88`\\xc2\\x05\\xc2\\xd0\\x00gH\\xe1\\x8cR\\x90\\x87 \\xb4p\\x05\\xec\\x1a\\x00\\r!\\xd8p\\x18\\x02\\xe0\\x89\\x90\\x06\\xf5\\x01\\xba\\xc8A\\xa5\\x02\\xb7\\xe7\\x86(\\xc0\\x1b\\xa4\\x88\\x82\"\\xa6\\xb1\\x855\\xd09\\xd1>\\xf0\\xc1\\x13\\xae@\\xe5B\\x14b\\x1dk\\xc0\\xe0\\x9c/\\x90\\x00K4!\\x01\\xde\\xbd\\xc0\\x11\\x10\\xf1\\x07\\x1d8\\xe3\\x1b\\xb0\\xc8C\\x07*|\\xe1s\\x04!\\xcb\\xa3\\x0b\\x83\\x12~\\xf0\\x83\\xff\\xdd\"\\n\\xdf\\xa3\\xf5n|\\xa2\\x81`\\xb0C\\x14E\\x98\\x86\\x15\\xc6\\x80\\x88\\x10$`\\x08\\xcb\\x10\\xf6:F0\\x82A\\x1c\\xe0\\x00\\x90H\\xc1\\x1e\"\\x11\\x80\\'\\x8c\\xad\\t\\x96\\x18B\\x10\\x0e\\xb0\\x06&\\xdc\\xfb\\xc9>\\x80\\x82\\xa3\\x0b1\\x08H@\\xe2\\x08\\x1c\\xf6\\x83\\x1e\\x1e\\x10\\t\\x11(A\\xc7\\xf4\\xb0\\x03/\\x84\\xa6\\xe7u+\\x04\\x18\\xda\\xff8\\x01+h1\\x8d3(\\xa2\\x0e\\xb0\\xb8\\xb7\\xa2\\x83\\xf0\\x820\\x04\\x81\\xe6\\x17\\x00D\\x08\\x9ep\\x81>\\xf4!\\x04/\\xb0\\x85%\\xfc\\xc0\\xf0\\x14|#\\xd1O\\xc8\\x02\\x95\\xab\\x9c\\x05*<\\x80\\xc5\\x90\\xf0\\x84\\x1e~ \\x82\\x07\\xb0\\x81\\x13\\xe7N\\x03\\x0f\\x08\\xa6n\\x844D\\x18\\x15\\x80\\x01\\x1e.\\xd1\\xf2iX\\x02\\x16\\xe8\\x98\\xc72\\x9e\\xf0\\x87\\xb6\\xd7!\\x00\\x07x\\xc5\\x1f\\x98 p\\x0c\\xdc/\\x0c\\xb6\\x18E(\\x10\\xd1\\x87\\r\\xe4\\xfb\\t\\xfb(\\xc4\\x08\\xbcp\\x80#\\xa4\\x80\\xe3\\x07\\x18\\x82\\x1e\\xfaPnT\\xc4\\x83\\x11\\xdd\\xe0\\x85\\x03\\xe4\\xc0\\xf5\\x92s\\xa6\\x1f\\n@@1\\xde\\x90\\x81\\x96[\\xa1\\x04\\rH\\xbb\\x0f\\xfc\\xc0v \\xbcb\\x08!\\xe8\\x03\\x06Q`\\x84[0\"\\x02\\x80\\xb0\\xc24$`>|?\\xe1\\x05n\\xb0y\\x00r\\x9e\\x827g\\xfa\\x07\\x1f7E\\x15j\\xda\\x83\\x1e\\xbc\\xa8\\xa8^\\xd7\\x003\\x14\\x96\\x06_(\\xe2\\x0c\\xa3Pd\\xda\\x15\\xfd\\x8a\\x04\\xbc\\x00\\x1c\\xe5N\\xc2\"\\xda\\x11\\x857\\xb8\\xc4\\x10q\\xb0\\x82\\xff\\xcb\\x917\\x0fa\\xb7\\xfd\\x0fA\\x08\\xc3\\x13\\x86p\\x845\\x80C\\x04\\x93XD\\x0e\\x0c\\xc1\\x83m\\x94\\xa1\\x0c\\xc6o\\xd4\\x7f9\\xd3nW\\xd0!\\r \\xd0\\x05V`\\t\\x1b\\xd0\\x00\\xf7\\x86\\x0e\\x01@u{\\xc0\\x06-\\xe0\\x02U\\x90\\x06&\\x80\\x05\\xe5\\x00\\x03\\xef\\xb0\\x03\\x1f\\xd0r\\xa3\\x10z\\xe5\\xf7\\x04lwR/\\xf0{\\x1f\\xe7\\x02\\x9a\\x90\\x06=\\xc0\\n\\xc1b ]\\xc7\\x1c\\x90\\x12\\x0c\\xb9@\\x07\\x9d\\x00\\x02q\\xd0\\x04\\xce\\xb4\\x01>\\xf0\\x00J\\xa02\\x84\\x00\\x06\\x8c\\xb0\\x03\\xdb\\xb0\\x0b\\xe5\\x80\\x00\\x1dq\\x03\\xa2\\x00\\x01y\\xb0\\x04\\x9f\\xf7\\r\\xe80\\x04\\xc2\\x06\\x0bO\\xa0\\x07\\xf0\\xf4\\x003`\\x04;\\xe8A\\xef\\x10\\x03 T,\\xc3$\\x1d\\xfdG\\n\\xa9\\x10\\x0b\\xb4\\xf0\\x02[ pl\\x80\\n{sno [\\xf4\\x12\\x0c\\x16A\\x0070\\x0e\\x05\\x90\\x01\\xe2`\\x0b\\x05x_>@\\x05\\xe0 p\\xb3\\xb0\\x08\\xb7`\\x08o`\\x021\\xb0\\x0b\\x8a\\xc2(\\x05#8Z\\x18\\x0c\\x1c\\xe0\\x015\\xb0\\n\\xcf2\\x01I\\xa0\\x0b`\\xff\\x90\\x03S\\xc0\\x0b\\xac\\x80\\x057P\\x01\\xc1\\xa0\\x00\\xc0\\xf0\\x15\\n@\\x00\\xca@\\x06\\x05\\xe0\\x0b\\xc7 \\x05R0\\x0f?\\x10\\t\\xcb4\\x0b\\x1aD\\x0f\\xed\\xd0\\x0eD\\x10\\x05\\x7fB\\n\\'\\x10!\\x98\\x18\\x11C\\xa2\\x00\\xd2 \\x84\\x92\\x00\\x02\\xb4\\x10\\t\\x91\\xa0\\x04!\\xc3\\t\\xc0\\xf5\\'\\xe6P\\x0cu\\xe5\\x01\\xe0\\x81\\x82\\x96G\\x17\\\\\\xa1\\x00\\xcfp\\x03,`\\x02\\x93\\xe7A\\xa4@\\x02\\x1c@\\x00\\xcc\\x90\\x89x\\x810\\x04\\xc0\\x0e\\xbb\\xf0\\x06\\xab\\xd0\\x0c\\x8b\\xb0\\x08\\xb8\\x10Di\\xb0\\r\\xe60[\\'`[Y\\x82\\x8dY\\x98\\x15_7\\x0c\\x08p\\x03&A[\\xde\\xf0\\x0cjX!A!\\x14\\x1a\\xb0\\x86\\x87\\x88\\x04<\\xb0\\x03\\x95\\xc2\\x0b\\xac\\x18_\\xcap\\x03\\xca\\xd0\"\\x82\\x98\\x82\\x87\\xd1\\x10\\x0b\\x19\\x0c*2\\x0c\\x13\\x82\\x90\\x19\\xe2\\x10\\x8c!\\x0c\\xcc0\\x0c\\xd9p\\x03\\x1e\\xa0\\x12\\xadH[\\x03 \\x12\\xec\\xf0\\x1d\\xb1x|\\xfb\\xb7\\x19\\x8a\\xf1\\x15\\xc4\\xa4\\xf8\\x10@\\x01\\x1b\\x9f!\\x1c\\xc3@\\x00o3\\x00/\\xc9\\x01\\xde\\xe0\\r\\x1c\\x80%\\xd7(\\x8b5\\xd9\\x1a\\x89\\x11\\x1f<\\xd9\\x18\\x18\\xf1\\x93\\x84R/\\x86\\x82\\x91Z\\xa2\\x91\\xbc\\xd1\\x1bNI\\x92\\xb1!\\x16dq%\\xc6\\x91\\x944\\xf9cY\\x89![\\xa9\\x90\\x8d1\\x1c\\x02\\xc2\"\\xb6\\x91\\x91\\xd9X\\x96\\xf0\\xe1\\x1b\\\\\\xf9\\x19z\\xf1\\x18`)\\x93.\\xa2\\x7fr\\xe1\\x02\\xfc\\xd0\\x97~\\xf9\\x97\\x80\\x19\\x98\\x82\\x19\\x98QP\\x98\\x86\\xd9_S\\x90\\x98\\x89)D\\xc2\\xd4\\x0b\\xbd@\\x04D\\xc0\\x08\\x8c\\x90\\x0f\\xb7P\\x99\\x14\\xc0 \\xa0\\x80\\x0bF\\x10\\x8f-\\xd0\\x02(\\x80\\n\\x93\\x80?\\x0f \\x02?\\x10\\x10\\x00;'", - "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\x94\\x88\\x88\\xdc\\xdc\\xdb\\xfa\\xfa\\xfa969\\xf5\\xfc\\xfc\\xd8pqsVXBhhi-+/\\x89\\x89\\x88\\xcd\\xaf\\xae\\x82\\x83\\x8c\\xfe\\xe0\\xe0\\x92\\x9c\\x9b\\xdd\\xe4\\xe3\\xdf\\xd8\\xd9\\xc0\\xbf\\xbf\\xe0\\xd2\\xd2EHK\\xe3\\xe4\\xe5\\xe6\\xed\\xefVY_\\xd7\\xae\\xafWQX\\xfb\\x94\\x94\\xfc\\x85\\x85\\xf9\\xf9\\xf8\\xe5\\x8d\\x8e\\xc4\\xbf\\xc0#!#]fh\\xfc\\xfc\\xfc\\xfd\\xfd\\xfd\\xfe\\xfe\\xfe\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*,\\xe8o\\xa1C\\x85\\x0b\\x1eJ$h\\n\\xc4\\x8fb\\x16H\\x90x\\xc0q\\xde\\xbcN\\xc9&\\x8a\\xfcg\\xaa\\x1d\\x99Y\\x04?%@SG\\xa0\\xa8\\x91\\x02eH\\xda I\\x84M\\x9b\\n2\\x85\\x90\\xe4\\x00\\xa6\\xc4\\x05O\\x04\\xed\\xf1\\x15\\xeb\\x82\\x1d5\\xfat\\xed\\t\\xf6\\xc5@\\x18\\x98-\\n\\xc0\\x90\\t\\x10\\x02\\x99\\x80\\x00\\x0cs\\xd4 \\x91\"\\x070\\xf2\\xcf/e`\\x80B\\x1e\\x0f\\x1d\\xb3\\x8a\\x1f$\\x84\\xbb\\x86<\\x14d\\x11\\x05A\\xfa\\xfa\\xd3\\xef?u\\xe4\\xd2\\xc33\\x03\\x96\\xbc\\xd4\\x8f\\xd2\\xfa\\xf2c\\xb8?D|\\xdd\\xc0\\xca\\xb4\\xff\\x83C\\x0c\\xb7\\xe8\\xbb\\xc88|Jy\\xd0\\x1b\\x0c(\\x82\\xc6.\\x00Tb\\xb5\\x12\\xcf;\\x06I\\xb4\\xe6\\x95~\\x98\"kY\\x13\\x88?\\xc2Q\\x04!\\xeca \\xfe\\x10\\x83\\x1a@C\\xbb\\xc2%\\x8dk\\xff\\x88\\xc0*2P7\\x7f\\x98\\x828\\xf7H\\xc5.: \\x90\\x06l\\x0b\\x15\\xae*\\x08\\x11\\xa0\\xa0\\n\\x02\\x1c\\x80\\x0fak\\x08\\x11\\x9c\\xf0\\x01(H\\xc0\\x80\\r\\x19\\x9f)\\x0c\\xa7\\xc0\\xbcMA\\x10\\xf8\\xa2D9\\xff\\xc0\\xf0\\x92\\xaf\\xf0\\x83q\\xe3\\x13\\x80\\xca\\xde\\x90\\x82\\xd3h\\xec\\x80_y\\x9f\\x19\\x06\\xe2\\x8e2\\xb0\\xaa\\n\\x05!\\xc0%\\xfc\\xc0\\x06\\xfe\\x99\\x02\\x18\\t\\x14\\xde\\x07\\xa4 \\x81\\xa2\\xad\\xac\\x05\\xe6\\xfb\\xcaW\\xb8\\xf6\\x05{\\t$\\x1a\\xe5\\x18\\x83\\x023f>\\xac\\x1d\\x11}7PE\\xf4L\\xe1\\xb7\\x95}C\\x1bB\\x10\\xc4(\\x06\\xf2\\x80\\x0c-\\x8c \\x98\\xf8\\xc0\\x03\\xc4!\\x88\\\\\\xa4\\xac!\\xc7\\xc8\\x00\\x0cN \\x81\\x86\\xf0c\\x01\\x18\\xf4\\x8a\\xf5\\x04\\xd2\\x0e3\\x08A n\\xd8BO\\xd48\\x9f\\x1dz\\x908\\r`@\\x84\\x0e\\xa8\\xc0:\\xfeC\\x051H\\x00Ax`\\xc8\\x19\\x0c\\x04\\x1fe\\x80\\xc5-\\xc8P\\x02\\xc3\\x19Pe\\xad\\x08\\x02\\x0c\\xf0\\xb1\\x9bn`\\x12\\x82\\xe7\\xf3\\x07\\x17(p\\x80\\x1ch@\\rf\\xc8\\x81\\xee\\x8e\\x98F\\xf3\\xf5\\x83;\\x8eH\\x01\\x08\\xa6\\xb4\\xc9\\x814C\\x10_(\\x88,\\x18\\x80\\x81\\t\\xd0\\xed\\x1f7\\x18G\\xd8\\x8f\\x16\\x10`\\x1c\\n\\x90\\x9d\\xd1\\n\\xc8\\x8f\\xaet\\xe0\\x00vP!\\x94` \\x85E@`\\x1cT@\\x87.\\x00`\\x02npc\\x14 \\xd5\\xc0(r`\\x02\\x10lK\\t\\xd0(\\x91\\x00\\xba\\x91\\xc0\\x82\\x90\\x02\\x0f\\xe0h\\x87 6a=\\x1ej\\x8c\\x1f+\\xad\\x86\\x0c2\\xc1\\x03\\xdd\\xf1\\xf1\\x80i,\\xce-Ra\\x10=1\\xa0\\t\\xd1(\\x02\\x19\\xdc \\x8d4\\x18!\\x07\\x83\\xe0BT\\x030\\x08W\\xd0`\\x1d\\xcc\\xc8B\\x08>\\x90\\x01V|\\x02;\\x87;\\x9c\\xfb\\x9e\\x11\\x8d\\x0b\\x0c\\x80\\x05\\xa2\\xa3\\x9eX\\xfd\\x01\\x8c\\x00\\xb0\\x80\\x0e\\x8d\\xd0@5\\x06\\xaaV\\x02\\xda\\x80\\x1e\\x0f4H\\x14\\xa8\\x00\\x06!P\\x80\\x0c|\\xe0\\x04\\'\\xa6q\\x10\\t\\x10\\xc2\\x07\\'@D\\x08\\x18\\xc0\\x00*<\"\\x00\\x8c\\xa0\\x0fA\\x92\\xf1\\x0c\\x16\\xb4\\xe3\\xac\\x089\\x9c)\\x1a\\xd0\\xac\\x9f\\xd6U\\x87\\xbdp\\x00\\x19\\x88j\\x10_\\x90C\\x08\\x07\\xd0\\x07\\x05\\xac\\xa0\\x16,\\x10\\x81\\x08\\xc7P\\x84\\x0f\\xf0q\\x038\\xff\\xc0\\x00\\x06\\x1fH\\xc1\\x10T\\xa1\\x80+\\x1c\\xc3\\x1f\\x01\\xf8\\x84d\\x05\\x82\\x85eD\\xc3\\x1a\\x03\\xe0\\xc4+j\\x9a\\xd6~\\x08\\xa0\\x05\\xdd\\xa8\\x861\\xd5xD\\x96\\t\\xc4\\x01\\xf4\\xb0\\x84A\\xaa\\xe1\\x82\\x0e\\xac`\\x19\\x07\\x88\\x06\\x1f\\xb0\\xe0\\x06$@\\xe2\\x06\\x97\\xf8\\x00c\\xcb\\x80\\x00@\\x04\\xa1\\x18?\\x90D\\n2\\x00\\rO,\\x80\\x0b\\\\0\\x9a\\xe8\\xfc\\x81\\x85\\x03\\xb0\"\\x16jH\\xc3(\\xc2:\\x10\\x81\\x9a/\\x1b\\xd7\\x14\\x00\\x01\\xbdR\\xdd\\x86t\\xe0\\x16\\x9b0\\x886\\xb0\\xe0\\x00\\x194\\x03\\x1c\\xd1\\xb0\\x82\\x16\\x96`\\x85K\\xb4\\xf7\\x0e\\xe7\\x80\\x00,\\xa8\\x03\\x1fv(\\x80\\x03\\xb9x\\xc2s)a\\x02S\\xd2\\x07\\x0b\\x03H\\x80?\\xc8`\\x85\\xeei\\xf2\\x97\\r\\xfdG7\\xb2\\xe1A>\\x8eocl\\xf5\\xc7\\x0f\\xd4\\x80\\xaa\\x82p!\\x1f&\\x08\\x80\\x0b~`\\x84\\x12\\x14\\xa2S4h\\xd0@z\\xa1\\xb4\\n\\xf4\\x81\\x1a\\xce\\xb8F\\x00f\\xa1\\r\\x92\\x08\\x80k\\xfc\\x00F7Tp\\x80.\\x97\\xe2\\x00X(`)\\xb3F\\x1c\\xe7v\\xe3\\xff\\x89\\xf7\\xb4.d\\xc8\\x8c/\\x82\\xc4\\x02\\x0b6\\xf0\\x05.\\x02\\x91\\x88\\xa8n\\xc2\\x0e\\xb2\\xd4\\xddM5i\\x02^L!\\x00\\xa3\\xd0\\x80\\xd6Z\\xa01\\x05\\xe7m\\x0fdhH\\x02\\x04A\\x817\\x0b\\x84\\x95\\xdd\\x98OCM\\xd1\\x90\\x1d6x|\\r1\\x86\\x19\"m\\x10~\\xa0\\xc1\\x18=\\xe8\\x80\\x0b\\x8cq\\x88\\x1c\\x04\\x02\\x0ct\\x104\\xa8\\xad\\xb7\\x80M\\xf0\\xa1\\x10\\xa0\\xc6\\x1a\\x8f\\xfb\\x91\\xe9\\x7f\\\\C\\r\\xd1\\x10H\\x0b\\x96a\\x05\\xc0\\\\\\x90$*3\\x1f\\x1a5m=W:\\xb7\\x08[\\x08\\xe7Ap!\\x83B$\"\\x11\\xf9\\x18\\xc3!\\x0e!\\x86%\\xa0\\xa4\\x87\\xff\\x90\\x8f\\x06L\\xc0\\x82%\\xcc\\x86\\xc7\\x96\\xb4\\xb4)L\\x00\\x00 \\x0e\\xe4\\x05\\x03\\xe8\\xc1\\xf4\\xcaG\\x9c\\x0b\\xb2tk\\x08<\\xf6?@0\\x85\\x03\\x9c!!\\xf9@\\x83\\x0b\\x98 \\x83A\\xe0\\xc2\\x15\\xbc\\x18\\x00)\\x04\\xb0\\x803\\x9c\\xc1\\x15\\x83\\xa0\\xc1 \\xd8!q\\xbc\\xf8#\\x1b\\xae\\xe4G7\\x04\\xd2\\x052\\xe4U \\x1a8\\xc0\\n\\x9eB\\x04\\x7f(8i$\\xff\\x81\\xa2\\xd68]G\\x95y\\x02\\x00\\xb70\\x8cB\\x1cp\\x81|\\xfc\\xe0\\x02\\x85\\x80E\\x02\\xb6\\xd0\\x870\\xc0B\\x1b_\\x15\\xc0+\\xbaA\\x9c\\xd9\\x99\\xe2\\xcd\\tT\\x19#\\xfa \\x08k@\\xf0\\x1f@\\x18@\\x1f.\\xf6e\\xdd\\xfd\\xe3\\xcbY\\xb3\\xa4\\xa6\\x072\\x06r\\xa8\\xc1\\x13\\x0e\\xb1\\x01\\r\\xce`\\x8b{\\xd4\\xe2\\x1f`\\x88\\xb7-\\x07rtF\\'{eJ\\x1c\\x9f@\\\\\\xd1\\x07/\\xf0\\xf1\\xf1\\xe9\\xe9\\xea\\x92\\x8b\\x8d\\xd0\\x00\\x00\\xd1HG\\xc1\\xbc\\xbc\\xff\\xe7v\\xfb\\xff\\xfe\\xdd\\x00\\x00\\xff\\xff\\xe3\\xff\\xff\\xf4\\xfd\\xf5\\xda\\xe9\"\\x03\\x91\\x91\\x90\\xad\\xa3\\xa4\\xeeXK\\xcd\\xcb\\xcc\\xfc\\xeb\\xd7\\xff\\xff\\xf8\\xa9\\x9f\\xa2\\xd7\\x18\\x14\\xf7\\xfc\\xfc\\xf5\\x89c\\x9d\\x9e\\x9e\\x9c\\x89\\x88\\xcc\\xa0\\x9f\\xff\\xff\\xdc\\xc4\\xc2\\xc4\\xd7\\xe0\\xe1\\xf8\\xa1m\\xe1\\x00\\x00\\xfd\\xea\\xca\\xf7\\x8fQ\\xff\\xc9\\xa3\\x99\\x80\\x81\\xfd\\xb9M\\x95\\x97\\x96\\xfb\\x7f\\x15\\xa1\\x9d\\x9d\\xbe\\xb2\\xb3\\xfe\\xfd\\xf2\\xb2\\xa4\\xa3\\xfe\\xd7\\x86\\xe7\\xe2\\xe2\\xf4\\xf0\\xef\\xac\\xaa\\xaa\\xb5\\xb2\\xb3\\xf3\\xea\\xe4\\xe3\\xdc\\xde\\xe0\\xa0\\x9d\\xeb\\xec\\xed\\xe4\\xc4\\xbe\\xf42\\x08\\xfc\\x9ae\\x94\\x95\\x95\\xed\\xee\\xef\\xe6\\x00\\x00\\x96\\x97\\x97\\xa9\\x9a\\x99\\xf5C\\x00\\x93\\x95\\x94\\xa4\\x89\\x89\\xe8\\xef\\xf0\\xfe\\xf4\\xe8\\xe8\\n\\x01\\x93yy\\xf0\\xf8\\xf7\\xfe\\xfd\\xfe\\xe6\\xe6\\xe6\\xa3\\x94\\x95\\xa3mq\\xb2\\xaa\\xac\\x93\\x97\\x96\\xff\\xc6Z\\x93\\x94\\x9a\\xeb\\x82y\\x96\\x98\\x98\\xfc\\xf5\\xf0\\xa7\\xa6\\xa7\\x9e\\x99\\x9a\\xfd\\xfe\\xfd\\xf5\\xee\\xea\\xf5\\xf7\\xfa\\xfc\\xfc\\xfe\\xb535\\xe5\\xb9\\xb9\\xe2\\x1c\\x19\\x94\\x90\\x91\\xfe\\xfb\\xfd\\xd6\\xd6\\xd8\\xf0\\t\\x00\\xfa\\xf9\\xf6\\xbe\\xa5\\xa6\\xff\\xff\\xb5\\xff\\xe7\\xb5\\xf0%\\x01\\xb8\\xaa\\xaa\\xc5\\x00\\x00\\x98\\x98\\x97\\x8d\\x81\\x85\\xad\\xb0\\xb4\\xd4\\xd9\\xd9\\xf5\\xf0\\xf1\\xfe\\xfd\\xfd\\xb3\\x8d\\x92\\xfe\\xf1\\xe1\\xd6#!\\xe3\\x0f\\x00\\xceea\\x95\\x96\\x95\\xc8\\xc7\\xc7\\xb9\\xb8\\xb8\\xa4\\xa1\\xa1\\xce\\xd0\\xd1\\xf3\\x1b\\x00\\xcb\\r\\r\\x99\\x9b\\x9a\\xd8\\xd6\\xd6\\x94\\x8d\\x8f\\x96\\x95\\x93\\xef\\xf0\\xef\\x9b\\x9c\\x9c\\xfd\\xfd\\xfb\\x9b\\x97\\x98\\x9e\\x9f\\x9e\\xd1\\xbd\\xbe\\x9b\\x00\\x00\\xa7\\xa4\\xaa\\xc1\\x0b\\x0c\\xe9\\x0c\\x0e\\xdf\\xdf\\xe0\\xd6\\x0b\\x00\\x97\\x96\\x95\\xe4\\x06\\x00\\xe2\\x02\\x00\\xff\\xff\\xfe\\xff\\xff\\xfd\\xfe\\xff\\xff\\xff\\xff\\xfb\\xff\\xfe\\xff\\xfe\\xfe\\xff\\xff\\xfe\\xfe\\xfd\\xfd\\xfd\\xfe\\xff\\xfe\\xff\\xfe\\xfb\\xfe\\xff\\xfc\\x95\\x95\\x95\\xff\\xfe\\xfd\\xc4\\x1d\\x1f\\xe1\\x07\\x07\\xae\\xb0\\xaf\\xf18\\x10\\xdd}x\\xe0\\n\\x00\\xee(\"\\xf9\\xd1\\xc3\\xaf@A\\xd7\\x0c\\x0b\\xfc\\xfa\\xf7\\xf6].\\xfb\\xfc\\xfc\\xda\\xd9\\xd8\\x93\\x93\\x93\\xe3\\x10\\x07\\xfc\\xfb\\xfa\\xa9\\x95\\x95\\xf5\\xe0\\xdf\\xff\\xe7\\xe3\\xae\\x96\\x9d\\xa0\\x8f\\x8f\\xec6\\x10\\xfe\\xff\\xfd\\xfb\\xfb\\xfb\\xa3\\xa4\\xa3\\xdc\\x11\\x13\\xce\\xce\\xce\\xb8\\xa7\\xa6\\xfe\\xfe\\xfd\\xfe\\xfc\\xf9\\xb6\\xbe\\xc2\\xcb\\xc8\\xc7\\x9d\\x9c\\x9c\\xc2\\xca\\xcd\\xff\\xa7\\t\\xaf\\x9f\\xa0\\xbb[_\\xf2\\xf3\\xf3\\xfe\\xee\\xed\\xf4\\xf4\\xf2\\xf4\\xf4\\xf4\\x8e\\x8d\\x8e\\xf6\\xf7\\xf6\\x9f\\xa0\\x9f\\x9b\\x9b\\x9c\\xc3\\xab\\xab\\xf8\\xf8\\xf8\\xee\\xea\\xea\\xfe\\xe2\\xa2\\xd1\\xcf\\xd0\\x9d\\x98\\x9f\\xdf\\xaf\\xacZ\\x00\\x00\\xa4\\xa5\\xa4\\xa2\\xa3\\xa3\\xe2\\xe9\\xeb\\xca\\xbf\\xc3\\xdf\\x04\\x02\\xeb\\xeb\\xeb\\xb2\\xaf\\xaf\\x95\\x93\\x93\\xef\\xd1\\xca\\xfe\\xbb=\\xfe\\xfe\\xfe\\xff\\xfe\\xf8\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00E\\x002\\x00\\x00\\x08\\xff\\x00\\xfd\\t\\x1c80\\xd7\\xbf\\x83\\x08\\x13&\\x84u\\x80\\xa0\\xc3\\x87\\x07r\\xc5R\\xa80VC\\x88\\x072>th\\x90\\xa2\\xc7\\x7f\\xb96:\\xcc(\\x11\\xd6G\\x84\\xb0B\\x0e\\xcc8+\\x96\\xcbX\\xb9.n\\xcce\\xd2c\\xbf\\x8a2\\t\\x92\\xa4Y\\xf3dB^\\x02\\x0f\\xc4\\x82\\xd53\\xa1\\xc8\\x96\\'o*\\x9c5r\\x16\\xd1\\x7f\\xfdn)=(\\x15a\\xbf\\xa9\\x07]\\xfa\\xfc\\xb7\\xd1\\xe9V\\x8f\\xb1f\\x89\\x1d\\xfa\\xaf\\xd6\\xc1\\xabW\\xa1J\\xbdZ\\xabVU\\xac_G\\x96\\x88\\xf2\\xaf\\xaa\\xc25[\\xe0~\\x85\\x8a\\xf6\\xd6AY\\x07\\xd9\\x98\\xdd\\xab\\xf0a\\xac\\xa8\\xfdl\\xfd\\x93`\\x92\\xc2>!\\xe1\\xce\\x9c\\xd5\\xeb\\xf3VUY>\\x9e!\\x91Qb[Z\\xc2\\\\u\\xa2\\x95\\xa0 \\x85\\xb9\\x14~\\x1eL\\xba6`A\\x14Y\\xb7\\xf2\\xe4\\xc1u\\xf6\\xa0-\\xc0\\t\\x01\\xeb\\xc6\\x12/\\x18\\n\\x14\\x02L\\xfc\\xa3F\\xf9\\xa4\\xc3Y\\xa3\\x14H\\x00\\xb3\\x85\\x02\\x80F\\xe2\\xee\\x85\\x81\\x10\\x86Y\\x05\\xd8yd)E\\x9b=;BY\\xc7x?\\xff@\\xd1#\\xc6\\x11\\x08\\x10\\x86\\x19\\xd9\\xf6Q\\x16!;3v\\x18%h\\xf0\\x969t\\xa5\\x89|\\xabt$\\x0c\\x99\\tG\\x90\\x11\\x00TfE\\xc5\\xd7?\\xb8\\xc1P\\x05\\x17\\x0b\\xb40\\x891\\xc2\\x841H\\x1a\\x1f\\xc4P\\xc3 \\xae\\xe0\\xb0\\x8fU\\x07a\\xd1\\xe0\\x1f$\\xf0S\\x02H\\xb684\\xd1A\\x14\\xb4\\x81\\x0e\\x18\\xf5\\x9cp\\x84ya\\xc4\\xe0\\x9f\\x06\\x7f!8\\x95,\\xa10\\xd8B\\x0f,\\x1c\\x91\\x06\\x04\\x13P\\xf2\\xc1\\x8b\\xe7\\xf9\\x08\\xc1$\\xc1l\\x08\\x98\\x06(\\xf8\\x82\\x1e\\x04\\x83 \\xa0\\x81\\x0cy\\xe8d\\x92R\\x00\\x08\"\\x0b6\\x03\\xc4\\xf0\\xc1\\x90G|\\x10\\xc6\\x04\\x17\\x181E\\x062\\xfc\\xa3\\x0b1Z<\\xd0B/,\\xc4\\x00\\xe5+\\xact\\x10\\x01\\x0b\\x1d|)\\'\\x041\\xbc\\xc2\\xe7$8\\xfc\\xc0D\\r\\xd3\\x851\\x1dz\\x88\\xa0!\\x0bA\\xb3\\xd4V\\x97 \\x8eh\\xd2B\\x0c\\x1d\\xe4\\x19C\\x04\\x1d\\x1cq\\x84+\\x13\\x00C\\x00\\x01\\r\\xfcaL\\x85G\\xbc\\x12\\x01\\xa6\\x1d\\xb0P!\\x9e\\x1f\\xb0\\xd0\\xa3\\xa1\\x10t\\xff\\x80^\\x0c1\\x08\\xd3\\x81\",L@\\x02%\\xd3\\xa9B\\xce\\xa2A\\x9dx\\x93_\\n0\\xe0\\xc8\\x03\\xad\\xa2\\xfa\\x01\\xae\\xb4\\xd2\\x1aF\\x98,\\xdc\\xf9A\\x04\\x18\\xc8\\x83\\xa9\\xab\\xa7`\\xf0\\xa5\\x9d=B`\\xe4+\\x94L0\\xc8\\xb3\\x1d\\xb0\\x12\\x06\\t\\x84B\\xa0\\x8a\\x0e\\xa1\\xf9\\xd3hB\\x96\\xfd\\x83\\xce\\x1aZpr*\\xab\\x97\\xf6\\x18\\xa6\"\\x8axI\\xad\"w^\\x1ap\\xb6\\x9b\\x900A\\xabq\\x9e\\x07\\xa5y\\x83P\\x17F\\x1a\\x1d4\\xab\\xae\\x0e\\xc0\\xfas\"T\\x07\\xd1\"\\xef\\x16\\x1b\\xf4\\x91j\\x04_~\\tr\\x98\\x01S\\x9a*\\xbf\\xb8\\xde\\xb3\\x89\\x13\\xe0hP\\x80\\tS8\\x01q\\xb4\\x1f\\xbc\"k\\xaa\\xe6y\\x99j\\xa6a8\\xf1\\xda@\\x17c\\xacq9*0P\\xc9\\xb4\\xa8Vz\\xaaya*\\x1d\\x01\\xc0G\\xd4\\xd0\\x80\\x12\\x19\\x940bV3\\x1c\\x82L\\r\\xadV\\x1a\\x06\\x0b\\xb8\\xe6\\x89\\xb0\\xac\\x1001C\\xc5A#D\\x0b:\\xd5h\\xc2\\xc5\\x05=(\\x9d\\xe7\\xad\\x11x\\xe9j\\xb4\\x11L\\x80\\x80\\x17/\\xfc\\xffC\\xd4,2\\x1d\\x80T\\x00\\'4\\xf0A\\xa5\\xae\\xde\\xe9t\\xa5\\x04H\\x92G?A\\x15e\\xd58\\xc5\\x9e1\\x031\\x1e\\x10\\xb0\\xf3\\xe1s\\'\\xfe\\x01\\x19r\\x0cq\\x90H\\x04\\x1d\\x04\\x8d\\x11\\x13\\xf8\\xabx\\xb4q\\xc6`\\xc0?\\xda\\x84\\xd6\\x11E\\xa3l1N\\x08\\xe3 D\\xc3\\x05vV\\xea;\\xeb]\\x1c\\xd2(\\xe9\\x10\\xfd\\x13\\x0b\\x12\\x02L\\xd0{\\xb2\\xb26@\\x8c,f\\t4\\xbbB\\xb2\\xa8\\xb0\\n\\x00\\xec\\xfc\\x93\\x07\\x1b\\xb2\\x94\\xf0\\xc3=xVz\\xf8\\x07\\x13(\\x01\\x12\\xf1:\\x95\\x84P\\x06(`\\x80\\'\\x9e\\x9c\\xb4\\xe0\\xc7d\\xfe\\x1c 9B\\xb6\\xa4\\xb0\\x85\\n\\n\\xf8\\xfd\\x97\\x0cI\\x88\\x81\\xab\\xe6v\\x0f\\x01\\xc8\\x80)\\xe8\\x1b\\x88W\\x12\\xa2\\x02i\\xbcA\\x1c\\x03\\xe8E\\x1f\\x16\\xa0\\x87\\xba\\xa4E(>I\\x01>\\xb6\\xc0\\x07\\xea\\x99`\\x1a\\xacK\\xd5\\x04\\xfa\\x96@\\x82\\xa4\\xed\\x1fDH\\xc0\\x1cP\\xc1\\x83h\\xf0`\\x0f\\xff\\x18\\xc5\\xe3\\xaerB\\x85\\xe0c\\x15mH\\x01E$\\x81\\x82\\xf7\\xe1i\\x183(\\xa1\\t\\xff\\x15\\xd2\\x8f|0\"\\x01\\t8\\xc7\\x1c\\xe0\\x91\\x05Z\\xd0\\x02\\x16h\\xf9\\xca\\x16V\\xe1\\t\\x17x\"\\x197\\xa1\\r!*\\xa1\\xaam\\r\\xa3]B|\\x17B\\xf0A\\n@\\x80\\xe2\\x13\\x9fX\\x01#\\xec\\x11\\x08Z\\xd4\\xe23\\x1e\\xe9\\xc9\\x16\\x00\\x90\\x03(@\\x81\\n\\t\\x81\\x81\\x10R!\\xb6\\x0f\\x0cC\\x06@\\x11b\\xfd\\x82\\xe6\\x89\\x04\\xb4b\\x11\\x8b \\xc5\\nn\\xf0\\x88Z\\xc0\\x007\\xc5\\xa9I?\\xe6\\xe8\\x008\\xb8 \\x04\\n\\xc9\\x81\\xc7\\xc4\\x86\\x08\\x12\\n\\xd2]5\\x81\\x04&\\xce\\xd1\\x04K \\xd2\\x06.@\\x10\\x0c\\xf2\\xe0(\\x8a\\xd4d\\x14`\\x10\\xc4\\x15\\xa0\\xd0\\r0(\\xa4\\x08\"PU\\xa5\\x8e\\xe0\\x84!\\xd0B\\x90\\x18D\\x11)\\xca\\x10\\x87&\\x88\\xa1\\x13\\xbb\\xc8G\\x15\\x12R\\x9c\\x84\\xc02\\x04\\x98p\\x01\\x03X\\x99\\x90z\\xbc\\x81\\x13!\\xcb\\x95\\x1cf\\x10\\x8b0&\\x04\\x00\\xa4\\x8cC\\x1d@\\xa0\\x8et<\\xc1\\n\\x97\\xc0F\\x08\\xaa\\xf1\\x95~\\x8cB\\x05\\x82 \\xc2%l\\xc9!\\x1f\\x84\\xa3\\x17!\\xfb\\x12\\t2\\xd0\\xff\\xcd\\x12\\x8a\\xf1\\x1f\\x98\\xb0\\x81\\x18\\xc40N \\xdc\\xe1\\x0e\\xe9\\x00\\x82\\x182q\\x05L\\xbc\\xc3\\'\\xfdH\\x86\\n\\xde\\x91\\x836\\x10\\x110\\x0c(\\x06\\xab\\xbe\\xf4\\n\\x0f\\xa4\\xa9\\x84\\xf6\\xb3\\r)l`\\tK\\x94\\xa1\\tu\\xa8C\\'J1\\x8f\\x96f\\xe2\\xa5\\x1f\\x81\\xa2-\\xd8Q4\\x00H\\x80\\x88y\\xa8\\xc5\\x1e\"\\xc1\\xc7.~ \\r\\x1e\\x10]\\x02\\x83\\xb9\\n@\\xec\\xe2\\x0b\\x96(e)\\xcbp\\xd2:\\x88\\xc2\\x02\\xf4\\xb8\\xc3V\\xd0\\xd1\\x06\\xfe}\\xa4\\x83T(\\x86\",u\\xb8W\\x18\\xf0\\x1f9y\\x88\\x181\\x91\\x80\\x92\\x8a\\xa1\\tM`\\xaa\\x18D\\x01\\x02\\x10\\xa0T\\xa5\\x1eq\\xe2?\\xc6\\xb1\\n\\x15\\xdc\\xd4&\\xb5`\\xc3?\\xb4\\x90\\n\\x90\\x85,S\\xc8\\x90\\xc4\\x0e\\xbaY\"\\xc3 \\xc4\\ne\\x15\\xc3\"\\xea\\xd0\\x84/\\xd8\\xa0\\x15\\x99\\xf0\\x86(&\\x0b\\x021\\x9c\\xc4\\x1c\\x82\\x08A\\xf6>\\xd2\\x8f\\xbc\\xfe\\xc3\\x0e\\x17\\x88\\x96\\xf8\\x8e\\x90\\'D0A>i:HH\\x0cr\\xa26\\x90b\\x19\\x8b\\xd8\\x85J\\xeb\\xb0\\x0c}\\xff\\\\\\x82\\x02\\xd8\\xc0\\xc4/,\\x00\\x02Qpv\\x8a\\x9b\\xe5\\xecM$ \\x0b\\x1d \\xa3U!\\xa3\\x14\\x0b(q\\x01\\x03\\x08\\xa0\\x02g\\x9a\\xc1?v`\\x08\\x84\\xe4 \\x01\\x8b\\xf8B\\x13\\x16\\xd1\\xd6e\\x94\\xa2\\r\\x81`\\x03-\\xd8\\x01\\x00l8\\x80\\xb3\\xec\\xe8\\xdfAp\\xa1\\x18\\x85\\xe0b\\x14\\xda\\xe8G\\x07i\\x80\\x00\\x01\\x8a/\\xb9\\x9a:\\x02\"H\\x80\\x00\\x1c\\xe0\\x80\\x04\\x1e\\x80A-0\\xb1\\x02@|a\\xa0\\xa2\\xe8\\xc420\\xf1\\x0f\\xc5\\xb4\\xf7\\x1f\\xea\\xfd\\n\\x14\\xdd+\\x1bHl\\x8f\\xb8C\\xf0\\xc2\\x1f\\xf0\\x96O\\xdf\\xed\\xf2I-\\xa8\\xc28H\\xc1\\x81O\\xec\\xe2\\x90\\xa5(\\xc5.\\xac\\xa0C\\xaa\\x88\\x174\\x1e\\xc1E\\x1e\\xb4\\xa1\\r\\xa9\\xb0!\\x10\\x80A\\xc2\\x0f&q*\\x0f\\xf7QF\\xd4iA9\\x00\\xf0\\x892\\xb6b\\xa0\\xa5\\xa0G:\\x96a\\x05s0S!O\\xd9\\nY(\\xa21[\\xb4\\xb7\\x00t\\x98\\xc4\\xc9\\x94%\\xa3B=\\xc0\\x07\\x04^\\x81>HQY\\x10\\xa4\\xc3\\x02\\xe9\\x88\\xc3/\\xd0\\x91\\x90\\x07\\x1f$\\xff\\xca\\'\\xb1H\\r)\\xa2\\x8bg$\\xa1\\x06\\x02T\\\\\\x97\\xa9C\\x07\\x18\\x00\\xe2\\x13\\x1c\\xe0\\x00\\x1e\\x16a\\x89/\\x80\\xc0\\x02\\xd6\\x00B\\x19~\\x11a\\x18#\\xc4\"\\xc1\\xfcJ,L\\xc0\\x04dt\\xa1\\x06\\xae\\xe8\\xf2t\\x0c0\\x82\\x15\\x00\\xda\\x1bO8\\xaa%\\xcc\\x0c\\xd5t|\\xe1\\n\\x8dv\\xb4E\\x06y\\xbf6\\xb3A\\xaf\\xff(A\\x06^ \\x002lb\\x02d \\x011\\xb8\\x91\\x00@g\\x02\\x0f\\x1c \\xf3\\xa8-@\\xecR\\x94\\x01\\x13\\xa9\\x06MH.\\x12\\x11\\x89xD\\x1bN\\xa4E.J\\x00\\t\\\\\\x0c\\xc1\\x1dJ\\xa0\\x9a!J\\x80\\x8a^\\xf3\\xe0\\x06n\\xe0\\x00\\x0f2\\x81\\xd4C\\x13\\x1b\\x08\\x96p\\xc0]\\x1dM\\x14X\\xbc\\xc4%\\xad\\xa6HC\\x14B\\x83c\\xdc\\x81\\x11\\xd2\\x90B8\\xa4!\\x8dD@\\xa1\\x0c\\xcb\\x18\\xf6\\xb9\\xcb\\xe0\\x80f:\\xfa$k\\x91\\xca`\\xfc\\xa6\\x15S,!\\x08cH\\xc4\\x18\\x82\\x10\\x84\\rP\\x01\\x1b\\xe7X\\x86\\xa1\\x89m\\x01E_\\xe2\\xe0\\x8eN\\x0b\\x1c\\x13\\xc2\\x8eB,!\\xdf\\x89\\xafp\\xc3\\x12\\xc2\\xb1L\\x14\\xda\\xe0\\x0b_\\xe8\\x04\\xc7\\x81\\xd0\\t\\x94\\xf4#\\xbe\\x93\\xf9L?v\\xa0\\x0b]\\x8c\"&\\x90pb?h\\xc1\\x06H\\xc4\\xb7\\xb3\\xb7x\\xe3U$@\\x99,\\x98\\x01\\xe2\\xd9\\x90B\\x10\\xd4\\xb0\\x81\\x06\\xd7\\xc5\\x01$\\xdd\\x85\\xcc\\x89\\xed[\\xab\\x1c\\x1d\\x8eh\\xc1\\x05n@s\\x15\\xbb(\\xa4\\x19\\x0e\\x0fB8\\x12\\xe1\\x0c5H\\xa3\\x1d\\t\\xa9\\xc6(5.\\nz\\xd0\\xc3\\x02\\tQ:b\\xd0\\xd2\\x0f6\\xdc\\x02\\x1d\\xa1P\\x01\\x00V\\x11\\x02e0\\xe0\\xf0\\x87\\xf7\\x842\\xae\\x87\\x8f\\x14\\xb0C\\x02\\x12P\\xfaAB\\x11\\nsT\\xe3\\x11\\xeb0\\x834\\xb2\\x91\\r3\\xa8\\x01\\n\\xb6X\\xb7\\xbc0\\xb1\\x8c\\xa3n= \\x00;'" - ], - "Type": "varbinary" - }, - { - "AllowedValues": null, - "Definition": "The ThumbnailPhotoFileName column in the SalesLT.Product entity contains filenames for thumbnail images of products. The filenames typically follow a pattern that includes the product name and often the term \"small\" to indicate the thumbnail size. These filenames are generally in a GIF format and serve as references to the product's small image files.", - "Name": "ThumbnailPhotoFileName", - "SampleValues": [ - "hotrodbike_f_small.gif", - "innertube_small.gif", - "bikepump_small.gif", - "racer02_yellow_f_small.gif", - "tail_lights_small.gif" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The rowguid column in the SalesLT.Product entity contains unique identifier values for each product in the form of Global Unique Identifiers (GUIDs). These GUIDs follow the standard 36-character format, including hyphens, which ensures that each value is globally unique. This column is typically used for replication and unique identification purposes across different systems.", - "Name": "rowguid", - "SampleValues": [ - "DE305B62-88FC-465B-B23D-D8C0F7E6D361", - "ACDAE407-B40E-435E-8E84-1BFC33013E81", - "E9C17BE7-F4DC-465E-AB73-C0198F37BFDD", - "0C548577-3171-4CE2-B9A0-1ED526849DE8", - "E378C2F3-54F6-4EA9-B049-E8BB32B5BDFD" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The ModifiedDate column in the SalesLT.Product entity contains timestamps indicating the date and time when a product record was last modified. The timestamps follow the standard format of 'YYYY-MM-DD HH:MM:SS.SSSSSS', which includes both the date and precise time down to microseconds. This column is used to track and audit changes made to product data, ensuring that modifications can be recorded accurately.", - "Name": "ModifiedDate", - "SampleValues": [ - "2008-03-11 10:03:55.510000", - "2008-03-11 10:01:36.827000" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.Product entity contains detailed information about products in the inventory, including identifiers, names, and specific attributes such as color, size, and weight. It also tracks financial details like standard cost and list price, along with metadata such as product categories and models. This entity includes temporal data like sell start and end dates, as well as discontinuation status. It is useful for answering questions related to product availability, pricing, categorization, and lifecycle.", - "Entity": "SalesLT.Product", - "EntityName": "Product Details" + "Entity": "SalesLT.Product", + "Definition": "The SalesLT.Product entity contains information about products available in the inventory, including details such as the product's name, unique identifier, pricing, physical characteristics, and associated categories and models. It also includes sales-related dates such as the sell start and end dates, and discontinued date. This entity is useful for answering questions related to product identification, pricing, availability, and categorization. Additionally, it can provide insights into product stocking, sales trends, and inventory management.", + "EntityName": "Product Information", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.ProductCategory", + "ForeignKeys": [ + { + "Column": "ProductCategoryID", + "ForeignColumn": "ProductCategoryID" + } + ] + }, + { + "ForeignEntity": "SalesLT.ProductModel", + "ForeignKeys": [ + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + }, + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + } + ] + }, + { + "ForeignEntity": "SalesLT.SalesOrderDetail", + "ForeignKeys": [ + { + "Column": "ProductID", + "ForeignColumn": "ProductID" + }, + { + "Column": "ProductID", + "ForeignColumn": "ProductID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address" + ], + "Columns": [ + { + "Name": "ProductID", + "DataType": "int", + "Definition": "The ProductID column in the SalesLT.Product entity contains unique numeric identifiers for each product. The values in this column are integers and serve as primary keys to uniquely distinguish each product within the database. This ensures that each product record can be individually accessed and referenced using its ProductID.", + "AllowedValues": null, + "SampleValues": [ + 829, + 888, + 893, + 996, + 680 + ] + }, + { + "Name": "Name", + "DataType": "nvarchar", + "Definition": "The Name column in the SalesLT.Product entity contains a list of product names sold by the company. The names often include a combination of product type descriptors, sizes, colors, and model numbers. The values tend to have a pattern where hyphens separate different attributes or features of the product (e.g., type, model, color, size). These names help in uniquely identifying and categorizing different products in the inventory.", + "AllowedValues": null, + "SampleValues": [ + "Touring-Panniers, Large", + "Mountain-500 Black, 44", + "Touring-2000 Blue, 54", + "LL Road Pedal", + "HL Touring Frame - Yellow, 54" + ] + }, + { + "Name": "ProductNumber", + "DataType": "nvarchar", + "Definition": "The ProductNumber column in the SalesLT.Product entity contains unique identifiers for each product in the inventory. The values follow a specific pattern, typically consisting of a two-letter prefix that may indicate the type or category of the product, followed by a combination of letters and numbers. This column is used to distinguish between different products and may include information such as size or model within the identifier.", + "AllowedValues": null, + "SampleValues": [ + "BK-M18B-48", + "FR-T98U-50", + "BK-R64Y-40", + "TI-R092", + "FR-M21S-40" + ] + }, + { + "Name": "Color", + "DataType": "nvarchar", + "Definition": "The Color column in the SalesLT.Product entity contains the names of colors or color combinations that correspond to the colors of the products. The values are typically single color names or a combination of two colors, separated by a slash. These values are descriptive and help identify the visual appearance of the product items in the database.", + "AllowedValues": null, + "SampleValues": [ + "Silver/Black", + "Black", + "Yellow", + "Red", + "Grey" + ] + }, + { + "Name": "StandardCost", + "DataType": "money", + "Definition": "The StandardCost column in the SalesLT.Product entity contains the standard costs of products in a precise decimal format. Each value represents the cost of a product, generally used for accounting and budgeting purposes. The costs vary widely, indicating that the products may range from low-cost items to high-cost items, reflecting diverse product types and categories within the entity. The values in this column are useful for financial analysis and cost management within the pricing and sales operations.", + "AllowedValues": null, + "SampleValues": [ + "11.2163", + "8.2459", + "23.3722", + "1251.9813", + "10.3125" + ] + }, + { + "Name": "ListPrice", + "DataType": "money", + "Definition": "The ListPrice column in the SalesLT.Product entity contains the retail prices of products. The values are numeric and represent the price in a currency format with four decimal places. These prices are likely used for sales and pricing references within the database. Typically, they are positive and represent the cost at which a product is listed for sale to customers.", + "AllowedValues": null, + "SampleValues": [ + "32.6000", + "112.5650", + "2.2900", + "24.4900", + "59.9900" + ] + }, + { + "Name": "Size", + "DataType": "nvarchar", + "Definition": "The Size column in the SalesLT.Product entity contains values representing the size specifications of products. The values can include both numerical sizes and alphabetical representations of size, such as 'L' for large and 'M' for medium. The numerical values typically represent specific measurements, which could vary depending on the type of product. The column is used to categorize products based on their size attributes, facilitating inventory management and sales tracking.", + "AllowedValues": null, + "SampleValues": [ + "L", + "42", + "40", + "52", + "M" + ] + }, + { + "Name": "Weight", + "DataType": "decimal", + "Definition": "The Weight column in the SalesLT.Product entity contains numerical values representing the weight of each product. The values are measured in a consistent unit, most likely kilograms or grams, given the decimal format. The weights vary widely, indicating that the products have different sizes and mass. This column is essential for logistics and shipping calculations in the product database.", + "AllowedValues": null, + "SampleValues": [ + "1451.49", + "9584.36", + "1256.44", + "6699.52", + "6862.82" + ] + }, + { + "Name": "ProductCategoryID", + "DataType": "int", + "Definition": "The ProductCategoryID column in the SalesLT.Product entity contains numerical identifiers that represent specific product categories. Each value in this column is a unique integer that corresponds to a particular category under which a product falls. This column is essential for organizing products into various categories to facilitate better classification and management of the product inventory within the database. The values are integers and are likely used as foreign keys to link with a product category reference table.", + "AllowedValues": null, + "SampleValues": [ + 40, + 31, + 25, + 38, + 23 + ] + }, + { + "Name": "ProductModelID", + "DataType": "int", + "Definition": "The ProductModelID column in the SalesLT.Product entity contains numerical identifiers that correspond to different product models. Each value in this column uniquely identifies a specific model of a product. This column helps in linking the product to its detailed model information within the database. The values are integers and do not follow any specific sequential order.", + "AllowedValues": null, + "SampleValues": [ + 35, + 117, + 53, + 16, + 45 + ] + }, + { + "Name": "SellStartDate", + "DataType": "datetime", + "Definition": "The SellStartDate column in the SalesLT.Product entity contains the date and time when a product began being available for sale. The values are in the format 'YYYY-MM-DD HH:MM:SS', indicating the precise start date and time. This column is used to track the commencement of sales availability for each product. The sample values suggest that product sales starts typically occur around mid-year.", + "AllowedValues": null, + "SampleValues": [ + "2007-07-01 00:00:00", + "2006-07-01 00:00:00", + "2005-07-01 00:00:00", + "2002-06-01 00:00:00" + ] + }, + { + "Name": "SellEndDate", + "DataType": "datetime", + "Definition": "The SellEndDate column in the SalesLT.Product entity contains the end date and time when a product will no longer be available for sale. The dates and times in this column are formatted in the standard datetime format (YYYY-MM-DD HH:MM:SS). This column helps determine the product's availability period and is used to manage product lifecycle and inventory. The values generally reflect specific cutoff points for product availability.", + "AllowedValues": null, + "SampleValues": [ + "2007-06-30 00:00:00", + "2006-06-30 00:00:00" + ] + }, + { + "Name": "DiscontinuedDate", + "DataType": "datetime", + "Definition": "The DiscontinuedDate column in the SalesLT.Product entity contains the date when a product was discontinued and is no longer available for sale. This column holds null values for products that are still active and have not been discontinued. The data type for this column is typically a date or datetime, capturing the specific point in time when the product was marked as discontinued. This column is useful for filtering products based on their availability status by checking if the date is null or a specific past date.", + "AllowedValues": null, + "SampleValues": [] + }, + { + "Name": "ThumbNailPhoto", + "DataType": "varbinary", + "Definition": "The ThumbNailPhoto column in the SalesLT.Product entity contains binary data representing a thumbnail image of the product. The data is typically in formats like GIF, and it includes the binary encoding of the image file. This column stores the actual image content in byte array format, making it suitable for representing small-sized visual previews or thumbnails. The images can be decoded and rendered as visual representations of products in various applications.", + "AllowedValues": null, + "SampleValues": [ + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\xe3\\xe3\\xfc\\xb8\\xbb\\xc8\\xac\\xad\\xb0UUZo\\x83\\x8f\\xf9\\xfa\\xfd\\xf4\\xf6\\xfe\\xed\\xed\\xfe*FS\\xe2\\xe5\\xea\\x9a\\xa6\\xb3Ml\\x86\\x99\\x9b\\x9e\\xcb\\xd0\\xd5\\xdc\\xe2\\xeb\\xbb\\xbd\\xbe\\x87\\x8b\\x93\\\\fs\\xd1\\xd1\\xd3\\xf9\\xfa\\xfa\\xc5\\xc9\\xe3\\xe9\\xe9\\xfd\\xdc\\xdc\\xe9gku\\xdc\\xde\\xe2\\xaa\\xab\\xad;\\x84\\x87\\x8b\\xb2\\xae\\xae\\xc7\\xcb\\xd5\\xea\\xeb\\xfaegl\\xfa\\xff\\xff-/5\\xf3\\xf4\\xf6_}\\x8ey\\x9e\\xb3\\xc0\\xbf\\xcb\\xf2\\xf3\\xfboz\\x8b\\xfd\\xfd\\xfa\\xf3\\xf8\\xfaAFh\\x91\\x9f\\xaf@[\\x90\\xef\\xf0\\xfb\\xe4\\xe3\\xe6\\xe3\\xe4\\xf2\\xf2\\xfa\\xfd\\xb5\\xb7\\xb6\\xec\\xea\\xeb_^c\\xf4\\xf3\\xfe\\xed\\xee\\xf7\\xeb\\xec\\xf1\\xb7\\xb8\\xbawz\\x7f\\xd7\\xd9\\xe8\\xe5\\xe7\\xe8\\x8d\\x8e\\x91\\xf0\\xf2\\xfd\\xe8\\xe9\\xe786?C\\xa7\\xa7\\xaa\\xfd\\xfe\\xfe\\xfe\\xff\\xff\\xfd\\xfe\\xff\\xfb\\xfe\\xfd\\xfd\\xff\\xfe\\xfc\\xff\\xff\\xfc\\xfe\\xff\\xfc\\xff\\xfehgg\\xfe\\xff\\xfc\\xe2\\xe4\\xf6\\x9e\\x9c\\xa8\\xf1\\xf1\\xfe~\\x7f\\x83\\x9c\\x9a\\x98yu\\x82\\x9a\\x97\\x97nw\\x80\\xaa\\xa6\\xa7\\xc7\\xc8\\xc7\\xf8\\xfe\\xff\\xf9\\xfb\\xfe\\xfa\\xfd\\xfd\\xec\\xeb\\xf3\\xea\\xec\\xf7\\xd1\\xd7\\xe0\\xeb\\xeb\\xf3\\x8f\\x90\\x8e|\\x8a\\x9ea\\x7f\\xb7k\\x85\\x9f\\xe6\\xe6\\xf9\\x9d\\x9f\\x9a\\xf9\\xf8\\xf3\\xde\\xde\\xe0\\xf1\\xf3\\xf2rps\\x1f \\'W_xM`}\\xa7\\xa8\\xa6\\x8a\\x84\\x86\\xf7\\xf7\\xf6uro\\xe9\\xe6\\xe6fx\\x9c\\xef\\xef\\xf0[j\\x95\\xf3\\xf3\\xf5\\x1aDm\\x1d?Upmp\\x8a\\x98\\xa7\\x84\\x8a\\xa9\\xc5\\xc4\\xc6\\x9f\\x9f\\xa2\\xfc\\xfd\\xfb|{\\x89\\xee\\xee\\xea\\xfd\\xfd\\xfexyx\\xa1\\xa0\\xa0\\xfb\\xfb\\xff..3nx\\xa5\\x96\\x97\\xa6\\xe1\\xd7\\xd5\\x84\\x97\\xc0\\xc1\\xc1\\xd7uz\\x98\\xd7\\xd7\\xef\\xd6\\xd6\\xf8\\xd1\\xca\\xc6\\xff\\xff\\xff\\xfc\\xfe\\xfe!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cHp`-\\x7f\\x08\\x13\"\\xace\\x0ba\\x9aq\\xfer\\x15\\x9cH\\xb1\\xa2\\xc5\\x8b\\x18)\\x1eT\\xa8p\\xdc\"y\\xbdbx\\x08b+\\xa3\\xc9\\x93(+n\\xe4\\xd8\\xf0\\x8f(\\x10+\\x0c\\xb9\\x91\\xe0/\\xa5\\xcd\\x9b\\x18W*\\xb4\\x05\\xef\\x08\\x1ftZ\\\\I\\xa9\\x99\\xb2V\\xad\\x7f\\xb8\\xfe\\x1d5\\xca\\xb4\\xa9Q\\x9c\\x16urD\\x18\\xca\\xd8\\x92\\t%S6\\x9c\\xca5!T\\x95]\\x116<\\x13\\x81\\x9d?^\\'\\x19\"\\xfc\\x84\\x02\\xc5\\xa7OW0aRA\\x92\\xe3W\\x8da\\x13\\xb2\\x12\\x05\\xc5\\x96D\\x93\\x1b\\x85l\\t#\\xc9E\\x8f\\xc3=\\\\\\xb8p`\\xf7\\xeeD\\xa7N\\xfdM\\xc0!j\\x07\\xd1\\x93\\xb6\\x96\\x11\\xc1\\xe2\\xef\\xdb\\x872\\xe7\\xce\\x81\\x99\\xc4(Hc\\xc7\\'\\xfduH\\x04\\xe5\\x96.\\x9bR\\x15\\xb8X0\\t\\x13W\\xd4\\'s\\xf9\\x13S\\xc4H\\xc2\\xbf\\x19k\\x8d\\x18\\xd8\\x90\\xcf\\x8fPaqc\\\\\\xb6\\xcc\\xd6\\xae\\x05`\\x12\\x11\\xe2\\xd0\\xe17\\xae\\xa4*\\x8f\\n\\xf4\\xe7\\x07\\xc8\\x87\\x85J\\x13\\xda\\xff\\xca\\xaa\\xbc\"\\xaee\\xfe\\xd6\\xb8\\xe0\\xb6M[\\x88/\\x03X\\xac\\x11\\xaf\\xfd\\xf1\\xf6\\x07\\x1ep\\\\\\xf3\\x97ue\\xfd\\xf2\\x16\\xf9\\xa3\\x00\\x18\\x88(\\x91E\\x06U|\\x11\\x826+\\x00\\x91\\n}\\x15\\xf9\\xa3I\\x11\\x03L\\x80\\x10\\x806\\xf9\\xa3Bau|!\\x0cB\\x9d\\x98\\xa1\\xc5{\\x90\\x18r\\x06\\x13\\xe2\\x19t\\xd0\\x04\\xd0}w!\\x86\\xb9a!\\x80\\x16\\xc6\\xf8cF\\x08P(\\xb4A\\x08\\xef\\x85\\x00B\\x12\\x1e@4\\x953\\xe6,\\xe0\\x87W0f\\xc4\\x8b?\\x10Hb\\x88o\\xfe\\xdc\\x10B\\x0c\\n]0\\xa5\\x12-\\xf0\\x08\\xc9\\x05\\xa6\\x94\\x93P\\x10\\x04\\x9c\\xa3\\xc0eIb\\xd4P8\\xc6 `\\xc4\\x03\\xfc\\xf9\\xc3A\\x08J$\\xe4\\xcc\\x17\\x1a\\xf8s\\x85)\\x86\\xb8\\xf7\\xc5\\x1eq\\x98\\xe0\\xcf\\x0eE\\x14q\\x02\\x99e\\xfe\\xb3\\x15G\\x91L K\\x0f\\x04\\xbc\\x88\\x10\\x03!\\xa8\\x92\\x90%!\\x00\\x91\\x90\\x1d@\\x0c\\xa0\\xe0\\x17e$\\x92\\xc7\\x0c\\x0f\\x16t\\xe8T\\xc0\\xa5\\x84\\xd02|\\x94\\x90\\x01\\x03f|\\xf0\\xc0\\r?0\\xff\\x80@\\x03\\x97\\x91\\x81\\x10\\x0e!\\x98\\x81\\xd0\\x9c{\\x14\\x10QB\\xd7\\xdc\\xa0\\x85{+\\x98R+B\\xf0\\xa4R\\xc2\\x19\\xac\\xb2p\\x82\\x04\\x9c\\xf9\\xf3\\x1fF\\x08I\\xc1\\x80!Z\\xec\\x01\\x826\\xdc\\x82 J6\\x10\\xb8\\xa0[A\\x08\\t\\x13\\x02\\x07\\x08E\\x13\\x82Y\\x03\\xe9\\x86\\x90\\x19_\\x9c\\x12\\xaa\\xa1\\xfe`\\xe1\\xc1\\x0c\"\\xe4\\xd1\\xca\\x1e\\xf4\\xb4\\xe0C\\x1e\\x03\\xfc H\\x16\\xd2f\\xe4O\\x17\\xaa\\xb8\\xe1C\\x0b{h\\xe0\\x86\\x08n\\x102\\x8b\\x088\\x84\\xe1\\xc2\\x0f5\\x90i\\xab?N\\xe4\\xeaO\\x1bE\\xb4p\\x05\\xa1\\xfe\\xc8\\x01\\xc9\\r\\x05l5\\xc1\\t+\\xec\\xd1\\x02=\\x89\\x94\\xf1\\xb0\\x08Z$\\x02\\t$edcY\\xa9\\x05\\xe9V\\xc2\\x00\\xff\\xbaaH\\x0c\\xad\\x02q\\xcc\\x1f\\xe0\\xc0R\\x8c<+hS\\x86\\x9f\\x7f\\xb9[r\\x08,\\xf8\\x93N\\x08\\x0c\\\\\\x86^\\x13\\xdaTaL\\x00\\xa80\\x92\\x06\\x14y\\xd0\\xd3\\xca\\n\\xc2tc\\x02%\\xeb\\x04`\\x8a\\x18qT\\xa1\\x81\\x0fZ\\xdc`!E\\xba\\t\\xe0F\\x1en\\xc4\\xff\\xc1\\xc0\\x03:4\\x11\\xc4(\\xfe\\xa4\\x10\\xc7\\x00\\x7f\\x0c\\xe3\\xca, \\xf8\\xf0\\x9dD\\x87\\x8e J\\x08g$\\x93\\x08\\x08\\x91\\\\\\xe6\\x8f\\x07_l2\\x88\\x13\\xd0\\x90\\xa5\\x01\\x08\\x030 \\xc1\\x18\\x9c\\xf8\\x03\\x03\\x08\\x93y\\xcf\\xfe\\x00\\xa1E\\x1e+\\xac\\xd9\\x01\\x19l 1\\xc1*\\xfeX\\xe0\\x817\\xe8\\xfc\\xf1\\xc0\\x0fU\\xec\\x01\\xc9w\\xed\"t\\xc4\\x00!\\xc8\\xb2\\xc4\\xb9\\x9a\\xaf\\x00\\x89\\x11\\xf5L\\xa3A\\x19\\xf4\\xc8\\xcd\\x02\\x150\\x14P\\x81-h,S\\x81\\xfa\\xfe\\x18\\x80\\x8a)\\xc2h\\xa0A\\x1c#\\x13\\xe4O\\te\\xe4a\\x08\\x10\\x8c\\xcc\\xf3M*\\x06\\xe0\\xc1\\x04\\xd8\\x90\\x0b@\\xb0B\\x1f\\x99\\xd8A\\x14R`\\x86\\x15\\xf8\\xa0\\x15~\"\\x83@\\xdcu\\x05\\x11\\x84@\\x01\\x99\\x00A\\x13\\xfc\\x81\\x9eRhc\\x00%X\\x02\"\\x16\\x90\\x08\\x1f\\xc0\\xc2\\x12\\xd1p\\xc6\\x01`\\xf0\\x86\\x7f\\xa0!\\n\\x15\\xa0A\\xfa*\\xe0\\x8fRP\\xe2\\x06\\xb3\\xc8\\x83\\xa4^\\xf3\\x0f\\x7fXa\\x00\\x1a0D\\x06\\xff0\\xe0\\x8f\\n\\x14\\xa0\\x0b]\\xa8\\xc0\\x15`\\xb0\\x0c6XA\\x0f\\x9a\\xe8\\x03 \\xfc\\x11\\x8b\\x06\\xd2C\\x04V\\xb8\\xccV\\xca\\xa1\\x85/d\"\\x047\\xf0\\x07.r\\xf7\\x05\\'\\xb0\\x82\\x06\\xdcxA\\x0f\\xca@\\x88$\\xd4\\xc1\\x01\\xf0\\x00\\x005\\n\\xf0\\xc2\\n \\x01\\x061\\xa4\\x01\\x1b&`\\x03E\\xc8\\xcfO\\xdb\\xc1\\xc1\\xc4hA\\x024\\x14\\xc0|Y`\\xc5/\\xa8p\\x00e\\x8c\"\\x00/\\xa0\\xc0(j\\x91\\x8by\\xc8\\xc0\\x0c\"\\xa0\\x07\\x0e\\xb4\\x98\\x90\\'\\xe4AA\\xda\\x10R\\xf3t\\x85\\x0cBx\\x0e\\x03fH\\xc4\\x0f\\x1a\\xd0\\x06\\x03\\xf0\\xc3\\x00\\x8dX\\x06\\x1a`0\\x05$\\x18\\xe0\\x00\\xed\\x00\\x84\\'L \\x87=\\x88\\x02+\\xe9\\x19\\xc0,\\x14\\xe1\\xa7 \\x00\\x80\\x062<\\x02*\\x1aa\\xc8`\\x88\\xe3\\x05c\\x88H!`0\\x02J\\xfc \\x11Z\\x18\\nq\\x12b\\x85V\\xf0\\x08\\x02\\xfeP\\x836\\x08\\xc1\\x82 \\xcc@\\x03\\xdc\\x90\\x06\\x11\\xfc\\xc1\\x88*\\xb8A\\x01m\\xa8@#\\x0e\\x10\\x054\\x00\\xa0\\x11\\x06\\x80A-\\x0ep\\xff\\x00\\xd5|@\\x0b\\xf4`\\x93?X\\xa0\\x85\\x01\\x08\\xc0\\x02h\\xa0\\xc1\\x11\\xa8a\\x80J\\xb0\\x01\\x0b\\x168\\xc0<(\\xb0\\t\\x05\\\\\\xe2\\x1fl\\x80\\x01\\'`0\\x8e\\x0c\\x0c\\x80\\x1e\\xec\\x12\\xc8\\xa8\\xa4\\x90%m\\x14\\x80\\x05\\xda\\x10\\x816 \\xa1\\x8d/\\xcc\\x02\\x11\\xe4X\\'\\rXP\\x86\\x19\\xac\\x01\\x00h\\xb0\\x05\\x00\\xa6@\\x05N\\xe4\\xe2\\x00\\x04\\xb4C(J\\x80\\x0e\\x10\\xc4A2r\\x98E\\x0cJ\\xe0\\x0f\\x1aT \\xa1\\x8d(\\x04\\'\\x0c\\xd0\\x01<\\xf8\\x03\\x1f\\x9b\\xa0\\x15?\\x0f`\\x00[d\\x81\\x121\\xd8\\x83#r\\x01\\x9c\\\\\\xa8E5 \\x00\\xa3!|\\x80\\x03\\t\\x18\\x02\\x04\\x89\\x18\\xdd\\x17\\xb4\\xa1\\x85\\x0b\\xd8\\x83\\x03\\x00[\\x82\\x0cR1\\x85)\\x14\\xe2\\xa7\\x80P\\x01+\\xb0\\xe1\\x8fk0\\xc0\\x84VH\\xc3\\x00\\xdc\\xc0\\x80\\x14\\xdcb\\x1e\\xf00@\\x05rP\\x016\\x00\"\\x01:@\\x854\\x06\\xd1\\x016\\xa0!\\x18\\xf9\\xbcC R\\xc0\\x00-\\x10\"c\\x13\\xb9\\x05BHP\\x85\\x0b8!\\x06bH\\x80\"\\x08a\\x08A\\xffH\\xc0\\x03\\xaa\\x90C\\x19Z\\xb0\\xad/TA\\tg\\xa0@#\\xfcq\\x80F\\xd4`\\x0cT\\x00\\x04\\x0c\\xca\\xe0\\x0f\\xeb\\xc0\\x02eS\\x1d\\xba\\xe0\\x0f\\xf1 V\\x02 \\x01o\\xd0\\x04\\xb6\\xa0\\x06XP\\x03\\x9c\\x00\\x08o\\x80\\x04\\x8d`\\x05j\\xe0\\x07O0\\x04Q\\xe0\\x0f:\\xb0\\x013\\x00\\x02\\x8a\\xe0n\\xf6\\xd3\\x00\\x1b\\xe0\\x07\\xba\\xd0\\x10\\rQ\\x02\\x13\\xc3\\x0e\\xce\\xf0\\x0b\\x18\\xf0\\x0b}\\xf0\\x08f\\x00\\x02?0\\x01\\xb5\\x10\\x0c\\t\\x80\\x07\\xf0\\x00\\x03\\x85@\\x03\\x07\\x80\\x01\\x1e\\xd04N\\x10\\x11=t\\re0\\x0b?\\x00\\x04\\xf3\\xa1\\x06\\xd8`\\x07\\xd8\\x00\\x03\\xd8\\x95O]\\x80\\x05\\x0fR\\x03\\xd4 \\x05\\x8b\\x80\\x03t\\x83\"\\x15\\x91\\x0bG \\x05N\\xc0\\x02\\xb7@\\x10\\xba\\xe1\\x04- \\x02\\'\\x90\\x000\\x80\\x06*\\x90*7 \\x00X\\xb0\\x0bl\\xf0\\x04\\x9e\\x80\\x06\\xbe r\\x0e\\xb0\\x01x8\\x0b\\xf2\\xff\\xd7C\\x1e\\xb0\\x07e\\x80\\x03\\x19\\xb0\\x03\\x13p\\x05j\\x00\\x0f1\\xc4\\x03P\\x88\\rM\\xf0\\x04O\\xe0\\x0f\\x82p\\x068\\xa0\\x01-\\x00Ho\\x18%\\x1a0\\x00.\\xd7C\\xb1P\\x05> \\n\\xa6\\x90\\x02\\x1ab\\x07M0\\x01X\\x10\\x04\\xcb\\xc0\\tX\\x80\\x05\\x00`\\x00\\xfe\\xd0\\x00\\x1e\\xf0\\x03>\\x10Pd\\xb2\\x0b\\xfe\\x00\\r-\\xa0\\x05\\xc2\\xf0\\x01\\xeb \\x05\\x13\\x90\\x05\\t\\xc5\\x03\\xcaP\\x01\\x13\\x80\"\\xd7\\xf0\\x00\\x1f\\xf0\\x03Z\\x00\\x02\\xf2`\\x85\\xb3\\x17\\x04k0\\x0e\\xb9\\xb0\\x0c\\x041F)\\xa0\\x05p\\x97\\x01$\\xd0\\x01\\xf0\\xc0\\x04\\xcb\\xc0\\x04W0\\x019\\x10\\x04]\\x90\\x05C\\x80\\x0c@\\x10\\x07\\x0bc)<\\xd3\\x10\\xca\\xa8?7@\\x0b%\\xd0\\x01\\xcd@\\x03\\xd4\\x84\\x06\\xed \\x01\\x0f\\x00\\x04\\x1c\\xe0\\x08\\x89\\xb0\\x07\\x8f\\x93\\x11[A\\x11\\xb6\"\\x01n\\x00\\tn \\x0c\\x1e \\x01\\xf7`\\r50\\x01\\x13\\x10\\x08\\xdfp\\x0ft\\xb0\\x08\\x8aP\\x05\\x0c\\x93\\x01\\xe0\\x88;\\x8bP6T\\x86\\x03, \\x00\\x1bp\\x02\\\\0\\x07s\\xbe \\x0f8\\x90T \\xa0\\x05L\\xc537\\xb1\\x0bc\\xa4\\x06r@\\x0f> \\x02N0\\x0cs\\xc0\\x05\\xfd \\x0b@\\xb0\\x08\\x7f\\x10\\x03U\\xc0R\"\\x80\\x0c-\\xf9\\x18\\xe9\\x11\\x0f>\\xd08U\\xe0\\x08q\\x00\\x05N\\x10\\x07\\x86\\xd0<\\xda\\xb0\\x07\\x8a\\xd0\\x05\\x05\\x83\\x1bct\\x04\\x1e\\xa0\\x92\\xfe\\xa2\\x05U\\xb0\\x02+0\\x00\\x84p9\\xda0\\x0bf@X\\x191F\\xd6\\xa7\\x08n\\xc0[ \\xd0\\x02\\x90@\\x0f\\x90\\x00070\\x14\\xfcA\\x1e8q\\x1eGp$\\tq\\x05\\x0f\\x10\\x07e\\x00\\t\\xdb\\xc2-\\xf40\\x0b\\x8e@\\x0b\\xa18-\\x17\\xa12i\\xd0\\r\\xd0\\x00\\r\\x1c\\x10\\x88\\x1dp|\\x899\\x1e\\xa8q\\x1dR\\x93\\x10\\xe5 \\x01\\xab\\xc2\\x00\\x1e@\\x02h\\x99\\x10\\xe68\\x11\\x01\\x01\\x00;'", + "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\x95\\x94\\x93\\xfd\\xfd\\xfdvll\\x8c\\x8b\\x8a\\xe6\\xe6\\xe6z=N\\xb8\\x84\\x93\\xb2\\xb2\\xb2\\xf8\\xf8\\xf8\\x87\\x1a8\\xa3\\x9d\\x9c\\xc6\\xc6\\xc6\\x91\\x8d\\x8e\\xaa\\xaa\\xaajab\\xe4\\xe4\\xe4\\x99\\x99\\x99\\xfa\\xfa\\xfaSRQ][YyGR\\xdd\\xdd\\xdd\\x88\\x82*\\x8e\\x83\\x83\\x81{#\\xc2\\xc2\\xc2\\xe2\\xe2\\xe2qpl\\xf3\\xf3\\xf3\\xee\\xee\\xee\\xda\\xda\\xda\\x9b\\x92\\x92\\xae\\xae\\xae\\xd7\\xd7\\xd7QON\\xca\\xca\\xca}zy\\x80~z\\xd1\\xd1\\xd1\\xb8\\xb8\\xb8ysr\\xcc\\xcc\\xcd\\x86*CLLL\\xdc\\xdc\\xdc\\xb4\\xb4\\xb4\\x9f\\x9f\\x9f433\\xac\\xa4L\\x98\\x0c3\\xb8\\xa7\\xac\\xab\\xa6\\xa4\\x85\\x83\\x82\\x92\\x83\\x86???\\xce\\xce\\xcev\\'m*\\x8b\\x16\\xe9\\xda\\xa5n\\x9d\\xc6\\x8dJ\\x97\\xea\\xdd\\xabz\\x116l\\xa7d\\x1d\\x88`pJ\\xa5pe\\xa0\\x16+\\x03) \\x90\\xf3`\\t\\xdbb\\xa3i\\x93\\xb2e\\xfa\\xf6\\xa9\\\\\\xa9u\\xab\\xe2\\xcd|\\xb0R\\x05\\x00\\x10R\\xc8je\\n\\xd6\\xab\\x181h\\xe5\\xba\\xc5*\\x85\\xb7%d\\xe2i\\x02U\\xf6\\xa8Z\\xa5m\\x9b\\xc2\\x85:w\\xaa]\\xabyy\\x0f\\xff\\xac\\xe4\\xa8\\x93,T\\xc8\\x13\\xa8\\xc0e\\xcb\\x81?\\x7f\\x14b8\\x07\\xb7\\xc4\\x11\\x01\\x0e\\xd5c?\\xce^{r\\xf7\\xdc\\x97\\x85\\xa7\\x17_\\x08@\\xe0J\\x0cI\\xbc\\xb0\\xc2\\x04^\\xbc\\xf7\\x9e-1\\xac\\xc2@\\rQ\\xd0a\\x8d(\\xafY\\'\\x1bd\\xda\\xd9F\\x99w\\xbaa6`%7ha\\x11(C\\xac\\x82\\xe0\\x0b\\x9e\\x0c2\\x88\\x04\\x0e\\xfa\\x13\\x83+\\x10\\xf0\\x00\\x0e$\\xf1p\\x92\\xa1~\\xd8\\xd1&\\x19w\\xb8Y\\x06\\x1eo\\x95\\xd0p\\xc5\\x06\\xd9\\x84\\x14L\\n1\\x14\\x12\\xc4\\x15at\\x92\\x1a\\t\\xe8D\\x12\\x03jR,\\xb2\\x84\\x0e\\x99P\\xd7\\xd8u\\xb3E\\xb6\\xddm\\x95}\\xb7[f\\x95\\x00 \\x82!\\x07\\xc0\\xa3\\xc1\\x92\\xac\\xf02\\t\\x0e\\x14\\xac\\xc2\\xca,\\xad\\xa4r\\xc0<\\x10@P\\x0e\\x03c\\xdc@\\x006\\xa3X\\x07&\\x87\\xfd\\x01Yf\\x88\\x02\\xf2\\xd4\\x90\\x12\"L\\xd0\\xc4\\x1dZ\\xb8\\x90\\x82)1\\xbc\\x02K\\r\\xb5\\xc8\\x99@\\x0c\\xb0\\xa8\\xb2J\\'\\x00\\x8cc\\x86\\x0b\\xf1X\\xd2\\xc1\\'\\x1c\\x84\\xe2*\\x07\\xd8d\\xff\\x13f\\x87\\xfe\\x05i\\xa6\\x88X5\\x84\\xc4\\x00X\\x10\\x00\\xc1\\x02\\x07\\x1c\\x90B)\\x0c\\x90p@,\\x85\\xbc \\x82\\x0f\\x14\\xa8@\\xcb+\\xad\\x04\\xdb\\t\\x04.\\xb0\\x13\\x82%\\x9at \\xce\\'J!\\xfa#\\x99 \\x06\\x88f\\x009Tp\\x0e#V B\\t\\x10\\xde|\\x90N\\x17\\xab\\xec\\xf1\\x88\\rB4\\xf8\\x9e\\n\\xa6@\\x90\\n,\\xb5\\xb82,\\x1cCd\\xa0\\x01\\x01\\x99h\\xc2\\x89H\\xa4\\x88\\xe9\\xe1\\x7fB\\x9e\\x99UC\\r\\xec\\x82\\xc5\\x06c\\xd0\\xd0\\x82\\x12?\\xf0\\xa1\\x807\\xaa\\xb8\\x11\\xc4\\x17\\x13\\xd8\\xe1\\xe0-\\xad@`\\x80\\x1bh\\xd0\\x82\\n,\\x06\\xe8\\xf9KNL\\x10LJ\\xc2\\xb4*\\x1a\\xee\\x90\\x03\\x06\\x00\\x8a$\\xc0\\x0c\\x00\\x04\\x14.\\xacs\\xc9\\x13\\xc4@\\xd0\\n*{\\xd0i\\xc4{R\\xc8\\x07\\x01,S\\xbc\\xe0\\xcb\\x19\\x05\\xa8\\x10C,\\xad\\xa4@\\x03?Hh`I&\\n\\xd7\\xba\\xa8\\xb89\\x8f\\xe2\\xcf\\x1dD\\x0c\\x00\\xc0\\x06 \\xc41B\\x9f}\\xeabJ,1\\xa8P\\x00.\\xb0@\\xc0\\x0f\\x82\\x92H\\xff`\\xaf\\x03x\\x1f\\xc0\\xc0\\x12X\\xc4\\xf3\\xc0)a\\xdb\\x0c \\xce\\x0f\\x07\\x80\\xc0%\\xfe\\xf4!\\x01\\t\\x86\\xc0qB\\np\\xa4\\xe2\\xca\\xa8}\\xd6`\\x00,1\\x94\\xec\\x8a\\x1bbd1\\x88\\xc8\\xf7\\xaa2@:\\n\\x10c\\x02\\x13\\x96\\x9cR3\\xb8\\x8b;\\xfcp\\x04\\x9c\\x04B\\xcd\\x069l\\xb0\\x812\\x0b\\xfc2\\x8b\\x1fW\\x9b\"Kj}\\x1e\\x00\\xc1y~\\xe0\\xf0\\xc7\\xd2\\xef\\xd1\\xb2\\x8a\\x00<|\\xc0G\\n\\xb0\\xcb\\x9e(\\xed\\r\\xe3\\x9ak;\\xd8\\x18QE=v$\\xc3\\x0c\\x1c\\x00t\\xf2J\\x12\\x81\\xa0\\xa3\\xc2-\\xa8\\xe0\\x99\\xc2\\x00p\\xebR\\xcb+\\xb4\\xa8@\\x01\\x05\\xaft\"\\x05=\\x8b\\xe0\\xc3\\r`\\x978\\xee\\xdd\\xaaQ\\x8e\\n\\xc0(.!\\x841,\\x0b\\x06\\xc9 \\x81.\\xfc\\xf0\\x08\\xd3\\x89\\xcc\\x16\\xb8\\xa0\\x85\\x01\\x82\\xe3\\n=\\xc5M\\x15\\xac\\x88\\x81)\\x18\\xb0\\x83\\xea\\xb1A\\x0b\\x87+\\xe0\\x87j\\xe7\\xbd\\\\!\\x80\\x13/\\x98\\xc1\\x04\\xd4\\x00\\x03|\\xa4\\xa0\\x13\\xf6xA\\x18&\\x00=\\x7f\\xdcB\\x16\\x10P\\xc5\\x1e\\xffb\\xc0\\nQM\\xabO\\x9d@\\xc1\\x0e.\\xa0\\x80\\' \\x81`*d\\xd8\\x01\\xc5S\\x89vd\\xc3\\x08P0\\x84\\x1a\\xee\\xa1\\x0e\\n\\xcc\\xe2x.\\xd8\\xc0 \\x1e\\x84\\x8aN\\x94\\x02Y\\xdcp\\xdf\\xb3\\xfa\\x95\\x02v\\x9ca\\x07\\xe9\\x98\\x01\\x16*`\\t\\x9amo\\x85\\xddC`\\x027\\x11\\x07*\\xe4\\xe0\\x08\\xf7\\xd8B>\\x90\\x13\\x0bU\\xa4\\xa2\\x13\\x030D\\x01f\\xa1\\xaf\\x18)\\xc5u\\x12\\xa9\\x18)\\xa0\\xc4#\\xc4\\x90\\x84+\\xf4\\xd0A\\xb8\\xb8RpR\\x90\\x8a}L`\\r\\x0c\\xe8\\x04qR\\xa1D\\n\\xdd\\xc1\\x03\\xa78\\x18:\\x176L\\xb2\\x8d\\xab\\x017\\xb4\\xda\\x1f\\x0c\\xe1\\x05#\\xdcTe\\xa90\\xdaq\\x88\\xd8\\x0c\\x1a8\\xa1\\x0b4\\x80\\x80\\x14x\\x10\\xc0\\x14\\xc0\\x83\\x14\\x1dXi:[\\xea\\xd4\\x01iB4*\\xa2\\x85\\x08\\x840\\x01\\xaa\\xda\\xc1\\xaa\\xf1\\x99E)d\\x80\\n\\n\\xf8\\xc3\\x01*hN) `\\x86\\xff]\\x00\\x1c\\xc4@a\\xb6\\xd4\\xca\\xd4\\x85\\xda.+\\x01\\x10V\\nT\\x11\\x83I\\xd8\\xe0\\n\\x82\\x90\\xc0 \\xea\\xea\\x05V\\x02\\xd1\\x14*p\\x907W\\xb1SW\\\\\\x80\\x04\\x0c\\xf8\\x81\\x16\\xe0aNMxr\\xadMeh\\xae\\x02`\\xa9\\x14\\xff\\x84\\x10\\rAxA \\xb2@\\x85\\xb9\\x9e!S\\x9d\\xc0\\x84)p\\xc1 \\xab\\x92\\xac\\x14\\x98\\x9af-\\x0e\\x00\\x9c\\x10\\xc4\\x0cl\\n\\xbd\\xd9c{RE8X\\x93\\xb21\\xd8\\x03/\\x9c\\x14\\x08I\\\\\\x01\\x071PEp\\x0c\\xb0\\x07\\x1b\\xac`\\x10\\x7f@\\x85\\xd1ha\\x8b\\xbf\\xde\\xc2\\x14\\xa9\\xa1\\x84\\tX@\\x80\\xd8\\xcdN\\x9dm\\xcd\\xd51\\x81#\\x9cZ\\xa0\\'\\x06~\\x98\\x82\\x18^0\\xc4T\\x94b\\x00)\\x98\\xc5\\x1e\\xe6\\xa4SVP\\x00z\\xb6@\\x05?\\xbcQ\\x05%\\x90\\xa3\\x02\\x04\\xd0\\x1eKc;]Gi#\\x1b\\x15\\xb8\\x03\\rh \\x1a\\x03\\x84\\x109V\\x9a\\xc5\\r\\xcf\\x10\\x86.\\x98\\xc3\\x14\\xa6XE):\\xc1\\nt\\xf8\\xa0\\xaa\\xdeLA\\x17>0\\x86; \\xe1\\x01\\x96\\xb8/[eK\\xddv@\\x83\\x00z\\x80D\\x14. \\x80\\xa0\\xae\\xe2~\\xc8\\xf1\\x977.\\xbb\\x02I\\x88\\x80\\x06\\xd3\\xbaT\\x1bl \\x88A\\xe0\\r\\x08\\xf4HG\\x14(\\x11\\x02 \\x0b\\x99\\xc3-L \\x02\\xc4Q\\x8dD\\xfc@\\xff\\x01P\\xe8B\\x18\\xbc`]W\\x1c/\\x05+\\xb0\\x81\\x9e=!\\x89\\x17|A\\x04\\x03HE,\"1\\x89\\x04\\xa0B\\x16\\x02\\x08s\\x85\\x9e\\xa8a\\xd8:6\\xcd\\x1eV\\x02\\x106\\xe0\\x89@\\x04\\x82\\xca|\\xde\\x85\\x94J\\x91\\x05O\\\\\\xe1\\xd3\\x95\\x16\\xc4\\x19\\x1c\\xe0\\x83q\\xb8\\xc3\\x14\\x86\\\\B\\x17\\xc8:\\x06,\\xd0\\xb7\\xd1\\x8d\\x95.\\xa4\\xf7\\x12\\x00#\\xbc\\xc0\\x06}\\xb6\\xc1n\\xb3\\x90\\x85\\x15TY\\x04\\x12\\xf0\\xb5\\x08V\\xe0\\tO\\xe8P\\x02\\x0e \\xc1\\x05\\xcc`\\x06 tb\\x1c<\\xa8\\x018\\xd8`\\x02\\xaf\\xc1Zl\\xb2\\xd6\\xe3^\\xda\\xe1\\x8db{\\xfa\\xb2W\\xf0\\x04\\xb0% \\x01\\x1b\\x88 \\xdcW\\xb8\\xac\\rn-\\x08\\xb0\\x12\\x81\\x10\\xe0X\\x04\\n\\xcc\\x90\\x8e\\x0fT\\xe1\\xa8P<\\xf3\\xa3\\xb5\\xad\\x19m\\xb0#\\xdd6\\xc8B\\xb8\\x03qn\\td!\\xe0\\xc6^w\\x16\\x84\\xf0\\x02\\xdd\\x8a\\xa0\\x0b@x\\xc3\\x0f26\\x03BDa\\x0c\\x8dX\\xed)^\\x1bk\\x16\\xf2\\xbb7\\x11\\xb8\\x83y;\\xediO\\x08a\\x05\\x06\\xff\\'6\\xaf\\x03\\xd1\\xf0,\\xb4\\\\\\x029\\x00\\xc02\\xf4\\xa0\\x039\\x90\\xe1\\t\\x8d\\xb8\\xc3\\x85\\x81\\xc9ql{\\x9c\\x8a\\x11\\x00F\\xc0I\\xbe\\x82O\\xdb\\xc0\\x13zNww/\\x1b\\x86/8}\\x10f \\x04\\x19\\xc2A\\x00\\x02X\\xc3\\x03\\xf1\\xf0\\x00<\\x80\\xe9\\xda\\xe8\\xfe\\x9cH\\xda\\x10\\x87\\x08Z\\xb4\\x02\\x96\\xf79\\xd7Y\\x08\\x83\\'|\\x11\\x86\\xa6\\xfbb\\xae\\x86\\xd8\\xc0\\x00\\xf8 \\x07\\x02\\x88\\xe2\\x13\\x1d \\x05\\xe2H\\xc1\\x89\\xb4.\\xd5\\xe7yd\\'6r\\xc0rv\\x83\\x9a\\na\\xa0Bf\\xe9\\xea\\x85.\\xe4\\x00\\x05%\\xc0\\x03\\x11\\xde@\\x86\\npB,\\xa1\\x88\\x95(@\\xe2-Gg\\x9b\\x8a\\x01\\xe8\\x852\\x9a\\xc0;!PA\\xf1\\x9a\\xf5\\x81\\x1dzG\\x02(\\xf8\\xac\\x1eQx\\x830\\xe8\\x90\\x88r\\x12\\xca1\\xd8\\xe8\\x91\\xd7\\x03O\\xc5m\\xa4\\xa1\\x0fV\\xa0\\xc1\\x06\\xba\\xd0\\x85\\r\\x98!\\xf2@ \\xc2\\xc5\\x97\\xf0\\x03:0B\\x0f\\xd4\\xc8\\x83\\x06\\xd2\\xd0\\x01\\x0e\\x14\\x8aG\\xb3\\xba\\xe3\\x90;L\\xdd\\x08\\x88#\\x0fO\\xb0\\x02w\\x00\\x80\\x00\\x80zXA\\xf6O C\\x1f\\xae\\xf1\\x8dp\\xbc#\\r\\xd38\\x0428\\xd0\\x8bhdDC\\xfb\\xf9\\xbb\\xe2\\xba\\xa7\\x0cJ\\xf8\\xff\\xff\\x00\\x18\\x80\\xff7\\x13\\x07`\\x05\\x100~\\x00\\xf02\\xc1\\xc0\\x0e\\x88\\x00\\x02\\x07\\xb0\\x04up\\x02\\'\\x00\\x06JP\\x81\\x16x\\x81J\\x00\\x06\\xc5\\xb0\\x81\\x12X\\x07u\\xb0\\x0e\\xc1r\\x00\\xca\\xa0\\x0c \\x00\\x02\\x88\\xd0\\x00\\x8a\\xa0\\x08\\x98\\x10\\x0cC\\xe0\\x02p\\xf0\\x0b\\x07\\x08\\x00\\x0c\\x10\\x10\\x00;'", + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\xc1\\xc3\\xbd\\xf4\\xf4\\xf4\\xbb\\xcc\\xc9\\xec\\xea\\xea\\xc2\\xd4\\xd1\\xac\\xc2\\xbb\\xb5\\xb8\\xb4\\xda\\xda\\xda\\xb8\\xba\\xb5\\xab\\xb8\\xb4\\xaa\\xb5\\xb2\\xe8\\xe6\\xe6\\xd6\\xd5\\xd5\\xa8\\xb4\\xad\\xea\\xea\\xea\\xc7\\xc8\\xc4\\xb0\\xb2\\xac\\xa6\\xb3\\xb3\\xe2\\xe2\\xe2\\xdf\\xde\\xde\\xe1\\xe0\\xe0\\xec\\xec\\xec\\xb3\\xbd\\xbb\\xf0\\xf0\\xf0\\xcd\\xd2\\xcc\\xd4\\xd9\\xd4\\xf4\\xf2\\xf3\\xc2\\xd2\\xcd\\xea\\xe8\\xe8\\xe4\\xe2\\xe2\\xe6\\xf3\\xf3\\xdc\\xdc\\xdc\\xca\\xdb\\xd9\\xf2\\xf2\\xf2\\xa4\\xa5\\xa3\\xf0\\xee\\xee\\xad\\xad\\xac\\xab\\xbd\\xbb\\xb4\\xc9\\xc3\\xa5\\xb1\\xad\\xce\\xcd\\xcd\\xe5\\xe4\\xe4\\xd1\\xd2\\xcd\\xdf\\xdd\\xdd\\xd8\\xd8\\xd8\\xee\\xec\\xec\\xcd\\xcf\\xca\\xd9\\xe9\\xe9\\xf5\\xf3\\xf3\\xe6\\xe5\\xe6\\xbe\\xbf\\xbd\\xee\\xee\\xee\\xd9\\xd6\\xd6\\xb4\\xb6\\xb0\\xd8\\xda\\xd6\\xbc\\xbd\\xb9\\xe0\\xe1\\xde\\xc8\\xca\\xc4\\xe7\\xe4\\xe4\\xc6\\xc5\\xc5\\xf2\\xf0\\xf1\\xf7\\xf4\\xf4\\x9d\\x9c\\x9a\\xb4\\xc2\\xbb\\xe8\\xe7\\xe8\\xe3\\xe0\\xe1\\xdc\\xde\\xda\\xbd\\xc0\\xba\\xc2\\xc1\\xc1\\xf9\\xf2\\xf1\\xb9\\xbd\\xb9\\xb9\\xba\\xb8\\xe4\\xe3\\xe4\\xa5\\xad\\xab\\xfb\\xfc\\xfc\\xe9\\xe8\\xe8\\xd8\\xd6\\xd8\\xad\\xaf\\xaa\\xdc\\xdb\\xdc\\xfa\\xf8\\xf8\\xe4\\xe5\\xe2\\xe0\\xde\\xe0\\xa9\\xaa\\xa9\\xed\\xec\\xec\\xcb\\xd8\\xd5\\xda\\xd9\\xda\\xaa\\xad\\xa6\\xde\\xdc\\xde\\xbf\\xc1\\xbc\\xa6\\xb8\\xb9\\xf8\\xf7\\xf7\\xda\\xdc\\xd8\\xd4\\xd2\\xd1\\xc9\\xc9\\xc9\\xe8\\xe8\\xe7\\xc4\\xc4\\xc1\\xba\\xc9\\xc7\\xec\\xea\\xec\\xb5\\xb6\\xb4\\xd3\\xd5\\xd2\\xb0\\xc2\\xc2\\xdd\\xdc\\xdd\\xe3\\xd9\\xd9\\xb1\\xb2\\xb0\\xb4\\xc6\\xc5\\xae\\xc0\\xc0\\xcc\\xca\\xcb\\xf2\\xee\\xee\\xb5\\xc5\\xc2\\xb2\\xb6\\xb3\\xf1\\xef\\xef\\xca\\xcd\\xc8\\xe2\\xe0\\xe2\\xe6\\xdb\\xdb\\xbf\\xc2\\xc1\\xda\\xdf\\xdd\\xbe\\xd0\\xce\\xbf\\xc5\\xc2\\xd4\\xd3\\xd4\\xc4\\xc9\\xc8\\xfc\\xfb\\xfb\\xe6\\xe4\\xe6\\xe3\\xe4\\xe2\\xc1\\xc6\\xc0\\xb3\\xc4\\xc3\\xca\\xc7\\xc8\\xbd\\xc7\\xc6\\xee\\xed\\xed\\xc0\\xce\\xce\\xd6\\xe1\\xe1\\xdc\\xda\\xdb\\xfc\\xfb\\xfc\\xc7\\xce\\xcd\\xf6\\xef\\xef\\xca\\xd5\\xd4\\xc5\\xd8\\xd5\\xfc\\xfc\\xfb\\xfa\\xfa\\xf9\\xc2\\xcd\\xcb\\xf4\\xf0\\xf1\\xbb\\xc2\\xc1\\xeb\\xea\\xe8\\xde\\xe1\\xdd\\xdb\\xda\\xdb\\xb2\\xc6\\xc6\\xa6\\xab\\xa6\\xe1\\xe0\\xe1\\xdd\\xde\\xdc\\xde\\xdd\\xde\\xd9\\xd8\\xd9\\xdf\\xdd\\xe0\\xd1\\xd2\\xd1\\xb5\\xc3\\xc3\\xfd\\xfd\\xfd\\xfc\\xfc\\xfc\\xfb\\xfb\\xfb\\xf8\\xf8\\xf8\\xfb\\xfa\\xfa\\xf7\\xf7\\xf7\\xfa\\xfa\\xfa\\xf9\\xf9\\xf9\\xfe\\xfd\\xfd\\xf9\\xf8\\xf8\\xf7\\xf6\\xf6\\xf6\\xf6\\xf6\\xfd\\xfc\\xfc\\xfb\\xfa\\xfb\\xfb\\xfb\\xfa\\xfd\\xfc\\xfd\\xf8\\xf7\\xf8\\xf8\\xf8\\xf7\\xfe\\xfd\\xfe\\xf0\\xed\\xed\\xf2\\xf1\\xf1\\xfe\\xfe\\xfd\\xfd\\xfe\\xfe\\xf7\\xf7\\xf8\\xf7\\xf7\\xf6\\xf7\\xf6\\xf7\\xfd\\xfd\\xfe\\xf4\\xf4\\xf3\\xea\\xe9\\xe9\\xf9\\xf8\\xf9\\xf2\\xf2\\xf1\\xfa\\xfa\\xfb\\xf0\\xef\\xed\\xf3\\xf3\\xf3\\xfc\\xfc\\xfd\\xe1\\xe2\\xe0\\xfd\\xfd\\xfc\\xf6\\xf6\\xf5\\xf8\\xf9\\xf9\\xf0\\xf0\\xef\\xeb\\xeb\\xeb\\xed\\xee\\xed\\xf8\\xf8\\xf9\\xf6\\xf5\\xf5\\xda\\xe2\\xe2\\xf8\\xf9\\xf8\\xe4\\xdd\\xdd\\xf8\\xfe\\xfe\\xf1\\xf1\\xf1\\xf9\\xf9\\xf8\\xe2\\xe7\\xe6\\xe3\\xe3\\xe3\\xe0\\xeb\\xeb\\xf2\\xec\\xec\\xbb\\xc0\\xbb\\xef\\xef\\xef\\xb8\\xc2\\xbf\\xe3\\xe3\\xe0\\xe7\\xe7\\xe7\\xf3\\xf4\\xf3\\xf6\\xf6\\xf7\\xc3\\xc9\\xc9\\xf7\\xf2\\xf3\\xc5\\xc3\\xc4\\xf4\\xf1\\xf1\\xfc\\xfd\\xfc\\xbe\\xc4\\xbe\\xc0\\xc0\\xbe\\xef\\xf4\\xf4\\xfc\\xfd\\xfd\\xf5\\xf6\\xf5\\xfa\\xfb\\xfb\\xae\\xaf\\xaf\\xd8\\xcf\\xd0\\xcf\\xdf\\xe0\\x8d\\x97\\x96\\x81\\x80\\x80\\xea\\xd9\\xd9\\xfd\\xfe\\xfd\\xc0\\xc6\\xc5\\xd5\\xdd\\xd9\\xb9\\xbe\\xbc\\xb9\\xb8\\xb7\\xf0\\xeb\\xeb\\xf0\\xeb\\xec\\xf1\\xec\\xeb\\xcf\\xcf\\xce\\xe1\\xdc\\xdc\\xee\\xee\\xed\\xc1\\xc0\\xc0\\xe9\\xea\\xe8\\xe9\\xea\\xea\\xfa\\xf9\\xf9\\x9a\\xae\\xae\\xc3\\xd0\\xd0\\xe4\\xe7\\xe7\\xe6\\xd4\\xd4\\xe7\\xe7\\xe4\\xd7\\xd6\\xd7\\xac\\xac\\xac\\xa7\\xaf\\xae\\xfe\\xfe\\xfe\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0\\xe1\\xc0L\\x0e#\\n\\xf47j\\x04;g\\x85\\n\\x15\\xd9\\xb8\\xd1\\x9d\\x06\\x89\\x12\\xfd\\x05\\x90\\xc0\\x89\\xa0\\xa6\\x003>\\t\\x0c\\x05R 1x\\xf0\\x8e\\x991\\x13\\x87\\xa6\\xb9|\\xf9\\x8e\\x8dj\\xe9\\xd0\\x1f\\xb4G\\xcc<)\\xd1\\xb5\\x80\\x12\\x8b}\\x12\\xdc\\\\\\x08\\xb2\\xa6\\xa5\\xbfL\\x99^\\xa1\"6\\x05\\x08\\r\\x1a\\xf0F\\xf8\\xe3\\x19\\x91\\x18\\x03;U\\x9c\\xd8\\xb1C\\t\\x88\\x84GQ(=\\xd2\\xc1u\\xa0\\xa6`\\xccR\\\\\\xd0\\xd66\"8h\\x94\\x180\\x80\\xb3S\\xe0\\x14l;\\xec\\xf0\\xa8\\xfb\\x8f\\xd3\\x1f\\r\\xb3\\x08GTY\\xeaQ%\\x88\\x03\\xbb\\xa1\\x13\\xd1G15`\\x8a%\\x12\\x0b\\xf1/\\xca\\x95\\x82\\x1e\\x0c\\x88@\\x01\\xaa\\xae\\xbf\\x11\\xba2G\\xd4\\xf51\\x06\\x83T\\x03\\xfd\\xbd\\x10Ab\\xcc\\x1c\\x1c\\x03\\xb4\\xf0\\xdc\\x14L\\x95\\xea\\x86\\xfe\\x86m\\x95\\xc5\\x80R\\'\\x81\\xc8\\x08\\xf0;\\xd3\\x84\\x0f\\x01\\x10\\xe9\\x1cq\\xf0\\x15\\xd1_\\xab\\x01\\x90\\x7f+\\xdc\\xf5j`2\\x06U\\x82\\xf5\\xff\\xf0`\\xe1\\xc6\\x9e1_\\xdaDHC\\x87J\\x06!\\xfa`l\\x15\\xf8*\\xd3\\xfc\\x81\\x14\\xd6\\xa9\\xc9\\xae\\xdd\\xa1\\x16\\t\\xfb\\x88s\\xc7\\x19D\\xf4#\\x04)\\x9e0\\xa3\\x06\\x02\\n\\x94 \\x00\\x01T\\xd8 M.\\x9a\\x1c\\xb4\\xc9%\\xeb\\xc8\\x80K\\x7f-m2\\xc2=b\\xdc\\x90\\x04\\x1a8\\x10#\\x10\\x1eS0 C\\x83h\\xd0a\\xc8{\\x8d\\xf8\\xe6]\\x172\\xbc\\xc1!O\\xc8\\x08 C\\r5\\x9c\\x00\\x06\\x05\\x01\\x14\\xa4\\xc1\\n\\x0f\\x18\\x90\\x00\\x19\\x02l\\x80A\\x06z\\xd0\\xf2O-; 0\\xc9\\x8d\\t\\x9d\\xf4G-K\\xd4\\x12L+Z4c\\x017\\x08P`\\xc0\\t\\x80\\xec\\x00\\xcdA\\xf5L\\xf3\\x8e\\x11\\t\\xa4a\\x02\\x1bu\\xbc\\xf1\\x06\\x11C8i\\xd0 \\x01T\\xe0\\xc54\\xd3\\xd0\\x93L*\\xf7\\xb5DL\\nNTQ\\x05%\\x948\\xf1H\\x15\\x82\\xd0q\\x04\\x02.\\xfc\\xe3\\x00\\x04\\x11(\\x82\\r)\\t\\xb9\\x12\\x0f\\rr$\\xa0\\x80\\x14R\\xc8\\x80\\x85\\x04\\x05\\xe9\\xc2\\x8c\\x13N\\x94Q\\x86\\x13\\x82T\\xc1B%\\x13T\\xff\\xc0_C\\x9cH\\xc0\\x82\\x13Ax1\\x80\\x1b\\xd9\\xb8\\xd1\\xc2\\x00\\x1f\\xf0\\xc1M\\x13\\x07\\x08\\xc4\\x8b\\x15Y(\\x82B\\x85\\x0b\\x11\\x83\\xc3\\x03g\\xc8\\xf0\\xc3\\xa8\\x02\\xc9\"\\xc9\\x01\\x12\\xec\\xbaH60h\\xb0\\xc6\\x00\\x0bDQ\\xc5\\x01g:\\xf4\\x07\\x0b\\x8fH\\xd0\\xc2(\\xb3\\xe2Q\\x0c\\x1b24a\\x07\\x12\\x15\\xda`E\\tw\\xd8\\xe1\\x10\\x14\\x06`\\xa1@\\x01X,\\xa0A\\x15\\x1d\\xb4\\x00\\x83(\\xae\\x18\\x84\\x07\\x0cS\\xe8P\\x85\\x04\\xcc*\\x04\\x04\\x03\\x13\\x0cP\\xdaA\\xa1\\xbc\\xc0\\x88\\x01(,\\xc0\\xc2\\x07\\xa5\\xa9\\x10I\\x1auL\\xd0\\x90\\x0b\\x06<\\xa0B\\x03&4\\x81\\xc2\\x1fk\\x1c\\xa7P&\\xd7\\xb40\\xc1\\x07*%4\\xcd>p\\xb4\"P&\\x11\\x0fT\\x0f\\x082 \\x00\\x8a&\\xd3TR\\xc5\\'\\xbb\\xb8\\x10\\t\\x19\\xea\\x00\\xb1\\x90&C\\x1c\\xa1\\xc2,c\\x9cP\\x00\\tH$\\xe4\\xcfS\\x03\\x892\\x05\\x05N\\x04M\\xd0\\x1f\\xfb\\xa4`\\xe2D\\xb3\\xfe\\xd3\\x8d\\xa3\\xef\\xac\\xc4\\xc1>\\x94\\xf8\\x03\\xca\\x17Ida\\x84\\xcf\\t\\x01\\xff#\\xc6\\x108\\xfc\\x03D\\x8f&\\xec\\x80\\xe9D`\\xffc\\x1fD\\xf3\\xd9R\\x0b\\x05&\\x1b\\xe4\\t\\x0b\\x14\\xc0\\x10\\xdbA\\xfe4\\xe3\\x07\\x02\\xc2\\xfc\\xb3U&y0\\x10\\xc3?\\x01\\xdc\\xd0O\\t\\x0f\\xe8\\x86\\xd0$g\\xec\\x91\\x0c,\\x95P\\x00\\xc0\\t&\\xacc\\xf9S`\\x7fm\\xdfV`sR\\xcb\\x07\\xb5\\x18D\\xf6\\x08\\x04\\x05:\\x10\\x0c\\xe30\\xf2@A\\x9dL\\xc0@\\x90\\xc2\\x8c\\x89\\x06\\x17f\\x0f\\xf4\\x86\\x18.\\x98bI\\x19\\xad|\\xf2\\x80\\xd6\\xe1x\\xa2\\xf8\\xd7\\x9e?\\xb5{\\xc4\\x1aLSEI\\xde\\xb1\\x10\\x03K\\x9e\\'T\\xc1!F\\xf0b\\xd0\\x05\\x95D!\\xd0<\\x94\\x92\\xc1\\xc0A\\xbf\\xa8\\x9a\\x10\\xdc\\xc0\\x84\\x01l\\x85\\x13\\x00h@\\x01\\xc4`\\x8a\\xddy.\\x13\\x9b\\xd0\\x84?$\\xb8\\x92\\x7f\\x8c\\x8dT\\x03I\\x0bg~\\xd6\\xb6\\x7f\\xe0a\\x19\\x80\\x00\\xc0\\x13\\xe6C>\\x7f a\\x1f\\x96\\xfb\\x07/\\x9a\\x10\\x81\\x04P\\xc0 \\xc1\\xa8\\x01\\x16\\xbc\\x10\\x85\\x15\\xac\\xed\\x1f\\xc4\\xb8\\x81\\x02\\x8f0\\x08\\xfbxN\\x13\\x9f\\x80\\n\\t\\xff\\x05\"\\n \\x1c\\xe0b\\x9e\\xa8B\\x0c\\xf8c\\xbc\\xadh!\\x10~`\\x01B.\\xc0\\x82\\x14\\x0cd\\x0b\\xc8J@\\xf0\\x08\\xb2\\x853\\xbca\\x00\\x95\\x18@An\\xc1\\xa0\\x12\\xc8#b@\\xf3a\\xfc\\x062\\x85\\t\\x04C \\xc1\\xa8\\xc2\\x1f\\x1a\\xc2\\x03\\x10lc\\x8e\\xc6\\xfb\\xc7&(\\xf0\\x08f\\xf9C\\x05\\x08\\xc8B4T\\'\\x90\\x1c\\xd4 \\x03H\\x10D\\n\\t\\x12\\x83\\x1a$\\xa0\\x00N\\xb8\\x1c\\t\\xcd\\'\\x90\\x00 \\xe1\\x85\\xff\\x90\\xc0\\x04nX\\xbc\\x89\\xfcc\\x15\\xcc \\x80\\x0b\\x06\\xa1\\x84<>\\xa9\\x12A\\x12\\x08.00\\x04H\\xd4Af\\xc60\\x82\\x11\\xa0\\x00\\x07\\t\\xd4\\xe3 8\\x80@\\x026\\xc0\\x81\\x07\\x16O\\x88\\x02\\xf9\\x04\\x10(q\\nMP\"\\x05\\x9b\\xf0\\xe4A4\\x91\\nB\\xb0a\\x05\\xe4;\\x88\\x1b\\xaa0\\x05\\x82x\\xe2\\x01\\xcf\\xc8\\xc2\\x1d\\x04\\xa2\\x07\\x11\\xec\\xe1\\x0fU\\x00\\x82)\\xff1\\t]\\x12\\x00\\x8f\\x04\\x11\\xe2}XQ\\x06]p\\xc2\\t\\xe2\\xc4\\xdc@:\\x11\\x046X\\xa0\\x07\\x08\\xd9\\n\\x0c\\xca\\xb0\\xff\\x80\\x82\\x84\\x00\\x00\\xea\\xb0G\\x06\\xfe\\x01\\x01\\x1f\\xbc\\xe3,\\x03\\xd0\\x84BQ\\xa1\\x89Rd\\x82\\xa1\\xa8`A\\x13\\x12 \\x80\\xd1\\x95\\x0f!n\\x98\\xc0\\x1f\\x02\\xf0\\x88-z-\\x17}H\\x00\\x06\\xc6\\xb7F\\x82\\x8c\"\\n]+H\\x05\\x10\\x90\\x04\\x13L\\xa0\\x1c\\xfc@\\x01\\x12\\xf2\\xc0\\x8aMt\\xa2\\x98\\n]\\xc5*4Q\\x8f\\x16`\\xc1\\n\\x11\\xc0\\x04[\\xb2\\x13M\\x81\\xf0`\\x02\\x0e\\xd0\\xc5#\\xc4\\xa8\\x90N\\\\B\\x0e\\xdcH\\x01\\x0fL\\x91\\x10-H\\x02\\x83\\x05\\xd1\\xc3:\\xd0a\\x01\\x1f\\xc8\\xe3\\x1dS\\x08\\xc3G\\x14\\xd7\\t\\x18\\x8c\\x00\\n[\\xc0\\xc0\\x1e~`\\x01\\x11\\xf8\\xe0\\x04\\x98\\x10\\x05(\\xd8g\\x10\\r 5\\x00N`j>\\x031\\x0e9p\\xe1\\t\\xa5\\xc8\\'\\x0e%\\x91\\xd2\\x82\\xd8\\xa2\\x0fg\\xe0\\x87\\x14\\xd6\\xb1\\x83J\\xa8\\x81\\x06\\x14\\xa8\\xc4\\x180\\xb0\\x01\\x01\\xbc\\x89\\x0cd\\xb0@\\x02Dp\\x03\\x17\\x90C\\x0e\\x99\\xf8D\\xf5\\xfe\\xd1\\nJ\\x04\\xc3\\x13NX\\x82B\\xfc\\x81\\x8f\\x00\\xd0\\xe0\\x0f\\xbfh\\x96$\\xf2`\\x90U\\xffh\\x00\\x06D\\xe0G8d\\x10\\x0ekX\\xe0\\x1e\\x878\\x04\\x01\\xe8\\x00\\x86\\x1f\\x18\\xa0\\r<\\xba\\x01\\x00 \\x05\\xe90\\x00\\x829+\\x08\\x0f\\xae0\\x82M\\x1c3\\xb0\\x82\\xc5\\x83$P\\xb1\\x89q\\n\\x04\\x06Q\\xf0\\xe8@6\\xf1\\xa7\\x10t\\x81\\x08\\xf7@\\xc3=\\x0cA\\x88=l\\x03\\x0b\\x00x\\x80\\x0bl\\xc0\\x8bZ\\xb8\\x81\\x13\\xbe\\xc0\\x007Pp&\\x7fxb\\xb4J\\xcd\\x9b\\xa8\\x98Kp\\xa7\\x17M\\xf6\\x19^\\xfc\\xa7\\xa9\\xa9\\xaf\\xad\\xd9\\xf8\\xf8\\xfa\\xd9\\xd7\\xf5z}\\x7f\\x16\\x1d!\\x92\\x9b\\x92\\xe1\\xdd\\xd4\\xf9\\xf6\\xf6\\xf0\\xf0\\xf0\\xa4\\xa7\\xa4\\xb6\\xb9\\xb7\\xca\\xc9\\xc2\\xf1\\xf0\\xf2\\x02O\\xfa\\xde\\xde\\xdf\\xe6\\xe5\\xe8\\xf4\\xf2\\xf4\\x97\\x90\\x8d/t\\xce\\x8c\\x94\\x8bkmq\\x02\"\\xfb\\xab\\xaf\\xa8\\xce\\xd1\\xd1\\xe9\\xeb\\xe1\\x83\\x8f\\x81\\xb8\\xb7\\xb9\\xec\\xe9\\xf6\\x95\\x98\\xb9\\xaf\\xb1\\xaf\\xe2\\xe1\\xe3\\xb1\\xae\\xed\\x86\\x89\\x89j\\x85\\x95\\xda\\xd9\\xdb\\xf8\\xf8\\xf1\\x84\\x86\\x89\\xb3\\xb0\\xab\\xee\\xef\\xe8\\x01\\x08\\x0b\\xff\\xfc\\xfc\\xd7\\xd9\\xd6\\xa8\\xa8\\xf2\\x83~\\xbb\\x00<\\xeb\\x00=\\xfe\\x94\\x95\\x98\\xb7\\xb1\\xbf\\x9f\\xa3\\x9f\\xe6\\xe3\\xf3\\xc6\\xc6\\xc1dpl\\x16(\\xf6\\xf7\\xf4\\xf5\\xec\\xe5\\xf9\\xfd\\xfc\\xfe\\xde\\xe3\\xe0\\x9c\\x9b\\x95\\x06\\x0e\\x11\\xf6\\xf6\\xf1 J\\xec\\xd8\\xd7\\xda\\xe9\\xec\\xea\\xe5\\xe8\\xe6\\xf6\\xf7\\xf4\\xf4\\xf7\\xf7\\x00C\\xef\\xe7\\xe2\\xe2\\xd2\\xd3\\xd3\\xfd\\xfd\\xfd\\xfc\\xfa\\xfd\\xf9\\xf9\\xf9\\xf7\\xf7\\xf7\\xf2\\xf2\\xf0\\xf4\\xef\\xf3\\xdf\\xe0\\xdb\\x158\\xfe\\xfb\\xfc\\xfd\\x9f\\x9f\\xa1\\xc8\\xc9\\xcb\\x1e!!\\xfb\\xfb\\xfb\\xec\\xec\\xed\\xf9\\xfa\\xfa\\xf9\\xf9\\xfa\\xf1\\xf1\\xf3\\xd3\\xd4\\xd4\\xfa\\xfb\\xf7\\xef\\xef\\xf0rmnev\\x91#.\\xe4\\xe1\\xda\\xdc\\xa6\\xae\\xb8\\xf9\\xfc\\xfa\\xc7\\xc6\\xc8~\\x91\\x92\\x02\\x01\\xd9f\\x81\\xb6\\xce\\xce\\xd0\\xfc\\xf9\\xf9_u\\x95t}\\xa4qpt\\xd1\\xd5\\xd3\\xd4\\xd3\\xd6o\\x83\\x8e\\xd0\\xcc\\xf2\\x18<\\xecy\\x8b\\x95jo\\x8ehh\\xa2\\xdc\\xdb\\xd5iq\\x86\\xe6\\xe5\\xe1\\xda\\xdd\\xd9\\xc8\\xca\\xc5\\xdb\\xdb\\xdc\\xf3\\xf4\\xf4\\xc3\\xbf\\xb8\\xf3\\xf3\\xf3\\xbe\\xbe\\xfe\\xf3\\xf3\\xf4(0119.\\x1fB\\xd7\\x0fb\\xed\\xea\\xe3\\xe4\\xa9\\xa4\\xcc\\xf2\\xef\\xec\\xd5\\xce\\xe0\\xe7\\xe7\\xe8\\xc2\\xbe\\xf0\\xa8\\xba\\xde\\x9d\\x9c\\xee\\xe4\\xe4\\xe5\\xd0\\xcd\\xc6PQR\\xed\\xef\\xee\\xfd\\xfe\\xfe\\x9f\\xa0\\xd7\\xf5\\xf6\\xf5ba\\xf2\\xf5\\xf5\\xf6\\xf7\\xf8\\xf9\\x91\\x8f\\xa8\\x8e\\x98\\xb5\\xa8\\xa8\\xab\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0a\\xc3:\\x11\\xb88\\x9cH\\xb1\\xa2C\\x1f5\\xde\\x14\\xb2\\xc8\\xb1c\\xc5\\x06\\x19\\xc0\\xec\\x90\\x90\\xc1\\xa3\\xc9\\x93\\x08\\xb9H\\x90\\x11bS*Y\\x18P\\n\\x84\\x95D\\x9f\\xcc\\x8a\\xa8\\xc4\\x80sG\\x00G.J\\x9d$R\\x0c\\xd6e\\xca\\x8f\\x19\\x8b~\\xb8\\x11\\xa3bS\\x84W7\\x1d\\xda\\x80%\\xb0^\\x1eD4\\xfe\\xc8\\xab\\xa8,\\x97\\x1a\\x7f&p\\xdcpB\\x8f^\\r\\x1f\\xf8\\xa2V\\xa4\\xf0\\xe4\\x1e\\x80\\x04\\'U\\x84\\t#O\\x85P\\xb5\\x15\\xa5\\x18\\xa3\\xd2\\xeed\\xae\\x1aQ\\xf0v\\xd4b\\t\\x0f 4\\x1b*\\x85\\xd2b\\x11\\xd6\\x0c1\\x82;\\xc6\\xe1\\x80\\xa7\\xc4\\x06\\x06|b\\x8c\\x12\\x07\\x10\\xff]\\xd0/\\x11\\xa0J\\x0f\\x02\\x93<\\xf3\\x02,w\\xc8B\\x01\\xd5\\xbc`@A\\xb2\\xbd\\x14\\x12\\x02\\x18\\xa5\\xf8P\\x90,\\xf4\\x80aN.\\xfd\\xfd3N\\x03\\xb2\\xcc\\xc1\\x8b\\x03\\x1f\\xfc\\xe2\\x08<\\xe9\\xf4\\xa5\\x8f\\r\\x8f\\x80\\xe9\\x843\\x05q\"]\\x19\\xd6&\\x14E\\xac7\\x10 \\xd0\\x0b\\xe3P\\xf0\\xc2\\x0b\\x8f\\xff\\xf3\\xcb/\\x0e\\xf0r\\x87\\xf0\\x19\\xc8P\\n\\x11\\x94\\x10D\\x07\\xae34\\xf2\\xcf\\x1c\\x1f|P\\x8e\\xc6\\x0ePM\\x81#\\x0fp \\xc486\\r#\\xcd\\x99!\\xacK\\x905\\x13\\xa4\\xb3\\x80q\\x06\\xe9!\\xc0\\x1bCxq\\xb1\\x1c\\r\\xdca\\x03\\x06#`\\xc0\\xc6?O\\x17q8\\x06\\xe1\\xb8\\x03F$\\x11\\x82\\x81\\xf8\\xe2\\x06\\xa5\\xa0\\x87\\n\\xc6\\xf1\\x01^\\xd8\\xe0\\x1f\\xbc(\\x82\\x03z\\xb1\\x0f\\x08\\xda\\xe2\\n\\xeb\\x10FL\\x1eW\\x850\\xf4\\xab\\t\\x05\\xd1\\x82\"&\\x90\\x06\\x0b$D\\x0cox\\x03\\x00(\\xa0\\x0f\\x0c\\xe0b\\x16\\x93\\xc8\\xde\\x16*\\xf8\\x0f\\x07\\xe8c\\x18\\xbc\\xd0\\x87>\\xeaE\\x8d\\x08$j\\x1a\\x02i\\x02\\x18\\xff\\xde \\x06\\xa6\\x8d\\x03\\x16\\xb2\\x18\\x07\\xff\\xca\\xd1\\x0b\"\\xfd\\xa2\\t\\x11\\xc0\\x02Udq\\xbc\\x7f|\\x97\\xacr\\xb8!L 4\\x080\\xa43\\x01C|\\x80\\x16\\x83\\xa8\\xc7?h\\xb0\\xbc\\\\\\x10\\x84\\x02\\x10\\x18\\xc10 \\x90\\x81\\x10Hb\\x08\\xa8\\xc8\\xd9>\\x8a\\xd0\\x00\\x0c\\xbc\\xc0\\x1d\\xc7\\x84\\xc24\\xea1\\x040\\xcc\\x00\\x1cN\\x93\\x05/x\\x01\\x8ca\\xf4\\xa2\\t\\th\\x814N\\x10\\xff\\x01\\t\\xb8!\\x11E\\x18\\x86>f\\xa1C\\x13\\x9c\\xcar\\x07YA\\x0c\\xd0\\xa1\\r\\x11l\\xc2\\x07Qh\\xc2\\x1f\\x04 \\x80\\x04\\\\ \\x12\\x8e\\xb8\\x800\\x14p\\x81n\\x04\\xc2\\x0f00\\x82\\x0cp\\x90\\xacY\\xcc\\xab\\x1c\\xa9\\xfc@&\\xccQ\\nD\\x80\\x03\\x8b8\\xd8B\\x03~\\x81\\x01\\x93\\xce\\xa2\\x1cyP\\x813\"0\\x04\\x01\\xd4\\xe0\\x06!PF90\\xb02\\x81\\xa8@\\x8c3H\\xc8\\x17BP\\x01&t\\xc0\\n>\\xf0\\xc09\\x06p\\x85\\x02X\\xe2\\xaaV-\\x00\\t\\xb4\\x01\\x84\\xae\\x16\\x03\\x00\\x11(\\xc40Z\\xd0\\x0b`\\xbc@\\x1f\\xe5x\\xc1\\x1d%1\\x85W\\xec\\x82\\x08\\x99\\xe8\\x05,:4\\x90DT\\xc1\\x1f\\xfdZ\\xd5\\rPP:\\x0cdO\\x82\\x04\\xb8\\x01\\x14\\xb8\\x86\\x10]\\x98\\x81\\x100p\\xaa\\t\\xcc \\x01\"T`\\x19\\xcb\\xc0F5\\xaa\\xc1\\x08F@\\x03\\x08W\\xd0@\\x8c\\xae\\xe0\\x89E\\xc8\\x03\\x18\\xe5p\\x00Q\\xeb\\x85\\x02<\\xd2\\x80\\x0bo\\xc5\\x81<\\xb2\\xa7C\\x07\\xec\\xa3\\x1c\\\\(\\x84\\t\\x9c\\xe0\\x04i\\xff\\xf8#\\x13\\x85\\x15,a\\r\\x02\\x0b\\x13\\x08\\xa2\\x03 \\x85\\x83\\x0f\\x02Q\\x81\\x01P\\xa1\\x19g\\xa0\\x02\\x15\\xca\\xc0\\xdc 8\\xf7\\nW(A\\x10\\x08Sh\\x10\\x82\\x00\\x13d \\xff\\x10n\\xa0C\\x06\\xbe\\xf1\\x07I\\x08@\\x10:\\x84E\\x03\\xc61\\xc7\\x0f\\xe8\\xc2\\xc6\\xe3r\\x06\\x16\\xb8\\x00\\x81aP\\x80Cl\\t\\x01\\x14J\\x01\\xbb\\x0c\\x94\\xc2\\t]\\xe0\\x81Mfa\\x83z\\xe9\\xa3\\x05[\\x10\\x88\\x1e\\xa8\\xf7\\x8f\\x16\\xcek\\x9e\\xa80B\\xd2\\x80\\x91\\x10X\\xd4!\\x10]\\x80\\x03\\x01\\xea\\xb0\\nD\\x80\\x81\\x08\\x19\\xa0\\xda,\\x8e\\xd84Y\\xe8B\\x06\\x08H\\xc4+T\\xe0\\x0e\\x0c\\xfc\\xc2\\x06f-\\x07,\\x12\\x10\\x06I\\xd4`\\x8e\\xbd\\xd8\\x01\\x18\"\\xa0\\x0b\\xcf)\\xf1\\x03wp@\\x0b\\x00\\xd6\\x80^\\x8c\\x80H\\x9e\\x8b\\x9a>(p\\xd4\\xc1.\\xe4\\x17\\t \\xc4&:\\xd1\\x02\\n\\xe8a\\x08\\x920\\x02\\x0f\\xb2w\\xb1\\xde\\xed!\\x114h\\xda0\\x08\\x05\\x8c3\\xbf\\xac\\x05\\x8b\\xc0\\xe3n\\xdd`l\\x1c`\\x81j\\r\\x10\\xdd\\x1c\\x80\\xa1\\xbd\\x17@\\xe0\\xa6\\x17\\xab4,\\xa8A\\x83~5[!\\xf5\\x08\\xc47`1\\x0c,\\xe4!\\x11F\\xf8\\xa9\\x1aH-\\n\\x9b\\xfc\\xe2\\x0eG\\x08A\\x1e>\\xb0bR\\xf3\"\\t\\xff\\xff\\xb8\\x03/T\\xe0CF\\x0f\\x04\\x0b\\xca&\\x89\\x9e\\x8715\\x08\\xc8\\xc2&0\\x01F#\\xb5\\xe7\\x80\\x11\\xc0\\x18\\n\\x11`\\x08%6\\x01\\x01\\x82\\xc0\\x82\\x0b>\\x8d\\x00\\x01\\xaa\\x80\\nw$B\\x1e\\x18x\\x84$\\xdc\\xf0\\x8b\\x17\\x0c\\xd5&\\xfa\\xa0\\x9a3\\x16\\x81\\xee\\xa0\\x13\\xc4\\x07\\xcb{\\x8b\\x121\\x00\\xbe\\xd1\\xd5\\xda\\x01\\xc2\\x1e\\xe8?F\\xa0\\x02\\t\\xc0Oz\\xa5n\\x80\\x1a\\xe8p\\x107,\\xaf\\x0b\\xe1\\xdcB\\x1e.\\xee\\x0f#\\xa0\\xc0\\x01\\xb2\\x00\\x86\\xf5~\\xd1\\xb4\\xe0\\x06a\\x80.;\\x80P7\\xf1\\x04\\x1f\\x03\\x06C`\\x04~0n*\\xd0\\t\\x90\\x00\\t\\x81@\\x032@\\x04\\xa5`\\x0ep\\xd1\\x10\\t X\\xa5\\x90+7@\\x0f+\\xc1\\'\\xa8\\xb2\\x03\\x11P\\x05\\x821\\x0b?\\xc0R\\xcb#\\x002\\xd0*|\\xa25D`\\x04\\xaa\\x80|\\xb8@\\x01\\x84\\xb7r\\x00P\\x03\\x94\\x032`\\x00\\x06\\xbb \\x003\\x80\\x83QQ=\\xb0@\\x01\\xe1\\xd0\\x00X0\\x057\\xf0\\x06\\xa5 \\t`\\x08\\x86`P\\x03n \\x08\\xc9\\xe0\\x0b\\r0\\x7f4v\\x85P3\\x10\\xf5\\x90\\x01`\\x15\\x01\\x110\\x03\\x080G\\xff\\xb067\\xa1g\\xb2\\x80\\x0f\\xf5\\xb0\\x05\\xa9P\\x0f\\xa3\\x80\\x029\\xb2#\\x12\\xe0\\t]@\\x06\\xaa\\xe0\\x0e\\xaa\\x90\\n\\xab\\x00\\x0bj\\x04\\xf8\\x0f\\x01\\x01\\x00;'", + "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\xab\\xb3\\xc6\\xb7\\xbd\\xd2\\xb4\\xb4\\xb4\\xa4\\xa4\\xa4\\x8a\\x8f\\xad\\xc2\\xbe\\xc6hu\\x98\\xbb\\xbd\\xce\\xdb\\xe1\\xee\\xb9\\xb9\\xb9\\xc2\\xcd\\xe3\\xaf\\xbd\\xd9\\x96\\x92\\x9az~\\x93\\xcc\\xce\\xda\\xf2\\xf2\\xf2i\\x84\\x8f\\x9f\\x9f\\x9f\\xbe\\xca\\xe1Zf\\x86w\\x88\\xa3Rgz\\xc9\\xd3\\xe7lq\\x8c\\xb3\\xc1\\xdc\\x9b\\xa2\\xbe\\xe2\\xe2\\xe2\\xcc\\xd1\\xe0\\xd2\\xd5\\xe0\\xaf\\xaf\\xaf\\x99\\x95\\x9d\\xaa\\xaa\\xaa\\xb2\\xb3\\xc5KTx\\xe2\\xe0\\xe4\\xba\\xb6\\xbe\\xa3\\x9d\\xa7\\x9b\\xaa\\xca\\xa4\\xb4\\xd4\\x92\\x8e\\x95\\x9e\\x99\\xa3\\xb4\\xb6\\xc8\\xba\\xc6\\xdf\\xc0\\xc2\\xd1\\xbe\\xba\\xc2\\xa9\\xad\\xc4\\xef\\xee\\xf1\\xb8\\xd6\\xd6\\x86\\x9c\\xc4\\xe4\\xe2\\xe5\\xe8\\xe8\\xe8Z[w\\xd9\\xdf\\xed\\x92\\x9c\\xbc\\xb6\\xb2\\xba\\xfa\\xfa\\xfa\\xa8\\xa4\\xad\\xe4\\xe4\\xea\\xa1\\xa1\\xb5\\xaa\\xb9\\xd8\\xd1\\xd9\\xeb\\x93\\x91\\x96\\xc6\\xc2\\xc9\\x88\\x83\\x8d\\x8b\\x8b\\x9d\\xe4\\xe8\\xf2\\x8f\\x8b\\x92\\x89\\x95\\xaa}y\\x81\\xad\\xa9\\xb2\\x81|\\x85z\\x8b\\xb3\\xfc\\xfd\\xfd\\xd1\\xce\\xd3\\xed\\xf0\\xf6\\x89\\x93\\xb5\\xa2\\xa5\\xbb\\xc1\\xc0\\xce\\xa3\\xaa\\xc4\\xcd\\xd6\\xe8\\xb1\\xb1\\xb1\\xd5\\xdc\\xec\\xc9\\xc8\\xd5\\xd5\\xd4\\xdd\\xa4\\x9f\\xa9\\xbf\\xc3\\xd5oo\\x85\\x84\\x96\\xbc\\xc9\\xc5\\xcd\\x92\\xa2\\xc5\\xde\\xdc\\xe0\\x9c\\x97\\xa0\\xe0\\xe2\\xeaYq\\x80\\xa4\\xaa\\xbe\\xc4\\xc5\\xd2\\x8d\\x89\\x90>Ek\\xf2\\xf0\\xf2_`|\\x7f\\x97\\xa2o|\\x9f\\xd4\\xd8\\xe5\\xb7\\xb9\\xcc\\xd8\\xd8\\xe1\\xda\\xd9\\xdc\\xa1\\xae\\xcc\\xe1\\xe6\\xf1\\x82\\x8d\\xaf\\x84\\x91\\xb4\\x99\\xa5\\xc5\\xdc\\xda\\xde\\x8c\\x9b\\xbe\\xf0\\xee\\xf0\\x85\\x7f\\x8a\\xe0\\xde\\xe2\\xa9\\xab\\xc0\\xb1\\xac\\xb5\\x9c\\x9e\\xb4\\xbc\\xbc\\xbc\\xd3\\xd0\\xd5\\x93\\xa5\\xb3\\xe6\\xe5\\xe7\\xc1\\xc4\\xd1\\xe2\\xe5\\xed\\xd1\\xd2\\xdc\\xc6\\xd0\\xe4\\x9f\\xb1\\xd4\\xcd\\xca\\xd0\\xcc\\xc9\\xce\\x81\\x83\\x9b\\xf6\\xf4\\xf6\\x9e\\x9d\\xae\\xee\\xec\\xee\\x98\\xac\\xd1\\xf3\\xf3\\xf8\\x9a\\xb5\\xbaut\\x89\\xcf\\xcc\\xd2\\xd6\\xd4\\xd9\\x84\\x81\\x94T`\\x85\\xde\\xdf\\xe5ur\\x85\\xea\\xe9\\xeb\\xc2\\xc5\\xd5\\x91\\x90\\xa1\\x99\\x99\\x99\\xd4\\xd2\\xd6\\xcf\\xd0\\xdb\\xde\\xe3\\xf06=a\\xdb\\xdc\\xe5\\xf3\\xf3\\xf3\\xb7\\xb6\\xc7\\xab\\xb6\\xd2^w\\x85\\xc7\\xc9\\xd6\\xf8\\xf7\\xf9\\xab\\xa7\\xb0\\xc6\\xc7\\xd4\\xbf\\xc1\\xcf\\x8b\\x85\\x90\\x91\\x95\\xb1\\x9d\\xa9\\xc7\\xf1\\xf0\\xf2\\xe9\\xe8\\xea\\xe8\\xe7\\xe9\\xf4\\xf4\\xf4\\xbe\\xbe\\xbe\\xf1\\xf1\\xf1\\xf7\\xf7\\xf7\\xf0\\xf0\\xf0\\xea\\xea\\xea\\xd7\\xd7\\xd7\\xdf\\xdf\\xdf\\xdd\\xdd\\xdd\\xca\\xca\\xca\\xef\\xef\\xef\\xed\\xed\\xed\\xd4\\xd4\\xd4\\xd1\\xd1\\xd1\\xce\\xce\\xce\\xe6\\xe6\\xe6\\xec\\xec\\xec\\xc6\\xc6\\xc6\\xc2\\xc2\\xc2\\xda\\xda\\xda\\xe4\\xe4\\xe4\\xf5\\xf5\\xf5\\xf6\\xf6\\xf6\\xf8\\xf8\\xf8\\xf9\\xf9\\xf9\\xf7\\xf6\\xf7\\xf5\\xf4\\xf5\\xc7\\xc4\\xcb\\xf9\\xf8\\xf8\\xf4\\xf4\\xf5\\xf3\\xf2\\xf3\\xcb\\xc8\\xce\\xf1\\xf0\\xf1\\xf9\\xf8\\xf9\\x85\\x81\\x88\\xcd\\xcd\\xd8\\xfa\\xf9\\xfa\\xf9\\xf9\\xfa\\xd6\\xd6\\xdf\\xd6\\xd3\\xd9\\xf8\\xf8\\xf9mo\\x89\\xd4\\xe5\\xe5\\xcd\\xd8\\xe7\\xca\\xcb\\xd8wy\\x90cl\\x8f\\x97\\x99\\xb3hh\\x80`f\\x89\\xd9\\xdc\\xe9\\xea\\xed\\xf5\\xea\\xeb\\xf2\\xe7\\xeb\\xf4\\xeb\\xed\\xf3\\xeb\\xea\\xed\\xc3\\xc2\\xd0\\xc8\\xc7\\xd4\\x8d\\x9f\\xae\\xc2\\xc7\\xd8\\x8d\\xa3\\xb2\\xa0\\xa6\\xbf\\xe7\\xe7\\xec\\xf2\\xf0\\xf1\\x92\\x94\\xaa\\xef\\xf6\\xf6\\x92\\xa8\\xce\\x92\\xa5\\xc8\\xec\\xeb\\xed\\x87\\x87\\x9c\\xed\\xec\\xeddm\\x90\\xef\\xef\\xf3\\xa8\\xa7\\xb8|x\\x80sx\\x90\\xfb\\xfc\\xfb\\x97\\xaf\\xbc\\xee\\xed\\xef\\xda\\xda\\xe1\\xfb\\xfb\\xfc\\xd8\\xd6\\xda\\xbf\\xbf\\xbf\\xfe\\xfe\\xfe\\xfc\\xfc\\xfc\\xfb\\xfb\\xfb\\xfd\\xfd\\xfd\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00\\xf5\\xfd\\x1bH\\xb0\\xa0\\xc1\\x83\\x06\\xf7)\\\\\\xb8\\xcf\\x9fC\\x7f\\xfc\"\\xf6\\xebw\\xe3\\x06\\xb0_\\xabV\\xf9\\xea\\x85*\\x93*V\\xb2f\\xe1j%\\xe3\\x16/\\r\\xaf`\\xedrE\\xab\\x96\\xadX\\xb9t\\xa5J \\xa0\\xc3\\x87\\x01\\x11\\x04\"\\xdc\\xc9\\xf3\\x1f\\xc3\\x85\\x0f!J\\xa4h\\x11\\xa3F\\x8e\\x1eA\\x8a$i\\x12\\xa5J\\x96.a\\xca\\xa4i\\x13\\xa7\\xce\\x9e<\\x81\\xfe\\x04\\xfa0\"\\xbf\\x89\\x15/f\\xdc\\xd8\\xf1c\\xc8\\x91%O\\xa6\\\\\\xd9\\xf2e\\xcc\\x995o\\xe6\\xc4\\x9a\\xd5\\x1f\\x92\\x89\\xfc \\xfac\\x18\\xd4+\\xd8\\xa2c\\x91\\x9a]\\x9a\\xd6)\\xdb\\xa8o\\xa9\\xca\\xbdJ\\xb7\\xe0>4\\x00\\xbc Cf,XD\\xbe]\\x87\\x865J6\\xe9Y\\xa6j\\x9f\\xb6\\x95\\n\\xb7\\xea\\xdc\\xc6\\x8e\\xfdI\\xa97D\\xc4+=\\xf6z\\xe5\\xe5\\xea\\xd0/Q\\xb1G\\xcb*E\\xdbt-T\\xb7S\\xe3ZE\\x9d\\xfa\\xcb\\x0br\\xc7\\xb0\\xe0\\x11\\x11\\xe7\\x06?\\xdaB\\xbf\\xde\\xe6,x7h\\xc3\\xbfI+\\x1eN|\\xa0\\xbff\\xa1^\\x88\\xff\\xb3a\\xa3\\xc0\"S\\x83\\xf0A\\xb7\\xbd9\\xb0\\xee\\xcf\\x85}\\x8fN,\\xfc4\\xea\\x86SB\\r1p\\xa1\\x01\\x83:X\\xcc\\xa1\\xca/\\xb3\\xf5\\xa5\\x19`\\xb9yFXo\\xa2!\\x16\\x9ci\\x8ca\\xb5O\\x0e\\xa0x\\x01\\x808\\x14p\\xd2\\xc5\\x18\\xf3\\xa0\\xa0H\\x0cb$\\x93\\x97\\x81\\xd2\\xb5\\x97\\xe0`\\xbc\\x85v\\x18p\\xa5-F\\xdc>\\xd4\\xa4#\\xcd\\x0b\\x88\\x90\\x01\\x81\\x86\\x10T3B\\x121\\xc4!\"\\x89\\x7f\\xe1\\xd6\\x19\\x8a\\xd7\\xc9\\xe7`\\x8b\\xdc5\\x86D8{\\x00\\x90\\x87\\x8d]TPA\\x17\\xd8\\xa0`\\x03 1\\x18\\xe3\\\\f%\"8\\xa4u\\xf15\\xc8\\xe2v\\xf6I\\xe8B\\x06G\\x94\\x91M\\x08a\\\\\\xe2\\xe6%a<\\xb2\\x85\\rx@\\xf2\\xcb\\r\\\\\\x06I\\xdd{\\x0b\\xaa\\x98\\x1d}\\x10\\xa2\\xa6\\xda\\x0e\\xa4,Q\\xc6;\\x8d\\x84\\xc0\\xa6\\xa23\\xc8AE\\x01sh9\"{^V\\x07\\x1f\\x83+jW_\\x84<\\xf9\\xf3\\xc5\\x02j\\xd4\\xc0\\xc6\\xa1\\x134bj#3\\x10\\xc1\\x80\\r\\x8b\\xd8\\xc3\\xcc\\xa4\\x12Y\\xfft\\xd1\\x9e\\n\\xa6\\x88\\xdd|\\x0f\\xbaH\\xd7>H\\x80\\x83\\xc1&\\xa4\\xc0\\xc1\\x06\\x05e\\x94a\\xc0\\xb1c\\x18qB\\x1d\\x8a\\xd8\\xd9Om\\x11\\xf5\\x01\\x002\\x0f\\xf8B+\\x91af\\n\\xa8\\xae\\x12\\xf2\\x03\\x8e\\n\\xbf\\xaa\\x91\\x05\\x1cW\\xb4q\\xc4\\xb9\\xd1\\xfc\\xc0@\\x11\\xc7\\xe8\\x11\\xcc\\xb3B\\xf5\\x93\\x02\\x05\\xf9h\\xe1\\x8e/\\xee\\xd5Z\\xa4\\x98\\x9a\\x06\\xbak?\\xe0H\\x00\\xee\\x0e&\\xa8Q\\xc2:Y\\xc0\\x00\\xc3\\x05Bx\\xf0\\x89\\x0f1\\xf4\\x02oD\\xd0\\x1c@\\x8e\\r,\\xbcbL\\xbe\\xd8b\\xfag\\xaeI\\xf6\\xb4O?M\\xf8!0\\x06\\x0b\\x10\\xfc\\x87!\\xea\\\\\\x11M\\x0f\\x0c\\xe0P\\x80\\x08\\xc2L\\xccA;eT\\x10\\x02#\\x05@\\x82\\x8a/_^\\xea\\'\\xaeH\\x96\\x99\\x15\\xc9\\x16\\x98\\x0cn\\xca&\\xac|D\\x03\\'\\xc4\\xd5) \\x03\\x18X\\xc2\\x12\\xea\\'\\x07\\x0fX\\xefY\\xfd8\\x80\\x05\\xf8\\xd7:8\\x80\\x0f\\x05\\x80\\x90\\x05\\x01;64\\xb2\\x15\\xee_MX\\xc3\\x02\\xddg\\x81\\x00lB\\r\\x19`\\x83\\x15\\xe4Q\\xc1\\x0bb\\xef\\x00<\\xd8\\xe0\\xf6\\x96\\x90\\rel!\\x84#\\x04\\x93\\xc7\\xff\\x0exB\\t\\x91,\\x08k@\\x00\\x03\\x15\\x00\\x00\\x15\\\\\\x83\\x14\\x04\\x98\\xe1\\xfdl\\x98\\xc1\\xd4m\\x90\\x14l\\x98\\x87\\x11\\xe8\\xe0\\x00g\\x00B\\xf8\\x08jP0\\x121\\x94\\xeb;\\x04\\x07Rp\\x8fJ\\xa4\\x00\\x04\\x07\\x88i\\x00\\x18!\\x04\\x06d\\x14\\x9f\\x9ap\\x80\\x08\\xe8 \\x85/D\\x02\\x1d\\xf5\\xa4DA\\x85\\xd9GP\\x9e\\xf3t$\\xfb\\x823rp\\x8f\\x03h\\xe2\\x0b{X\\xc1\\n\\xc6\\xd1\\x8e\\x138\\xec\\x9e\\x18\\xfc\\x8294\\xe1\\x8ce8\\x80\\x03v\\x08\\xeaP\\xf9XB\\xa3\\xaa\\x0f\\xa9M\\xf0\\x04\\xbe\\x8f?\\x82\\xc1\\x8e9<\\x03\\x10X\\x18\\x86\\x98\\x87\\x81\\x85@\\xe0\\xe1\\r\\xa7\\x10\\x03\\x8es<\\x9d\\x1d{\\x92\\x88\\xc4Y\\x16\\x94?\\x88a\\x8cB\\x98B\\x0f1\\xc8s\\x9e\\xf5\\x00\\t\\x17\\x08c\\xcdl6Q\\xd0\\xc8\\x89\\xe5\\x84\\xbe\\x08\"7 \\x86\\'\\x82\\xc1\\xe8F\\x13\\xc39#\\xcaS\\x9bO\\xc4c\\x05\\x97\\xb8;>i\\xc8V\\xec\\x12\\x91\\xbd4D\\xd2\\x82\\xbe2B\\xc5\\x88\\xe9\\xb3m\\x1a\\xd4\\x95\"\\xae\\xa5K\\xd7\\x01}\\xb8\\xfa\\xd5\\xb0\\x8e\\xb5\\xacg-\\xebT\\xd8\\xfa\\xd6w\\xc8\\xb5\\xaeu\\x9d\\x80^\\xfbZ\\x00\\xc0\\x066\\x14:@l\\x9b|\\xe0&\\x03\\xc0I\\x04\"0\\x89I0\\xa0\\x07\\'\\x08\\x08\\x00;'" + ] + }, + { + "Name": "ThumbnailPhotoFileName", + "DataType": "nvarchar", + "Definition": "The ThumbnailPhotoFileName column in the SalesLT.Product entity contains the file names of thumbnail images associated with each product. The file names typically follow a pattern where they include a brief description of the product followed by '_small.gif' indicating the file is a small-sized GIF image. The values in this column indicate the visual representation of the product and are used to display product thumbnails in the application.", + "AllowedValues": null, + "SampleValues": [ + "fork_small.gif", + "awc_jersey_male_small.gif", + "water_bottle_cage_small.gif", + "street_tires_small.gif", + "wheel_small.gif" + ] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.Product entity contains unique identifier values, represented in the form of GUIDs (Globally Unique Identifiers). These values are generated to ensure that each entry in the Product entity has a distinct and unique identifier. The GUID format follows a standard 32-character hexadecimal sequence, divided by hyphens into five groups in an 8-4-4-4-12 pattern. This column is typically used to guarantee the uniqueness of a row and enable efficient merging or data synchronization across different systems.", + "AllowedValues": null, + "SampleValues": [ + "3050E4DF-2BBA-4C2B-BDCC-B4C89972DB1C", + "8AE32663-8D6F-457D-8343-5B181FEC43A7", + "B59B7BF2-7AFC-4A74-B063-F942F1E0DA19", + "50ABEBCB-451E-42B9-8DBB-E5C4A34470E9", + "1909C60C-C490-411D-B3E6-12DDD7832482" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.Product entity contains the date and time when the product record was last updated. The values are stored in a datetime format that includes both the date and precise time down to fractional seconds. This allows for tracking the exact moment changes were made to a product's data. This column is important for maintaining an audit trail and ensuring data integrity in the product information.", + "AllowedValues": null, + "SampleValues": [ + "2008-03-11 10:03:55.510000", + "2008-03-11 10:01:36.827000" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductCategory.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductCategory.json index 4462850..3c3494f 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductCategory.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductCategory.json @@ -1,67 +1,102 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The ProductCategoryID column in the SalesLT.ProductCategory entity contains numeric identifiers for various product categories. The values are unique integers that correspond to specific categories within the product catalog. This column is typically used to link products to their respective categories for organizational and reporting purposes.", - "Name": "ProductCategoryID", - "SampleValues": [ - 36, - 32, - 37, - 22, - 26 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The ParentProductCategoryID column in the SalesLT.ProductCategory entity contains integer values that represent the hierarchical parent category of a product category. These values typically correspond to the unique identifiers of parent categories, indicating the structure and relationship between different product categories within the database. The values are numeric and seem to be used to link to higher-level categories that help in organizing products into a hierarchical taxonomy.", - "Name": "ParentProductCategoryID", - "SampleValues": [ - 4, - 3, - 2, - 1 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The Name column in the SalesLT.ProductCategory entity contains names of various product categories related to cycling and outdoor sports. The values in this column represent different types of product groupings such as equipment, gear, and apparel. Each name provides a general description of the category, helping to classify products in the inventory under identifiable groups.", - "Name": "Name", - "SampleValues": [ - "Mountain Frames", - "Bottles and Cages", - "Shorts", - "Road Bikes", - "Wheels" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The rowguid column in the SalesLT.ProductCategory entity contains unique identifier (GUID) values for each product category. These values follow the standard GUID format, which consists of 32 hexadecimal digits arranged in groups separated by hyphens, such as '9B7DFF41-9FA3-4776-8DEF-2C9A48C8B779'. This column is typically used to ensure the uniqueness of each row within the table and can serve as a primary key or for replication purposes. The values are randomly generated and do not follow a sequential order.", - "Name": "rowguid", - "SampleValues": [ - "9B7DFF41-9FA3-4776-8DEF-2C9A48C8B779", - "3EF2C725-7135-4C85-9AE6-AE9A3BDD9283", - "6D24AC07-7A84-4849-864A-865A14125BC9", - "701019C3-09FE-4949-8386-C6CE686474E5", - "CFBDA25C-DF71-47A7-B81B-64EE161AA37C" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The ModifiedDate column in the SalesLT.ProductCategory entity contains timestamps indicating when a record was last updated. The values follow the standard date and time format 'YYYY-MM-DD HH:MM:SS'. This column is typically used for tracking the most recent changes or modifications made to a product category record.", - "Name": "ModifiedDate", - "SampleValues": [ - "2002-06-01 00:00:00" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.ProductCategory entity contains information about different product categories within the sales database. It includes details such as the category ID, parent category ID for hierarchical structuring, category name, unique identifier, and the date the entry was last modified. This entity is useful for answering questions related to product category organization, identifying parent-child category relationships, and tracking the modifications of category details over time.", - "Entity": "SalesLT.ProductCategory", - "EntityName": "Product Category Information" + "Entity": "SalesLT.ProductCategory", + "Definition": "The SalesLT.ProductCategory entity contains data about the different product categories within a company's sales system. It includes information such as the unique identifier for each product category, the parent category if applicable, the name of the category, and metadata like unique row IDs and the date of the last modification. This entity can be used to answer questions related to the organization and hierarchy of product categories, such as finding all parent and subcategories, tracking category modifications, and retrieving specific category names.", + "EntityName": "Product Category Information", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.Product", + "ForeignKeys": [ + { + "Column": "ProductCategoryID", + "ForeignColumn": "ProductCategoryID" + } + ] + }, + { + "ForeignEntity": "SalesLT.ProductCategory", + "ForeignKeys": [ + { + "Column": "ParentProductCategoryID", + "ForeignColumn": "ProductCategoryID" + }, + { + "Column": "ParentProductCategoryID", + "ForeignColumn": "ProductCategoryID" + }, + { + "Column": "ProductCategoryID", + "ForeignColumn": "ParentProductCategoryID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address" + ], + "Columns": [ + { + "Name": "ProductCategoryID", + "DataType": "int", + "Definition": "The ProductCategoryID column in the SalesLT.ProductCategory entity contains unique numeric identifiers for different product categories. Each value in this column corresponds to a specific category of products within the database. The values are integers and appear to be system-generated for internal categorization purposes. This column is used to link products to their respective categories efficiently.", + "AllowedValues": null, + "SampleValues": [ + 21, + 26, + 31, + 41, + 37 + ] + }, + { + "Name": "ParentProductCategoryID", + "DataType": "int", + "Definition": "The ParentProductCategoryID column in the SalesLT.ProductCategory entity contains identifiers that reference the parent product categories. Each value in this column is a foreign key that links to the ID of a parent product category within the same table, defining hierarchical relationships between product categories. The values are integers that represent the unique identifier of a parent category, facilitating the organization of products into nested categories for better categorization and lookup.", + "AllowedValues": null, + "SampleValues": [ + 4, + 3, + 2, + 1 + ] + }, + { + "Name": "Name", + "DataType": "nvarchar", + "Definition": "The Name column in the SalesLT.ProductCategory entity contains the names of product categories. These names are descriptive titles that classify and organize the various products sold, such as types of cycling gear and accessories. Each value is a string and represents a distinct category name within the product catalog, facilitating easier identification and grouping of related products.", + "AllowedValues": null, + "SampleValues": [ + "Helmets", + "Cranksets", + "Accessories", + "Pumps", + "Gloves" + ] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.ProductCategory entity contains unique identifiers for each product category in the format of a GUID (Globally Unique Identifier). These values are used to uniquely identify records and ensure that each entry is distinct. The GUID values are in the standard format, which includes a series of hexadecimal digits separated by hyphens.", + "AllowedValues": null, + "SampleValues": [ + "4624B5CE-66D6-496B-9201-C053DF3556CC", + "000310C0-BCC8-42C4-B0C3-45AE611AF06B", + "5515F857-075B-4F9A-87B7-43B4997077B3", + "954178BA-624F-42DB-95F6-CA035F36D130", + "D43BA4A3-EF0D-426B-90EB-4BE4547DD30C" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.ProductCategory entity contains timestamp values indicating the date and time when a record was last updated. The format follows the YYYY-MM-DD HH:MM:SS pattern. Each entry corresponds to the precise moment a modification was made to a product category within the database. This column is useful for tracking changes and maintaining the historical integrity of data records.", + "AllowedValues": null, + "SampleValues": [ + "2002-06-01 00:00:00" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductDescription.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductDescription.json index 061056a..3ee86cf 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductDescription.json @@ -1,56 +1,74 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The ProductDescriptionID column in the SalesLT.ProductDescription entity contains unique identifier values for each product description. These values are integers and appear to be sequential or randomly assigned without a specific pattern. This column serves as a primary key to uniquely identify and reference each product description entry in the table.", - "Name": "ProductDescriptionID", - "SampleValues": [ - 1532, - 1606, - 1573, - 1146, - 1766 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The Description column in the SalesLT.ProductDescription entity contains detailed textual descriptions of various bicycle products and their components. These descriptions are multilingual, indicating that products cater to a diverse, international market. The content typically highlights the key features, materials, and uses of the items, such as aerodynamic rims, ergonomic gel seats, and high-performance carbon forks.", - "Name": "Description", - "SampleValues": [ - "Clipless pedals - aluminum.", - "\u0642\u0636\u064a\u0628 \u0642\u064a\u0627\u062f\u0629 \u0645\u0644\u0627\u0626\u0645 \u0644\u0643\u0627\u0641\u0629 \u0627\u0644\u0623\u063a\u0631\u0627\u0636 \u0639\u0644\u0649 \u0627\u0644\u0637\u0631\u0642 \u0627\u0644\u0645\u0645\u0647\u062f\u0629 \u0648\u063a\u064a\u0631 \u0627\u0644\u0645\u0645\u0647\u062f\u0629.", - "Aerodynamic rims for smooth riding.", - "\u05de\u05d5\u05e9\u05d1 \u05d2'\u05dc \u05e0\u05d5\u05d7 \u05d1\u05e2\u05dc \u05e2\u05d9\u05e6\u05d5\u05d1 \u05d0\u05e8\u05d2\u05d5\u05e0\u05d5\u05de\u05d9.", - "Fourche pour route en carbone hautes performances avec bras incurv\u00e9s." - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The rowguid column in the SalesLT.ProductDescription entity contains unique identifiers for each product description. The values in this column are in the format of GUIDs (Globally Unique Identifiers), which are 128-bit numbers represented as a series of hexadecimal digits separated by hyphens. Each GUID ensures a unique identity for a record within the table, commonly used to maintain uniqueness in a distributed system or across different databases.", - "Name": "rowguid", - "SampleValues": [ - "B9F94C67-9B0A-42D4-BE78-9401AC9AA833", - "08CEBACE-523F-4FB9-937C-43C8D457520B", - "F8DE509E-C18F-4FE6-8DAC-6F49F1103E32", - "581CC0DC-284C-4370-A2D3-25F2D5382D8C", - "4AAE6D4F-8320-4F32-99DE-BB3B1B13F1EF" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The ModifiedDate column in the SalesLT.ProductDescription entity contains timestamp values representing the date and time when a product description was last modified. The values follow the SQL datetime format, typically including both date and time components down to fractions of a second. This column is useful for tracking and filtering records based on their most recent updates.", - "Name": "ModifiedDate", - "SampleValues": [ - "2008-03-11 10:32:17.973000", - "2007-06-01 00:00:00" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.ProductDescription entity contains data related to the descriptions of products, including unique identifiers and timestamps for modifications. This entity is essential for understanding the textual details associated with different products. It can be used to answer questions about the specific descriptions of products, when these descriptions were last modified, and to track changes through globally unique identifiers.", - "Entity": "SalesLT.ProductDescription", - "EntityName": "Product Descriptions" + "Entity": "SalesLT.ProductDescription", + "Definition": "The SalesLT.ProductDescription entity contains information about product descriptions including unique identifiers, descriptive text, a globally unique identifier (rowguid), and the date when the record was last modified. This entity is useful for retrieving detailed textual descriptions of products, tracking changes over time to descriptions, and ensuring each product description has a unique identifier. Questions that can be answered using this entity include finding the description of a specific product, understanding when a product description was last updated, and ensuring data consistency with the unique identifiers.", + "EntityName": "Product Description Information", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.ProductModelProductDescription", + "ForeignKeys": [ + { + "Column": "ProductDescriptionID", + "ForeignColumn": "ProductDescriptionID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.ProductDescription -> SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address" + ], + "Columns": [ + { + "Name": "ProductDescriptionID", + "DataType": "int", + "Definition": "The ProductDescriptionID column in the SalesLT.ProductDescription entity contains unique numeric identifiers for each product description. The values are integers and are likely assigned sequentially or in a specific order to ensure each product description has a distinct identifier. This column is used to uniquely distinguish one product description from another.", + "AllowedValues": null, + "SampleValues": [ + 1909, + 1471, + 321, + 847, + 594 + ] + }, + { + "Name": "Description", + "DataType": "nvarchar", + "Definition": "The Description column in the SalesLT.ProductDescription entity contains textual descriptions of various products. These descriptions detail the features, uses, or benefits of the products and can be written in multiple languages. The content varies widely, including information about the product's material, functionality, design, and additional features. This column helps provide customers with a better understanding of what each product offers.", + "AllowedValues": null, + "SampleValues": [ + "\u0646\u0627\u0642\u0644 \u0633\u0631\u0639\u0627\u062a \u0645\u0635\u0646\u0648\u0639 \u0645\u0646 \u0627\u0644\u0623\u0644\u0648\u0645\u0646\u064a\u0648\u0645 \u0630\u0648 \u0639\u0634\u0631 \u0633\u0631\u0639\u0627\u062a \u0645\u0639 \u0645\u062d\u0627\u0645\u0644 \u0628\u0643\u0631\u0627\u062a \u0645\u063a\u0644\u0642\u0629.", + "Unique shape provides easier reach to the levers.", + "\u00c9clairage peu on\u00e9reux pour la conduite de nuit\u00a0- utilise 3 piles\u00a0AAA.", + "\u0645\u0635\u062f\u0627\u062a \u0645\u0637\u0627\u0637\u064a\u0629 \u062a\u0645\u062a\u0635 \u0627\u0644\u0635\u062f\u0645\u0627\u062a.", + "Versatile 70 oz hydration pack offers extra storage, easy-fill access, and a waist belt." + ] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The column contains a list of globally unique identifiers (GUIDs) in the standard format. Each GUID is a 128-bit number used to uniquely identify entities and consists of alphanumeric characters separated by hyphens in a specific pattern. This ensures that each value within the column is unique, which can be useful for tracking and referencing specific product descriptions in the SalesLT.ProductDescription entity.", + "AllowedValues": null, + "SampleValues": [ + "F016E3D7-6177-43A3-8BFF-160320966471", + "1B31B030-D5D5-45C5-AEA1-91A98317AE94", + "6243C374-FF8B-4E2B-AB4C-8BD40F723619", + "132DC806-E073-4C86-8EB8-7EB04E1193A6", + "EA772412-6369-4416-9CC9-C1A5D1FF9C52" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.ProductDescription entity contains the date and time when the product description was last modified. The values in this column follow the datetime format, which includes both the date and time down to fractions of a second. This column is typically used for tracking changes and ensuring data accuracy by recording when an update was made to each product description.", + "AllowedValues": null, + "SampleValues": [ + "2008-03-11 10:32:17.973000", + "2007-06-01 00:00:00" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModel.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModel.json index 7920b59..bcdf200 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModel.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModel.json @@ -1,66 +1,106 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The ProductModelID column in the SalesLT.ProductModel entity contains unique identifiers for different product models. Each value in this column is a distinct integer that serves as the primary key for the product model records in the database. These identifiers are used to link product models to other related data within the database.", - "Name": "ProductModelID", - "SampleValues": [ - 72, - 73, - 24, - 116, - 6 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The Name column in the SalesLT.ProductModel entity contains product names typically composed of a brand abbreviation followed by a descriptive term and, occasionally, a numerical differentiator. The names often describe the type and specific model of various bicycle components or related products. This structured naming convention aids in easy identification and categorization of the products within the inventory.", - "Name": "Name", - "SampleValues": [ - "Touring Pedal", - "HL Road Seat/Saddle 2", - "HL Mountain Frame", - "ML Mountain Front Wheel", - "LL Mountain Handlebars" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The CatalogDescription column in the SalesLT.ProductModel entity contains text descriptions of product models as they are showcased in the product catalog. This column typically includes detailed information about the product features, specifications, and other relevant details that help customers understand the product better. The data in this column is often used for creating product listings and marketing materials.", - "Name": "CatalogDescription", - "SampleValues": null, - "Type": "xml" - }, - { - "AllowedValues": null, - "Definition": "The rowguid column in the SalesLT.ProductModel entity contains unique identifier values in the standard GUID (Globally Unique Identifier) format. Each value is a 128-bit integer used to distinctly identify records within the table. These GUIDs ensure that each entry can be uniquely referenced, which is particularly useful in distributed systems and for maintaining data integrity.", - "Name": "rowguid", - "SampleValues": [ - "E7B00DFF-8136-4947-B503-994584CC89E7", - "5CEFBB6E-3B7E-414F-AC1B-8F6DF741FB21", - "45FE0D77-6645-473C-A116-1232BAEA8D43", - "C88D1136-A8BB-46BB-94AA-8C1854F813CC", - "0D3A6AD7-6891-4DE9-B14F-E1A841EB220C" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The ModifiedDate column in the SalesLT.ProductModel entity contains timestamps indicating when each product model was last modified. The entries are represented in the standard timestamp format of 'YYYY-MM-DD HH:MM:SS.FFFFFF', capturing both date and time at a high precision level. This information is essential for tracking changes and maintaining historical accuracy of modifications within the product models.", - "Name": "ModifiedDate", - "SampleValues": [ - "2009-05-16 16:34:29.027000", - "2006-11-20 09:56:38.273000", - "2009-05-16 16:34:28.997000", - "2009-05-16 16:34:29.010000", - "2005-06-01 00:00:00" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.ProductModel entity contains information about different product models within the organization. It includes details such as the unique identifier for each product model, the name of the model, and a description used in the product catalog. Additionally, it tracks the last modification date and a globally unique identifier (GUID) for each record. This entity can be used to answer questions related to identifying, describing, and managing product models, as well as tracking changes made to the product models over time.", - "Entity": "SalesLT.ProductModel", - "EntityName": "Product Model Information" + "Entity": "SalesLT.ProductModel", + "Definition": "The SalesLT.ProductModel entity contains information about different product models available within an organization. It includes details such as the unique identifier for each product model, the name of the model, and a description that is typically used in catalogs. Additionally, it records metadata such as a globally unique identifier (rowguid) and the last modified date. This entity can be used to answer questions related to the characteristics and descriptions of product models, as well as track modifications made to these models over time.", + "EntityName": "Product Model Information", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.Product", + "ForeignKeys": [ + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + }, + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + } + ] + }, + { + "ForeignEntity": "SalesLT.ProductModelProductDescription", + "ForeignKeys": [ + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + }, + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + }, + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address", + "SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription" + ], + "Columns": [ + { + "Name": "ProductModelID", + "DataType": "int", + "Definition": "The ProductModelID column in the SalesLT.ProductModel entity contains numerical identifiers for different product models. Each value represents a unique product model in the database. The column is used to distinguish between various product models and links to product details and specifications. The values are integers and are likely used as primary keys or foreign keys in related tables for data integrity and relational mapping.", + "AllowedValues": null, + "SampleValues": [ + 20, + 77, + 16, + 30, + 25 + ] + }, + { + "Name": "Name", + "DataType": "nvarchar", + "Definition": "The column contains the names of different product models in a sales product database. The names often include descriptive components such as the type of product (e.g., 'Road,' 'Mountain') and numerical or specific identifiers (e.g., '750,' '200'). These names appear to follow a pattern combining text and numbers, providing a unique identifier for each product model. The values are primarily used for identifying and categorizing various product models within the sales inventory.", + "AllowedValues": null, + "SampleValues": [ + "Road-750", + "LL Road Tire", + "Road-250", + "Mountain-200", + "Mountain-300" + ] + }, + { + "Name": "CatalogDescription", + "DataType": "xml", + "Definition": "The CatalogDescription column in the SalesLT.ProductModel entity contains descriptive text about the product model, designed for use in catalogs or marketing materials. This column typically includes information such as features, specifications, and benefits of the product model. It is formatted as XML data to allow for structured and detailed descriptions. This data helps customers make informed purchasing decisions by providing them with comprehensive product information.", + "AllowedValues": null, + "SampleValues": null + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.ProductModel entity contains unique identifier values (UUID/GUID) for each row. These values are in a standard UUID format which is typically used for ensuring the uniqueness of records across tables and databases. The values are 36-character strings including hyphens, grouped in a pattern such as 8-4-4-4-12 characters. This column is likely used for ensuring data integrity and for uniquely identifying each product model in the SalesLT.ProductModel table.", + "AllowedValues": null, + "SampleValues": [ + "AA77697C-6D1C-48F1-845C-3CB089498715", + "699C2AC5-5406-46D2-863D-DCFB23FC7943", + "DDC67A2F-024A-4446-9B54-3C679BABA708", + "35677B42-72CA-4D9E-A966-DD874B83EF45", + "2771D2D2-2E35-4C12-966E-CE9070DF6D53" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.ProductModel entity contains timestamp values indicating the date and time when a record was last updated. The values follow the standard datetime format, typically including year, month, day, hour, minute, second, and fractional seconds. This column is used to track changes and modifications made to each product model record over time.", + "AllowedValues": null, + "SampleValues": [ + "2006-06-01 00:00:00", + "2009-05-16 16:34:29.043000", + "2009-05-16 16:34:29.010000", + "2007-06-01 00:00:00", + "2005-06-01 00:00:00" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModelProductDescription.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModelProductDescription.json index 64c1135..473765f 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModelProductDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModelProductDescription.json @@ -1,68 +1,100 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The ProductModelID column in the SalesLT.ProductModelProductDescription entity contains unique numerical identifiers for different product models. These values are integers and are used to link product descriptions to their corresponding product models within the database. The IDs do not follow a specific sequential order and are likely assigned based on a predefined schema or during the creation of product models.", - "Name": "ProductModelID", - "SampleValues": [ - 103, - 110, - 39, - 85, - 37 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The ProductDescriptionID column in the SalesLT.ProductModelProductDescription entity contains unique numerical identifiers assigned to each product description. The values appear to be integers typically starting from a specific range and are used to reference detailed descriptions of products within the database. Each ID uniquely identifies an entry in the product description table to ensure consistency and accuracy in product-related information.", - "Name": "ProductDescriptionID", - "SampleValues": [ - 1900, - 1634, - 1519, - 1438, - 1964 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The Culture column in the SalesLT.ProductModelProductDescription entity contains language and region codes commonly used for localization and internationalization purposes. The values appear to follow ISO 639-1 language codes and may include an additional region or script designation using a hyphen. These codes help identify the language or cultural context for product descriptions, enhancing the ability to cater to diverse markets.", - "Name": "Culture", - "SampleValues": [ - "fr ", - "en ", - "th ", - "ar ", - "zh-cht" - ], - "Type": "nchar" - }, - { - "AllowedValues": null, - "Definition": "The rowguid column in the SalesLT.ProductModelProductDescription entity contains unique identifier values for each row. These values follow the standard UUID (Universal Unique Identifier) format which consists of 32 alphanumeric characters separated into five groups by hyphens, typically in the format 8-4-4-4-12. This ensures that each entry in the column is globally unique, providing a reliable way to distinguish individual records in the database.", - "Name": "rowguid", - "SampleValues": [ - "52D0E73D-BFBF-4CD8-A8B8-52FC0AF423D8", - "AB93B739-E95E-4C4A-A570-B93349EA678C", - "AAB952AE-55D8-4D0F-B63A-1250B7666AE8", - "26966676-DD7B-4CE9-8DE7-79F97B8A5DC9", - "4AA960B3-4CC8-4F01-BB82-989ADBD4D036" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The ModifiedDate column in the SalesLT.ProductModelProductDescription entity contains timestamp values indicating the date and time when each record was last modified. The values follow a standard datetime format, typically including both the date and the exact time of modification down to seconds. This column is useful for tracking changes and updates to the records over time.", - "Name": "ModifiedDate", - "SampleValues": [ - "2007-06-01 00:00:00" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.ProductModelProductDescription entity links product models to their descriptions, capturing details about the culture/language of the description. It includes metadata such as a unique identifier and the date of the last modification. This entity can be used to answer questions regarding the specific descriptions available for different product models, including which languages those descriptions are provided in.", - "Entity": "SalesLT.ProductModelProductDescription", - "EntityName": "'Product Model and Description Mapping'" + "Entity": "SalesLT.ProductModelProductDescription", + "Definition": "The SalesLT.ProductModelProductDescription entity represents the relationship between product models and their descriptions, capturing the cultural variations of the product descriptions. It includes identification details of product models and descriptions, along with cultural information that specifies the language and region for the description. Questions that can be answered using this entity include finding product descriptions based on cultural context, associating product models with their respective descriptions, and tracking the modifications made to product descriptions over time.", + "EntityName": "Product Model and Description Data", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.ProductDescription", + "ForeignKeys": [ + { + "Column": "ProductDescriptionID", + "ForeignColumn": "ProductDescriptionID" + } + ] + }, + { + "ForeignEntity": "SalesLT.ProductModel", + "ForeignKeys": [ + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + }, + { + "Column": "ProductModelID", + "ForeignColumn": "ProductModelID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.ProductModelProductDescription -> SalesLT.ProductModel -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address" + ], + "Columns": [ + { + "Name": "ProductModelID", + "DataType": "int", + "Definition": "The ProductModelID column in the SalesLT.ProductModelProductDescription entity contains numerical identifiers that represent different product models. Each ID is unique and corresponds to a specific product model within the database. The values in this column are integers and do not follow a specific pattern beyond being unique identifiers. These IDs are used to link product models with their descriptions and other related information.", + "AllowedValues": null, + "SampleValues": [ + 78, + 27, + 55, + 22, + 35 + ] + }, + { + "Name": "ProductDescriptionID", + "DataType": "int", + "Definition": "The ProductDescriptionID column in the SalesLT.ProductModelProductDescription entity contains unique numeric identifiers assigned to different product descriptions. Each value in this column corresponds to a specific product description and ensures that each description can be uniquely referenced in the database. The values are integer numbers, and there is no specific pattern or standard format beyond being unique identifiers.", + "AllowedValues": null, + "SampleValues": [ + 1649, + 1665, + 554, + 1910, + 1929 + ] + }, + { + "Name": "Culture", + "DataType": "nchar", + "Definition": "The Culture column in the SalesLT.ProductModelProductDescription entity contains culture or locale codes representing different languages and regions. These codes are often in the format of a two-letter language code, optionally followed by a hyphen and a variant or region code, indicating specific language and region combinations. For example, 'en' represents English, 'fr' represents French, and 'zh-cht' represents Traditional Chinese. These codes help in identifying and managing product descriptions in multiple languages and locales.", + "AllowedValues": null, + "SampleValues": [ + "ar ", + "fr ", + "th ", + "zh-cht", + "en " + ] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.ProductModelProductDescription entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). These values are 36-character strings, including hyphens, and follow the typical GUID format such as CBD361D0-B753-439C-86C8-11BA0ED91BB2. Each value is distinct and is used to uniquely identify a row within the table.", + "AllowedValues": null, + "SampleValues": [ + "CBD361D0-B753-439C-86C8-11BA0ED91BB2", + "EC20F340-5E99-4360-86D1-543273A1EE7D", + "10BBC606-98EF-4B02-93AE-ADFD6AC4B59A", + "50018DBD-0A1B-42D3-B258-813FE1738731", + "6C85FBF6-C8C2-4A7D-8851-8C3220A6EB5E" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.ProductModelProductDescription entity contains timestamp values indicating the date and time when the record was last modified. The timestamps follow the YYYY-MM-DD HH:MM:SS format, which is common in SQL datetime data types. This column helps track changes and updates to the product model descriptions within the database, allowing for auditing and historical analysis of modifications.", + "AllowedValues": null, + "SampleValues": [ + "2007-06-01 00:00:00" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderDetail.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderDetail.json index bdf10ff..6109234 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderDetail.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderDetail.json @@ -1,120 +1,152 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The SalesOrderID column in the SalesLT.SalesOrderDetail entity contains unique numerical identifiers assigned to individual sales orders. These identifiers are used to associate specific sales order details with their corresponding sales orders. The values in this column are distinct integers, ensuring each sales order can be uniquely identified for tracking and referencing purposes.", - "Name": "SalesOrderID", - "SampleValues": [ - 71846, - 71796, - 71920, - 71936, - 71885 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The SalesOrderDetailID column in the SalesLT.SalesOrderDetail entity contains unique numeric identifiers for each sales order detail. Each value in this column is a sequentially assigned integer, ensuring that each sales order detail can be distinctly identified. This column is likely set as the primary key for the SalesOrderDetail table.", - "Name": "SalesOrderDetailID", - "SampleValues": [ - 110787, - 110734, - 112142, - 112931, - 110751 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The OrderQty column in the SalesLT.SalesOrderDetail entity contains numerical values representing the quantity of items ordered in a sales transaction. The values are whole numbers indicating individual item counts per order line. This column helps in identifying the volume of products associated with each sales order detail. The range of values can vary depending on the nature of the order.", - "Name": "OrderQty", - "SampleValues": [ - 5, - 25, - 4, - 9, - 10 - ], - "Type": "smallint" - }, - { - "AllowedValues": null, - "Definition": "The ProductID column in the SalesLT.SalesOrderDetail entity contains numerical identifiers for products associated with each sales order detail. The values are integers and are used to uniquely identify each product within the system. This column helps in linking sales order details to specific products in the product catalog.", - "Name": "ProductID", - "SampleValues": [ - 884, - 712, - 874, - 975, - 889 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The UnitPrice column in the SalesLT.SalesOrderDetail entity contains numerical values representing the price per unit of items in a sales order. The values are expressed in a decimal format with four digits of precision. This column is used to denote the cost assigned to each unit of a product in the sales transactions.", - "Name": "UnitPrice", - "SampleValues": [ - "2.9940", - "818.7000", - "202.3320", - "16.2720", - "1391.9940" - ], - "Type": "money" - }, - { - "AllowedValues": null, - "Definition": "The UnitPriceDiscount column in the SalesLT.SalesOrderDetail entity contains the discount rates applied to the unit prices of items in a sales order. The values are decimal numbers representing the discount percentage with a precision of four decimal places. Common values include 0.4000 for a 40% discount, 0.1000 for a 10% discount, and 0.0000 for no discount.", - "Name": "UnitPriceDiscount", - "SampleValues": [ - "0.4000", - "0.1000", - "0.0500", - "0.0200", - "0.0000" - ], - "Type": "money" - }, - { - "AllowedValues": null, - "Definition": "The LineTotal column in the SalesLT.SalesOrderDetail entity contains the total monetary amount for each sales order detail line. The values are formatted as decimal numbers with up to six decimal places, indicating the precision of the total amounts. This column likely represents the final cost after applying any discounts and taxes to the individual items on the order.", - "Name": "LineTotal", - "SampleValues": [ - "16.272000", - "8796.060000", - "4398.030000", - "517.170108", - "3117.870000" - ], - "Type": "numeric" - }, - { - "AllowedValues": null, - "Definition": "The rowguid column in the SalesLT.SalesOrderDetail entity contains unique identifier values for each row, formatted as globally unique identifiers (GUIDs). These GUIDs ensure that each record can be distinctly identified, even across different systems. The values follow the standard GUID format, consisting of 32 hexadecimal digits, displayed in five groups separated by hyphens: 8-4-4-4-12.", - "Name": "rowguid", - "SampleValues": [ - "F2064E41-044A-4A42-9342-FB45BE83EB88", - "67EB5E24-9231-4656-B19D-27998D6D707D", - "2000D44E-0E7C-4FBA-96D9-55D18727DB36", - "E447CABB-A2CD-4BB0-9927-A6285927BAEC", - "05A28311-9869-486B-BA7B-539517A25F97" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The ModifiedDate column in the SalesLT.SalesOrderDetail entity contains timestamp values indicating the date and time when a sales order detail record was last modified. The timestamps follow the 'YYYY-MM-DD HH:MM:SS' format, which is consistent with standard SQL datetime formats. This column is used for tracking changes and updates to the records, providing a historical log for when modifications occurred.", - "Name": "ModifiedDate", - "SampleValues": [ - "2008-06-01 00:00:00" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.SalesOrderDetail entity contains detailed information about individual items in sales orders. It tracks the quantity, product identifier, unit price, any unit price discounts, and the total line amount for each item within a sales order. This entity is essential for understanding the composition and financial details of sales transactions. Questions that can be answered using this entity include the specifics of what products were ordered, how much each product cost, and the discount applied to each product in a given sales order.", - "Entity": "SalesLT.SalesOrderDetail", - "EntityName": "Sales Order Details" + "Entity": "SalesLT.SalesOrderDetail", + "Definition": "The SalesLT.SalesOrderDetail entity contains detailed information about individual items within a sales order. Each record represents a specific product ordered, including its quantity, unit price, any applicable discount, and the total line amount for that product. This entity can be used to answer questions related to the contents of sales orders, such as identifying which products were sold, the quantity of each product ordered, pricing details, and discounts applied. It is useful for analyzing order composition, calculating total sales revenue, and tracking order modifications.", + "EntityName": "Sales Order Details", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.Product", + "ForeignKeys": [ + { + "Column": "ProductID", + "ForeignColumn": "ProductID" + } + ] + }, + { + "ForeignEntity": "SalesLT.SalesOrderHeader", + "ForeignKeys": [ + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + }, + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address" + ], + "Columns": [ + { + "Name": "SalesOrderID", + "DataType": "int", + "Definition": "The SalesOrderID column in the SalesLT.SalesOrderDetail entity contains unique identifiers for each sales order. These values are integers and are likely automatically generated. Each SalesOrderID associates a sales order with its specific details, enabling tracking and management of sales transactions within the database. The column ensures that each sales order detail can be linked back to its corresponding sales order in the system.", + "AllowedValues": null, + "SampleValues": [ + 71895, + 71898, + 71902, + 71846, + 71935 + ] + }, + { + "Name": "SalesOrderDetailID", + "DataType": "int", + "Definition": "The SalesOrderDetailID column in the SalesLT.SalesOrderDetail entity contains unique identifier values for each sales order detail record. The values in this column are numeric and appear to be sequentially assigned, acting as a primary key for the sales order details. Each value represents a specific line item within a sales order, ensuring that each record can be uniquely identified and referenced.", + "AllowedValues": null, + "SampleValues": [ + 110741, + 111031, + 113140, + 113246, + 113254 + ] + }, + { + "Name": "OrderQty", + "DataType": "smallint", + "Definition": "The OrderQty column in the SalesLT.SalesOrderDetail entity contains numerical values representing the quantity of items ordered in each sales transaction. The values are integers and typically reflect the number of units of a product ordered in a specific sales order detail. This column helps in understanding the volume of items being purchased in individual transactions.", + "AllowedValues": null, + "SampleValues": [ + 10, + 13, + 25, + 14, + 12 + ] + }, + { + "Name": "ProductID", + "DataType": "int", + "Definition": "The ProductID column in the SalesLT.SalesOrderDetail entity contains unique numeric identifiers for products associated with sales orders. Each value represents a specific product in the product catalog. The values are integers and are used to link each sales order detail to its corresponding product.", + "AllowedValues": null, + "SampleValues": [ + 925, + 884, + 797, + 865, + 875 + ] + }, + { + "Name": "UnitPrice", + "DataType": "money", + "Definition": "The UnitPrice column in the SalesLT.SalesOrderDetail entity contains the price per unit of items sold. The values are represented as decimal numbers, indicating the cost in a specific currency with four decimal places. This column is used to track the selling price of individual products within each sales order detail.", + "AllowedValues": null, + "SampleValues": [ + "24.2940", + "37.1520", + "430.5630", + "158.4300", + "72.1620" + ] + }, + { + "Name": "UnitPriceDiscount", + "DataType": "money", + "Definition": "The UnitPriceDiscount column in the SalesLT.SalesOrderDetail entity contains decimal values representing the discount applied to the unit price of an item in a sales order. The values are expressed as fractions of the unit price, where 1.0000 would represent a 100% discount and 0.0000 indicates no discount. The pattern shows values typically ranging between 0 and 1, representing various percentage discounts applied to the items sold.", + "AllowedValues": null, + "SampleValues": [ + "0.4000", + "0.1000", + "0.0500", + "0.0200", + "0.0000" + ] + }, + { + "Name": "LineTotal", + "DataType": "numeric", + "Definition": "The LineTotal column in the SalesLT.SalesOrderDetail entity contains the total cost for each sales order line item. The values are represented as decimal numbers, reflecting the monetary amount in a currency format to several decimal places. This column is used to calculate the total price for individual line items within a sales order, including any applicable discounts or adjustments.", + "AllowedValues": null, + "SampleValues": [ + "971.982000", + "149.016000", + "187.872000", + "10.992000", + "111.762000" + ] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The column rowguid in the SalesLT.SalesOrderDetail entity contains unique identifier values in the form of globally unique identifiers (GUIDs). Each value in this column is a 36-character string that follows the UUID (universally unique identifier) standard, typically consisting of alphanumeric characters separated by hyphens. This column is used to ensure each row in the table can be uniquely identified across different systems or databases.", + "AllowedValues": null, + "SampleValues": [ + "6781A019-346F-4F87-A8A3-4727A2528B2E", + "5CA4F84A-BAFE-485C-B7AD-897F741F76CE", + "DA8F6556-76DE-42AD-8A9A-9664B87B3078", + "B9961E3A-66A8-466F-941B-14A6858E1EB3", + "4778038A-7634-44FF-9D24-91B1E4B50A4C" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.SalesOrderDetail entity contains the date and time when a sales order detail was last modified. The values in this column follow the standard SQL datetime format 'YYYY-MM-DD HH:MM:SS'. This column is used to track changes and updates made to each sales order detail, indicating the most recent modification.", + "AllowedValues": null, + "SampleValues": [ + "2008-06-01 00:00:00" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderHeader.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderHeader.json index 5728ae6..bd6ae05 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderHeader.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderHeader.json @@ -1,249 +1,302 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The SalesOrderID column in the SalesLT.SalesOrderHeader entity contains unique identifiers for each sales order. The values are numerical and appear to be sequential, indicating the potential chronological creation of sales orders. Each SalesOrderID is a unique integer used to distinguish individual sales transactions within the database.", - "Name": "SalesOrderID", - "SampleValues": [ - 71895, - 71784, - 71936, - 71796, - 71776 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The RevisionNumber column in the SalesLT.SalesOrderHeader entity contains integer values that represent the number of revisions made to a sales order. Each time a sales order is modified, the revision number is incremented by one. This column is used to track changes and updates to sales orders over time. The values are typically low integers starting from 0.", - "Name": "RevisionNumber", - "SampleValues": [ - 2 - ], - "Type": "tinyint" - }, - { - "AllowedValues": null, - "Definition": "The OrderDate column in the SalesLT.SalesOrderHeader entity contains date and time values representing the exact date and time when a sales order was placed. The values follow the standard datetime format. This column is essential for tracking the order history and processing times, and it may be used for filtering data based on specific periods or timestamps.", - "Name": "OrderDate", - "SampleValues": [ - "2008-06-01 00:00:00" - ], - "Type": "datetime" - }, - { - "AllowedValues": null, - "Definition": "The DueDate column in the SalesLT.SalesOrderHeader entity contains timestamps indicating the due dates for sales orders. The values are formatted as datetime strings, including the date and time, typically set to midnight (00:00:00). The dates are provided in the standard 'YYYY-MM-DD HH:MI:SS' format and are used to indicate when the sales orders are expected to be fulfilled or completed.", - "Name": "DueDate", - "SampleValues": [ - "2008-06-13 00:00:00" - ], - "Type": "datetime" - }, - { - "AllowedValues": null, - "Definition": "The ShipDate column in the SalesLT.SalesOrderHeader entity contains the date and time when each sales order was shipped. The values in this column follow the standard datetime format of 'yyyy-MM-dd HH:mm:ss'. This column is essential for tracking the shipping schedule and delivery logistics of sales orders.", - "Name": "ShipDate", - "SampleValues": [ - "2008-06-08 00:00:00" - ], - "Type": "datetime" - }, - { - "AllowedValues": null, - "Definition": "The Status column in the SalesLT.SalesOrderHeader entity contains numerical codes representing the current status of a sales order. Each numerical value corresponds to a specific status within the sales order process. For instance, a status of 5 indicates a particular state of the order, which could be defined by the business rules governing the sales process.", - "Name": "Status", - "SampleValues": [ - 5 - ], - "Type": "tinyint" - }, - { - "AllowedValues": null, - "Definition": "The OnlineOrderFlag column in the SalesLT.SalesOrderHeader entity indicates whether an order was placed online. It contains Boolean values, with 'True' representing online orders and 'False' representing orders placed through other channels. This column helps identify the source of the sales order.", - "Name": "OnlineOrderFlag", - "SampleValues": [ - false - ], - "Type": "bit" - }, - { - "AllowedValues": null, - "Definition": "The SalesOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique identifiers for sales orders. Each sales order number follows a consistent pattern, typically starting with the prefix 'SO' followed by a series of digits. This column is used to uniquely identify and track individual sales orders within the database.", - "Name": "SalesOrderNumber", - "SampleValues": [ - "SO71946", - "SO71902", - "SO71796", - "SO71938", - "SO71782" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The PurchaseOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique purchase order numbers used to track individual sales orders. The values follow a specific format, starting with the prefix 'PO' followed by a varying series of digits. This format suggests that each purchase order number is a unique alphanumeric identifier used for sales transactions within the system.", - "Name": "PurchaseOrderNumber", - "SampleValues": [ - "PO13021155785", - "PO6119130779", - "PO4002189853", - "PO348186287", - "PO16153112278" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The AccountNumber column in the SalesLT.SalesOrderHeader entity contains alphanumeric values formatted with a pattern of numerical segments separated by hyphens. The values appear to follow a consistent format which includes three groups of digits, suggesting a structured coding system. This format likely represents specific account information used to uniquely identify sales orders within the system.", - "Name": "AccountNumber", - "SampleValues": [ - "10-4020-000016", - "10-4020-000649", - "10-4020-000466", - "10-4020-000106", - "10-4020-000223" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The CustomerID column in the SalesLT.SalesOrderHeader entity contains unique numeric identifiers assigned to each customer. These identifiers are used to link sales orders to the respective customers who placed them. The values are integers, typically in a sequential or near-sequential range, indicating the customer database's internal indexing mechanism.", - "Name": "CustomerID", - "SampleValues": [ - 30019, - 29638, - 30113, - 29922, - 29660 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The ShipToAddressID column in the SalesLT.SalesOrderHeader entity contains numeric identifiers that reference specific shipping addresses for sales orders. Each value in the column is a unique identifier that relates to an address in another table, likely a customer or company address database. The values are integers and do not follow a discernible sequential pattern, indicating they are likely auto-generated keys.", - "Name": "ShipToAddressID", - "SampleValues": [ - 1038, - 653, - 669, - 1090, - 659 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The BillToAddressID column in the SalesLT.SalesOrderHeader entity contains unique integer identifiers that reference the specific addresses where the billing statements are sent. Each ID corresponds to a distinct address in a separate table, usually an address or customer-related table. The values are numerical and do not follow a visible sequence, indicating likely primary key values used for joining tables in database queries.", - "Name": "BillToAddressID", - "SampleValues": [ - 999, - 653, - 992, - 989, - 651 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The ShipMethod column in the SalesLT.SalesOrderHeader entity contains the names of the shipping methods used for sales orders. The values represent different types of shipping methods, which may include specific transport services or carriers. Entries in this column are descriptive names of shipping options, typically indicating the mode or speed of transport.", - "Name": "ShipMethod", - "SampleValues": [ - "CARGO TRANSPORT 5" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The CreditCardApprovalCode column in the SalesLT.SalesOrderHeader entity contains alphanumeric codes used to approve credit card transactions for sales orders. Each code represents the authorization given by the credit card issuer for the transaction. This code is important for financial tracking and validation of payments, ensuring that the sales order has completed the credit card payment process successfully.", - "Name": "CreditCardApprovalCode", - "SampleValues": [], - "Type": "varchar" - }, - { - "AllowedValues": null, - "Definition": "The SubTotal column in the SalesLT.SalesOrderHeader entity contains numeric values representing the subtotal amount for each sales order. The values are in decimal format and include various amounts, likely reflecting the total cost of items before taxes and discounts are applied. This column is essential for calculating the overall financial metrics of sales transactions.", - "Name": "SubTotal", - "SampleValues": [ - "13823.7083", - "40.9045", - "88812.8625", - "2415.6727", - "602.1946" - ], - "Type": "money" - }, - { - "AllowedValues": null, - "Definition": "The TaxAmt column in the SalesLT.SalesOrderHeader entity contains the total tax amount for each sales order. The values are represented as decimal numbers with up to four decimal places, reflecting the precision in calculating the tax for various orders. The amounts can range from relatively small to quite large, indicating variability in the total value of the sales orders taxed.", - "Name": "TaxAmt", - "SampleValues": [ - "6242.3752", - "84.7448", - "7862.2953", - "4610.7707", - "161.3073" - ], - "Type": "money" - }, - { - "AllowedValues": null, - "Definition": "The Freight column in the SalesLT.SalesOrderHeader entity contains numerical values representing the cost of shipping associated with each sales order. Values are expressed in currency and likely represent monetary amounts in a specific unit, such as dollars. Each value is a precise decimal number, reflecting the variability in shipping costs based on factors like order size and shipping method.", - "Name": "Freight", - "SampleValues": [ - "22.0087", - "345.5927", - "1.9703", - "84.9541", - "26.4828" - ], - "Type": "money" - }, - { - "AllowedValues": null, - "Definition": "The TotalDue column in the SalesLT.SalesOrderHeader entity contains the total monetary amount due for each sales order. These values are represented as decimal numbers with four decimal places, indicating the precision required for financial calculations. The data typically reflects varying sizes of customer orders, which can range from smaller transactions to high-value purchases.", - "Name": "TotalDue", - "SampleValues": [ - "92663.5609", - "1261.4440", - "81834.9826", - "3293.7761", - "3673.3249" - ], - "Type": "money" - }, - { - "AllowedValues": null, - "Definition": "The Comment column in the SalesLT.SalesOrderHeader entity contains textual notes or remarks added by users regarding specific sales orders. These comments may include special instructions, observations, or any additional information that is relevant to the processing or delivery of the sales order. This column can contain null values if no comments were made for certain orders.", - "Name": "Comment", - "SampleValues": [], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The rowguid column in the SalesLT.SalesOrderHeader entity contains unique identifier values (GUIDs) that are used to ensure the distinct identification of each sales order record. These values follow the standard GUID format consisting of alphanumeric characters separated by hyphens. Each value is globally unique, providing a reliable way to distinguish records across distributed systems or databases.", - "Name": "rowguid", - "SampleValues": [ - "E68F7EE9-C581-45CD-9C4F-386AEDA74D84", - "A36EE74A-CF0D-4024-A1CE-4EAFFD1F85F0", - "BB3FEE84-C8BF-4DD2-BCCA-675AB6A11C38", - "ADDB8620-432A-456E-8470-1BEDD4BC3457", - "E3C189E7-98DE-4C40-B6C2-0D1D13F9BB33" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The column contains timestamp data representing the date and time when the sales order records were last modified. The values are formatted as date-time stamps in the format 'YYYY-MM-DD HH:MM:SS'. This information is crucial for tracking changes and maintaining data integrity within the sales order records.", - "Name": "ModifiedDate", - "SampleValues": [ - "2008-06-08 00:00:00" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.SalesOrderHeader entity contains detailed information about each sales order, including order dates, shipping details, status, and financial totals. It tracks important transactional data such as SalesOrderID, purchase and sales order numbers, customer and address identifiers, and payment-related fields. This entity can answer questions related to order tracking, financial performance per order, shipping methods, customer purchase history, and order processing times.", - "Entity": "SalesLT.SalesOrderHeader", - "EntityName": "Sales Order Summary" + "Entity": "SalesLT.SalesOrderHeader", + "Definition": "The SalesLT.SalesOrderHeader entity contains information about sales orders placed by customers. It includes details such as the order ID, dates related to the order (order date, due date, ship date), the status of the order, and the customer and address information. It also captures payment and shipping details, as well as financial totals like subtotal, tax amount, freight, and total due. This entity is useful for answering questions related to sales order histories, order processing statuses, customer purchase patterns, and financial analysis of sales transactions.", + "EntityName": "Sales Order Information", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.SalesOrderDetail", + "ForeignKeys": [ + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + }, + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + } + ] + }, + { + "ForeignEntity": "SalesLT.Address", + "ForeignKeys": [ + { + "Column": "BillToAddressID", + "ForeignColumn": "AddressID" + }, + { + "Column": "BillToAddressID", + "ForeignColumn": "AddressID" + }, + { + "Column": "ShipToAddressID", + "ForeignColumn": "AddressID" + } + ] + }, + { + "ForeignEntity": "SalesLT.Customer", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + }, + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address" + ], + "Columns": [ + { + "Name": "SalesOrderID", + "DataType": "int", + "Definition": "The SalesOrderID column in the SalesLT.SalesOrderHeader entity contains unique identifiers for each sales order. The values in this column are integers and increment sequentially. This column serves as the primary key for the sales order records, ensuring each sales order can be uniquely identified and referenced within the database.", + "AllowedValues": null, + "SampleValues": [ + 71917, + 71897, + 71796, + 71885, + 71782 + ] + }, + { + "Name": "RevisionNumber", + "DataType": "tinyint", + "Definition": "The RevisionNumber column in the SalesLT.SalesOrderHeader entity represents the version or revision of the sales order. Each time an order is modified, the RevisionNumber is incremented to indicate the most recent version. The values in this column are integers and typically start from 0, incrementing by 1 with each revision made to the sales order. This helps in tracking changes and maintaining the history of modifications to a sales order.", + "AllowedValues": null, + "SampleValues": [ + 2 + ] + }, + { + "Name": "OrderDate", + "DataType": "datetime", + "Definition": "The OrderDate column in the SalesLT.SalesOrderHeader entity contains the date and time when each sales order was placed. The values are represented in the standard SQL datetime format, typically including both the date and the time in the format 'YYYY-MM-DD HH:MM:SS'. This column is used to track and record the exact timestamp of each sales transaction.\n", + "AllowedValues": null, + "SampleValues": [ + "2008-06-01 00:00:00" + ] + }, + { + "Name": "DueDate", + "DataType": "datetime", + "Definition": "The DueDate column in the SalesLT.SalesOrderHeader entity contains the date and time by which the sales order is expected to be completed or delivered. The values in this column follow the standard date-time format 'YYYY-MM-DD HH:MI:SS', indicating the specific due date and time. This column is crucial for tracking the expected fulfillment dates of sales orders.", + "AllowedValues": null, + "SampleValues": [ + "2008-06-13 00:00:00" + ] + }, + { + "Name": "ShipDate", + "DataType": "datetime", + "Definition": "The ShipDate column in the SalesLT.SalesOrderHeader entity contains the dates when sales orders were shipped. The values in this column are stored in a datetime format indicating the precise date and time of shipment. The format includes the year, month, day, hour, minute, and second. This column is used to track and manage the shipment dates of orders for reporting and logistical purposes.", + "AllowedValues": null, + "SampleValues": [ + "2008-06-08 00:00:00" + ] + }, + { + "Name": "Status", + "DataType": "tinyint", + "Definition": "The Status column in the SalesLT.SalesOrderHeader entity likely indicates the current state or phase of a sales order. The values in this column are numerical and each number represents a specific status code that corresponds to a particular stage in the sales process. For instance, a status value of 5 may represent a specific stage, such as 'completed' or 'shipped', depending on the business context and defined status code mappings. The column helps in tracking and managing the progression of sales orders through different stages from initiation to completion.", + "AllowedValues": null, + "SampleValues": [ + 5 + ] + }, + { + "Name": "OnlineOrderFlag", + "DataType": "bit", + "Definition": "The OnlineOrderFlag column in the SalesLT.SalesOrderHeader entity indicates whether a sales order was placed online. This column contains boolean values where 'True' denotes an order placed through an online platform, and 'False' indicates an order placed through other means. This flag helps to differentiate between online and offline sales transactions.", + "AllowedValues": null, + "SampleValues": [ + false + ] + }, + { + "Name": "SalesOrderNumber", + "DataType": "nvarchar", + "Definition": "The SalesOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique identifiers for sales orders. Each identifier is prefixed with 'SO' followed by a sequence of digits. This pattern helps distinguish sales orders and makes them easily recognizable and sortable. These sales order numbers are typically used to reference specific transactions throughout the sales and fulfillment processes.", + "AllowedValues": null, + "SampleValues": [ + "SO71923", + "SO71867", + "SO71780", + "SO71815", + "SO71845" + ] + }, + { + "Name": "PurchaseOrderNumber", + "DataType": "nvarchar", + "Definition": "The PurchaseOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique identifiers for purchase orders. The values in this column follow a specific format, starting with the prefix \"PO\" followed by a series of digits. This column is used to track and reference individual purchase orders within the sales order system.", + "AllowedValues": null, + "SampleValues": [ + "PO17052159664", + "PO5713190501", + "PO2378131604", + "PO5539125166", + "PO6119130779" + ] + }, + { + "Name": "AccountNumber", + "DataType": "nvarchar", + "Definition": "The AccountNumber column in the SalesLT.SalesOrderHeader entity contains a unique identifier for each sales order, formatted as a string with numeric sections separated by hyphens. The format appears to be consistent, following a pattern of '10-4020-XXXXXX' where 'X' represents a series of digits. This standardized format helps in maintaining a structured and organized system for referencing sales orders.", + "AllowedValues": null, + "SampleValues": [ + "10-4020-000276", + "10-4020-000088", + "10-4020-000304", + "10-4020-000016", + "10-4020-000006" + ] + }, + { + "Name": "CustomerID", + "DataType": "int", + "Definition": "The CustomerID column in the SalesLT.SalesOrderHeader entity contains unique identifiers for customers who made purchases. The values are integers and each number corresponds to a specific customer in the database. These IDs are used to link sales orders to the respective customers who placed them.", + "AllowedValues": null, + "SampleValues": [ + 29584, + 29485, + 29932, + 29957, + 29922 + ] + }, + { + "Name": "ShipToAddressID", + "DataType": "int", + "Definition": "The ShipToAddressID column in the SalesLT.SalesOrderHeader entity contains numerical identifiers that correspond to specific shipping addresses within the database. Each value in this column uniquely represents a different address to which sales orders are shipped. This column is used to reference the address details stored in another related table, helping to maintain normalized data and efficient database management. The values are integers and are likely used as foreign keys connecting sales orders to shipping address records.", + "AllowedValues": null, + "SampleValues": [ + 1026, + 993, + 1090, + 649, + 669 + ] + }, + { + "Name": "BillToAddressID", + "DataType": "int", + "Definition": "The BillToAddressID column in the SalesLT.SalesOrderHeader entity contains numeric identifiers that correspond to the addresses where the bills are sent for each sales order. These identifiers are unique and serve as foreign keys linking to an address table, which provides detailed billing address information. Each value in this column uniquely identifies a specific billing address associated with a sales order.", + "AllowedValues": null, + "SampleValues": [ + 1038, + 640, + 1058, + 1034, + 649 + ] + }, + { + "Name": "ShipMethod", + "DataType": "nvarchar", + "Definition": "The ShipMethod column in the SalesLT.SalesOrderHeader entity contains the shipping method used for delivering the sales orders. This column typically includes the names or identifiers of various shipping carriers or services. Based on the sample value provided, it seems that shipping methods are described in a format that includes a carrier name followed by a numerical identifier or service level. This information is used to indicate how orders are shipped to customers, helping in logistics and tracking.", + "AllowedValues": null, + "SampleValues": [ + "CARGO TRANSPORT 5" + ] + }, + { + "Name": "CreditCardApprovalCode", + "DataType": "varchar", + "Definition": "The CreditCardApprovalCode column in the SalesLT.SalesOrderHeader entity contains the unique approval codes provided by credit card processors for transactions. These codes confirm that the credit card payment has been authorized and successfully processed for each sales order. The data in this column is typically alphanumeric and linked to individual sales transactions, ensuring that each credit card payment is verified.", + "AllowedValues": null, + "SampleValues": [] + }, + { + "Name": "SubTotal", + "DataType": "money", + "Definition": "The SubTotal column in the SalesLT.SalesOrderHeader entity contains the pre-tax sales amount for each sales order. These values are represented as decimal numbers indicating the sum of the item prices before any taxes or additional fees are applied. The values vary significantly, indicating a range of sales order totals from small to large amounts.", + "AllowedValues": null, + "SampleValues": [ + "106.5408", + "98278.6910", + "78.8100", + "13823.7083", + "1059.3100" + ] + }, + { + "Name": "TaxAmt", + "DataType": "money", + "Definition": "The TaxAmt column in the SalesLT.SalesOrderHeader entity contains the tax amount applied to each sales order. The values in this column are numeric and represent the monetary amount of tax in a sales transaction. The amounts can vary widely, likely depending on the total sale price and applicable tax rates. This column is essential for financial calculations and reporting related to sales taxes.", + "AllowedValues": null, + "SampleValues": [ + "265.9421", + "44.0309", + "1014.8712", + "6708.6741", + "8684.9465" + ] + }, + { + "Name": "Freight", + "DataType": "money", + "Definition": "The Freight column in the SalesLT.SalesOrderHeader entity contains numerical values representing the cost of shipping for each sales order. The values are given in a monetary format with up to four decimal places. These values can vary significantly depending on the size, weight, and destination of the shipment. The column helps track the shipping expenses associated with each order in the sales ledger.", + "AllowedValues": null, + "SampleValues": [ + "50.4085", + "1599.5247", + "61.3441", + "13.7597", + "84.9541" + ] + }, + { + "Name": "TotalDue", + "DataType": "money", + "Definition": "The TotalDue column in the SalesLT.SalesOrderHeader entity represents the total monetary amount due for each sales order. The values in this column are numeric and denote the final amount that needs to be paid, including any taxes and additional charges. The values can vary significantly, reflecting differing sizes and quantities of orders. This column is crucial for financial reporting and analysis related to sales transactions.", + "AllowedValues": null, + "SampleValues": [ + "14017.9083", + "87.0851", + "86222.8072", + "3754.9733", + "608.1766" + ] + }, + { + "Name": "Comment", + "DataType": "nvarchar", + "Definition": "The Comment column in the SalesLT.SalesOrderHeader entity contains text notes or remarks related to a specific sales order. These comments are typically entered by sales representatives or customer service personnel to provide additional context or information about the order. The data in this column can include special instructions, customer preferences, or any other relevant details that need to be communicated. This column may also be null if no comments were made for the order.", + "AllowedValues": null, + "SampleValues": [] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The rowguid column in the SalesLT.SalesOrderHeader entity contains unique identifier values for each record in the form of a globally unique identifier (GUID). These GUIDs are typically 128-bit numbers represented as a string of hexadecimal digits in a specific pattern, including dashes. This ensures that every value in the column is unique, which is useful for identifying records distinctly within the table.", + "AllowedValues": null, + "SampleValues": [ + "31D41E8F-6F43-4CAE-BEE3-3CCCB262F231", + "625D76FC-C26F-4149-BF24-939FB2BCCD77", + "BB3FEE84-C8BF-4DD2-BCCA-675AB6A11C38", + "96F84D24-3355-43D2-B5A3-55E97C17E58C", + "7033C6EC-B12C-45BC-BD96-56EFDE4C7DD0" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.SalesOrderHeader entity contains timestamp values indicating the date and time when each sales order record was last updated. The format of the data is typically in 'YYYY-MM-DD HH:MM:SS'. This column helps track changes and maintain the history of updates made to sales order records.", + "AllowedValues": null, + "SampleValues": [ + "2008-06-08 00:00:00" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.vGetAllCategories.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.vGetAllCategories.json index df27d95..72cfaa5 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.vGetAllCategories.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.vGetAllCategories.json @@ -1,45 +1,49 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The ParentProductCategoryName column in the SalesLT.vGetAllCategories entity contains the names of the primary categories of products. The values in this column categorize products into broad groups such as Components, Clothing, Bikes, and Accessories. This column helps in identifying and grouping related products under a common parent category.", - "Name": "ParentProductCategoryName", - "SampleValues": [ - "Components", - "Clothing", - "Bikes", - "Accessories" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The ProductCategoryName column in the SalesLT.vGetAllCategories entity contains names of product categories related to cycling accessories and equipment. This column includes various types of product categories such as frames, derailleurs, headsets, and other related items. The names are descriptive, indicating specific categories within the cycling industry.", - "Name": "ProductCategoryName", - "SampleValues": [ - "Mountain Frames", - "Derailleurs", - "Headsets", - "Pumps", - "Bottles and Cages" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The ProductCategoryID column in the SalesLT.vGetAllCategories entity contains numerical identifiers for different product categories. These IDs are unique integers assigned to each category to facilitate easy referencing in queries and reports. The values are distinct and correspond to various product categories within the dataset.", - "Name": "ProductCategoryID", - "SampleValues": [ - 24, - 31, - 10, - 16, - 39 - ], - "Type": "int" - } - ], - "Description": "The SalesLT.vGetAllCategories entity provides detailed information about product categories, including the names of parent product categories and specific product categories, along with their unique identification numbers. This entity is useful for retrieving comprehensive hierarchical data on product categories within a sales system. It can be especially helpful for questions related to product categorization, understanding category relationships, and organizing product data based on category hierarchy.", - "Entity": "SalesLT.vGetAllCategories", - "EntityName": "Product Categories Overview" + "Entity": "SalesLT.vGetAllCategories", + "Definition": "The SalesLT.vGetAllCategories entity provides information about product categories and subcategories within a sales database. It includes details about the names of parent product categories and their associated subcategories, along with unique identifiers for each product category. This entity can be used to answer questions related to the hierarchical structure of product categories, identifying parent categories for specific subcategories, and organizing products based on their categories.", + "EntityName": "Product Categories Overview", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [], + "CompleteEntityRelationshipsGraph": [], + "Columns": [ + { + "Name": "ParentProductCategoryName", + "DataType": "nvarchar", + "Definition": "The ParentProductCategoryName column in the SalesLT.vGetAllCategories entity contains the names of the top-level categories for products. These categories are broad classifications that group products into overarching segments. Sample values indicate categories such as Components, Clothing, Bikes, and Accessories. The values in this column help in organizing products into major groups for easier identification and management.", + "AllowedValues": null, + "SampleValues": [ + "Components", + "Clothing", + "Bikes", + "Accessories" + ] + }, + { + "Name": "ProductCategoryName", + "DataType": "nvarchar", + "Definition": "The ProductCategoryName column in the SalesLT.vGetAllCategories entity contains the names of various product categories. These categories represent different types of products available, likely related to sports or outdoor activities, such as cycling equipment and apparel. The values are generally descriptive names of product categories, ensuring that each category is easily identifiable.", + "AllowedValues": null, + "SampleValues": [ + "Tights", + "Derailleurs", + "Bike Stands", + "Mountain Bikes", + "Vests" + ] + }, + { + "Name": "ProductCategoryID", + "DataType": "int", + "Definition": "The ProductCategoryID column in the SalesLT.vGetAllCategories entity contains unique numerical identifiers for different product categories. Each value represents a specific category within the product catalog, allowing for the classification and organization of products. These identifiers are likely used as foreign keys to link product data with their respective categories. The values are integers without any specific pattern other than being unique to each category.", + "AllowedValues": null, + "SampleValues": [ + 37, + 38, + 8, + 22, + 17 + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductAndDescription.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductAndDescription.json index dc66371..33f035d 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductAndDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductAndDescription.json @@ -1,72 +1,76 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The ProductID column in the SalesLT.vProductAndDescription entity contains unique numerical identifiers for products. These IDs are integers and are used to distinctly identify each product within the database. Each ProductID is unique to a particular product and is used to join with other tables, retrieve specific product details, and manage inventory or sales data.", - "Name": "ProductID", - "SampleValues": [ - 995, - 736, - 846, - 923, - 818 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The Name column in the SalesLT.vProductAndDescription entity contains the names of various products. The product names include specific details such as model, color, size, and type. The naming convention often includes a combination of letters and numbers, and can include descriptors such as colors and sizes. This pattern indicates that each name is descriptive and provides pertinent information about the product's key attributes.", - "Name": "Name", - "SampleValues": [ - "HL Mountain Frame - Silver, 46", - "LL Touring Handlebars", - "Road-650 Black, 52", - "Touring-1000 Yellow, 46", - "LL Headset" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The ProductModel column in the SalesLT.vProductAndDescription entity contains the names of product models in a textual format. Each product model name typically describes a specific type of product or component associated with bicycles and biking accessories. The values often include descriptors such as the product type and may contain prefixes indicating specific lines or categories, such as \"HL\" and \"LL.\" This column helps in categorizing and identifying different bicycle-related products within the database.", - "Name": "ProductModel", - "SampleValues": [ - "HL Crankset", - "Fender Set - Mountain", - "Mountain Bike Socks", - "LL Mountain Handlebars", - "HL Mountain Rear Wheel" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Culture column in the SalesLT.vProductAndDescription entity contains culture or language codes that follow a standard format, often used to represent linguistic and cultural settings. These codes can be either two-letter ISO 639-1 language codes or combinations that include additional specificity such as regional dialects or script variations. Examples include 'he' for Hebrew, 'fr' for French, 'zh-cht' for traditional Chinese, 'en' for English, and 'th' for Thai. This data is used to denote the language or cultural context applicable to product descriptions.", - "Name": "Culture", - "SampleValues": [ - "he ", - "fr ", - "zh-cht", - "en ", - "th " - ], - "Type": "nchar" - }, - { - "AllowedValues": null, - "Definition": "The Description column in the SalesLT.vProductAndDescription entity contains detailed product descriptions in various languages. These descriptions provide specific information about the product\u2019s material, design, and features. The data may include technical specifications, usage instructions, and benefits, catering to international customers by offering descriptions in multiple languages.", - "Name": "Description", - "SampleValues": [ - "\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e08\u0e32\u0e01\u0e2d\u0e25\u0e39\u0e21\u0e34\u0e40\u0e19\u0e35\u0e22\u0e21\u0e2d\u0e31\u0e25\u0e25\u0e2d\u0e22\u0e0a\u0e19\u0e34\u0e14\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e2a\u0e38\u0e14\u0e22\u0e2d\u0e14\u0e40\u0e1f\u0e23\u0e21 HL \u0e40\u0e1f\u0e23\u0e21 ML \u0e19\u0e35\u0e49\u0e21\u0e35\u0e19\u0e49\u0e33\u0e2b\u0e19\u0e31\u0e01\u0e40\u0e1a\u0e32 \u0e2a\u0e23\u0e49\u0e32\u0e07\u0e02\u0e36\u0e49\u0e19\u0e15\u0e32\u0e21\u0e02\u0e19\u0e32\u0e14\u0e17\u0e35\u0e48\u0e43\u0e2b\u0e49\u0e04\u0e27\u0e32\u0e21\u0e41\u0e02\u0e47\u0e07\u0e41\u0e01\u0e23\u0e48\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e25\u0e34\u0e28 \u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e19\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e2a\u0e38\u0e20\u0e32\u0e1e\u0e2a\u0e15\u0e23\u0e35", - "\u05d3\u05d5\u05d5\u05e9\u05d5\u05ea \u05dc\u05dc\u05d0 \u05d7\u05d1\u05e7\u05d9\u05dd \u2013 \u05d0\u05dc\u05d5\u05de\u05d9\u05e0\u05d9\u05d5\u05dd.", - "\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e30\u0e14\u0e27\u0e01 \u0e02\u0e19\u0e32\u0e14\u0e01\u0e30\u0e17\u0e31\u0e14\u0e23\u0e31\u0e14 \u0e43\u0e2a\u0e48\u0e1e\u0e2d\u0e14\u0e35\u0e01\u0e23\u0e30\u0e40\u0e1b\u0e4b\u0e32 \u0e01\u0e23\u0e30\u0e1a\u0e2d\u0e01\u0e2d\u0e25\u0e39\u0e21\u0e34\u0e40\u0e19\u0e35\u0e22\u0e21 \u0e02\u0e19\u0e32\u0e14 160psi", - "Conception robuste permettant d'absorber les chocs et d'offrir une conduite plus pr\u00e9cise.", - "\u05d7\u05e8\u05d9\u05e6\u05d9 \u05e6\u05de\u05d9\u05d2 \u05d6\u05d4\u05d9\u05dd \u05dc\u05d0\u05dc\u05d4 \u05d4\u05de\u05e6\u05d5\u05d9\u05d9\u05dd \u05d1\u05e6\u05de\u05d9\u05d2\u05d9\u05dd \u05d9\u05e7\u05e8\u05d9\u05dd \u05d9\u05d5\u05ea\u05e8, \u05d0\u05d5\u05dc\u05dd \u05e2\u05dd \u05d9\u05e6\u05d9\u05e7\u05ea \u05ea\u05d9\u05dc\u05d9 \u05e6\u05de\u05d9\u05d2 \u05d9\u05e7\u05e8\u05d4 \u05e4\u05d7\u05d5\u05ea." - ], - "Type": "nvarchar" - } - ], - "Description": "The SalesLT.vProductAndDescription entity provides detailed information about products including their ID, name, model, and descriptions in different cultures. It is useful for retrieving product details such as names and descriptions for various languages or cultural contexts. This entity is ideal for answering questions related to product information and multilingual product descriptions.", - "Entity": "SalesLT.vProductAndDescription", - "EntityName": "Product and Description Data" + "Entity": "SalesLT.vProductAndDescription", + "Definition": "The SalesLT.vProductAndDescription entity provides detailed information about products, including their unique identifier (ProductID), name, product model, and associated descriptions in different cultures. This entity is useful for queries that require product details along with multilingual descriptions. It can answer questions related to product identification, model specifications, and cultural descriptions of products for localization purposes.", + "EntityName": "Product and Description Information", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [], + "CompleteEntityRelationshipsGraph": [], + "Columns": [ + { + "Name": "ProductID", + "DataType": "int", + "Definition": "The column ProductID in the SalesLT.vProductAndDescription entity contains unique numeric identifiers for each product in the system. Each value in this column represents a specific product and is used to differentiate and reference individual products within the database. The values are whole numbers and there is no specific pattern or order to the numbering.", + "AllowedValues": null, + "SampleValues": [ + 764, + 826, + 986, + 911, + 805 + ] + }, + { + "Name": "Name", + "DataType": "nvarchar", + "Definition": "The Name column in the SalesLT.vProductAndDescription entity contains product names that describe various items. The values typically include the product type and additional attributes such as color, size, or specific model descriptions. The format often involves a combination of text and numbers, indicating various characteristics of the products, such as size in inches or specific variations of the item. This column helps identify and differentiate products within the sales inventory.", + "AllowedValues": null, + "SampleValues": [ + "Road-750 Black, 44", + "HL Touring Handlebars", + "LL Touring Frame - Yellow, 54", + "Mountain Bike Socks, M", + "HL Road Frame - Black, 48" + ] + }, + { + "Name": "ProductModel", + "DataType": "nvarchar", + "Definition": "The ProductModel column in the SalesLT.vProductAndDescription entity contains the names of different product models. These names are generally descriptive of the product and often include details such as the type and specific features of the product. The values can include combinations of product categories, model names, and specific attributes, potentially reflecting variations designed for different uses or specifications. This column helps in identifying and differentiating between various products available in the inventory.", + "AllowedValues": null, + "SampleValues": [ + "ML Mountain Pedal", + "ML Touring Seat/Saddle", + "Road-150", + "Water Bottle", + "HL Mountain Tire" + ] + }, + { + "Name": "Culture", + "DataType": "nchar", + "Definition": "The Culture column in the SalesLT.vProductAndDescription entity contains language culture codes used to represent specific languages or language variants. These codes typically follow the ISO 639-1 standard for language codes, which use two-letter abbreviations, and can also include additional specifications such as region or script variants. Examples include 'ar' for Arabic, 'he' for Hebrew, 'fr' for French, 'en' for English, and 'zh-cht' for Traditional Chinese. This column helps in identifying the appropriate language or cultural version of the product description.", + "AllowedValues": null, + "SampleValues": [ + "ar ", + "he ", + "fr ", + "en ", + "zh-cht" + ] + }, + { + "Name": "Description", + "DataType": "nvarchar", + "Definition": "The Description column in the SalesLT.vProductAndDescription entity contains product descriptions in various languages. These descriptions provide details about the products, including their features, uses, and benefits. The text in this column can include phrases that highlight the product's quality, material, design, and specific target audience. The text is generally descriptive and aims to offer potential customers valuable information about the product.", + "AllowedValues": null, + "SampleValues": [ + "\u05d8\u05d1\u05e2\u05ea \u05e0\u05d8\u05d5\u05dc\u05ea \u05ea\u05d1\u05e8\u05d9\u05d2 \u05de\u05e1\u05e4\u05e7\u05ea \u05d0\u05d9\u05db\u05d5\u05ea \u05d1\u05de\u05d7\u05d9\u05e8 \u05d7\u05e1\u05db\u05d5\u05e0\u05d9.", + "\u0623\u0646\u0628\u0648\u0628\u0629 \u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u0623\u063a\u0631\u0627\u0636.", + "\u05de\u05e1\u05d2\u05e8\u05ea \u05d4- HL \u05de\u05d0\u05dc\u05d5\u05de\u05d9\u05e0\u05d9\u05d5\u05dd \u05de\u05e2\u05d5\u05e6\u05d1\u05ea \u05d1\u05d4\u05ea\u05d0\u05de\u05d4 \u05d4\u05df \u05dc\u05de\u05e8\u05d0\u05d4 \u05d8\u05d5\u05d1 \u05d5\u05d4\u05df \u05dc\u05d7\u05d5\u05d6\u05e7; \u05d4\u05d9\u05d0 \u05ea\u05e2\u05de\u05d5\u05d3 \u05d1\u05d0\u05ea\u05d2\u05e8\u05d9\u05dd \u05d4\u05de\u05d7\u05de\u05d9\u05e8\u05d9\u05dd \u05d1\u05d9\u05d5\u05ea\u05e8 \u05e9\u05dc \u05e8\u05db\u05d9\u05d1\u05d4 \u05d9\u05d5\u05de\u05d9\u05d5\u05de\u05d9\u05ea. \u05d2\u05d9\u05e8\u05e1\u05d4 \u05dc\u05d2\u05d1\u05e8\u05d9\u05dd.", + "\u9ad8\u5f3a\u5ea6\u7684\u66f2\u81c2\u3002", + "\u7537\u58eb\u516b\u62fc\u7247\u7ade\u8d5b\u7528\u8fd0\u52a8\u77ed\u88e4 \u2013 \u6c28\u7eb6\u6750\u8d28\u3001\u5f39\u6027\u8170\u5e26\u5e76\u5e26\u817f\u5939\u3002" + ] + } + ] } diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductModelCatalogDescription.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductModelCatalogDescription.json index aa6753f..5662f8c 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductModelCatalogDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductModelCatalogDescription.json @@ -1,288 +1,292 @@ { - "Columns": [ - { - "AllowedValues": null, - "Definition": "The ProductModelID column in the SalesLT.vProductModelCatalogDescription entity contains unique identifiers for product models. Each ProductModelID is an integer value that references a specific model of a product in the database. This column is used to associate catalog descriptions with their corresponding product models. The values are numeric and typically correspond to product models within the database's defined range.", - "Name": "ProductModelID", - "SampleValues": [ - 28, - 23, - 34, - 35, - 19 - ], - "Type": "int" - }, - { - "AllowedValues": null, - "Definition": "The Name column in the SalesLT.vProductModelCatalogDescription entity contains product model names primarily related to various types of bicycles. The naming pattern includes the type of bicycle (e.g., Road, Mountain, Touring) followed by a numeric designation, which likely indicates the model number or series. The values appear to be descriptive identifiers that uniquely distinguish different bicycle models.", - "Name": "Name", - "SampleValues": [ - "Road-450", - "Mountain-100", - "Mountain-500", - "Road-150", - "Touring-1000" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Summary column in the SalesLT.vProductModelCatalogDescription entity contains brief descriptive texts about various bikes. These descriptions highlight key features, unique selling points, and benefits of the bikes, often focusing on aspects such as design, performance, comfort, and versatility. The text often mentions specific components and qualities like aerodynamic design, lightweight frames, smooth suspension, and broad gear ranges, catering to both competitive and casual riders.", - "Name": "Summary", - "SampleValues": [ - "A true multi-sport bike that offers streamlined riding and a revolutionary design. Aerodynamic design lets you ride with the pros, and the gearing will conquer hilly roads. ", - "Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame,super-smooth front suspension, and traction for all terrain. ", - "This bike is ridden by race winners. Developed with theAdventure Works Cycles professional race team, it has a extremely lightheat-treated aluminum frame, and steering that allows precision control. ", - "Travel in style and comfort. Designed for maximum comfort and safety.Wide gear range takes on all hills. High-tech aluminum alloy construction provides durability without added weight. ", - "Suitable for any type of riding, on or off-road.Fits any budget. Smooth-shifting with a comfortable ride. " - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Manufacturer column in the SalesLT.vProductModelCatalogDescription entity contains the names of companies or brands that produce the products listed. In the provided sample, the value 'AdventureWorks' suggests that the manufacturer names might be specific to brands associated with AdventureWorks or similar companies. The column is likely to contain consistent naming conventions for different manufacturers within the context of the product catalog descriptions.", - "Name": "Manufacturer", - "SampleValues": [ - "AdventureWorks" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The column contains copyright information associated with product model catalog descriptions. The data typically includes the year of copyright in a four-digit format (e.g., 2002). This suggests that the column tracks the year when the catalog description was copyrighted.", - "Name": "Copyright", - "SampleValues": [ - "2002" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The ProductURL column in the SalesLT.vProductModelCatalogDescription entity contains URL links to product pages. These links are designed to provide online access to detailed information about the products. The URLs typically adhere to a common structure, indicating they are hosted on the Adventure Works website.", - "Name": "ProductURL", - "SampleValues": [ - "HTTP://www.Adventure-works.com" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The WarrantyPeriod column in the SalesLT.vProductModelCatalogDescription entity contains the duration of the warranty offered for each product. The values are expressed in years, indicating the number of years a product is covered under warranty. The format follows a numeric value followed by the word \"years\" or \"year\" for a single year.", - "Name": "WarrantyPeriod", - "SampleValues": [ - "4 years", - "3 years", - "1 year" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The WarrantyDescription column in the SalesLT.vProductModelCatalogDescription entity contains textual descriptions of warranty coverage associated with various products. These descriptions typically include terms such as 'parts and labor,' indicating the scope of warranty service provided. The value provides customers with details on what aspects of the product are covered under the warranty terms.", - "Name": "WarrantyDescription", - "SampleValues": [ - "parts and labor" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The NoOfYears column in the SalesLT.vProductModelCatalogDescription entity contains the duration in years associated with a product model's warranty or lifespan. The values are represented as a number followed by the word \"years,\" indicating the time frame in years. Each entry specifies the number of years, such as \"7 years\" or \"3 years,\" reflecting the warranty or expected lifespan of the product model.", - "Name": "NoOfYears", - "SampleValues": [ - "7 years", - "5 years", - "3 years", - "10 years" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The MaintenanceDescription column in the SalesLT.vProductModelCatalogDescription entity contains textual descriptions related to the availability of maintenance contracts for products. These descriptions typically inform the customer about the option to obtain maintenance services through dealers or retail stores. The text often mentions specific points of contact or locations where maintenance services can be arranged, such as dealers or AdventureWorks retail stores.", - "Name": "MaintenanceDescription", - "SampleValues": [ - "maintenance contract available through your dealer or any AdventureWorks retail store.", - "maintenance contact available through dealer or any Adventure Works Cycles retail store.", - "maintenance contact available through dealer" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Wheel column in the SalesLT.vProductModelCatalogDescription entity contains textual descriptions of various types of wheels. The descriptions highlight specific features and benefits of the wheels, such as strength, stability, performance, aerodynamics, and materials used. The content is geared towards providing potential customers with detailed information about the quality and specifications of the wheels, which may include details about rims, spokes, and tires.", - "Name": "Wheel", - "SampleValues": [ - "Strong wheels with double-walled rims.", - "Stable, durable wheels suitable for novice riders.", - "High performance wheels.", - "Excellent aerodynamic rims guarantee a smooth ride.", - "Aluminum alloy rim with stainless steel spokes; built for speed on our high quality rubber tires." - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Saddle column in the SalesLT.vProductModelCatalogDescription entity contains text descriptions of different types of bicycle saddles. These descriptions highlight various features and qualities of the saddles such as comfort, material composition, weight, and design improvements for enhanced riding experiences. The text typically includes specifics about the saddle's construction, like materials used and benefits provided to the rider, such as pressure relief or impact absorption.", - "Name": "Saddle", - "SampleValues": [ - "Cut-out shell for a more comfortable ride.", - "Comfortable saddle with bump absorping rubber bumpers.", - "Lightweight kevlar racing saddle.", - "New design relieves pressure for long rides.", - "Made from synthetic leather and features gel padding for increased comfort." - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Pedal column in the SalesLT.vProductModelCatalogDescription entity contains descriptive text detailing the features and characteristics of different bicycle pedals. These descriptions highlight various features such as adjustability, platform size, and stability, which cater to different types of riding needs and preferences. The information is presented in a sentence format, offering insight into the specific benefits and uses of each pedal model.", - "Name": "Pedal", - "SampleValues": [ - "Top-of-the-line clipless pedals with adjustable tension.", - "Expanded platform so you can ride in any shoes; great for all-around riding.", - "A stable pedal for all-day riding." - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The BikeFrame column in the SalesLT.vProductModelCatalogDescription entity contains detailed descriptions of bike frames, focusing on their material, construction, and performance attributes. The descriptions mention characteristics such as custom shaping, strength, lightweight design, welding and heat treatment, and specific manufacturing techniques. The information is aimed at highlighting the quality and technological innovations of the bike frames, which are typically made from aluminum alloy.", - "Name": "BikeFrame", - "SampleValues": [ - "The aluminum frame is custom-shaped for both good looks and strength;it will withstand the most rigorous challenges of daily riding.", - "Our lightest and best quality aluminum frame made from the newest alloy;it is welded and heat-treated for strength.Our innovative design results in maximum comfort and performance.", - "Our best value frame utilizing the same, ground-breaking technology as the ML aluminum frame.", - "Each frame is hand-crafted in our Bothell facility to the optimum diameterand wall-thickness required of a premium mountain frame.The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.", - "aluminum alloy frame and features a lightweight down-tube milled to the perfect diameter for optimal strength." - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Crankset column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the crankset components of bicycles. These descriptions typically highlight specific features and qualities of the crankset, such as materials used (e.g., aluminum), attributes like rigidity and strength, and performance aspects such as shifting capabilities. The information in this column is used to inform potential buyers about the key characteristics of the crankset.", - "Name": "Crankset", - "SampleValues": [ - " Triple crankset; alumunim crank arm; flawless shifting. ", - " Super rigid spindle. ", - " High-strength crank arm. " - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The PictureAngle column in the SalesLT.vProductModelCatalogDescription entity contains values that indicate the angle from which a product picture is taken. For example, a common value is 'front,' suggesting the image is taken from the front view of the product. This column helps specify the perspective of the product images used in the catalog, aiding in visual representation for customers.", - "Name": "PictureAngle", - "SampleValues": [ - "front" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The PictureSize column in the SalesLT.vProductModelCatalogDescription entity contains text values indicating the size category of product images. The sample value \"small\" suggests that this column likely categorizes image sizes into predefined types, such as \"small,\" \"medium,\" or \"large.\" This categorization helps in identifying and filtering products based on the size of their images in the catalog.", - "Name": "PictureSize", - "SampleValues": [ - "small" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The ProductPhotoID column in the SalesLT.vProductModelCatalogDescription entity contains unique numeric identifiers for product photos. Each identifier corresponds to a specific product image within the catalog, allowing for the association of visual representations with product models. The values are integers and do not follow a particular sequence, indicating that each product photo is assigned a distinct ID.", - "Name": "ProductPhotoID", - "SampleValues": [ - "87", - "126", - "118", - "111", - "1" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Material column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the materials used in product manufacturing. The values often include types of metals such as Aluminum and specific alloys. The column entries typically consist of concise material specifications, sometimes with slight variations in naming conventions.", - "Name": "Material", - "SampleValues": [ - "Aluminum Alloy", - "Aluminum", - "Almuminum Alloy" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Color column in the SalesLT.vProductModelCatalogDescription entity contains descriptive text indicating the range of colors available for a product. The descriptions often emphasize the variety of colors, such as availability in most colors or all colors, and may occasionally specify exceptions or exclusions. These values provide a general overview of color options for product models without listing specific colors.", - "Name": "Color", - "SampleValues": [ - "Available in most colors.", - "Available in most colors", - "Available in all colors.", - "Available in all colors except metallic." - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The ProductLine column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of different types of bicycles offered. The values indicate the category of the bike, such as Touring bike, Road bike, and Mountain bike. These descriptive names are used to classify the products into specific categories based on their intended use and features.", - "Name": "ProductLine", - "SampleValues": [ - "Touring bike", - "Road bike", - "Mountain bike" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The Style column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the target audience for the products, likely indicating the gender demographic. Common values include terms like 'Unisex' and 'Men's', which suggest the product's intended market segment. These values help in categorizing and filtering products based on the gender suitability of the merchandise.", - "Name": "Style", - "SampleValues": [ - "Unisex", - "Men's" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The RiderExperience column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of riders' skill levels that a particular product is suitable for. These values typically range from novice to professional, indicating a progression in skill proficiency. The column uses a combination of words like \"Novice,\" \"Intermediate,\" \"Advanced,\" and \"Professional\" to categorize the riding experience levels.", - "Name": "RiderExperience", - "SampleValues": [ - "Novice to Intermediate riders", - "Novice to Advanced riders", - "Intermediate to Professional riders", - "Intermediate to Advanced riders", - "Advanced to Professional riders" - ], - "Type": "nvarchar" - }, - { - "AllowedValues": null, - "Definition": "The rowguid column in the SalesLT.vProductModelCatalogDescription entity contains unique identifier values in the GUID (Globally Unique Identifier) format. These values are used to uniquely distinguish each row in the table, ensuring that each entry can be identified independently of others. The format follows the standard 8-4-4-4-12 pattern, common for GUIDs.", - "Name": "rowguid", - "SampleValues": [ - "AA10D9E6-E33F-4DA8-ACE1-992FCD6BB171", - "FCA0665B-B956-489A-A5EC-6F0B4AA14D02", - "8456BB94-B4DD-4A47-A76B-D0E54AB4285D", - "94FFB702-0CBC-4E3F-B840-C51F0D11C8F6", - "52E7F2C1-DBFF-4518-927D-C7D46F9ED32E" - ], - "Type": "uniqueidentifier" - }, - { - "AllowedValues": null, - "Definition": "The ModifiedDate column in the SalesLT.vProductModelCatalogDescription entity contains timestamps indicating the date and time when each record was last modified. The format follows standard SQL datetime structure, which includes both date and time details down to fractional seconds. This column is used to track and manage updates to the catalog descriptions of product models.", - "Name": "ModifiedDate", - "SampleValues": [ - "2006-11-20 09:56:38.273000", - "2005-06-01 00:00:00" - ], - "Type": "datetime" - } - ], - "Description": "The SalesLT.vProductModelCatalogDescription entity includes detailed information about various product models, such as their names, summaries, manufacturers, and warranty details. It also covers specifications like wheel type, saddle, pedal, bike frame, and crankset, along with visual attributes like picture angle, size, and product photos. This entity is useful for answering questions related to the description, warranty, and physical features of different product models, providing insights into product specifications and visual representations.", - "Entity": "SalesLT.vProductModelCatalogDescription", - "EntityName": "Product Model Catalog Descriptions" + "Entity": "SalesLT.vProductModelCatalogDescription", + "Definition": "The SalesLT.vProductModelCatalogDescription entity holds detailed catalog information about product models for sales analysis. This entity includes descriptions and specifications such as product name, manufacturer details, maintenance information, and product features like materials, colors, and rider experience. It also contains metadata like product URLs, photo IDs, and warranty details. This entity is used to answer questions related to specific product model descriptions, specification comparisons, and catalog presentation for marketing or sales purposes.", + "EntityName": "Product Model Catalog Description", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [], + "CompleteEntityRelationshipsGraph": [], + "Columns": [ + { + "Name": "ProductModelID", + "DataType": "int", + "Definition": "The ProductModelID column in the SalesLT.vProductModelCatalogDescription entity contains numerical identifiers used to uniquely represent different product models. These values are integers that act as keys to distinguish various products within the catalog. Each integer value corresponds to a specific product model, ensuring that each model can be referenced and identified without ambiguity.", + "AllowedValues": null, + "SampleValues": [ + 34, + 35, + 25, + 19, + 23 + ] + }, + { + "Name": "Name", + "DataType": "nvarchar", + "Definition": "The Name column in the SalesLT.vProductModelCatalogDescription entity contains a list of product names for different bicycle models. The names typically include a type or style of bicycle followed by a numeric identifier, indicating either a model series or version. The values are generally descriptive and use a combination of letters and numbers to differentiate between various models and styles of bicycles, such as Touring, Road, and Mountain.", + "AllowedValues": null, + "SampleValues": [ + "Touring-1000", + "Touring-2000", + "Road-450", + "Road-150", + "Mountain-100" + ] + }, + { + "Name": "Summary", + "DataType": "nvarchar", + "Definition": "The Summary column in the SalesLT.vProductModelCatalogDescription entity contains brief descriptions of product models, focusing on their key features and benefits. These summaries highlight specific characteristics, performance enhancements, and unique selling points of each product. The text often emphasizes aspects such as design, construction, functionality, and intended use. These descriptions are meant to provide prospective buyers with a quick understanding of what makes each product model appealing and suitable for their needs.", + "AllowedValues": null, + "SampleValues": [ + "Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame,super-smooth front suspension, and traction for all terrain. ", + "This bike is ridden by race winners. Developed with theAdventure Works Cycles professional race team, it has a extremely lightheat-treated aluminum frame, and steering that allows precision control. ", + "The plush custom saddle keeps you riding all day, and there's plenty of space to add panniers and bike bags to the newly-redesigned carrier.This bike has great stability when fully-loaded. ", + "A true multi-sport bike that offers streamlined riding and a revolutionary design. Aerodynamic design lets you ride with the pros, and the gearing will conquer hilly roads. ", + "Suitable for any type of riding, on or off-road.Fits any budget. Smooth-shifting with a comfortable ride. " + ] + }, + { + "Name": "Manufacturer", + "DataType": "nvarchar", + "Definition": "The Manufacturer column in the SalesLT.vProductModelCatalogDescription entity contains the names of companies that produce or distribute the products listed in the catalog. In this dataset, it appears to be typically filled with the name \"AdventureWorks,\" which suggests that this column might commonly or exclusively hold the value representing the AdventureWorks company. This column would be used to identify which manufacturer's products are being described in the catalog.", + "AllowedValues": null, + "SampleValues": [ + "AdventureWorks" + ] + }, + { + "Name": "Copyright", + "DataType": "nvarchar", + "Definition": "The Copyright column in the SalesLT.vProductModelCatalogDescription entity contains the year indicating the copyright date for the catalog descriptions of product models. The values in this column follow a four-digit year format, representing the year in which the copyright was established. This column primarily helps in identifying the version or time frame associated with the catalog's descriptions.", + "AllowedValues": null, + "SampleValues": [ + "2002" + ] + }, + { + "Name": "ProductURL", + "DataType": "nvarchar", + "Definition": "The ProductURL column in the SalesLT.vProductModelCatalogDescription entity contains URLs for product information or product pages on the Adventure Works website. The values are formatted as complete web addresses, typically starting with 'HTTP://'. These URLs are used to link to detailed product descriptions or additional resources hosted online. The values follow a standard URL format, ensuring easy access to the product's web page.", + "AllowedValues": null, + "SampleValues": [ + "HTTP://www.Adventure-works.com" + ] + }, + { + "Name": "WarrantyPeriod", + "DataType": "nvarchar", + "Definition": "The WarrantyPeriod column in the SalesLT.vProductModelCatalogDescription entity contains information about the duration of the warranty for each product model. The values in this column are expressed in years, indicating the length of time the warranty is valid. The pattern observed in the sample values shows that the warranty periods are specified in whole years, such as 1 year, 3 years, and 4 years. This column helps to understand the terms of warranty coverage for the products listed.", + "AllowedValues": null, + "SampleValues": [ + "4 years", + "3 years", + "1 year" + ] + }, + { + "Name": "WarrantyDescription", + "DataType": "nvarchar", + "Definition": "The WarrantyDescription column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the warranty coverage for different product models. The information typically includes the scope of the warranty, such as parts and labor, and may detail the specific terms and conditions that apply. Values in this column likely describe various aspects of the warranty provided with the products, ensuring customers are informed about the protection and services available.", + "AllowedValues": null, + "SampleValues": [ + "parts and labor" + ] + }, + { + "Name": "NoOfYears", + "DataType": "nvarchar", + "Definition": "The NoOfYears column in the SalesLT.vProductModelCatalogDescription entity contains units of time in years, indicating the duration associated with a product model. The values are formatted as a number followed by the word \"years,\" indicating the total number of years. This column helps determine the longevity or time span related to the product model featured in the catalog description.", + "AllowedValues": null, + "SampleValues": [ + "7 years", + "5 years", + "3 years", + "10 years" + ] + }, + { + "Name": "MaintenanceDescription", + "DataType": "nvarchar", + "Definition": "The MaintenanceDescription column in the SalesLT.vProductModelCatalogDescription entity contains textual descriptions of maintenance-related information for products. The descriptions typically indicate the availability of maintenance contracts and may specify the points of contact, such as dealers or retail stores, where these maintenance services can be obtained. The text generally follows a pattern of mentioning maintenance contracts and specifying the locations where they are available.", + "AllowedValues": null, + "SampleValues": [ + "maintenance contract available through your dealer or any AdventureWorks retail store.", + "maintenance contact available through dealer or any Adventure Works Cycles retail store.", + "maintenance contact available through dealer" + ] + }, + { + "Name": "Wheel", + "DataType": "nvarchar", + "Definition": "The Wheel column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of different types of wheels used in various product models. These descriptions focus on the features and qualities of the wheels, such as their material, durability, performance, and intended user experience. The values are written as detailed sentences highlighting specific characteristics, such as double-walled rims, aerodynamic rims, or aluminum alloy construction, and are aimed at informing potential buyers about the benefits of the wheels.", + "AllowedValues": null, + "SampleValues": [ + "Strong wheels with double-walled rims.", + "Stable, durable wheels suitable for novice riders.", + "High performance wheels.", + "Excellent aerodynamic rims guarantee a smooth ride.", + "Aluminum alloy rim with stainless steel spokes; built for speed on our high quality rubber tires." + ] + }, + { + "Name": "Saddle", + "DataType": "nvarchar", + "Definition": "The Saddle column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various product features specific to bicycle saddles. These descriptions highlight aspects such as comfort, design, material, and specific enhancements like rubber bumpers, cut-out shells, and gel padding. The descriptions are detailed and focus on the benefits and attributes that make the saddles suitable for different types of rides and user comfort.", + "AllowedValues": null, + "SampleValues": [ + "Comfortable saddle with bump absorping rubber bumpers.", + "Cut-out shell for a more comfortable ride.", + "Anatomic design and made from durable leather for a full-day of riding in comfort.", + "New design relieves pressure for long rides.", + "Made from synthetic leather and features gel padding for increased comfort." + ] + }, + { + "Name": "Pedal", + "DataType": "nvarchar", + "Definition": "The Pedal column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various types of pedals available for different types of bicycles. The descriptions highlight key features and benefits of each pedal, such as adjustable tension, expanded platforms, and stability for all-day riding. These descriptions are written in a user-friendly manner to help customers understand the advantages and specifications of each pedal option.", + "AllowedValues": null, + "SampleValues": [ + "Top-of-the-line clipless pedals with adjustable tension.", + "Expanded platform so you can ride in any shoes; great for all-around riding.", + "A stable pedal for all-day riding." + ] + }, + { + "Name": "BikeFrame", + "DataType": "nvarchar", + "Definition": "The BikeFrame column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the bicycle frames used in various bike models. The descriptions highlight the material, often aluminum or aluminum alloy, and detail specific features such as custom shaping, hand-crafting, welding, heat-treatment, and innovative designs for comfort and performance. Terms like \"lightweight,\" \"strength,\" \"quality,\" and \"performance\" frequently appear, indicating a focus on durability and riding experience. The descriptions also emphasize manufacturing techniques and technological advancements in bike frame construction.", + "AllowedValues": null, + "SampleValues": [ + "The aluminum frame is custom-shaped for both good looks and strength;it will withstand the most rigorous challenges of daily riding.", + "Our lightest and best quality aluminum frame made from the newest alloy;it is welded and heat-treated for strength.Our innovative design results in maximum comfort and performance.", + "Our best value frame utilizing the same, ground-breaking technology as the ML aluminum frame.", + "Each frame is hand-crafted in our Bothell facility to the optimum diameterand wall-thickness required of a premium mountain frame.The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.", + "aluminum alloy frame and features a lightweight down-tube milled to the perfect diameter for optimal strength." + ] + }, + { + "Name": "Crankset", + "DataType": "nvarchar", + "Definition": "The Crankset column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of bicycle cranksets, highlighting their features and attributes. The descriptions include details such as the material of the crank arm, the performance of the shifting mechanism, and other notable characteristics like rigidity and strength. These descriptions are likely used for cataloging and marketing purposes to inform potential customers about the quality and specifications of the cranksets.", + "AllowedValues": null, + "SampleValues": [ + " Triple crankset; alumunim crank arm; flawless shifting. ", + " Super rigid spindle. ", + " High-strength crank arm. " + ] + }, + { + "Name": "PictureAngle", + "DataType": "nvarchar", + "Definition": "The PictureAngle column in the SalesLT.vProductModelCatalogDescription entity contains descriptors of the angle at which product pictures are taken. The values are textual descriptions indicating different perspectives of product images, such as 'front', 'side', 'back', etc. This column helps in identifying from which viewpoint a product image is shown in the catalog to provide a comprehensive view of the product to potential customers. The values generally follow common descriptive terms related to camera angles.", + "AllowedValues": null, + "SampleValues": [ + "front" + ] + }, + { + "Name": "PictureSize", + "DataType": "nvarchar", + "Definition": "The PictureSize column in the SalesLT.vProductModelCatalogDescription entity contains values that indicate the size of the pictures used in the product model catalog descriptions. The values in this column are likely descriptive terms, such as \"small,\" referring to the dimensions or scale of the images. The column helps categorize the images based on their sizes for organizational and display purposes in the product catalog.", + "AllowedValues": null, + "SampleValues": [ + "small" + ] + }, + { + "Name": "ProductPhotoID", + "DataType": "nvarchar", + "Definition": "The ProductPhotoID column in the SalesLT.vProductModelCatalogDescription entity contains unique identifier numbers for the photos of products. These values are numeric and are used to reference specific product images within the catalog system. The identifiers do not follow a particular sequence and each number uniquely corresponds to a distinct product photo.", + "AllowedValues": null, + "SampleValues": [ + "87", + "126", + "118", + "111", + "1" + ] + }, + { + "Name": "Material", + "DataType": "nvarchar", + "Definition": "The Material column in the SalesLT.vProductModelCatalogDescription entity contains information about the type of material used in the products. The values consist of descriptions of various materials, primarily focusing on different types of aluminum alloys. The descriptions may include specific material names or general material types used in the manufacturing of the products. There may be some variations or spelling differences in the recorded material types.", + "AllowedValues": null, + "SampleValues": [ + "Aluminum Alloy", + "Aluminum", + "Almuminum Alloy" + ] + }, + { + "Name": "Color", + "DataType": "nvarchar", + "Definition": "The Color column in the SalesLT.vProductModelCatalogDescription entity contains descriptive text indicating the color availability of a product model. The descriptions specify whether the product is available in most colors, all colors, or all colors except certain types such as metallic. The text is formatted in a casual, descriptive manner and provides insights into the range of colors offered for the specific product model.", + "AllowedValues": null, + "SampleValues": [ + "Available in most colors.", + "Available in most colors", + "Available in all colors.", + "Available in all colors except metallic." + ] + }, + { + "Name": "ProductLine", + "DataType": "nvarchar", + "Definition": "The ProductLine column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of different categories or types of bikes. The values indicate specific segments or models within the bicycle product range, such as touring bikes, road bikes, and mountain bikes. This categorization helps in identifying and organizing products based on their intended use or design.", + "AllowedValues": null, + "SampleValues": [ + "Touring bike", + "Road bike", + "Mountain bike" + ] + }, + { + "Name": "Style", + "DataType": "nvarchar", + "Definition": "The Style column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the target gender for a product. The values typically indicate whether a product is designed for men, women, or is unisex. The descriptions help classify products based on intended user demographics in the catalog.", + "AllowedValues": null, + "SampleValues": [ + "Unisex", + "Men's" + ] + }, + { + "Name": "RiderExperience", + "DataType": "nvarchar", + "Definition": "The RiderExperience column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the skill levels suitable for using a particular product. The values in this column denote a range of rider experience levels, indicating the minimum and maximum level of expertise required. The descriptions follow a pattern where they range from one experience level to another, such as 'Novice to Intermediate' or 'Advanced to Professional.' This helps customers understand if the product is appropriate for their skill level as a rider.", + "AllowedValues": null, + "SampleValues": [ + "Novice to Intermediate riders", + "Novice to Advanced riders", + "Intermediate to Professional riders", + "Intermediate to Advanced riders", + "Advanced to Professional riders" + ] + }, + { + "Name": "rowguid", + "DataType": "uniqueidentifier", + "Definition": "The column rowguid in the SalesLT.vProductModelCatalogDescription entity contains unique identifier values in the UUID (Universally Unique Identifier) format. Each value is a 128-bit number used to uniquely identify records in the database. The format consists of 32 hexadecimal characters displayed in five groups separated by hyphens, following the pattern 8-4-4-4-12. The sample values suggest that this column is used to ensure the uniqueness of each row within the table.", + "AllowedValues": null, + "SampleValues": [ + "94FFB702-0CBC-4E3F-B840-C51F0D11C8F6", + "AA10D9E6-E33F-4DA8-ACE1-992FCD6BB171", + "866DBAD3-5999-4329-BEAC-D826D959D9A1", + "8456BB94-B4DD-4A47-A76B-D0E54AB4285D", + "FCA0665B-B956-489A-A5EC-6F0B4AA14D02" + ] + }, + { + "Name": "ModifiedDate", + "DataType": "datetime", + "Definition": "The ModifiedDate column in the SalesLT.vProductModelCatalogDescription entity contains timestamp values indicating the date and time when the product model catalog descriptions were last modified. The values are stored in a standard datetime format, which includes the year, month, day, hour, minute, second, and fractional seconds. This column allows tracking of changes and updates to the catalog descriptions over time.", + "AllowedValues": null, + "SampleValues": [ + "2006-11-20 09:56:38.273000", + "2005-06-01 00:00:00" + ] + } + ] } From b365e59411612bff3b3f77b29e405f87b3485853 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 20:01:01 +0000 Subject: [PATCH 14/17] Update schema store and graph creation --- deploy_ai_search/text_2_sql_schema_store.py | 4 +- .../data_dictionary_creator.py | 63 ++++++++++--------- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/deploy_ai_search/text_2_sql_schema_store.py b/deploy_ai_search/text_2_sql_schema_store.py index 2f7afef..c8c91de 100644 --- a/deploy_ai_search/text_2_sql_schema_store.py +++ b/deploy_ai_search/text_2_sql_schema_store.py @@ -154,7 +154,7 @@ def get_index_fields(self) -> list[SearchableField]: ), ], ), - SimpleField( + SearchableField( name="CompleteEntityRelationshipsGraph", type=SearchFieldDataType.String, collection=True, @@ -303,7 +303,7 @@ def get_indexer(self) -> SearchIndexer: target_field_name="EntityRelationships", ), FieldMapping( - source_field_name="/document/CompleteEntityRelationshipsGraph", + source_field_name="/document/CompleteEntityRelationshipsGraph/*", target_field_name="CompleteEntityRelationshipsGraph", ), FieldMapping( diff --git a/text_2_sql/data_dictionary/data_dictionary_creator.py b/text_2_sql/data_dictionary/data_dictionary_creator.py index ae56b86..01f2a99 100644 --- a/text_2_sql/data_dictionary/data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/data_dictionary_creator.py @@ -23,21 +23,17 @@ class ForeignKeyRelationship(BaseModel): column: str = Field(..., alias="Column") foreign_column: str = Field(..., alias="ForeignColumn") - model_config = ConfigDict(populate_by_name=True, - arbitrary_types_allowed=True) + model_config = ConfigDict(populate_by_name=True, arbitrary_types_allowed=True) class EntityRelationship(BaseModel): entity: str = Field(..., alias="Entity", exclude=True) entity_schema: str = Field(..., alias="Schema", exclude=True) foreign_entity: str = Field(..., alias="ForeignEntity") - foreign_entity_schema: str = Field(..., - alias="ForeignSchema", exclude=True) - foreign_keys: list[ForeignKeyRelationship] = Field( - ..., alias="ForeignKeys") + foreign_entity_schema: str = Field(..., alias="ForeignSchema", exclude=True) + foreign_keys: list[ForeignKeyRelationship] = Field(..., alias="ForeignKeys") - model_config = ConfigDict(populate_by_name=True, - arbitrary_types_allowed=True) + model_config = ConfigDict(populate_by_name=True, arbitrary_types_allowed=True) def pivot(self): """A method to pivot the entity relationship.""" @@ -65,9 +61,11 @@ def from_sql_row(cls, row, columns): result = dict(zip(columns, row)) entity = "{EntitySchema}.{Entity}".format( - EntitySchema=result['EntitySchema'], Entity=result['Entity']) + EntitySchema=result["EntitySchema"], Entity=result["Entity"] + ) foreign_entity = "{ForeignEntitySchema}.{ForeignEntity}".format( - ForeignEntitySchema=result['ForeignEntitySchema'], ForeignEntity=result['ForeignEntity'] + ForeignEntitySchema=result["ForeignEntitySchema"], + ForeignEntity=result["ForeignEntity"], ) return cls( entity=entity, @@ -95,8 +93,7 @@ class ColumnItem(BaseModel): allowed_values: Optional[list[any]] = Field(None, alias="AllowedValues") sample_values: Optional[list[any]] = Field(None, alias="SampleValues") - model_config = ConfigDict(populate_by_name=True, - arbitrary_types_allowed=True) + model_config = ConfigDict(populate_by_name=True, arbitrary_types_allowed=True) @classmethod def from_sql_row(cls, row, columns): @@ -121,11 +118,11 @@ class EntityItem(BaseModel): warehouse: Optional[str] = Field(default=None, alias="Warehouse") entity_relationships: Optional[list[EntityRelationship]] = Field( - None, alias="EntityRelationships" + alias="EntityRelationships", default_factory=list ) complete_entity_relationships_graph: Optional[list[str]] = Field( - None, alias="CompleteEntityRelationshipsGraph" + alias="CompleteEntityRelationshipsGraph", default_factory=list ) columns: Optional[list[ColumnItem]] = Field( @@ -206,7 +203,8 @@ def extract_columns_sql_query(self, entity: EntityItem) -> str: def extract_entity_relationships_sql_query(self) -> str: """An abstract method to extract entity relationships from a database. - Must return 6 columns: EntitySchema, Entity, ForeignEntitySchema, ForeignEntity, Column, ForeignColumn.""" + Must return 6 columns: EntitySchema, Entity, ForeignEntitySchema, ForeignEntity, Column, ForeignColumn. + """ def extract_distinct_values_sql_query( self, entity: EntityItem, column: ColumnItem @@ -272,7 +270,10 @@ async def extract_entity_relationships(self) -> list[EntityRelationship]: relationship.foreign_entity: relationship } else: - if relationship.foreign_entity not in self.entity_relationships[relationship.entity]: + if ( + relationship.foreign_entity + not in self.entity_relationships[relationship.entity] + ): self.entity_relationships[relationship.entity][ relationship.foreign_entity ] = relationship @@ -286,7 +287,10 @@ async def extract_entity_relationships(self) -> list[EntityRelationship]: relationship.entity: relationship.pivot() } else: - if relationship.entity not in self.entity_relationships[relationship.foreign_entity]: + if ( + relationship.entity + not in self.entity_relationships[relationship.foreign_entity] + ): self.entity_relationships[relationship.foreign_entity][ relationship.entity ] = relationship.pivot() @@ -308,7 +312,7 @@ def get_entity_relationships_from_graph( self, entity: str, path=None, result=None, visited=None ) -> nx.DiGraph: if entity not in self.relationship_graph: - return None + return [] if path is None: path = [entity] @@ -320,14 +324,20 @@ def get_entity_relationships_from_graph( # Mark the current node as visited visited.add(entity) - # For each successor (neighbor in the directed path) - for successor in self.relationship_graph.successors(entity): - if successor not in visited: + successors = list(self.relationship_graph.successors(entity)) + successors_not_visited = [ + successor for successor in successors if successor not in visited + ] + if len(successors_not_visited) == 0 and len(path) > 1: + # Add the complete path to the result as a string + result.append(" -> ".join(path)) + else: + # For each successor (neighbor in the directed path) + for successor in successors_not_visited: new_path = path + [successor] # Add the path as a string - result.append(" -> ".join(new_path)) self.get_entity_relationships_from_graph( - successor, new_path, result, visited + successor, new_path, result, visited.copy() ) return result @@ -423,8 +433,7 @@ async def generate_column_definition(self, entity: EntityItem, column: ColumnIte If you think the sample values belong to a specific standard, you can mention it in the definition. e.g. The column contains a list of country codes in the ISO 3166-1 alpha-2 format. 'US' for United States, 'GB' for United Kingdom, 'FR' for France. Including the specific standard format code can help the user understand the data better. If you think the sample values are not representative of the column as a whole, you can provide a more general definition of the column without mentioning the sample values.""" - stringifed_sample_values = [str(value) - for value in column.sample_values] + stringifed_sample_values = [str(value) for value in column.sample_values] column_definition_input = f"""Describe the {column.name} column in the {entity.entity} entity. The following sample values are provided from { column.name}: {', '.join(stringifed_sample_values)}.""" @@ -469,9 +478,7 @@ async def extract_columns_with_definitions( ) if self.generate_definitions: - definition_tasks.append( - self.generate_column_definition(entity, column) - ) + definition_tasks.append(self.generate_column_definition(entity, column)) await asyncio.gather(*distinct_value_tasks) From 463657e838cdb64b192cc2fe3e74208d15bcb2f4 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 20:12:12 +0000 Subject: [PATCH 15/17] Update outputs --- .../generated_samples/SalesLT.Address.json | 106 ++++--- .../generated_samples/SalesLT.Customer.json | 160 +++++----- .../SalesLT.CustomerAddress.json | 56 ++-- .../generated_samples/SalesLT.Product.json | 170 +++++------ .../SalesLT.ProductCategory.json | 49 ++-- .../SalesLT.ProductDescription.json | 44 +-- .../SalesLT.ProductModel.json | 60 ++-- ...alesLT.ProductModelProductDescription.json | 56 ++-- .../SalesLT.SalesOrderDetail.json | 96 +++--- .../SalesLT.SalesOrderHeader.json | 174 +++++------ .../SalesLT.vGetAllCategories.json | 28 +- .../SalesLT.vProductAndDescription.json | 62 ++-- ...lesLT.vProductModelCatalogDescription.json | 82 +++--- .../manual_samples/entities.json | 276 +++++++++++++----- 14 files changed, 736 insertions(+), 683 deletions(-) diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.Address.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.Address.json index bc99f51..aeafacd 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.Address.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.Address.json @@ -1,6 +1,6 @@ { "Entity": "SalesLT.Address", - "Definition": "The SalesLT.Address entity contains information related to physical addresses. This includes details such as address lines, city, state or province, country or region, and postal code. It also includes metadata like a unique row identifier and the date the record was last modified. This entity can be used to answer questions about specific location details, mailing addresses, and geographic data associated with other records in the database.", + "Definition": "The SalesLT.Address entity contains information about physical addresses used by the organization. This entity includes details such as the address lines, city, state or province, country or region, and postal code. It also tracks unique identifiers and the last modified date for records. This entity can be used to answer questions related to the geographical distribution of customers, shipping details, and the most recent updates to address information.", "EntityName": "Address Information", "Database": "AdventureWorksLT", "Warehouse": null, @@ -17,14 +17,6 @@ { "ForeignEntity": "SalesLT.SalesOrderHeader", "ForeignKeys": [ - { - "Column": "AddressID", - "ForeignColumn": "BillToAddressID" - }, - { - "Column": "AddressID", - "ForeignColumn": "BillToAddressID" - }, { "Column": "AddressID", "ForeignColumn": "BillToAddressID" @@ -47,72 +39,72 @@ { "Name": "AddressID", "DataType": "int", - "Definition": "The AddressID column in the SalesLT.Address entity contains unique numeric identifiers for each address record in the table. These values are likely automatically generated and incremented, ensuring that each address entry has a distinct identifier. The IDs do not follow a specific pattern other than being unique integers.", + "Definition": "The AddressID column in the SalesLT.Address entity contains unique numeric identifiers for each address record in the database. These values are sequential integers that uniquely distinguish one address from another within the entity. This column is likely used as a primary key, ensuring that each address can be uniquely and efficiently referenced.", "AllowedValues": null, "SampleValues": [ - 1063, - 618, - 855, - 11382, - 508 + 612, + 903, + 1013, + 864, + 756 ] }, { "Name": "AddressLine1", "DataType": "nvarchar", - "Definition": "The AddressLine1 column in the SalesLT.Address entity contains the primary street address or location name for an address. This column includes a variety of values such as street names, shopping centers, and specific building or suite numbers. The addresses may include a combination of numbers, street names, and locations, reflecting various formats commonly used for physical addresses. This column is essential for identifying the main location associated with an address record.", + "Definition": "The AddressLine1 column in the SalesLT.Address entity contains the primary address information for a location. This column typically includes the street address, building number, and potentially additional location-specific information such as road names or special indicators. The values follow common address formats, including numerical street addresses and named locations, which may include abbreviations or directional indicators. The data is used to identify the first line in a two-part address structure, providing essential location details for correspondence or delivery purposes.", "AllowedValues": null, "SampleValues": [ - "Johnson Creek", - "Hanford Mall", - "258 King Street East", - "5700 Legacy Dr", - "Natomas Marketplace" + "2520 Flanders Road", + "250333 Southport Road, S.W.", + "9909 W. Ventura Boulevard", + "99-3 Forest Works", + "Kansas City Factory Outlet" ] }, { "Name": "AddressLine2", "DataType": "nvarchar", - "Definition": "The AddressLine2 column in the SalesLT.Address entity contains secondary address information that complements the main address provided in AddressLine1. This may include room numbers, suite numbers, P.O. Boxes, building names, or floor numbers. The values are often in a format that specifies a particular part of a building or complex, aiding in precise delivery or identification of location within a larger address structure.", + "Definition": "The AddressLine2 column in the SalesLT.Address entity contains secondary address information such as specific floor numbers, PO Box numbers, or additional details that supplement the primary address. The values typically provide more precise location details within a larger building or specify post office box numbers. The pattern in the sample values includes specific mentions of floors and post office boxes, often using common abbreviations like \"PO\" or \"P.O. Box\".", "AllowedValues": null, "SampleValues": [ - "Room 99767c", - "Raven House, Kingsgate", - "Suite 2501", - "Box 8033", - "Ste 1071" + "19th Floor", + "Floor 7", + "PO Box 4023", + "P.O. Box 803", + "Box 8033" ] }, { "Name": "City", "DataType": "nvarchar", - "Definition": "The City column in the SalesLT.Address entity contains the names of cities associated with the addresses. These city names can vary widely and do not follow a specific format or standard. The column stores city names as text and includes a mix of small and large cities from various regions.", + "Definition": "The City column in the SalesLT.Address entity contains the names of cities where the addresses are located. This column includes a variety of city names, which can be from any geographical location. The names are represented in a plain text format, without any specific pattern or standard format. The data in this column is used to identify the city component of an address within the SalesLT.Address entity.", "AllowedValues": null, "SampleValues": [ - "Etobicoke", - "Pleasanton", - "Orange", + "Kanata", "Federal Way", - "Mesquite" + "Abingdon", + "Cambridge", + "Ferguson" ] }, { "Name": "StateProvince", "DataType": "nvarchar", - "Definition": "The StateProvince column in the SalesLT.Address entity contains the names of states or provinces for addresses. The values represent distinct geographical regions within countries, and in this case, they appear to be U.S. states. This column helps in identifying the specific state or province associated with an address record.", + "Definition": "The StateProvince column in the SalesLT.Address entity contains the names of states, provinces, or equivalent regions within various countries. These values are typically proper nouns representing administrative divisions such as Wyoming, Missouri, British Columbia, Montana, and Illinois. The data in this column is useful for identifying specific regions within a country for purposes such as shipping, billing, or demographic analysis.", "AllowedValues": null, "SampleValues": [ - "Nevada", "Wyoming", - "California", - "Texas", - "Arizona" + "Missouri", + "British Columbia", + "Montana", + "Illinois" ] }, { "Name": "CountryRegion", "DataType": "nvarchar", - "Definition": "The CountryRegion column in the SalesLT.Address entity contains the names of countries or regions associated with each address. The values in this column are represented by full country names such as \"United States,\" \"United Kingdom,\" and \"Canada.\" This column helps identify and categorize the geographical location of the addresses stored in the entity.", + "Definition": "The CountryRegion column in the SalesLT.Address entity contains the names of countries or regions associated with specific addresses. The values are in full-text format, representing the commonly used names of countries or regions. This column is used to identify the geographic location tied to each address in the database.", "AllowedValues": null, "SampleValues": [ "United States", @@ -123,41 +115,41 @@ { "Name": "PostalCode", "DataType": "nvarchar", - "Definition": "The PostalCode column in the SalesLT.Address entity contains postal codes used to identify specific geographic regions for mailing purposes. The values can be alphanumeric and vary significantly in format, as they include both Canadian and UK-style postal codes as well as numeric-only US ZIP codes. This suggests that the column includes postal codes from multiple countries, without adhering to a single standard format.", + "Definition": "The PostalCode column in the SalesLT.Address entity contains the postal codes for addresses. The values in this column consist of various formats, including both alphanumeric and numeric strings, which correspond to postal codes from different countries, such as the UK and the US. The column does not adhere to a single standard format and includes postal codes for various regions.", "AllowedValues": null, "SampleValues": [ - "H1Y 2H7", - "SW6 SBY", - "SL4 1RH", - "93291", - "59801" + "W10 6BL", + "WA3 7BH", + "95501", + "49464", + "98045" ] }, { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.Address entity contains globally unique identifier (GUID) values. These values are typically used to uniquely identify rows in the table and ensure that each entry can be distinctly recognized across distributed systems. The values follow the standard GUID format: a series of hexadecimal digits grouped into five sections separated by hyphens (e.g., 8-4-4-4-12).", + "Definition": "The rowguid column in the SalesLT.Address entity contains unique identifier values in the form of Globally Unique Identifiers (GUIDs). Each value is a 128-bit number represented as a string of hexadecimal characters, typically in the pattern of 8-4-4-4-12 (e.g., 00000000-0000-0000-0000-000000000000). This column is used to uniquely identify each record in the address table, ensuring that each entry can be distinctly referenced.", "AllowedValues": null, "SampleValues": [ - "A35C7AC7-5AE8-43D9-92E7-180D78A9A7B8", - "034076FD-CD0E-4EAD-864E-8CE7F47D6612", - "079E5DE8-169F-4EB6-BE75-813B40A0143E", - "C418C2F4-6B32-4404-AAB1-E0BEC3958C11", - "85C88CD6-682C-4358-9F8C-5A24F4CCFD98" + "CC91297C-567B-4186-96C8-2BA6F0875E73", + "0B49022D-8B49-4CF6-B0A3-46231CD48441", + "BD3035F6-4018-4E4C-8D70-6DD3F4FE8EB4", + "1A51283C-12BB-462E-A1B8-A0039C18E6D8", + "FF2BE5E9-7D22-4C1C-ACF8-199148E957AB" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.Address entity contains the timestamp indicating when the address record was last updated. The values are in the datetime format, typically represented as 'YYYY-MM-DD HH:MM:SS'. These timestamps are used to track changes to address records, ensuring that any modifications can be accurately traced back to the specific date and time they occurred.", + "Definition": "The ModifiedDate column in the SalesLT.Address entity contains timestamps indicating the last date and time when the address record was modified. The format follows the SQL standard datetime format 'YYYY-MM-DD HH:MM:SS'. This column helps track the history of changes made to address records.", "AllowedValues": null, "SampleValues": [ - "2006-03-01 00:00:00", - "2006-09-01 00:00:00", - "2006-08-01 00:00:00", - "2005-12-01 00:00:00", - "2006-12-01 00:00:00" + "2007-02-01 00:00:00", + "2008-02-01 00:00:00", + "2007-08-01 00:00:00", + "2007-09-01 00:00:00", + "2007-04-01 00:00:00" ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.Customer.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.Customer.json index b30c8fd..e26a2cd 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.Customer.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.Customer.json @@ -1,6 +1,6 @@ { "Entity": "SalesLT.Customer", - "Definition": "The SalesLT.Customer entity contains information about customers including their personal details, contact information, and authentication data. It tracks individual names, company associations, and salesperson assignments as well as security details for customer logins. This entity is useful for answering questions related to customer identity, contact preferences, sales assignments, and tracking modifications or updates to customer records.", + "Definition": "The SalesLT.Customer entity contains information about individual customers, including both personal details and contact information. It includes unique identifiers, names, company affiliations, and communication details such as email and phone number. This entity can be used to answer questions related to customer identification, contact methods, sales representative assignments, and the recent activity or updates regarding customer information.", "EntityName": "Customer Information", "Database": "AdventureWorksLT", "Warehouse": null, @@ -8,10 +8,6 @@ { "ForeignEntity": "SalesLT.CustomerAddress", "ForeignKeys": [ - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - }, { "Column": "CustomerID", "ForeignColumn": "CustomerID" @@ -21,14 +17,6 @@ { "ForeignEntity": "SalesLT.SalesOrderHeader", "ForeignKeys": [ - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - }, - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - }, { "Column": "CustomerID", "ForeignColumn": "CustomerID" @@ -47,20 +35,20 @@ { "Name": "CustomerID", "DataType": "int", - "Definition": "The CustomerID column in the SalesLT.Customer entity contains unique numerical identifiers assigned to each customer. These values are integers and are used to distinguish and reference individual customers within the database. The numeric values do not follow a particular sequence, indicating they may be system-generated and assigned according to specific business logic or rules.", + "Definition": "The CustomerID column in the SalesLT.Customer entity contains unique numeric identifiers assigned to each customer. These identifiers are integers that vary significantly in value, likely indicating they are auto-incremented or assigned sequentially. This column is used to uniquely distinguish each customer in the database, aiding in the management and retrieval of customer data.", "AllowedValues": null, "SampleValues": [ - 181, - 30040, - 383, - 38, - 185 + 30022, + 340, + 208, + 397, + 29553 ] }, { "Name": "NameStyle", "DataType": "bit", - "Definition": "The NameStyle column in the SalesLT.Customer entity contains Boolean values that indicate whether the customer name is stored in a special format. The value 'False' means that the customer's name is stored in a standard format. This column helps differentiate between names that might require unique formatting and those that follow the regular format.", + "Definition": "The NameStyle column in the SalesLT.Customer entity contains boolean values indicating the style of the customer's name. 'False' typically suggests that the name is formatted in the default or standard style, while 'True' would suggest a non-standard formatting. The column is used to distinguish between different formatting conventions in the customer's name data.", "AllowedValues": null, "SampleValues": [ false @@ -69,7 +57,7 @@ { "Name": "Title", "DataType": "nvarchar", - "Definition": "The Title column in the SalesLT.Customer entity contains a list of honorifics or titles used to address individuals. These are commonly used prefixes that denote the gender or marital status of the customer, such as 'Mr.' for males, 'Ms.' for females, and other equivalent titles. The values in this column are typically abbreviated and offer a formal way to refer to the customers.", + "Definition": "The Title column in the SalesLT.Customer entity contains honorific titles used to address individuals respectfully. The values are typically common abbreviations for titles such as 'Mr.' for Mister, 'Ms.' for Miss, 'Sr.' for Se\u00f1or, and 'Sra.' for Se\u00f1ora. The column helps in identifying the form of address appropriate for male and female customers.", "AllowedValues": null, "SampleValues": [ "Sra.", @@ -81,46 +69,46 @@ { "Name": "FirstName", "DataType": "nvarchar", - "Definition": "The FirstName column in the SalesLT.Customer entity contains the first names of customers. It generally includes a variety of common first names and does not follow a specific pattern or format. The values are typically presented as capitalized proper nouns.", + "Definition": "The FirstName column in the SalesLT.Customer entity contains the given names of customers. These values can include a variety of international names and may include hyphens or other special characters. The names may be of any gender and vary in length. This column represents individual customer first names, which can come from diverse cultural and linguistic backgrounds.", "AllowedValues": null, "SampleValues": [ - "Brenda", - "Juanita", - "Kari", - "Kirk", - "Kara" + "Yao-Qiang", + "Thomas", + "Jill", + "Jean", + "Jinghao" ] }, { "Name": "MiddleName", "DataType": "nvarchar", - "Definition": "The column contains the middle initials of customers. Each value is a single uppercase letter followed by a period, representing the initial of the customer's middle name. This column helps to uniquely identify individuals by providing an additional character from their full name.", + "Definition": "The MiddleName column in the SalesLT.Customer entity contains the middle initial of customers' names. The values are typically a single letter, sometimes followed by a period. This pattern suggests the column is used to store abbreviated middle names of customers. The data is useful for identifying individuals more precisely in records where middle names are provided.", "AllowedValues": null, "SampleValues": [ - "D.", - "A.", + "J.", + "M", "C.", - "R.", - "N." + "L.", + "K." ] }, { "Name": "LastName", "DataType": "nvarchar", - "Definition": "The LastName column in the SalesLT.Customer entity contains the surnames of customers. The values in this column are typically English surnames but can include surnames from various cultural backgrounds. The values are stored as text strings and each entry represents the family or last name of a customer.", + "Definition": "The LastName column in the SalesLT.Customer entity contains the last names of customers. The values are typically capitalized and consist of alphabetic characters. This column is used to store the family or surname of each customer, which is a common format for identifying individuals in a customer database.", "AllowedValues": null, "SampleValues": [ - "Jordan", - "Krow", - "Trau", - "Goldstein", - "Carmody" + "Farino", + "Hamilton", + "Irwin", + "Coffman", + "Brewer" ] }, { "Name": "Suffix", "DataType": "nvarchar", - "Definition": "The Suffix column in the SalesLT.Customer entity contains suffixes used in customer names. These suffixes indicate titles or generational identifiers such as Sr. for Senior, Jr. for Junior, PhD for Doctor of Philosophy, and Roman numerals like II and IV. These identifiers are often appended at the end of the customer's last name to provide additional information about their status, education level, or generational position.", + "Definition": "The Suffix column in the SalesLT.Customer entity contains titles or honorifics that are appended to the end of customers' names. These suffixes often denote generational order (e.g., Jr., II, IV) or academic and professional qualifications (e.g., PhD, Sr.). The values are generally abbreviated forms of formal titles and follow common naming conventions.", "AllowedValues": null, "SampleValues": [ "Sr.", @@ -133,106 +121,106 @@ { "Name": "CompanyName", "DataType": "nvarchar", - "Definition": "The CompanyName column in the SalesLT.Customer entity contains the names of companies that are customers. The names generally reflect the type of business or industry the company operates in, such as manufacturing, transportation, and fitness supplies. This column likely includes a variety of company names representing different sectors and regions. The information is primarily used to identify and catalog the customers' businesses.", + "Definition": "The CompanyName column in the SalesLT.Customer entity contains the names of companies or businesses that are customers of the organization. The values typically represent the official or trade names of these companies, often including references to the industry or specific type of retail, such as bike stores or department stores. The names are generally descriptive and help identify the nature and focus of the businesses.", "AllowedValues": null, "SampleValues": [ - "Transportation Options", - "Regional Manufacturing", - "National Manufacturing", - "Running and Cycling Gear", - "Fitness Supplies" + "Trendy Department Stores", + "Number One Bike Co.", + "Fifth Bike Store", + "Bike World", + "Great Bicycle Supply" ] }, { "Name": "SalesPerson", "DataType": "nvarchar", - "Definition": "The SalesPerson column in the SalesLT.Customer entity contains the names of sales representatives associated with each customer. The values follow a pattern consisting of a domain prefix 'adventure-works\\' followed by the first name of the salesperson and a numeric suffix. This format indicates the salesperson's unique identifier within the adventure-works domain, representing individual sales personnel.", + "Definition": "The SalesPerson column in the SalesLT.Customer entity contains identifiers for sales representatives. The values follow a specific pattern consisting of a domain prefix 'adventure-works\\' followed by the sales representative's name and a numeric suffix. This format is used to uniquely identify individual salespersons in the Adventure Works organization.", "AllowedValues": null, "SampleValues": [ - "adventure-works\\jos\u00e91", - "adventure-works\\linda3", - "adventure-works\\david8", + "adventure-works\\jillian0", "adventure-works\\garrett1", - "adventure-works\\shu0" + "adventure-works\\david8", + "adventure-works\\pamela0", + "adventure-works\\jae0" ] }, { "Name": "EmailAddress", "DataType": "nvarchar", - "Definition": "The EmailAddress column in the SalesLT.Customer entity contains email addresses associated with individual customers. The values follow a common format of local-part followed by the domain name \"adventure-works.com.\" Each local-part typically includes a first name followed by a numeral. The data is used to identify and communicate with customers via email.", + "Definition": "The EmailAddress column in the SalesLT.Customer entity contains the email addresses of customers. The values follow a specific format, typically comprising the customer's first name or a variation of it, followed by a numerical digit and the domain \"adventure-works.com\". This structured format helps in identifying and organizing customer communication effectively.", "AllowedValues": null, "SampleValues": [ - "william1@adventure-works.com", - "marjorie0@adventure-works.com", - "della0@adventure-works.com", - "linda7@adventure-works.com", - "erin1@adventure-works.com" + "twanna0@adventure-works.com", + "joseph4@adventure-works.com", + "chris6@adventure-works.com", + "victor0@adventure-works.com", + "lindsey0@adventure-works.com" ] }, { "Name": "Phone", "DataType": "nvarchar", - "Definition": "The Phone column in the SalesLT.Customer entity contains customer phone numbers. The values typically include a sequence of digits separated by dashes, and may sometimes include country code prefixes or parentheses for area codes. The format varies slightly but generally follows standard phone number conventions, indicating regional and local numbers.", + "Definition": "The Phone column in the SalesLT.Customer entity contains phone numbers associated with each customer. The phone numbers follow a specific format consisting of a three-digit area code, followed by a three-digit central office code, and a four-digit subscriber number (e.g., 103-555-0151). This format is likely consistent across all entries in the column. The values do not appear to conform to any international phone number format and seem to be fictional phone numbers without specific geographical significance.", "AllowedValues": null, "SampleValues": [ - "158-555-0154", - "554-555-0110", - "1 (11) 500 555-0115", - "994-555-0194", - "990-555-0141" + "103-555-0151", + "718-555-0152", + "362-555-0162", + "290-555-0196", + "912-555-0149" ] }, { "Name": "PasswordHash", "DataType": "varchar", - "Definition": "The PasswordHash column in the SalesLT.Customer entity contains hashed representations of customer passwords. These hash values are used for securely storing user passwords to prevent unauthorized access. The values are typically a result of applying a cryptographic hash function to user passwords, ensuring that the original passwords cannot be easily retrieved. The hashed values are stored in a format such as Base64 encoding, which is evident from the sample values provided.", + "Definition": "The PasswordHash column in the SalesLT.Customer entity contains hashed passwords for customers. The values are encoded in a string format, likely using Base64 encoding, which represents the hashed version of the customers' passwords. The hashes are used to securely store passwords in the database, ensuring that the original passwords are not stored directly. The length and characteristics of the sample values suggest that a consistent hashing algorithm and encoding method are used.", "AllowedValues": null, "SampleValues": [ - "NLAR7H8spiCb/C0qY+3qkJm3VuoSOqDw7yspRc1CTTg=", - "YYTwMHBzX9ZM2XoYAzTo7bVfsHm05BO3Sl1+sokcRjM=", - "o1GVo3vExeNzo0/ctdRGf2eDK3uzTlcUbr18tN+Slf8=", - "muiJ85PHJTw5ocOM+yS+gq+w8REzzCOfzXZNFyDZniI=", - "6eApe0lB1ZkvyJB3Uo3LaYGV8sm2/NE9fUHXM7a0RYU=" + "miuh5Po0s3jNnKrMwmuROEApoKFRWumb1K1EMP0hGB0=", + "20rlqqjWOPLBi7oYKBrHMzouHcYl6OknJcV+yc0zQKo=", + "0ZfPkEBplSrQkVpmgzrlfblSeTpJ4CJwJu7aVWOuOSM=", + "cvqeC4fJcKwJ9jlluiWvK5/MyuSi8neLnjFDGdvzJy4=", + "haGTwCpR1pahJRX/490ASvk+bkWOZv828Z8Krd0XO50=" ] }, { "Name": "PasswordSalt", "DataType": "varchar", - "Definition": "The PasswordSalt column in the SalesLT.Customer entity contains cryptographic salt values used in conjunction with passwords to enhance security. Each value is a unique and randomly generated string, likely encoded in Base64 format, which helps protect against dictionary attacks and rainbow table attacks by adding an additional layer of complexity to the hashed passwords.", + "Definition": "The PasswordSalt column in the SalesLT.Customer entity contains unique random strings used as additional input to hash functions to ensure password security. The values are typically base64-encoded strings, enhancing the security of stored passwords by making them less vulnerable to attacks such as rainbow table lookups. This increases the overall security of customer authentication by adding an extra layer of complexity to the password hashing process.", "AllowedValues": null, "SampleValues": [ - "wmfLAOE=", - "Ze2j4rQ=", - "jA7oD80=", - "qUowBt4=", - "l32Vf08=" + "oOIbGSo=", + "n/q5ims=", + "GR7idhc=", + "lkPNcdI=", + "aOFmjMY=" ] }, { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.Customer entity contains unique identifier values in the form of globally unique identifiers (GUIDs). These values are represented in a standard 36-character string format, including hyphens, following the pattern of 8-4-4-4-12 characters. The purpose of this column is to uniquely identify each customer record without duplication, ensuring consistency and integrity of data.", + "Definition": "The rowguid column in the SalesLT.Customer entity contains unique identifier values for each customer. These values are in the format of a GUID (Globally Unique Identifier), which is a 128-bit value typically represented as 32 hexadecimal digits separated by hyphens. The GUID values are used to ensure the uniqueness of each customer record across the entire database. This column is commonly used in replication and for merging data from different sources.", "AllowedValues": null, "SampleValues": [ - "C610F872-6183-4D98-ADA3-E3A5B1A3588D", - "9DEF17D4-B251-405F-A854-70A33DEBBBE9", - "5F5BE7AD-3CD2-481C-93D2-66208B113DF8", - "0C316F6F-5D54-41FD-86A3-6ECAF31A01DD", - "8C81DD5F-EA36-47B0-A5F1-7583BC5DABC2" + "0631F720-A96D-4505-A07C-11A954A67F6B", + "A2098F7B-3D3A-4894-90D7-C79C118845D5", + "36702D8C-0756-4B16-B0DA-8C97103D8B90", + "69AE5D43-31BE-4B76-BFBB-5A23C4788BBC", + "B143978A-3FC9-4077-A70A-DB4DFACEDC79" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.Customer entity contains the date and time when the customer record was last updated. The values follow the format YYYY-MM-DD HH:MM:SS, indicating year, month, day, and the exact time of the modification. This column is used to track changes to customer records over time. The dates reflect when modifications occurred within the system.", + "Definition": "The ModifiedDate column in the SalesLT.Customer entity contains the date and time when a customer record was last updated. The values follow the format of 'YYYY-MM-DD HH:MM:SS', indicating the precise timestamp of the modification. This information is crucial for tracking changes and understanding the recency of the data in the customer records.", "AllowedValues": null, "SampleValues": [ "2005-11-01 00:00:00", - "2007-03-01 00:00:00", - "2006-10-01 00:00:00", - "2007-05-01 00:00:00", - "2007-04-01 00:00:00" + "2005-09-01 00:00:00", + "2005-08-01 00:00:00", + "2005-12-01 00:00:00", + "2007-09-01 00:00:00" ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.CustomerAddress.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.CustomerAddress.json index 3d0df2c..978d464 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.CustomerAddress.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.CustomerAddress.json @@ -1,6 +1,6 @@ { "Entity": "SalesLT.CustomerAddress", - "Definition": "The SalesLT.CustomerAddress entity captures the association between customers and their addresses. It details the type of address (e.g., billing or shipping) linked to each customer, as well as metadata such as the unique identifier (rowguid) and the date when the record was last modified. This entity can be used to answer questions related to which addresses are associated with specific customers, what type of addresses customers have, and when the address information was last updated.", + "Definition": "The SalesLT.CustomerAddress entity represents the relationship between customers and their addresses within the sales database. It contains key information about which addresses are associated with which customers, including the type of address (such as billing or shipping). This entity is useful for understanding and maintaining customer address records, ensuring accurate and up-to-date address information for each customer. It can be used to answer questions related to customer address assignments, address type categorization, and modification history of these records.", "EntityName": "Customer Address Information", "Database": "AdventureWorksLT", "Warehouse": null, @@ -17,10 +17,6 @@ { "ForeignEntity": "SalesLT.Customer", "ForeignKeys": [ - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - }, { "Column": "CustomerID", "ForeignColumn": "CustomerID" @@ -40,33 +36,33 @@ { "Name": "CustomerID", "DataType": "int", - "Definition": "The CustomerID column in the SalesLT.CustomerAddress entity contains unique numerical identifiers assigned to each customer. These values represent individual customer records and are likely used to establish relationships with other tables in the database, such as customer information and their associated addresses. The numbers are integer values and appear to be auto-incremented, indicating a sequential assignment as new customers are added to the system.", + "Definition": "The CustomerID column in the SalesLT.CustomerAddress entity contains unique identifiers for customers. Each value is an integer that uniquely identifies a customer within the database, ensuring that each customer can be distinctively referenced. These identifiers are likely autogenerated and do not follow a specific pattern other than being unique numeric values.", "AllowedValues": null, "SampleValues": [ - 30035, - 30095, - 29637, - 29787, - 29562 + 29522, + 29937, + 29761, + 29843, + 29728 ] }, { "Name": "AddressID", "DataType": "int", - "Definition": "The AddressID column in the SalesLT.CustomerAddress entity is a unique identifier for the addresses associated with customer records. It contains numerical values that likely serve as the primary key for the address entries in this table, ensuring each entry is distinct. The values are integers and appear to be auto-incremented, indicating the order in which addresses were added to the database. This column is used to uniquely identify and link customer addresses with other records.", + "Definition": "The AddressID column in the SalesLT.CustomerAddress entity contains unique numeric identifiers for each address associated with customers. The values in this column are integers and serve as primary keys to uniquely distinguish different address records within the table. The identifiers do not follow a specific sequence but ensure that each address has a distinct identifier for reference purposes.", "AllowedValues": null, "SampleValues": [ - 28, - 585, - 1033, - 503, - 461 + 643, + 867, + 810, + 993, + 601 ] }, { "Name": "AddressType", "DataType": "nvarchar", - "Definition": "The AddressType column in the SalesLT.CustomerAddress entity specifies the type or purpose of an address associated with a customer. Sample values indicate that this column includes designations such as 'Shipping' and 'Main Office', suggesting that it categorizes addresses based on their usage or function. This column is likely used to differentiate between multiple addresses for the same customer, indicating whether the address is used for shipping, billing, office locations, or other specific purposes.", + "Definition": "The AddressType column in the SalesLT.CustomerAddress entity contains descriptions of the type of address associated with a customer. The values can indicate different purposes for the address, such as \"Shipping\" for shipping addresses and \"Main Office\" for primary business locations. These descriptions help categorize the addresses based on their usage within the organization.", "AllowedValues": null, "SampleValues": [ "Shipping", @@ -76,28 +72,28 @@ { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.CustomerAddress entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). These values are used to uniquely identify each record in the table, ensuring that no two records have the same identifier. GUIDs follow the standard 128-bit format, typically represented as a string of hexadecimal numbers separated by hyphens. This column is crucial for maintaining data integrity and enabling precise record referencing and linking across databases.", + "Definition": "The column rowguid in the SalesLT.CustomerAddress entity contains unique identifier values in the GUID (Globally Unique Identifier) format. These values are typically used to uniquely identify rows in the table, ensuring that each row can be distinctly referenced. The GUIDs follow a standardized 32-character hexadecimal format, divided into five groups separated by hyphens.", "AllowedValues": null, "SampleValues": [ - "5D215B08-8954-48D2-8254-447D2415FC8B", - "C7A8A997-0817-42D2-A150-5785F7A4E47F", - "AA005E64-2103-433D-AC7E-886222396936", - "3AB25485-C5FD-4132-AA0B-2A9B2915068C", - "40E68361-485D-45F4-B18C-282D13F4552E" + "0B887414-135A-43F6-94DC-60A220362C6D", + "5F9605D9-90C5-448B-9E38-13E53BD965F0", + "4CAA058D-61F5-4A49-9167-D1E57DCAC9CE", + "81390AF7-D4D0-4F4D-AF42-AB21F5713F14", + "F49E2C74-9BB9-462E-BCAA-67370F4D74A9" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.CustomerAddress entity contains timestamp values indicating the date and time when the customer address record was last modified. The values follow the format of 'YYYY-MM-DD HH:MM:SS'. This column helps in tracking changes to address information, ensuring that the most recent updates are recorded and can be audited if necessary. The typical format seen in the sample values is compatible with standard SQL datetime formats.", + "Definition": "The ModifiedDate column in the SalesLT.CustomerAddress entity contains the date and time when the record was last updated. The values are in the format of 'YYYY-MM-DD HH:MM:SS', indicating both the date and time of modification. This column is used to track and audit changes made to customer address records over time.", "AllowedValues": null, "SampleValues": [ - "2006-11-01 00:00:00", - "2008-06-01 00:00:00", + "2006-03-01 00:00:00", + "2005-09-01 00:00:00", + "2005-10-01 00:00:00", "2006-01-01 00:00:00", - "2006-07-01 00:00:00", - "2005-07-01 00:00:00" + "2005-08-01 00:00:00" ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.Product.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.Product.json index 6a27e22..9b00e94 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.Product.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.Product.json @@ -1,6 +1,6 @@ { "Entity": "SalesLT.Product", - "Definition": "The SalesLT.Product entity contains information about products available in the inventory, including details such as the product's name, unique identifier, pricing, physical characteristics, and associated categories and models. It also includes sales-related dates such as the sell start and end dates, and discontinued date. This entity is useful for answering questions related to product identification, pricing, availability, and categorization. Additionally, it can provide insights into product stocking, sales trends, and inventory management.", + "Definition": "The SalesLT.Product entity contains detailed information about the products available in the inventory. It includes data such as product ID, name, product number, color, size, weight, cost, price, and various dates related to the product's availability and discontinuation. This entity can be used to answer questions regarding product specifications, pricing, availability periods, and categorization. It also helps in identifying product models and tracking changes through modification dates.", "EntityName": "Product Information", "Database": "AdventureWorksLT", "Warehouse": null, @@ -17,10 +17,6 @@ { "ForeignEntity": "SalesLT.ProductModel", "ForeignKeys": [ - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - }, { "Column": "ProductModelID", "ForeignColumn": "ProductModelID" @@ -30,10 +26,6 @@ { "ForeignEntity": "SalesLT.SalesOrderDetail", "ForeignKeys": [ - { - "Column": "ProductID", - "ForeignColumn": "ProductID" - }, { "Column": "ProductID", "ForeignColumn": "ProductID" @@ -51,137 +43,137 @@ { "Name": "ProductID", "DataType": "int", - "Definition": "The ProductID column in the SalesLT.Product entity contains unique numeric identifiers for each product. The values in this column are integers and serve as primary keys to uniquely distinguish each product within the database. This ensures that each product record can be individually accessed and referenced using its ProductID.", + "Definition": "The ProductID column in the SalesLT.Product entity contains unique numerical identifiers for each product. These identifiers are integer values with no specific pattern or sequence. This column is used as the primary key to uniquely distinguish each product within the product entity.", "AllowedValues": null, "SampleValues": [ - 829, - 888, - 893, - 996, - 680 + 989, + 735, + 743, + 865, + 883 ] }, { "Name": "Name", "DataType": "nvarchar", - "Definition": "The Name column in the SalesLT.Product entity contains a list of product names sold by the company. The names often include a combination of product type descriptors, sizes, colors, and model numbers. The values tend to have a pattern where hyphens separate different attributes or features of the product (e.g., type, model, color, size). These names help in uniquely identifying and categorizing different products in the inventory.", + "Definition": "The column contains a list of product names that are available for sale. The names typically include a combination of descriptive terms regarding the product type, model, and sometimes size or color. The values do not follow a strict format but often include elements such as the product category, specific attributes, and any distinguishing features. Examples include terms related to bicycle components, accessories, and clothing items.", "AllowedValues": null, "SampleValues": [ - "Touring-Panniers, Large", - "Mountain-500 Black, 44", - "Touring-2000 Blue, 54", - "LL Road Pedal", - "HL Touring Frame - Yellow, 54" + "ML Mountain Front Wheel", + "ML Touring Seat/Saddle", + "Hitch Rack - 4-Bike", + "HL Touring Frame - Yellow, 54", + "Classic Vest, L" ] }, { "Name": "ProductNumber", "DataType": "nvarchar", - "Definition": "The ProductNumber column in the SalesLT.Product entity contains unique identifiers for each product in the inventory. The values follow a specific pattern, typically consisting of a two-letter prefix that may indicate the type or category of the product, followed by a combination of letters and numbers. This column is used to distinguish between different products and may include information such as size or model within the identifier.", + "Definition": "The ProductNumber column in the SalesLT.Product entity contains alphanumeric strings that serve as unique identifiers for different products. These identifiers typically follow a pattern combining letters and numbers separated by dashes. The letters may represent product categories or characteristics, while the numbers likely denote specific details such as size or model. This column ensures that each product can be distinctly referenced and categorized within the database.", "AllowedValues": null, "SampleValues": [ - "BK-M18B-48", - "FR-T98U-50", - "BK-R64Y-40", - "TI-R092", - "FR-M21S-40" + "BK-M47B-40", + "BK-R50R-60", + "FR-M21S-40", + "SB-M891-L", + "FR-M94B-42" ] }, { "Name": "Color", "DataType": "nvarchar", - "Definition": "The Color column in the SalesLT.Product entity contains the names of colors or color combinations that correspond to the colors of the products. The values are typically single color names or a combination of two colors, separated by a slash. These values are descriptive and help identify the visual appearance of the product items in the database.", + "Definition": "The Color column in the SalesLT.Product entity contains a list of color names that describe the appearance of the products. The values include basic colors as well as combinations of colors, often separated by a slash. These color descriptions help in identifying the visual attributes of the products within the inventory.", "AllowedValues": null, "SampleValues": [ - "Silver/Black", - "Black", - "Yellow", "Red", - "Grey" + "Black", + "Silver/Black", + "Silver", + "White" ] }, { "Name": "StandardCost", "DataType": "money", - "Definition": "The StandardCost column in the SalesLT.Product entity contains the standard costs of products in a precise decimal format. Each value represents the cost of a product, generally used for accounting and budgeting purposes. The costs vary widely, indicating that the products may range from low-cost items to high-cost items, reflecting diverse product types and categories within the entity. The values in this column are useful for financial analysis and cost management within the pricing and sales operations.", + "Definition": "The StandardCost column in the SalesLT.Product entity contains the standard cost values for products. These values represent the cost incurred to produce or purchase the products and are typically expressed in a decimal format to include precise cost calculations. The values can vary widely, reflecting the diversity in cost based on different product types and materials used. The cost is represented in a monetary format with up to four decimal places, indicating a detailed accounting of production costs.", "AllowedValues": null, "SampleValues": [ - "11.2163", - "8.2459", - "23.3722", - "1251.9813", - "10.3125" + "55.3801", + "204.6251", + "1059.3100", + "199.3757", + "9.1593" ] }, { "Name": "ListPrice", "DataType": "money", - "Definition": "The ListPrice column in the SalesLT.Product entity contains the retail prices of products. The values are numeric and represent the price in a currency format with four decimal places. These prices are likely used for sales and pricing references within the database. Typically, they are positive and represent the cost at which a product is listed for sale to customers.", + "Definition": "The ListPrice column in the SalesLT.Product entity contains the standard selling price of each product. The values are numeric and represent the price in a monetary format with four decimal places. This column is used to store the manufacturer's suggested retail price for the products listed in the database. Values in this column can vary widely, reflecting the varying cost of different products.", "AllowedValues": null, "SampleValues": [ - "32.6000", - "112.5650", - "2.2900", - "24.4900", - "59.9900" + "404.9900", + "2294.9900", + "159.0000", + "300.2150", + "1431.5000" ] }, { "Name": "Size", "DataType": "nvarchar", - "Definition": "The Size column in the SalesLT.Product entity contains values representing the size specifications of products. The values can include both numerical sizes and alphabetical representations of size, such as 'L' for large and 'M' for medium. The numerical values typically represent specific measurements, which could vary depending on the type of product. The column is used to categorize products based on their size attributes, facilitating inventory management and sales tracking.", + "Definition": "The Size column in the SalesLT.Product entity contains values that represent the size of a product. The values include both numerical sizes and alphanumeric sizes (commonly used for clothing). Numerical sizes are typically in a range such as 42, 54, and 56, whereas alphanumeric sizes follow common clothing size abbreviations like L for Large and XL for Extra Large. The column appears to mix both formats to accurately reflect different types of product sizing.", "AllowedValues": null, "SampleValues": [ - "L", + "54", "42", - "40", - "52", - "M" + "XL", + "L", + "56" ] }, { "Name": "Weight", "DataType": "decimal", - "Definition": "The Weight column in the SalesLT.Product entity contains numerical values representing the weight of each product. The values are measured in a consistent unit, most likely kilograms or grams, given the decimal format. The weights vary widely, indicating that the products have different sizes and mass. This column is essential for logistics and shipping calculations in the product database.", + "Definition": "The Weight column in the SalesLT.Product entity contains the weight measurements of products. The values represent the weight in a numerical format, which is likely measured in units such as grams or kilograms. This column does not have a fixed pattern for its values, except that they are all numerical and can include decimal points for precision. The weights vary significantly, indicating different product sizes and types.", "AllowedValues": null, "SampleValues": [ - "1451.49", - "9584.36", - "1256.44", - "6699.52", - "6862.82" + "13562.34", + "8976.55", + "1050.00", + "11530.26", + "8069.37" ] }, { "Name": "ProductCategoryID", "DataType": "int", - "Definition": "The ProductCategoryID column in the SalesLT.Product entity contains numerical identifiers that represent specific product categories. Each value in this column is a unique integer that corresponds to a particular category under which a product falls. This column is essential for organizing products into various categories to facilitate better classification and management of the product inventory within the database. The values are integers and are likely used as foreign keys to link with a product category reference table.", + "Definition": "The ProductCategoryID column in the SalesLT.Product entity contains numerical identifiers that correspond to different product categories. Each value in this column represents a unique category within a predefined set of product categories. The numbers do not follow a specific format and are simply identifiers to link products to their associated categories. These categories are used to classify and organize the products into groups for better management and retrieval.", "AllowedValues": null, "SampleValues": [ - 40, - 31, - 25, - 38, - 23 + 39, + 28, + 10, + 27, + 24 ] }, { "Name": "ProductModelID", "DataType": "int", - "Definition": "The ProductModelID column in the SalesLT.Product entity contains numerical identifiers that correspond to different product models. Each value in this column uniquely identifies a specific model of a product. This column helps in linking the product to its detailed model information within the database. The values are integers and do not follow any specific sequential order.", + "Definition": "The ProductModelID column in the SalesLT.Product entity contains numeric identifiers that correspond to different product models. These values are used to uniquely identify and reference specific models within the product catalog. The column helps in organizing and categorizing products based on their respective models for easier management and retrieval. The values are integers and do not follow any specific standardized format beyond being unique identifiers within the database.", "AllowedValues": null, "SampleValues": [ - 35, - 117, - 53, - 16, - 45 + 38, + 45, + 82, + 24, + 81 ] }, { "Name": "SellStartDate", "DataType": "datetime", - "Definition": "The SellStartDate column in the SalesLT.Product entity contains the date and time when a product began being available for sale. The values are in the format 'YYYY-MM-DD HH:MM:SS', indicating the precise start date and time. This column is used to track the commencement of sales availability for each product. The sample values suggest that product sales starts typically occur around mid-year.", + "Definition": "The SellStartDate column in the SalesLT.Product entity contains the dates and times when the products were first available for sale. The values in this column follow the datetime format 'YYYY-MM-DD HH:MM:SS', indicating the exact start date and time for selling each product. This information is useful for determining the product's availability over time and can be used for filtering products by their start selling dates.", "AllowedValues": null, "SampleValues": [ "2007-07-01 00:00:00", @@ -193,7 +185,7 @@ { "Name": "SellEndDate", "DataType": "datetime", - "Definition": "The SellEndDate column in the SalesLT.Product entity contains the end date and time when a product will no longer be available for sale. The dates and times in this column are formatted in the standard datetime format (YYYY-MM-DD HH:MM:SS). This column helps determine the product's availability period and is used to manage product lifecycle and inventory. The values generally reflect specific cutoff points for product availability.", + "Definition": "The SellEndDate column in the SalesLT.Product entity contains the date and time when a product is no longer available for sale. The values are in the datetime format and typically represent the exact end date and time for each product's availability. This column helps in determining the period during which a product was sold and can be used to analyze sales trends and product lifecycle.", "AllowedValues": null, "SampleValues": [ "2007-06-30 00:00:00", @@ -203,53 +195,53 @@ { "Name": "DiscontinuedDate", "DataType": "datetime", - "Definition": "The DiscontinuedDate column in the SalesLT.Product entity contains the date when a product was discontinued and is no longer available for sale. This column holds null values for products that are still active and have not been discontinued. The data type for this column is typically a date or datetime, capturing the specific point in time when the product was marked as discontinued. This column is useful for filtering products based on their availability status by checking if the date is null or a specific past date.", + "Definition": "The DiscontinuedDate column in the SalesLT.Product entity represents the date on which a product was discontinued and is no longer available for sale. This column contains date values, indicating the specific point in time when the product status changed to discontinued. If the value is NULL, it means the product is still currently available. This information is crucial for determining product availability and managing inventory records.", "AllowedValues": null, "SampleValues": [] }, { "Name": "ThumbNailPhoto", "DataType": "varbinary", - "Definition": "The ThumbNailPhoto column in the SalesLT.Product entity contains binary data representing a thumbnail image of the product. The data is typically in formats like GIF, and it includes the binary encoding of the image file. This column stores the actual image content in byte array format, making it suitable for representing small-sized visual previews or thumbnails. The images can be decoded and rendered as visual representations of products in various applications.", + "Definition": "The ThumbNailPhoto column in the SalesLT.Product entity contains binary image data for product thumbnail photos. The data is stored in a BLOB format representing the image content, typically in formats such as GIF89a. The images are used for quick visual references of products in the database and are encoded in a way consistent with image data storage for efficient retrieval and display. Each entry in the column represents a different product's thumbnail photo encoded as a byte stream.", "AllowedValues": null, "SampleValues": [ - "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\xe3\\xe3\\xfc\\xb8\\xbb\\xc8\\xac\\xad\\xb0UUZo\\x83\\x8f\\xf9\\xfa\\xfd\\xf4\\xf6\\xfe\\xed\\xed\\xfe*FS\\xe2\\xe5\\xea\\x9a\\xa6\\xb3Ml\\x86\\x99\\x9b\\x9e\\xcb\\xd0\\xd5\\xdc\\xe2\\xeb\\xbb\\xbd\\xbe\\x87\\x8b\\x93\\\\fs\\xd1\\xd1\\xd3\\xf9\\xfa\\xfa\\xc5\\xc9\\xe3\\xe9\\xe9\\xfd\\xdc\\xdc\\xe9gku\\xdc\\xde\\xe2\\xaa\\xab\\xad;\\x84\\x87\\x8b\\xb2\\xae\\xae\\xc7\\xcb\\xd5\\xea\\xeb\\xfaegl\\xfa\\xff\\xff-/5\\xf3\\xf4\\xf6_}\\x8ey\\x9e\\xb3\\xc0\\xbf\\xcb\\xf2\\xf3\\xfboz\\x8b\\xfd\\xfd\\xfa\\xf3\\xf8\\xfaAFh\\x91\\x9f\\xaf@[\\x90\\xef\\xf0\\xfb\\xe4\\xe3\\xe6\\xe3\\xe4\\xf2\\xf2\\xfa\\xfd\\xb5\\xb7\\xb6\\xec\\xea\\xeb_^c\\xf4\\xf3\\xfe\\xed\\xee\\xf7\\xeb\\xec\\xf1\\xb7\\xb8\\xbawz\\x7f\\xd7\\xd9\\xe8\\xe5\\xe7\\xe8\\x8d\\x8e\\x91\\xf0\\xf2\\xfd\\xe8\\xe9\\xe786?C\\xa7\\xa7\\xaa\\xfd\\xfe\\xfe\\xfe\\xff\\xff\\xfd\\xfe\\xff\\xfb\\xfe\\xfd\\xfd\\xff\\xfe\\xfc\\xff\\xff\\xfc\\xfe\\xff\\xfc\\xff\\xfehgg\\xfe\\xff\\xfc\\xe2\\xe4\\xf6\\x9e\\x9c\\xa8\\xf1\\xf1\\xfe~\\x7f\\x83\\x9c\\x9a\\x98yu\\x82\\x9a\\x97\\x97nw\\x80\\xaa\\xa6\\xa7\\xc7\\xc8\\xc7\\xf8\\xfe\\xff\\xf9\\xfb\\xfe\\xfa\\xfd\\xfd\\xec\\xeb\\xf3\\xea\\xec\\xf7\\xd1\\xd7\\xe0\\xeb\\xeb\\xf3\\x8f\\x90\\x8e|\\x8a\\x9ea\\x7f\\xb7k\\x85\\x9f\\xe6\\xe6\\xf9\\x9d\\x9f\\x9a\\xf9\\xf8\\xf3\\xde\\xde\\xe0\\xf1\\xf3\\xf2rps\\x1f \\'W_xM`}\\xa7\\xa8\\xa6\\x8a\\x84\\x86\\xf7\\xf7\\xf6uro\\xe9\\xe6\\xe6fx\\x9c\\xef\\xef\\xf0[j\\x95\\xf3\\xf3\\xf5\\x1aDm\\x1d?Upmp\\x8a\\x98\\xa7\\x84\\x8a\\xa9\\xc5\\xc4\\xc6\\x9f\\x9f\\xa2\\xfc\\xfd\\xfb|{\\x89\\xee\\xee\\xea\\xfd\\xfd\\xfexyx\\xa1\\xa0\\xa0\\xfb\\xfb\\xff..3nx\\xa5\\x96\\x97\\xa6\\xe1\\xd7\\xd5\\x84\\x97\\xc0\\xc1\\xc1\\xd7uz\\x98\\xd7\\xd7\\xef\\xd6\\xd6\\xf8\\xd1\\xca\\xc6\\xff\\xff\\xff\\xfc\\xfe\\xfe!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cHp`-\\x7f\\x08\\x13\"\\xace\\x0ba\\x9aq\\xfer\\x15\\x9cH\\xb1\\xa2\\xc5\\x8b\\x18)\\x1eT\\xa8p\\xdc\"y\\xbdbx\\x08b+\\xa3\\xc9\\x93(+n\\xe4\\xd8\\xf0\\x8f(\\x10+\\x0c\\xb9\\x91\\xe0/\\xa5\\xcd\\x9b\\x18W*\\xb4\\x05\\xef\\x08\\x1ftZ\\\\I\\xa9\\x99\\xb2V\\xad\\x7f\\xb8\\xfe\\x1d5\\xca\\xb4\\xa9Q\\x9c\\x16urD\\x18\\xca\\xd8\\x92\\t%S6\\x9c\\xca5!T\\x95]\\x116<\\x13\\x81\\x9d?^\\'\\x19\"\\xfc\\x84\\x02\\xc5\\xa7OW0aRA\\x92\\xe3W\\x8da\\x13\\xb2\\x12\\x05\\xc5\\x96D\\x93\\x1b\\x85l\\t#\\xc9E\\x8f\\xc3=\\\\\\xb8p`\\xf7\\xeeD\\xa7N\\xfdM\\xc0!j\\x07\\xd1\\x93\\xb6\\x96\\x11\\xc1\\xe2\\xef\\xdb\\x872\\xe7\\xce\\x81\\x99\\xc4(Hc\\xc7\\'\\xfduH\\x04\\xe5\\x96.\\x9bR\\x15\\xb8X0\\t\\x13W\\xd4\\'s\\xf9\\x13S\\xc4H\\xc2\\xbf\\x19k\\x8d\\x18\\xd8\\x90\\xcf\\x8fPaqc\\\\\\xb6\\xcc\\xd6\\xae\\x05`\\x12\\x11\\xe2\\xd0\\xe17\\xae\\xa4*\\x8f\\n\\xf4\\xe7\\x07\\xc8\\x87\\x85J\\x13\\xda\\xff\\xca\\xaa\\xbc\"\\xaee\\xfe\\xd6\\xb8\\xe0\\xb6M[\\x88/\\x03X\\xac\\x11\\xaf\\xfd\\xf1\\xf6\\x07\\x1ep\\\\\\xf3\\x97ue\\xfd\\xf2\\x16\\xf9\\xa3\\x00\\x18\\x88(\\x91E\\x06U|\\x11\\x826+\\x00\\x91\\n}\\x15\\xf9\\xa3I\\x11\\x03L\\x80\\x10\\x806\\xf9\\xa3Bau|!\\x0cB\\x9d\\x98\\xa1\\xc5{\\x90\\x18r\\x06\\x13\\xe2\\x19t\\xd0\\x04\\xd0}w!\\x86\\xb9a!\\x80\\x16\\xc6\\xf8cF\\x08P(\\xb4A\\x08\\xef\\x85\\x00B\\x12\\x1e@4\\x953\\xe6,\\xe0\\x87W0f\\xc4\\x8b?\\x10Hb\\x88o\\xfe\\xdc\\x10B\\x0c\\n]0\\xa5\\x12-\\xf0\\x08\\xc9\\x05\\xa6\\x94\\x93P\\x10\\x04\\x9c\\xa3\\xc0eIb\\xd4P8\\xc6 `\\xc4\\x03\\xfc\\xf9\\xc3A\\x08J$\\xe4\\xcc\\x17\\x1a\\xf8s\\x85)\\x86\\xb8\\xf7\\xc5\\x1eq\\x98\\xe0\\xcf\\x0eE\\x14q\\x02\\x99e\\xfe\\xb3\\x15G\\x91L K\\x0f\\x04\\xbc\\x88\\x10\\x03!\\xa8\\x92\\x90%!\\x00\\x91\\x90\\x1d@\\x0c\\xa0\\xe0\\x17e$\\x92\\xc7\\x0c\\x0f\\x16t\\xe8T\\xc0\\xa5\\x84\\xd02|\\x94\\x90\\x01\\x03f|\\xf0\\xc0\\r?0\\xff\\x80@\\x03\\x97\\x91\\x81\\x10\\x0e!\\x98\\x81\\xd0\\x9c{\\x14\\x10QB\\xd7\\xdc\\xa0\\x85{+\\x98R+B\\xf0\\xa4R\\xc2\\x19\\xac\\xb2p\\x82\\x04\\x9c\\xf9\\xf3\\x1fF\\x08I\\xc1\\x80!Z\\xec\\x01\\x826\\xdc\\x82 J6\\x10\\xb8\\xa0[A\\x08\\t\\x13\\x02\\x07\\x08E\\x13\\x82Y\\x03\\xe9\\x86\\x90\\x19_\\x9c\\x12\\xaa\\xa1\\xfe`\\xe1\\xc1\\x0c\"\\xe4\\xd1\\xca\\x1e\\xf4\\xb4\\xe0C\\x1e\\x03\\xfc H\\x16\\xd2f\\xe4O\\x17\\xaa\\xb8\\xe1C\\x0b{h\\xe0\\x86\\x08n\\x102\\x8b\\x088\\x84\\xe1\\xc2\\x0f5\\x90i\\xab?N\\xe4\\xeaO\\x1bE\\xb4p\\x05\\xa1\\xfe\\xc8\\x01\\xc9\\r\\x05l5\\xc1\\t+\\xec\\xd1\\x02=\\x89\\x94\\xf1\\xb0\\x08Z$\\x02\\t$edcY\\xa9\\x05\\xe9V\\xc2\\x00\\xff\\xbaaH\\x0c\\xad\\x02q\\xcc\\x1f\\xe0\\xc0R\\x8c<+hS\\x86\\x9f\\x7f\\xb9[r\\x08,\\xf8\\x93N\\x08\\x0c\\\\\\x86^\\x13\\xdaTaL\\x00\\xa80\\x92\\x06\\x14y\\xd0\\xd3\\xca\\n\\xc2tc\\x02%\\xeb\\x04`\\x8a\\x18qT\\xa1\\x81\\x0fZ\\xdc`!E\\xba\\t\\xe0F\\x1en\\xc4\\xff\\xc1\\xc0\\x03:4\\x11\\xc4(\\xfe\\xa4\\x10\\xc7\\x00\\x7f\\x0c\\xe3\\xca, \\xf8\\xf0\\x9dD\\x87\\x8e J\\x08g$\\x93\\x08\\x08\\x91\\\\\\xe6\\x8f\\x07_l2\\x88\\x13\\xd0\\x90\\xa5\\x01\\x08\\x030 \\xc1\\x18\\x9c\\xf8\\x03\\x03\\x08\\x93y\\xcf\\xfe\\x00\\xa1E\\x1e+\\xac\\xd9\\x01\\x19l 1\\xc1*\\xfeX\\xe0\\x817\\xe8\\xfc\\xf1\\xc0\\x0fU\\xec\\x01\\xc9w\\xed\"t\\xc4\\x00!\\xc8\\xb2\\xc4\\xb9\\x9a\\xaf\\x00\\x89\\x11\\xf5L\\xa3A\\x19\\xf4\\xc8\\xcd\\x02\\x150\\x14P\\x81-h,S\\x81\\xfa\\xfe\\x18\\x80\\x8a)\\xc2h\\xa0A\\x1c#\\x13\\xe4O\\te\\xe4a\\x08\\x10\\x8c\\xcc\\xf3M*\\x06\\xe0\\xc1\\x04\\xd8\\x90\\x0b@\\xb0B\\x1f\\x99\\xd8A\\x14R`\\x86\\x15\\xf8\\xa0\\x15~\"\\x83@\\xdcu\\x05\\x11\\x84@\\x01\\x99\\x00A\\x13\\xfc\\x81\\x9eRhc\\x00%X\\x02\"\\x16\\x90\\x08\\x1f\\xc0\\xc2\\x12\\xd1p\\xc6\\x01`\\xf0\\x86\\x7f\\xa0!\\n\\x15\\xa0A\\xfa*\\xe0\\x8fRP\\xe2\\x06\\xb3\\xc8\\x83\\xa4^\\xf3\\x0f\\x7fXa\\x00\\x1a0D\\x06\\xff0\\xe0\\x8f\\n\\x14\\xa0\\x0b]\\xa8\\xc0\\x15`\\xb0\\x0c6XA\\x0f\\x9a\\xe8\\x03 \\xfc\\x11\\x8b\\x06\\xd2C\\x04V\\xb8\\xccV\\xca\\xa1\\x85/d\"\\x047\\xf0\\x07.r\\xf7\\x05\\'\\xb0\\x82\\x06\\xdcxA\\x0f\\xca@\\x88$\\xd4\\xc1\\x01\\xf0\\x00\\x005\\n\\xf0\\xc2\\n \\x01\\x061\\xa4\\x01\\x1b&`\\x03E\\xc8\\xcfO\\xdb\\xc1\\xc1\\xc4hA\\x024\\x14\\xc0|Y`\\xc5/\\xa8p\\x00e\\x8c\"\\x00/\\xa0\\xc0(j\\x91\\x8by\\xc8\\xc0\\x0c\"\\xa0\\x07\\x0e\\xb4\\x98\\x90\\'\\xe4AA\\xda\\x10R\\xf3t\\x85\\x0cBx\\x0e\\x03fH\\xc4\\x0f\\x1a\\xd0\\x06\\x03\\xf0\\xc3\\x00\\x8dX\\x06\\x1a`0\\x05$\\x18\\xe0\\x00\\xed\\x00\\x84\\'L \\x87=\\x88\\x02+\\xe9\\x19\\xc0,\\x14\\xe1\\xa7 \\x00\\x80\\x062<\\x02*\\x1aa\\xc8`\\x88\\xe3\\x05c\\x88H!`0\\x02J\\xfc \\x11Z\\x18\\nq\\x12b\\x85V\\xf0\\x08\\x02\\xfeP\\x836\\x08\\xc1\\x82 \\xcc@\\x03\\xdc\\x90\\x06\\x11\\xfc\\xc1\\x88*\\xb8A\\x01m\\xa8@#\\x0e\\x10\\x054\\x00\\xa0\\x11\\x06\\x80A-\\x0ep\\xff\\x00\\xd5|@\\x0b\\xf4`\\x93?X\\xa0\\x85\\x01\\x08\\xc0\\x02h\\xa0\\xc1\\x11\\xa8a\\x80J\\xb0\\x01\\x0b\\x168\\xc0<(\\xb0\\t\\x05\\\\\\xe2\\x1fl\\x80\\x01\\'`0\\x8e\\x0c\\x0c\\x80\\x1e\\xec\\x12\\xc8\\xa8\\xa4\\x90%m\\x14\\x80\\x05\\xda\\x10\\x816 \\xa1\\x8d/\\xcc\\x02\\x11\\xe4X\\'\\rXP\\x86\\x19\\xac\\x01\\x00h\\xb0\\x05\\x00\\xa6@\\x05N\\xe4\\xe2\\x00\\x04\\xb4C(J\\x80\\x0e\\x10\\xc4A2r\\x98E\\x0cJ\\xe0\\x0f\\x1aT \\xa1\\x8d(\\x04\\'\\x0c\\xd0\\x01<\\xf8\\x03\\x1f\\x9b\\xa0\\x15?\\x0f`\\x00[d\\x81\\x121\\xd8\\x83#r\\x01\\x9c\\\\\\xa8E5 \\x00\\xa3!|\\x80\\x03\\t\\x18\\x02\\x04\\x89\\x18\\xdd\\x17\\xb4\\xa1\\x85\\x0b\\xd8\\x83\\x03\\x00[\\x82\\x0cR1\\x85)\\x14\\xe2\\xa7\\x80P\\x01+\\xb0\\xe1\\x8fk0\\xc0\\x84VH\\xc3\\x00\\xdc\\xc0\\x80\\x14\\xdcb\\x1e\\xf00@\\x05rP\\x016\\x00\"\\x01:@\\x854\\x06\\xd1\\x016\\xa0!\\x18\\xf9\\xbcC R\\xc0\\x00-\\x10\"c\\x13\\xb9\\x05BHP\\x85\\x0b8!\\x06bH\\x80\"\\x08a\\x08A\\xffH\\xc0\\x03\\xaa\\x90C\\x19Z\\xb0\\xad/TA\\tg\\xa0@#\\xfcq\\x80F\\xd4`\\x0cT\\x00\\x04\\x0c\\xca\\xe0\\x0f\\xeb\\xc0\\x02eS\\x1d\\xba\\xe0\\x0f\\xf1 V\\x02 \\x01o\\xd0\\x04\\xb6\\xa0\\x06XP\\x03\\x9c\\x00\\x08o\\x80\\x04\\x8d`\\x05j\\xe0\\x07O0\\x04Q\\xe0\\x0f:\\xb0\\x013\\x00\\x02\\x8a\\xe0n\\xf6\\xd3\\x00\\x1b\\xe0\\x07\\xba\\xd0\\x10\\rQ\\x02\\x13\\xc3\\x0e\\xce\\xf0\\x0b\\x18\\xf0\\x0b}\\xf0\\x08f\\x00\\x02?0\\x01\\xb5\\x10\\x0c\\t\\x80\\x07\\xf0\\x00\\x03\\x85@\\x03\\x07\\x80\\x01\\x1e\\xd04N\\x10\\x11=t\\re0\\x0b?\\x00\\x04\\xf3\\xa1\\x06\\xd8`\\x07\\xd8\\x00\\x03\\xd8\\x95O]\\x80\\x05\\x0fR\\x03\\xd4 \\x05\\x8b\\x80\\x03t\\x83\"\\x15\\x91\\x0bG \\x05N\\xc0\\x02\\xb7@\\x10\\xba\\xe1\\x04- \\x02\\'\\x90\\x000\\x80\\x06*\\x90*7 \\x00X\\xb0\\x0bl\\xf0\\x04\\x9e\\x80\\x06\\xbe r\\x0e\\xb0\\x01x8\\x0b\\xf2\\xff\\xd7C\\x1e\\xb0\\x07e\\x80\\x03\\x19\\xb0\\x03\\x13p\\x05j\\x00\\x0f1\\xc4\\x03P\\x88\\rM\\xf0\\x04O\\xe0\\x0f\\x82p\\x068\\xa0\\x01-\\x00Ho\\x18%\\x1a0\\x00.\\xd7C\\xb1P\\x05> \\n\\xa6\\x90\\x02\\x1ab\\x07M0\\x01X\\x10\\x04\\xcb\\xc0\\tX\\x80\\x05\\x00`\\x00\\xfe\\xd0\\x00\\x1e\\xf0\\x03>\\x10Pd\\xb2\\x0b\\xfe\\x00\\r-\\xa0\\x05\\xc2\\xf0\\x01\\xeb \\x05\\x13\\x90\\x05\\t\\xc5\\x03\\xcaP\\x01\\x13\\x80\"\\xd7\\xf0\\x00\\x1f\\xf0\\x03Z\\x00\\x02\\xf2`\\x85\\xb3\\x17\\x04k0\\x0e\\xb9\\xb0\\x0c\\x041F)\\xa0\\x05p\\x97\\x01$\\xd0\\x01\\xf0\\xc0\\x04\\xcb\\xc0\\x04W0\\x019\\x10\\x04]\\x90\\x05C\\x80\\x0c@\\x10\\x07\\x0bc)<\\xd3\\x10\\xca\\xa8?7@\\x0b%\\xd0\\x01\\xcd@\\x03\\xd4\\x84\\x06\\xed \\x01\\x0f\\x00\\x04\\x1c\\xe0\\x08\\x89\\xb0\\x07\\x8f\\x93\\x11[A\\x11\\xb6\"\\x01n\\x00\\tn \\x0c\\x1e \\x01\\xf7`\\r50\\x01\\x13\\x10\\x08\\xdfp\\x0ft\\xb0\\x08\\x8aP\\x05\\x0c\\x93\\x01\\xe0\\x88;\\x8bP6T\\x86\\x03, \\x00\\x1bp\\x02\\\\0\\x07s\\xbe \\x0f8\\x90T \\xa0\\x05L\\xc537\\xb1\\x0bc\\xa4\\x06r@\\x0f> \\x02N0\\x0cs\\xc0\\x05\\xfd \\x0b@\\xb0\\x08\\x7f\\x10\\x03U\\xc0R\"\\x80\\x0c-\\xf9\\x18\\xe9\\x11\\x0f>\\xd08U\\xe0\\x08q\\x00\\x05N\\x10\\x07\\x86\\xd0<\\xda\\xb0\\x07\\x8a\\xd0\\x05\\x05\\x83\\x1bct\\x04\\x1e\\xa0\\x92\\xfe\\xa2\\x05U\\xb0\\x02+0\\x00\\x84p9\\xda0\\x0bf@X\\x191F\\xd6\\xa7\\x08n\\xc0[ \\xd0\\x02\\x90@\\x0f\\x90\\x00070\\x14\\xfcA\\x1e8q\\x1eGp$\\tq\\x05\\x0f\\x10\\x07e\\x00\\t\\xdb\\xc2-\\xf40\\x0b\\x8e@\\x0b\\xa18-\\x17\\xa12i\\xd0\\r\\xd0\\x00\\r\\x1c\\x10\\x88\\x1dp|\\x899\\x1e\\xa8q\\x1dR\\x93\\x10\\xe5 \\x01\\xab\\xc2\\x00\\x1e@\\x02h\\x99\\x10\\xe68\\x11\\x01\\x01\\x00;'", - "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\x95\\x94\\x93\\xfd\\xfd\\xfdvll\\x8c\\x8b\\x8a\\xe6\\xe6\\xe6z=N\\xb8\\x84\\x93\\xb2\\xb2\\xb2\\xf8\\xf8\\xf8\\x87\\x1a8\\xa3\\x9d\\x9c\\xc6\\xc6\\xc6\\x91\\x8d\\x8e\\xaa\\xaa\\xaajab\\xe4\\xe4\\xe4\\x99\\x99\\x99\\xfa\\xfa\\xfaSRQ][YyGR\\xdd\\xdd\\xdd\\x88\\x82*\\x8e\\x83\\x83\\x81{#\\xc2\\xc2\\xc2\\xe2\\xe2\\xe2qpl\\xf3\\xf3\\xf3\\xee\\xee\\xee\\xda\\xda\\xda\\x9b\\x92\\x92\\xae\\xae\\xae\\xd7\\xd7\\xd7QON\\xca\\xca\\xca}zy\\x80~z\\xd1\\xd1\\xd1\\xb8\\xb8\\xb8ysr\\xcc\\xcc\\xcd\\x86*CLLL\\xdc\\xdc\\xdc\\xb4\\xb4\\xb4\\x9f\\x9f\\x9f433\\xac\\xa4L\\x98\\x0c3\\xb8\\xa7\\xac\\xab\\xa6\\xa4\\x85\\x83\\x82\\x92\\x83\\x86???\\xce\\xce\\xcev\\'m*\\x8b\\x16\\xe9\\xda\\xa5n\\x9d\\xc6\\x8dJ\\x97\\xea\\xdd\\xabz\\x116l\\xa7d\\x1d\\x88`pJ\\xa5pe\\xa0\\x16+\\x03) \\x90\\xf3`\\t\\xdbb\\xa3i\\x93\\xb2e\\xfa\\xf6\\xa9\\\\\\xa9u\\xab\\xe2\\xcd|\\xb0R\\x05\\x00\\x10R\\xc8je\\n\\xd6\\xab\\x181h\\xe5\\xba\\xc5*\\x85\\xb7%d\\xe2i\\x02U\\xf6\\xa8Z\\xa5m\\x9b\\xc2\\x85:w\\xaa]\\xabyy\\x0f\\xff\\xac\\xe4\\xa8\\x93,T\\xc8\\x13\\xa8\\xc0e\\xcb\\x81?\\x7f\\x14b8\\x07\\xb7\\xc4\\x11\\x01\\x0e\\xd5c?\\xce^{r\\xf7\\xdc\\x97\\x85\\xa7\\x17_\\x08@\\xe0J\\x0cI\\xbc\\xb0\\xc2\\x04^\\xbc\\xf7\\x9e-1\\xac\\xc2@\\rQ\\xd0a\\x8d(\\xafY\\'\\x1bd\\xda\\xd9F\\x99w\\xbaa6`%7ha\\x11(C\\xac\\x82\\xe0\\x0b\\x9e\\x0c2\\x88\\x04\\x0e\\xfa\\x13\\x83+\\x10\\xf0\\x00\\x0e$\\xf1p\\x92\\xa1~\\xd8\\xd1&\\x19w\\xb8Y\\x06\\x1eo\\x95\\xd0p\\xc5\\x06\\xd9\\x84\\x14L\\n1\\x14\\x12\\xc4\\x15at\\x92\\x1a\\t\\xe8D\\x12\\x03jR,\\xb2\\x84\\x0e\\x99P\\xd7\\xd8u\\xb3E\\xb6\\xddm\\x95}\\xb7[f\\x95\\x00 \\x82!\\x07\\xc0\\xa3\\xc1\\x92\\xac\\xf02\\t\\x0e\\x14\\xac\\xc2\\xca,\\xad\\xa4r\\xc0<\\x10@P\\x0e\\x03c\\xdc@\\x006\\xa3X\\x07&\\x87\\xfd\\x01Yf\\x88\\x02\\xf2\\xd4\\x90\\x12\"L\\xd0\\xc4\\x1dZ\\xb8\\x90\\x82)1\\xbc\\x02K\\r\\xb5\\xc8\\x99@\\x0c\\xb0\\xa8\\xb2J\\'\\x00\\x8cc\\x86\\x0b\\xf1X\\xd2\\xc1\\'\\x1c\\x84\\xe2*\\x07\\xd8d\\xff\\x13f\\x87\\xfe\\x05i\\xa6\\x88X5\\x84\\xc4\\x00X\\x10\\x00\\xc1\\x02\\x07\\x1c\\x90B)\\x0c\\x90p@,\\x85\\xbc \\x82\\x0f\\x14\\xa8@\\xcb+\\xad\\x04\\xdb\\t\\x04.\\xb0\\x13\\x82%\\x9at \\xce\\'J!\\xfa#\\x99 \\x06\\x88f\\x009Tp\\x0e#V B\\t\\x10\\xde|\\x90N\\x17\\xab\\xec\\xf1\\x88\\rB4\\xf8\\x9e\\n\\xa6@\\x90\\n,\\xb5\\xb82,\\x1cCd\\xa0\\x01\\x01\\x99h\\xc2\\x89H\\xa4\\x88\\xe9\\xe1\\x7fB\\x9e\\x99UC\\r\\xec\\x82\\xc5\\x06c\\xd0\\xd0\\x82\\x12?\\xf0\\xa1\\x807\\xaa\\xb8\\x11\\xc4\\x17\\x13\\xd8\\xe1\\xe0-\\xad@`\\x80\\x1bh\\xd0\\x82\\n,\\x06\\xe8\\xf9KNL\\x10LJ\\xc2\\xb4*\\x1a\\xee\\x90\\x03\\x06\\x00\\x8a$\\xc0\\x0c\\x00\\x04\\x14.\\xacs\\xc9\\x13\\xc4@\\xd0\\n*{\\xd0i\\xc4{R\\xc8\\x07\\x01,S\\xbc\\xe0\\xcb\\x19\\x05\\xa8\\x10C,\\xad\\xa4@\\x03?Hh`I&\\n\\xd7\\xba\\xa8\\xb89\\x8f\\xe2\\xcf\\x1dD\\x0c\\x00\\xc0\\x06 \\xc41B\\x9f}\\xeabJ,1\\xa8P\\x00.\\xb0@\\xc0\\x0f\\x82\\x92H\\xff`\\xaf\\x03x\\x1f\\xc0\\xc0\\x12X\\xc4\\xf3\\xc0)a\\xdb\\x0c \\xce\\x0f\\x07\\x80\\xc0%\\xfe\\xf4!\\x01\\t\\x86\\xc0qB\\np\\xa4\\xe2\\xca\\xa8}\\xd6`\\x00,1\\x94\\xec\\x8a\\x1bbd1\\x88\\xc8\\xf7\\xaa2@:\\n\\x10c\\x02\\x13\\x96\\x9cR3\\xb8\\x8b;\\xfcp\\x04\\x9c\\x04B\\xcd\\x069l\\xb0\\x812\\x0b\\xfc2\\x8b\\x1fW\\x9b\"Kj}\\x1e\\x00\\xc1y~\\xe0\\xf0\\xc7\\xd2\\xef\\xd1\\xb2\\x8a\\x00<|\\xc0G\\n\\xb0\\xcb\\x9e(\\xed\\r\\xe3\\x9ak;\\xd8\\x18QE=v$\\xc3\\x0c\\x1c\\x00t\\xf2J\\x12\\x81\\xa0\\xa3\\xc2-\\xa8\\xe0\\x99\\xc2\\x00p\\xebR\\xcb+\\xb4\\xa8@\\x01\\x05\\xaft\"\\x05=\\x8b\\xe0\\xc3\\r`\\x978\\xee\\xdd\\xaaQ\\x8e\\n\\xc0(.!\\x841,\\x0b\\x06\\xc9 \\x81.\\xfc\\xf0\\x08\\xd3\\x89\\xcc\\x16\\xb8\\xa0\\x85\\x01\\x82\\xe3\\n=\\xc5M\\x15\\xac\\x88\\x81)\\x18\\xb0\\x83\\xea\\xb1A\\x0b\\x87+\\xe0\\x87j\\xe7\\xbd\\\\!\\x80\\x13/\\x98\\xc1\\x04\\xd4\\x00\\x03|\\xa4\\xa0\\x13\\xf6xA\\x18&\\x00=\\x7f\\xdcB\\x16\\x10P\\xc5\\x1e\\xffb\\xc0\\nQM\\xabO\\x9d@\\xc1\\x0e.\\xa0\\x80\\' \\x81`*d\\xd8\\x01\\xc5S\\x89vd\\xc3\\x08P0\\x84\\x1a\\xee\\xa1\\x0e\\n\\xcc\\xe2x.\\xd8\\xc0 \\x1e\\x84\\x8aN\\x94\\x02Y\\xdcp\\xdf\\xb3\\xfa\\x95\\x02v\\x9ca\\x07\\xe9\\x98\\x01\\x16*`\\t\\x9amo\\x85\\xddC`\\x027\\x11\\x07*\\xe4\\xe0\\x08\\xf7\\xd8B>\\x90\\x13\\x0bU\\xa4\\xa2\\x13\\x030D\\x01f\\xa1\\xaf\\x18)\\xc5u\\x12\\xa9\\x18)\\xa0\\xc4#\\xc4\\x90\\x84+\\xf4\\xd0A\\xb8\\xb8RpR\\x90\\x8a}L`\\r\\x0c\\xe8\\x04qR\\xa1D\\n\\xdd\\xc1\\x03\\xa78\\x18:\\x176L\\xb2\\x8d\\xab\\x017\\xb4\\xda\\x1f\\x0c\\xe1\\x05#\\xdcTe\\xa90\\xdaq\\x88\\xd8\\x0c\\x1a8\\xa1\\x0b4\\x80\\x80\\x14x\\x10\\xc0\\x14\\xc0\\x83\\x14\\x1dXi:[\\xea\\xd4\\x01iB4*\\xa2\\x85\\x08\\x840\\x01\\xaa\\xda\\xc1\\xaa\\xf1\\x99E)d\\x80\\n\\n\\xf8\\xc3\\x01*hN) `\\x86\\xff]\\x00\\x1c\\xc4@a\\xb6\\xd4\\xca\\xd4\\x85\\xda.+\\x01\\x10V\\nT\\x11\\x83I\\xd8\\xe0\\n\\x82\\x90\\xc0 \\xea\\xea\\x05V\\x02\\xd1\\x14*p\\x907W\\xb1SW\\\\\\x80\\x04\\x0c\\xf8\\x81\\x16\\xe0aNMxr\\xadMeh\\xae\\x02`\\xa9\\x14\\xff\\x84\\x10\\rAxA \\xb2@\\x85\\xb9\\x9e!S\\x9d\\xc0\\x84)p\\xc1 \\xab\\x92\\xac\\x14\\x98\\x9af-\\x0e\\x00\\x9c\\x10\\xc4\\x0cl\\n\\xbd\\xd9c{RE8X\\x93\\xb21\\xd8\\x03/\\x9c\\x14\\x08I\\\\\\x01\\x071PEp\\x0c\\xb0\\x07\\x1b\\xac`\\x10\\x7f@\\x85\\xd1ha\\x8b\\xbf\\xde\\xc2\\x14\\xa9\\xa1\\x84\\tX@\\x80\\xd8\\xcdN\\x9dm\\xcd\\xd51\\x81#\\x9cZ\\xa0\\'\\x06~\\x98\\x82\\x18^0\\xc4T\\x94b\\x00)\\x98\\xc5\\x1e\\xe6\\xa4SVP\\x00z\\xb6@\\x05?\\xbcQ\\x05%\\x90\\xa3\\x02\\x04\\xd0\\x1eKc;]Gi#\\x1b\\x15\\xb8\\x03\\rh \\x1a\\x03\\x84\\x109V\\x9a\\xc5\\r\\xcf\\x10\\x86.\\x98\\xc3\\x14\\xa6XE):\\xc1\\nt\\xf8\\xa0\\xaa\\xdeLA\\x17>0\\x86; \\xe1\\x01\\x96\\xb8/[eK\\xddv@\\x83\\x00z\\x80D\\x14. \\x80\\xa0\\xae\\xe2~\\xc8\\xf1\\x977.\\xbb\\x02I\\x88\\x80\\x06\\xd3\\xbaT\\x1bl \\x88A\\xe0\\r\\x08\\xf4HG\\x14(\\x11\\x02 \\x0b\\x99\\xc3-L \\x02\\xc4Q\\x8dD\\xfc@\\xff\\x01P\\xe8B\\x18\\xbc`]W\\x1c/\\x05+\\xb0\\x81\\x9e=!\\x89\\x17|A\\x04\\x03HE,\"1\\x89\\x04\\xa0B\\x16\\x02\\x08s\\x85\\x9e\\xa8a\\xd8:6\\xcd\\x1eV\\x02\\x106\\xe0\\x89@\\x04\\x82\\xca|\\xde\\x85\\x94J\\x91\\x05O\\\\\\xe1\\xd3\\x95\\x16\\xc4\\x19\\x1c\\xe0\\x83q\\xb8\\xc3\\x14\\x86\\\\B\\x17\\xc8:\\x06,\\xd0\\xb7\\xd1\\x8d\\x95.\\xa4\\xf7\\x12\\x00#\\xbc\\xc0\\x06}\\xb6\\xc1n\\xb3\\x90\\x85\\x15TY\\x04\\x12\\xf0\\xb5\\x08V\\xe0\\tO\\xe8P\\x02\\x0e \\xc1\\x05\\xcc`\\x06 tb\\x1c<\\xa8\\x018\\xd8`\\x02\\xaf\\xc1Zl\\xb2\\xd6\\xe3^\\xda\\xe1\\x8db{\\xfa\\xb2W\\xf0\\x04\\xb0% \\x01\\x1b\\x88 \\xdcW\\xb8\\xac\\rn-\\x08\\xb0\\x12\\x81\\x10\\xe0X\\x04\\n\\xcc\\x90\\x8e\\x0fT\\xe1\\xa8P<\\xf3\\xa3\\xb5\\xad\\x19m\\xb0#\\xdd6\\xc8B\\xb8\\x03qn\\td!\\xe0\\xc6^w\\x16\\x84\\xf0\\x02\\xdd\\x8a\\xa0\\x0b@x\\xc3\\x0f26\\x03BDa\\x0c\\x8dX\\xed)^\\x1bk\\x16\\xf2\\xbb7\\x11\\xb8\\x83y;\\xediO\\x08a\\x05\\x06\\xff\\'6\\xaf\\x03\\xd1\\xf0,\\xb4\\\\\\x029\\x00\\xc02\\xf4\\xa0\\x039\\x90\\xe1\\t\\x8d\\xb8\\xc3\\x85\\x81\\xc9ql{\\x9c\\x8a\\x11\\x00F\\xc0I\\xbe\\x82O\\xdb\\xc0\\x13zNww/\\x1b\\x86/8}\\x10f \\x04\\x19\\xc2A\\x00\\x02X\\xc3\\x03\\xf1\\xf0\\x00<\\x80\\xe9\\xda\\xe8\\xfe\\x9cH\\xda\\x10\\x87\\x08Z\\xb4\\x02\\x96\\xf79\\xd7Y\\x08\\x83\\'|\\x11\\x86\\xa6\\xfbb\\xae\\x86\\xd8\\xc0\\x00\\xf8 \\x07\\x02\\x88\\xe2\\x13\\x1d \\x05\\xe2H\\xc1\\x89\\xb4.\\xd5\\xe7yd\\'6r\\xc0rv\\x83\\x9a\\na\\xa0Bf\\xe9\\xea\\x85.\\xe4\\x00\\x05%\\xc0\\x03\\x11\\xde@\\x86\\npB,\\xa1\\x88\\x95(@\\xe2-Gg\\x9b\\x8a\\x01\\xe8\\x852\\x9a\\xc0;!PA\\xf1\\x9a\\xf5\\x81\\x1dzG\\x02(\\xf8\\xac\\x1eQx\\x830\\xe8\\x90\\x88r\\x12\\xca1\\xd8\\xe8\\x91\\xd7\\x03O\\xc5m\\xa4\\xa1\\x0fV\\xa0\\xc1\\x06\\xba\\xd0\\x85\\r\\x98!\\xf2@ \\xc2\\xc5\\x97\\xf0\\x03:0B\\x0f\\xd4\\xc8\\x83\\x06\\xd2\\xd0\\x01\\x0e\\x14\\x8aG\\xb3\\xba\\xe3\\x90;L\\xdd\\x08\\x88#\\x0fO\\xb0\\x02w\\x00\\x80\\x00\\x80zXA\\xf6O C\\x1f\\xae\\xf1\\x8dp\\xbc#\\r\\xd38\\x0428\\xd0\\x8bhdDC\\xfb\\xf9\\xbb\\xe2\\xba\\xa7\\x0cJ\\xf8\\xff\\xff\\x00\\x18\\x80\\xff7\\x13\\x07`\\x05\\x100~\\x00\\xf02\\xc1\\xc0\\x0e\\x88\\x00\\x02\\x07\\xb0\\x04up\\x02\\'\\x00\\x06JP\\x81\\x16x\\x81J\\x00\\x06\\xc5\\xb0\\x81\\x12X\\x07u\\xb0\\x0e\\xc1r\\x00\\xca\\xa0\\x0c \\x00\\x02\\x88\\xd0\\x00\\x8a\\xa0\\x08\\x98\\x10\\x0cC\\xe0\\x02p\\xf0\\x0b\\x07\\x08\\x00\\x0c\\x10\\x10\\x00;'", - "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\xc1\\xc3\\xbd\\xf4\\xf4\\xf4\\xbb\\xcc\\xc9\\xec\\xea\\xea\\xc2\\xd4\\xd1\\xac\\xc2\\xbb\\xb5\\xb8\\xb4\\xda\\xda\\xda\\xb8\\xba\\xb5\\xab\\xb8\\xb4\\xaa\\xb5\\xb2\\xe8\\xe6\\xe6\\xd6\\xd5\\xd5\\xa8\\xb4\\xad\\xea\\xea\\xea\\xc7\\xc8\\xc4\\xb0\\xb2\\xac\\xa6\\xb3\\xb3\\xe2\\xe2\\xe2\\xdf\\xde\\xde\\xe1\\xe0\\xe0\\xec\\xec\\xec\\xb3\\xbd\\xbb\\xf0\\xf0\\xf0\\xcd\\xd2\\xcc\\xd4\\xd9\\xd4\\xf4\\xf2\\xf3\\xc2\\xd2\\xcd\\xea\\xe8\\xe8\\xe4\\xe2\\xe2\\xe6\\xf3\\xf3\\xdc\\xdc\\xdc\\xca\\xdb\\xd9\\xf2\\xf2\\xf2\\xa4\\xa5\\xa3\\xf0\\xee\\xee\\xad\\xad\\xac\\xab\\xbd\\xbb\\xb4\\xc9\\xc3\\xa5\\xb1\\xad\\xce\\xcd\\xcd\\xe5\\xe4\\xe4\\xd1\\xd2\\xcd\\xdf\\xdd\\xdd\\xd8\\xd8\\xd8\\xee\\xec\\xec\\xcd\\xcf\\xca\\xd9\\xe9\\xe9\\xf5\\xf3\\xf3\\xe6\\xe5\\xe6\\xbe\\xbf\\xbd\\xee\\xee\\xee\\xd9\\xd6\\xd6\\xb4\\xb6\\xb0\\xd8\\xda\\xd6\\xbc\\xbd\\xb9\\xe0\\xe1\\xde\\xc8\\xca\\xc4\\xe7\\xe4\\xe4\\xc6\\xc5\\xc5\\xf2\\xf0\\xf1\\xf7\\xf4\\xf4\\x9d\\x9c\\x9a\\xb4\\xc2\\xbb\\xe8\\xe7\\xe8\\xe3\\xe0\\xe1\\xdc\\xde\\xda\\xbd\\xc0\\xba\\xc2\\xc1\\xc1\\xf9\\xf2\\xf1\\xb9\\xbd\\xb9\\xb9\\xba\\xb8\\xe4\\xe3\\xe4\\xa5\\xad\\xab\\xfb\\xfc\\xfc\\xe9\\xe8\\xe8\\xd8\\xd6\\xd8\\xad\\xaf\\xaa\\xdc\\xdb\\xdc\\xfa\\xf8\\xf8\\xe4\\xe5\\xe2\\xe0\\xde\\xe0\\xa9\\xaa\\xa9\\xed\\xec\\xec\\xcb\\xd8\\xd5\\xda\\xd9\\xda\\xaa\\xad\\xa6\\xde\\xdc\\xde\\xbf\\xc1\\xbc\\xa6\\xb8\\xb9\\xf8\\xf7\\xf7\\xda\\xdc\\xd8\\xd4\\xd2\\xd1\\xc9\\xc9\\xc9\\xe8\\xe8\\xe7\\xc4\\xc4\\xc1\\xba\\xc9\\xc7\\xec\\xea\\xec\\xb5\\xb6\\xb4\\xd3\\xd5\\xd2\\xb0\\xc2\\xc2\\xdd\\xdc\\xdd\\xe3\\xd9\\xd9\\xb1\\xb2\\xb0\\xb4\\xc6\\xc5\\xae\\xc0\\xc0\\xcc\\xca\\xcb\\xf2\\xee\\xee\\xb5\\xc5\\xc2\\xb2\\xb6\\xb3\\xf1\\xef\\xef\\xca\\xcd\\xc8\\xe2\\xe0\\xe2\\xe6\\xdb\\xdb\\xbf\\xc2\\xc1\\xda\\xdf\\xdd\\xbe\\xd0\\xce\\xbf\\xc5\\xc2\\xd4\\xd3\\xd4\\xc4\\xc9\\xc8\\xfc\\xfb\\xfb\\xe6\\xe4\\xe6\\xe3\\xe4\\xe2\\xc1\\xc6\\xc0\\xb3\\xc4\\xc3\\xca\\xc7\\xc8\\xbd\\xc7\\xc6\\xee\\xed\\xed\\xc0\\xce\\xce\\xd6\\xe1\\xe1\\xdc\\xda\\xdb\\xfc\\xfb\\xfc\\xc7\\xce\\xcd\\xf6\\xef\\xef\\xca\\xd5\\xd4\\xc5\\xd8\\xd5\\xfc\\xfc\\xfb\\xfa\\xfa\\xf9\\xc2\\xcd\\xcb\\xf4\\xf0\\xf1\\xbb\\xc2\\xc1\\xeb\\xea\\xe8\\xde\\xe1\\xdd\\xdb\\xda\\xdb\\xb2\\xc6\\xc6\\xa6\\xab\\xa6\\xe1\\xe0\\xe1\\xdd\\xde\\xdc\\xde\\xdd\\xde\\xd9\\xd8\\xd9\\xdf\\xdd\\xe0\\xd1\\xd2\\xd1\\xb5\\xc3\\xc3\\xfd\\xfd\\xfd\\xfc\\xfc\\xfc\\xfb\\xfb\\xfb\\xf8\\xf8\\xf8\\xfb\\xfa\\xfa\\xf7\\xf7\\xf7\\xfa\\xfa\\xfa\\xf9\\xf9\\xf9\\xfe\\xfd\\xfd\\xf9\\xf8\\xf8\\xf7\\xf6\\xf6\\xf6\\xf6\\xf6\\xfd\\xfc\\xfc\\xfb\\xfa\\xfb\\xfb\\xfb\\xfa\\xfd\\xfc\\xfd\\xf8\\xf7\\xf8\\xf8\\xf8\\xf7\\xfe\\xfd\\xfe\\xf0\\xed\\xed\\xf2\\xf1\\xf1\\xfe\\xfe\\xfd\\xfd\\xfe\\xfe\\xf7\\xf7\\xf8\\xf7\\xf7\\xf6\\xf7\\xf6\\xf7\\xfd\\xfd\\xfe\\xf4\\xf4\\xf3\\xea\\xe9\\xe9\\xf9\\xf8\\xf9\\xf2\\xf2\\xf1\\xfa\\xfa\\xfb\\xf0\\xef\\xed\\xf3\\xf3\\xf3\\xfc\\xfc\\xfd\\xe1\\xe2\\xe0\\xfd\\xfd\\xfc\\xf6\\xf6\\xf5\\xf8\\xf9\\xf9\\xf0\\xf0\\xef\\xeb\\xeb\\xeb\\xed\\xee\\xed\\xf8\\xf8\\xf9\\xf6\\xf5\\xf5\\xda\\xe2\\xe2\\xf8\\xf9\\xf8\\xe4\\xdd\\xdd\\xf8\\xfe\\xfe\\xf1\\xf1\\xf1\\xf9\\xf9\\xf8\\xe2\\xe7\\xe6\\xe3\\xe3\\xe3\\xe0\\xeb\\xeb\\xf2\\xec\\xec\\xbb\\xc0\\xbb\\xef\\xef\\xef\\xb8\\xc2\\xbf\\xe3\\xe3\\xe0\\xe7\\xe7\\xe7\\xf3\\xf4\\xf3\\xf6\\xf6\\xf7\\xc3\\xc9\\xc9\\xf7\\xf2\\xf3\\xc5\\xc3\\xc4\\xf4\\xf1\\xf1\\xfc\\xfd\\xfc\\xbe\\xc4\\xbe\\xc0\\xc0\\xbe\\xef\\xf4\\xf4\\xfc\\xfd\\xfd\\xf5\\xf6\\xf5\\xfa\\xfb\\xfb\\xae\\xaf\\xaf\\xd8\\xcf\\xd0\\xcf\\xdf\\xe0\\x8d\\x97\\x96\\x81\\x80\\x80\\xea\\xd9\\xd9\\xfd\\xfe\\xfd\\xc0\\xc6\\xc5\\xd5\\xdd\\xd9\\xb9\\xbe\\xbc\\xb9\\xb8\\xb7\\xf0\\xeb\\xeb\\xf0\\xeb\\xec\\xf1\\xec\\xeb\\xcf\\xcf\\xce\\xe1\\xdc\\xdc\\xee\\xee\\xed\\xc1\\xc0\\xc0\\xe9\\xea\\xe8\\xe9\\xea\\xea\\xfa\\xf9\\xf9\\x9a\\xae\\xae\\xc3\\xd0\\xd0\\xe4\\xe7\\xe7\\xe6\\xd4\\xd4\\xe7\\xe7\\xe4\\xd7\\xd6\\xd7\\xac\\xac\\xac\\xa7\\xaf\\xae\\xfe\\xfe\\xfe\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0\\xe1\\xc0L\\x0e#\\n\\xf47j\\x04;g\\x85\\n\\x15\\xd9\\xb8\\xd1\\x9d\\x06\\x89\\x12\\xfd\\x05\\x90\\xc0\\x89\\xa0\\xa6\\x003>\\t\\x0c\\x05R 1x\\xf0\\x8e\\x991\\x13\\x87\\xa6\\xb9|\\xf9\\x8e\\x8dj\\xe9\\xd0\\x1f\\xb4G\\xcc<)\\xd1\\xb5\\x80\\x12\\x8b}\\x12\\xdc\\\\\\x08\\xb2\\xa6\\xa5\\xbfL\\x99^\\xa1\"6\\x05\\x08\\r\\x1a\\xf0F\\xf8\\xe3\\x19\\x91\\x18\\x03;U\\x9c\\xd8\\xb1C\\t\\x88\\x84GQ(=\\xd2\\xc1u\\xa0\\xa6`\\xccR\\\\\\xd0\\xd66\"8h\\x94\\x180\\x80\\xb3S\\xe0\\x14l;\\xec\\xf0\\xa8\\xfb\\x8f\\xd3\\x1f\\r\\xb3\\x08GTY\\xeaQ%\\x88\\x03\\xbb\\xa1\\x13\\xd1G15`\\x8a%\\x12\\x0b\\xf1/\\xca\\x95\\x82\\x1e\\x0c\\x88@\\x01\\xaa\\xae\\xbf\\x11\\xba2G\\xd4\\xf51\\x06\\x83T\\x03\\xfd\\xbd\\x10Ab\\xcc\\x1c\\x1c\\x03\\xb4\\xf0\\xdc\\x14L\\x95\\xea\\x86\\xfe\\x86m\\x95\\xc5\\x80R\\'\\x81\\xc8\\x08\\xf0;\\xd3\\x84\\x0f\\x01\\x10\\xe9\\x1cq\\xf0\\x15\\xd1_\\xab\\x01\\x90\\x7f+\\xdc\\xf5j`2\\x06U\\x82\\xf5\\xff\\xf0`\\xe1\\xc6\\x9e1_\\xdaDHC\\x87J\\x06!\\xfa`l\\x15\\xf8*\\xd3\\xfc\\x81\\x14\\xd6\\xa9\\xc9\\xae\\xdd\\xa1\\x16\\t\\xfb\\x88s\\xc7\\x19D\\xf4#\\x04)\\x9e0\\xa3\\x06\\x02\\n\\x94 \\x00\\x01T\\xd8 M.\\x9a\\x1c\\xb4\\xc9%\\xeb\\xc8\\x80K\\x7f-m2\\xc2=b\\xdc\\x90\\x04\\x1a8\\x10#\\x10\\x1eS0 C\\x83h\\xd0a\\xc8{\\x8d\\xf8\\xe6]\\x172\\xbc\\xc1!O\\xc8\\x08 C\\r5\\x9c\\x00\\x06\\x05\\x01\\x14\\xa4\\xc1\\n\\x0f\\x18\\x90\\x00\\x19\\x02l\\x80A\\x06z\\xd0\\xf2O-; 0\\xc9\\x8d\\t\\x9d\\xf4G-K\\xd4\\x12L+Z4c\\x017\\x08P`\\xc0\\t\\x80\\xec\\x00\\xcdA\\xf5L\\xf3\\x8e\\x11\\t\\xa4a\\x02\\x1bu\\xbc\\xf1\\x06\\x11C8i\\xd0 \\x01T\\xe0\\xc54\\xd3\\xd0\\x93L*\\xf7\\xb5DL\\nNTQ\\x05%\\x948\\xf1H\\x15\\x82\\xd0q\\x04\\x02.\\xfc\\xe3\\x00\\x04\\x11(\\x82\\r)\\t\\xb9\\x12\\x0f\\rr$\\xa0\\x80\\x14R\\xc8\\x80\\x85\\x04\\x05\\xe9\\xc2\\x8c\\x13N\\x94Q\\x86\\x13\\x82T\\xc1B%\\x13T\\xff\\xc0_C\\x9cH\\xc0\\x82\\x13Ax1\\x80\\x1b\\xd9\\xb8\\xd1\\xc2\\x00\\x1f\\xf0\\xc1M\\x13\\x07\\x08\\xc4\\x8b\\x15Y(\\x82B\\x85\\x0b\\x11\\x83\\xc3\\x03g\\xc8\\xf0\\xc3\\xa8\\x02\\xc9\"\\xc9\\x01\\x12\\xec\\xbaH60h\\xb0\\xc6\\x00\\x0bDQ\\xc5\\x01g:\\xf4\\x07\\x0b\\x8fH\\xd0\\xc2(\\xb3\\xe2Q\\x0c\\x1b24a\\x07\\x12\\x15\\xda`E\\tw\\xd8\\xe1\\x10\\x14\\x06`\\xa1@\\x01X,\\xa0A\\x15\\x1d\\xb4\\x00\\x83(\\xae\\x18\\x84\\x07\\x0cS\\xe8P\\x85\\x04\\xcc*\\x04\\x04\\x03\\x13\\x0cP\\xdaA\\xa1\\xbc\\xc0\\x88\\x01(,\\xc0\\xc2\\x07\\xa5\\xa9\\x10I\\x1auL\\xd0\\x90\\x0b\\x06<\\xa0B\\x03&4\\x81\\xc2\\x1fk\\x1c\\xa7P&\\xd7\\xb40\\xc1\\x07*%4\\xcd>p\\xb4\"P&\\x11\\x0fT\\x0f\\x082 \\x00\\x8a&\\xd3TR\\xc5\\'\\xbb\\xb8\\x10\\t\\x19\\xea\\x00\\xb1\\x90&C\\x1c\\xa1\\xc2,c\\x9cP\\x00\\tH$\\xe4\\xcfS\\x03\\x892\\x05\\x05N\\x04M\\xd0\\x1f\\xfb\\xa4`\\xe2D\\xb3\\xfe\\xd3\\x8d\\xa3\\xef\\xac\\xc4\\xc1>\\x94\\xf8\\x03\\xca\\x17Ida\\x84\\xcf\\t\\x01\\xff#\\xc6\\x108\\xfc\\x03D\\x8f&\\xec\\x80\\xe9D`\\xffc\\x1fD\\xf3\\xd9R\\x0b\\x05&\\x1b\\xe4\\t\\x0b\\x14\\xc0\\x10\\xdbA\\xfe4\\xe3\\x07\\x02\\xc2\\xfc\\xb3U&y0\\x10\\xc3?\\x01\\xdc\\xd0O\\t\\x0f\\xe8\\x86\\xd0$g\\xec\\x91\\x0c,\\x95P\\x00\\xc0\\t&\\xacc\\xf9S`\\x7fm\\xdfV`sR\\xcb\\x07\\xb5\\x18D\\xf6\\x08\\x04\\x05:\\x10\\x0c\\xe30\\xf2@A\\x9dL\\xc0@\\x90\\xc2\\x8c\\x89\\x06\\x17f\\x0f\\xf4\\x86\\x18.\\x98bI\\x19\\xad|\\xf2\\x80\\xd6\\xe1x\\xa2\\xf8\\xd7\\x9e?\\xb5{\\xc4\\x1aLSEI\\xde\\xb1\\x10\\x03K\\x9e\\'T\\xc1!F\\xf0b\\xd0\\x05\\x95D!\\xd0<\\x94\\x92\\xc1\\xc0A\\xbf\\xa8\\x9a\\x10\\xdc\\xc0\\x84\\x01l\\x85\\x13\\x00h@\\x01\\xc4`\\x8a\\xddy.\\x13\\x9b\\xd0\\x84?$\\xb8\\x92\\x7f\\x8c\\x8dT\\x03I\\x0bg~\\xd6\\xb6\\x7f\\xe0a\\x19\\x80\\x00\\xc0\\x13\\xe6C>\\x7f a\\x1f\\x96\\xfb\\x07/\\x9a\\x10\\x81\\x04P\\xc0 \\xc1\\xa8\\x01\\x16\\xbc\\x10\\x85\\x15\\xac\\xed\\x1f\\xc4\\xb8\\x81\\x02\\x8f0\\x08\\xfbxN\\x13\\x9f\\x80\\n\\t\\xff\\x05\"\\n \\x1c\\xe0b\\x9e\\xa8B\\x0c\\xf8c\\xbc\\xadh!\\x10~`\\x01B.\\xc0\\x82\\x14\\x0cd\\x0b\\xc8J@\\xf0\\x08\\xb2\\x853\\xbca\\x00\\x95\\x18@An\\xc1\\xa0\\x12\\xc8#b@\\xf3a\\xfc\\x062\\x85\\t\\x04C \\xc1\\xa8\\xc2\\x1f\\x1a\\xc2\\x03\\x10lc\\x8e\\xc6\\xfb\\xc7&(\\xf0\\x08f\\xf9C\\x05\\x08\\xc8B4T\\'\\x90\\x1c\\xd4 \\x03H\\x10D\\n\\t\\x12\\x83\\x1a$\\xa0\\x00N\\xb8\\x1c\\t\\xcd\\'\\x90\\x00 \\xe1\\x85\\xff\\x90\\xc0\\x04nX\\xbc\\x89\\xfcc\\x15\\xcc \\x80\\x0b\\x06\\xa1\\x84<>\\xa9\\x12A\\x12\\x08.00\\x04H\\xd4Af\\xc60\\x82\\x11\\xa0\\x00\\x07\\t\\xd4\\xe3 8\\x80@\\x026\\xc0\\x81\\x07\\x16O\\x88\\x02\\xf9\\x04\\x10(q\\nMP\"\\x05\\x9b\\xf0\\xe4A4\\x91\\nB\\xb0a\\x05\\xe4;\\x88\\x1b\\xaa0\\x05\\x82x\\xe2\\x01\\xcf\\xc8\\xc2\\x1d\\x04\\xa2\\x07\\x11\\xec\\xe1\\x0fU\\x00\\x82)\\xff1\\t]\\x12\\x00\\x8f\\x04\\x11\\xe2}XQ\\x06]p\\xc2\\t\\xe2\\xc4\\xdc@:\\x11\\x046X\\xa0\\x07\\x08\\xd9\\n\\x0c\\xca\\xb0\\xff\\x80\\x82\\x84\\x00\\x00\\xea\\xb0G\\x06\\xfe\\x01\\x01\\x1f\\xbc\\xe3,\\x03\\xd0\\x84BQ\\xa1\\x89Rd\\x82\\xa1\\xa8`A\\x13\\x12 \\x80\\xd1\\x95\\x0f!n\\x98\\xc0\\x1f\\x02\\xf0\\x88-z-\\x17}H\\x00\\x06\\xc6\\xb7F\\x82\\x8c\"\\n]+H\\x05\\x10\\x90\\x04\\x13L\\xa0\\x1c\\xfc@\\x01\\x12\\xf2\\xc0\\x8aMt\\xa2\\x98\\n]\\xc5*4Q\\x8f\\x16`\\xc1\\n\\x11\\xc0\\x04[\\xb2\\x13M\\x81\\xf0`\\x02\\x0e\\xd0\\xc5#\\xc4\\xa8\\x90N\\\\B\\x0e\\xdcH\\x01\\x0fL\\x91\\x10-H\\x02\\x83\\x05\\xd1\\xc3:\\xd0a\\x01\\x1f\\xc8\\xe3\\x1dS\\x08\\xc3G\\x14\\xd7\\t\\x18\\x8c\\x00\\n[\\xc0\\xc0\\x1e~`\\x01\\x11\\xf8\\xe0\\x04\\x98\\x10\\x05(\\xd8g\\x10\\r 5\\x00N`j>\\x031\\x0e9p\\xe1\\t\\xa5\\xc8\\'\\x0e%\\x91\\xd2\\x82\\xd8\\xa2\\x0fg\\xe0\\x87\\x14\\xd6\\xb1\\x83J\\xa8\\x81\\x06\\x14\\xa8\\xc4\\x180\\xb0\\x01\\x01\\xbc\\x89\\x0cd\\xb0@\\x02Dp\\x03\\x17\\x90C\\x0e\\x99\\xf8D\\xf5\\xfe\\xd1\\nJ\\x04\\xc3\\x13NX\\x82B\\xfc\\x81\\x8f\\x00\\xd0\\xe0\\x0f\\xbfh\\x96$\\xf2`\\x90U\\xffh\\x00\\x06D\\xe0G8d\\x10\\x0ekX\\xe0\\x1e\\x878\\x04\\x01\\xe8\\x00\\x86\\x1f\\x18\\xa0\\r<\\xba\\x01\\x00 \\x05\\xe90\\x00\\x829+\\x08\\x0f\\xae0\\x82M\\x1c3\\xb0\\x82\\xc5\\x83$P\\xb1\\x89q\\n\\x04\\x06Q\\xf0\\xe8@6\\xf1\\xa7\\x10t\\x81\\x08\\xf7@\\xc3=\\x0cA\\x88=l\\x03\\x0b\\x00x\\x80\\x0bl\\xc0\\x8bZ\\xb8\\x81\\x13\\xbe\\xc0\\x007Pp&\\x7fxb\\xb4J\\xcd\\x9b\\xa8\\x98Kp\\xa7\\x17M\\xf6\\x19^\\xfc\\xa7\\xa9\\xa9\\xaf\\xad\\xd9\\xf8\\xf8\\xfa\\xd9\\xd7\\xf5z}\\x7f\\x16\\x1d!\\x92\\x9b\\x92\\xe1\\xdd\\xd4\\xf9\\xf6\\xf6\\xf0\\xf0\\xf0\\xa4\\xa7\\xa4\\xb6\\xb9\\xb7\\xca\\xc9\\xc2\\xf1\\xf0\\xf2\\x02O\\xfa\\xde\\xde\\xdf\\xe6\\xe5\\xe8\\xf4\\xf2\\xf4\\x97\\x90\\x8d/t\\xce\\x8c\\x94\\x8bkmq\\x02\"\\xfb\\xab\\xaf\\xa8\\xce\\xd1\\xd1\\xe9\\xeb\\xe1\\x83\\x8f\\x81\\xb8\\xb7\\xb9\\xec\\xe9\\xf6\\x95\\x98\\xb9\\xaf\\xb1\\xaf\\xe2\\xe1\\xe3\\xb1\\xae\\xed\\x86\\x89\\x89j\\x85\\x95\\xda\\xd9\\xdb\\xf8\\xf8\\xf1\\x84\\x86\\x89\\xb3\\xb0\\xab\\xee\\xef\\xe8\\x01\\x08\\x0b\\xff\\xfc\\xfc\\xd7\\xd9\\xd6\\xa8\\xa8\\xf2\\x83~\\xbb\\x00<\\xeb\\x00=\\xfe\\x94\\x95\\x98\\xb7\\xb1\\xbf\\x9f\\xa3\\x9f\\xe6\\xe3\\xf3\\xc6\\xc6\\xc1dpl\\x16(\\xf6\\xf7\\xf4\\xf5\\xec\\xe5\\xf9\\xfd\\xfc\\xfe\\xde\\xe3\\xe0\\x9c\\x9b\\x95\\x06\\x0e\\x11\\xf6\\xf6\\xf1 J\\xec\\xd8\\xd7\\xda\\xe9\\xec\\xea\\xe5\\xe8\\xe6\\xf6\\xf7\\xf4\\xf4\\xf7\\xf7\\x00C\\xef\\xe7\\xe2\\xe2\\xd2\\xd3\\xd3\\xfd\\xfd\\xfd\\xfc\\xfa\\xfd\\xf9\\xf9\\xf9\\xf7\\xf7\\xf7\\xf2\\xf2\\xf0\\xf4\\xef\\xf3\\xdf\\xe0\\xdb\\x158\\xfe\\xfb\\xfc\\xfd\\x9f\\x9f\\xa1\\xc8\\xc9\\xcb\\x1e!!\\xfb\\xfb\\xfb\\xec\\xec\\xed\\xf9\\xfa\\xfa\\xf9\\xf9\\xfa\\xf1\\xf1\\xf3\\xd3\\xd4\\xd4\\xfa\\xfb\\xf7\\xef\\xef\\xf0rmnev\\x91#.\\xe4\\xe1\\xda\\xdc\\xa6\\xae\\xb8\\xf9\\xfc\\xfa\\xc7\\xc6\\xc8~\\x91\\x92\\x02\\x01\\xd9f\\x81\\xb6\\xce\\xce\\xd0\\xfc\\xf9\\xf9_u\\x95t}\\xa4qpt\\xd1\\xd5\\xd3\\xd4\\xd3\\xd6o\\x83\\x8e\\xd0\\xcc\\xf2\\x18<\\xecy\\x8b\\x95jo\\x8ehh\\xa2\\xdc\\xdb\\xd5iq\\x86\\xe6\\xe5\\xe1\\xda\\xdd\\xd9\\xc8\\xca\\xc5\\xdb\\xdb\\xdc\\xf3\\xf4\\xf4\\xc3\\xbf\\xb8\\xf3\\xf3\\xf3\\xbe\\xbe\\xfe\\xf3\\xf3\\xf4(0119.\\x1fB\\xd7\\x0fb\\xed\\xea\\xe3\\xe4\\xa9\\xa4\\xcc\\xf2\\xef\\xec\\xd5\\xce\\xe0\\xe7\\xe7\\xe8\\xc2\\xbe\\xf0\\xa8\\xba\\xde\\x9d\\x9c\\xee\\xe4\\xe4\\xe5\\xd0\\xcd\\xc6PQR\\xed\\xef\\xee\\xfd\\xfe\\xfe\\x9f\\xa0\\xd7\\xf5\\xf6\\xf5ba\\xf2\\xf5\\xf5\\xf6\\xf7\\xf8\\xf9\\x91\\x8f\\xa8\\x8e\\x98\\xb5\\xa8\\xa8\\xab\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0a\\xc3:\\x11\\xb88\\x9cH\\xb1\\xa2C\\x1f5\\xde\\x14\\xb2\\xc8\\xb1c\\xc5\\x06\\x19\\xc0\\xec\\x90\\x90\\xc1\\xa3\\xc9\\x93\\x08\\xb9H\\x90\\x11bS*Y\\x18P\\n\\x84\\x95D\\x9f\\xcc\\x8a\\xa8\\xc4\\x80sG\\x00G.J\\x9d$R\\x0c\\xd6e\\xca\\x8f\\x19\\x8b~\\xb8\\x11\\xa3bS\\x84W7\\x1d\\xda\\x80%\\xb0^\\x1eD4\\xfe\\xc8\\xab\\xa8,\\x97\\x1a\\x7f&p\\xdcpB\\x8f^\\r\\x1f\\xf8\\xa2V\\xa4\\xf0\\xe4\\x1e\\x80\\x04\\'U\\x84\\t#O\\x85P\\xb5\\x15\\xa5\\x18\\xa3\\xd2\\xeed\\xae\\x1aQ\\xf0v\\xd4b\\t\\x0f 4\\x1b*\\x85\\xd2b\\x11\\xd6\\x0c1\\x82;\\xc6\\xe1\\x80\\xa7\\xc4\\x06\\x06|b\\x8c\\x12\\x07\\x10\\xff]\\xd0/\\x11\\xa0J\\x0f\\x02\\x93<\\xf3\\x02,w\\xc8B\\x01\\xd5\\xbc`@A\\xb2\\xbd\\x14\\x12\\x02\\x18\\xa5\\xf8P\\x90,\\xf4\\x80aN.\\xfd\\xfd3N\\x03\\xb2\\xcc\\xc1\\x8b\\x03\\x1f\\xfc\\xe2\\x08<\\xe9\\xf4\\xa5\\x8f\\r\\x8f\\x80\\xe9\\x843\\x05q\"]\\x19\\xd6&\\x14E\\xac7\\x10 \\xd0\\x0b\\xe3P\\xf0\\xc2\\x0b\\x8f\\xff\\xf3\\xcb/\\x0e\\xf0r\\x87\\xf0\\x19\\xc8P\\n\\x11\\x94\\x10D\\x07\\xae34\\xf2\\xcf\\x1c\\x1f|P\\x8e\\xc6\\x0ePM\\x81#\\x0fp \\xc486\\r#\\xcd\\x99!\\xacK\\x905\\x13\\xa4\\xb3\\x80q\\x06\\xe9!\\xc0\\x1bCxq\\xb1\\x1c\\r\\xdca\\x03\\x06#`\\xc0\\xc6?O\\x17q8\\x06\\xe1\\xb8\\x03F$\\x11\\x82\\x81\\xf8\\xe2\\x06\\xa5\\xa0\\x87\\n\\xc6\\xf1\\x01^\\xd8\\xe0\\x1f\\xbc(\\x82\\x03z\\xb1\\x0f\\x08\\xda\\xe2\\n\\xeb\\x10FL\\x1eW\\x850\\xf4\\xab\\t\\x05\\xd1\\x82\"&\\x90\\x06\\x0b$D\\x0cox\\x03\\x00(\\xa0\\x0f\\x0c\\xe0b\\x16\\x93\\xc8\\xde\\x16*\\xf8\\x0f\\x07\\xe8c\\x18\\xbc\\xd0\\x87>\\xeaE\\x8d\\x08$j\\x1a\\x02i\\x02\\x18\\xff\\xde \\x06\\xa6\\x8d\\x03\\x16\\xb2\\x18\\x07\\xff\\xca\\xd1\\x0b\"\\xfd\\xa2\\t\\x11\\xc0\\x02Udq\\xbc\\x7f|\\x97\\xacr\\xb8!L 4\\x080\\xa43\\x01C|\\x80\\x16\\x83\\xa8\\xc7?h\\xb0\\xbc\\\\\\x10\\x84\\x02\\x10\\x18\\xc10 \\x90\\x81\\x10Hb\\x08\\xa8\\xc8\\xd9>\\x8a\\xd0\\x00\\x0c\\xbc\\xc0\\x1d\\xc7\\x84\\xc24\\xea1\\x040\\xcc\\x00\\x1cN\\x93\\x05/x\\x01\\x8ca\\xf4\\xa2\\t\\th\\x814N\\x10\\xff\\x01\\t\\xb8!\\x11E\\x18\\x86>f\\xa1C\\x13\\x9c\\xcar\\x07YA\\x0c\\xd0\\xa1\\r\\x11l\\xc2\\x07Qh\\xc2\\x1f\\x04 \\x80\\x04\\\\ \\x12\\x8e\\xb8\\x800\\x14p\\x81n\\x04\\xc2\\x0f00\\x82\\x0cp\\x90\\xacY\\xcc\\xab\\x1c\\xa9\\xfc@&\\xccQ\\nD\\x80\\x03\\x8b8\\xd8B\\x03~\\x81\\x01\\x93\\xce\\xa2\\x1cyP\\x813\"0\\x04\\x01\\xd4\\xe0\\x06!PF90\\xb02\\x81\\xa8@\\x8c3H\\xc8\\x17BP\\x01&t\\xc0\\n>\\xf0\\xc09\\x06p\\x85\\x02X\\xe2\\xaaV-\\x00\\t\\xb4\\x01\\x84\\xae\\x16\\x03\\x00\\x11(\\xc40Z\\xd0\\x0b`\\xbc@\\x1f\\xe5x\\xc1\\x1d%1\\x85W\\xec\\x82\\x08\\x99\\xe8\\x05,:4\\x90DT\\xc1\\x1f\\xfdZ\\xd5\\rPP:\\x0cdO\\x82\\x04\\xb8\\x01\\x14\\xb8\\x86\\x10]\\x98\\x81\\x100p\\xaa\\t\\xcc \\x01\"T`\\x19\\xcb\\xc0F5\\xaa\\xc1\\x08F@\\x03\\x08W\\xd0@\\x8c\\xae\\xe0\\x89E\\xc8\\x03\\x18\\xe5p\\x00Q\\xeb\\x85\\x02<\\xd2\\x80\\x0bo\\xc5\\x81<\\xb2\\xa7C\\x07\\xec\\xa3\\x1c\\\\(\\x84\\t\\x9c\\xe0\\x04i\\xff\\xf8#\\x13\\x85\\x15,a\\r\\x02\\x0b\\x13\\x08\\xa2\\x03 \\x85\\x83\\x0f\\x02Q\\x81\\x01P\\xa1\\x19g\\xa0\\x02\\x15\\xca\\xc0\\xdc 8\\xf7\\nW(A\\x10\\x08Sh\\x10\\x82\\x00\\x13d \\xff\\x10n\\xa0C\\x06\\xbe\\xf1\\x07I\\x08@\\x10:\\x84E\\x03\\xc61\\xc7\\x0f\\xe8\\xc2\\xc6\\xe3r\\x06\\x16\\xb8\\x00\\x81aP\\x80Cl\\t\\x01\\x14J\\x01\\xbb\\x0c\\x94\\xc2\\t]\\xe0\\x81Mfa\\x83z\\xe9\\xa3\\x05[\\x10\\x88\\x1e\\xa8\\xf7\\x8f\\x16\\xcek\\x9e\\xa80B\\xd2\\x80\\x91\\x10X\\xd4!\\x10]\\x80\\x03\\x01\\xea\\xb0\\nD\\x80\\x81\\x08\\x19\\xa0\\xda,\\x8e\\xd84Y\\xe8B\\x06\\x08H\\xc4+T\\xe0\\x0e\\x0c\\xfc\\xc2\\x06f-\\x07,\\x12\\x10\\x06I\\xd4`\\x8e\\xbd\\xd8\\x01\\x18\"\\xa0\\x0b\\xcf)\\xf1\\x03wp@\\x0b\\x00\\xd6\\x80^\\x8c\\x80H\\x9e\\x8b\\x9a>(p\\xd4\\xc1.\\xe4\\x17\\t \\xc4&:\\xd1\\x02\\n\\xe8a\\x08\\x920\\x02\\x0f\\xb2w\\xb1\\xde\\xed!\\x114h\\xda0\\x08\\x05\\x8c3\\xbf\\xac\\x05\\x8b\\xc0\\xe3n\\xdd`l\\x1c`\\x81j\\r\\x10\\xdd\\x1c\\x80\\xa1\\xbd\\x17@\\xe0\\xa6\\x17\\xab4,\\xa8A\\x83~5[!\\xf5\\x08\\xc47`1\\x0c,\\xe4!\\x11F\\xf8\\xa9\\x1aH-\\n\\x9b\\xfc\\xe2\\x0eG\\x08A\\x1e>\\xb0bR\\xf3\"\\t\\xff\\xff\\xb8\\x03/T\\xe0CF\\x0f\\x04\\x0b\\xca&\\x89\\x9e\\x8715\\x08\\xc8\\xc2&0\\x01F#\\xb5\\xe7\\x80\\x11\\xc0\\x18\\n\\x11`\\x08%6\\x01\\x01\\x82\\xc0\\x82\\x0b>\\x8d\\x00\\x01\\xaa\\x80\\nw$B\\x1e\\x18x\\x84$\\xdc\\xf0\\x8b\\x17\\x0c\\xd5&\\xfa\\xa0\\x9a3\\x16\\x81\\xee\\xa0\\x13\\xc4\\x07\\xcb{\\x8b\\x121\\x00\\xbe\\xd1\\xd5\\xda\\x01\\xc2\\x1e\\xe8?F\\xa0\\x02\\t\\xc0Oz\\xa5n\\x80\\x1a\\xe8p\\x107,\\xaf\\x0b\\xe1\\xdcB\\x1e.\\xee\\x0f#\\xa0\\xc0\\x01\\xb2\\x00\\x86\\xf5~\\xd1\\xb4\\xe0\\x06a\\x80.;\\x80P7\\xf1\\x04\\x1f\\x03\\x06C`\\x04~0n*\\xd0\\t\\x90\\x00\\t\\x81@\\x032@\\x04\\xa5`\\x0ep\\xd1\\x10\\t X\\xa5\\x90+7@\\x0f+\\xc1\\'\\xa8\\xb2\\x03\\x11P\\x05\\x821\\x0b?\\xc0R\\xcb#\\x002\\xd0*|\\xa25D`\\x04\\xaa\\x80|\\xb8@\\x01\\x84\\xb7r\\x00P\\x03\\x94\\x032`\\x00\\x06\\xbb \\x003\\x80\\x83QQ=\\xb0@\\x01\\xe1\\xd0\\x00X0\\x057\\xf0\\x06\\xa5 \\t`\\x08\\x86`P\\x03n \\x08\\xc9\\xe0\\x0b\\r0\\x7f4v\\x85P3\\x10\\xf5\\x90\\x01`\\x15\\x01\\x110\\x03\\x080G\\xff\\xb067\\xa1g\\xb2\\x80\\x0f\\xf5\\xb0\\x05\\xa9P\\x0f\\xa3\\x80\\x029\\xb2#\\x12\\xe0\\t]@\\x06\\xaa\\xe0\\x0e\\xaa\\x90\\n\\xab\\x00\\x0bj\\x04\\xf8\\x0f\\x01\\x01\\x00;'", - "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\xab\\xb3\\xc6\\xb7\\xbd\\xd2\\xb4\\xb4\\xb4\\xa4\\xa4\\xa4\\x8a\\x8f\\xad\\xc2\\xbe\\xc6hu\\x98\\xbb\\xbd\\xce\\xdb\\xe1\\xee\\xb9\\xb9\\xb9\\xc2\\xcd\\xe3\\xaf\\xbd\\xd9\\x96\\x92\\x9az~\\x93\\xcc\\xce\\xda\\xf2\\xf2\\xf2i\\x84\\x8f\\x9f\\x9f\\x9f\\xbe\\xca\\xe1Zf\\x86w\\x88\\xa3Rgz\\xc9\\xd3\\xe7lq\\x8c\\xb3\\xc1\\xdc\\x9b\\xa2\\xbe\\xe2\\xe2\\xe2\\xcc\\xd1\\xe0\\xd2\\xd5\\xe0\\xaf\\xaf\\xaf\\x99\\x95\\x9d\\xaa\\xaa\\xaa\\xb2\\xb3\\xc5KTx\\xe2\\xe0\\xe4\\xba\\xb6\\xbe\\xa3\\x9d\\xa7\\x9b\\xaa\\xca\\xa4\\xb4\\xd4\\x92\\x8e\\x95\\x9e\\x99\\xa3\\xb4\\xb6\\xc8\\xba\\xc6\\xdf\\xc0\\xc2\\xd1\\xbe\\xba\\xc2\\xa9\\xad\\xc4\\xef\\xee\\xf1\\xb8\\xd6\\xd6\\x86\\x9c\\xc4\\xe4\\xe2\\xe5\\xe8\\xe8\\xe8Z[w\\xd9\\xdf\\xed\\x92\\x9c\\xbc\\xb6\\xb2\\xba\\xfa\\xfa\\xfa\\xa8\\xa4\\xad\\xe4\\xe4\\xea\\xa1\\xa1\\xb5\\xaa\\xb9\\xd8\\xd1\\xd9\\xeb\\x93\\x91\\x96\\xc6\\xc2\\xc9\\x88\\x83\\x8d\\x8b\\x8b\\x9d\\xe4\\xe8\\xf2\\x8f\\x8b\\x92\\x89\\x95\\xaa}y\\x81\\xad\\xa9\\xb2\\x81|\\x85z\\x8b\\xb3\\xfc\\xfd\\xfd\\xd1\\xce\\xd3\\xed\\xf0\\xf6\\x89\\x93\\xb5\\xa2\\xa5\\xbb\\xc1\\xc0\\xce\\xa3\\xaa\\xc4\\xcd\\xd6\\xe8\\xb1\\xb1\\xb1\\xd5\\xdc\\xec\\xc9\\xc8\\xd5\\xd5\\xd4\\xdd\\xa4\\x9f\\xa9\\xbf\\xc3\\xd5oo\\x85\\x84\\x96\\xbc\\xc9\\xc5\\xcd\\x92\\xa2\\xc5\\xde\\xdc\\xe0\\x9c\\x97\\xa0\\xe0\\xe2\\xeaYq\\x80\\xa4\\xaa\\xbe\\xc4\\xc5\\xd2\\x8d\\x89\\x90>Ek\\xf2\\xf0\\xf2_`|\\x7f\\x97\\xa2o|\\x9f\\xd4\\xd8\\xe5\\xb7\\xb9\\xcc\\xd8\\xd8\\xe1\\xda\\xd9\\xdc\\xa1\\xae\\xcc\\xe1\\xe6\\xf1\\x82\\x8d\\xaf\\x84\\x91\\xb4\\x99\\xa5\\xc5\\xdc\\xda\\xde\\x8c\\x9b\\xbe\\xf0\\xee\\xf0\\x85\\x7f\\x8a\\xe0\\xde\\xe2\\xa9\\xab\\xc0\\xb1\\xac\\xb5\\x9c\\x9e\\xb4\\xbc\\xbc\\xbc\\xd3\\xd0\\xd5\\x93\\xa5\\xb3\\xe6\\xe5\\xe7\\xc1\\xc4\\xd1\\xe2\\xe5\\xed\\xd1\\xd2\\xdc\\xc6\\xd0\\xe4\\x9f\\xb1\\xd4\\xcd\\xca\\xd0\\xcc\\xc9\\xce\\x81\\x83\\x9b\\xf6\\xf4\\xf6\\x9e\\x9d\\xae\\xee\\xec\\xee\\x98\\xac\\xd1\\xf3\\xf3\\xf8\\x9a\\xb5\\xbaut\\x89\\xcf\\xcc\\xd2\\xd6\\xd4\\xd9\\x84\\x81\\x94T`\\x85\\xde\\xdf\\xe5ur\\x85\\xea\\xe9\\xeb\\xc2\\xc5\\xd5\\x91\\x90\\xa1\\x99\\x99\\x99\\xd4\\xd2\\xd6\\xcf\\xd0\\xdb\\xde\\xe3\\xf06=a\\xdb\\xdc\\xe5\\xf3\\xf3\\xf3\\xb7\\xb6\\xc7\\xab\\xb6\\xd2^w\\x85\\xc7\\xc9\\xd6\\xf8\\xf7\\xf9\\xab\\xa7\\xb0\\xc6\\xc7\\xd4\\xbf\\xc1\\xcf\\x8b\\x85\\x90\\x91\\x95\\xb1\\x9d\\xa9\\xc7\\xf1\\xf0\\xf2\\xe9\\xe8\\xea\\xe8\\xe7\\xe9\\xf4\\xf4\\xf4\\xbe\\xbe\\xbe\\xf1\\xf1\\xf1\\xf7\\xf7\\xf7\\xf0\\xf0\\xf0\\xea\\xea\\xea\\xd7\\xd7\\xd7\\xdf\\xdf\\xdf\\xdd\\xdd\\xdd\\xca\\xca\\xca\\xef\\xef\\xef\\xed\\xed\\xed\\xd4\\xd4\\xd4\\xd1\\xd1\\xd1\\xce\\xce\\xce\\xe6\\xe6\\xe6\\xec\\xec\\xec\\xc6\\xc6\\xc6\\xc2\\xc2\\xc2\\xda\\xda\\xda\\xe4\\xe4\\xe4\\xf5\\xf5\\xf5\\xf6\\xf6\\xf6\\xf8\\xf8\\xf8\\xf9\\xf9\\xf9\\xf7\\xf6\\xf7\\xf5\\xf4\\xf5\\xc7\\xc4\\xcb\\xf9\\xf8\\xf8\\xf4\\xf4\\xf5\\xf3\\xf2\\xf3\\xcb\\xc8\\xce\\xf1\\xf0\\xf1\\xf9\\xf8\\xf9\\x85\\x81\\x88\\xcd\\xcd\\xd8\\xfa\\xf9\\xfa\\xf9\\xf9\\xfa\\xd6\\xd6\\xdf\\xd6\\xd3\\xd9\\xf8\\xf8\\xf9mo\\x89\\xd4\\xe5\\xe5\\xcd\\xd8\\xe7\\xca\\xcb\\xd8wy\\x90cl\\x8f\\x97\\x99\\xb3hh\\x80`f\\x89\\xd9\\xdc\\xe9\\xea\\xed\\xf5\\xea\\xeb\\xf2\\xe7\\xeb\\xf4\\xeb\\xed\\xf3\\xeb\\xea\\xed\\xc3\\xc2\\xd0\\xc8\\xc7\\xd4\\x8d\\x9f\\xae\\xc2\\xc7\\xd8\\x8d\\xa3\\xb2\\xa0\\xa6\\xbf\\xe7\\xe7\\xec\\xf2\\xf0\\xf1\\x92\\x94\\xaa\\xef\\xf6\\xf6\\x92\\xa8\\xce\\x92\\xa5\\xc8\\xec\\xeb\\xed\\x87\\x87\\x9c\\xed\\xec\\xeddm\\x90\\xef\\xef\\xf3\\xa8\\xa7\\xb8|x\\x80sx\\x90\\xfb\\xfc\\xfb\\x97\\xaf\\xbc\\xee\\xed\\xef\\xda\\xda\\xe1\\xfb\\xfb\\xfc\\xd8\\xd6\\xda\\xbf\\xbf\\xbf\\xfe\\xfe\\xfe\\xfc\\xfc\\xfc\\xfb\\xfb\\xfb\\xfd\\xfd\\xfd\\xff\\xff\\xff!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x002\\x00\\x00\\x08\\xff\\x00\\xf5\\xfd\\x1bH\\xb0\\xa0\\xc1\\x83\\x06\\xf7)\\\\\\xb8\\xcf\\x9fC\\x7f\\xfc\"\\xf6\\xebw\\xe3\\x06\\xb0_\\xabV\\xf9\\xea\\x85*\\x93*V\\xb2f\\xe1j%\\xe3\\x16/\\r\\xaf`\\xedrE\\xab\\x96\\xadX\\xb9t\\xa5J \\xa0\\xc3\\x87\\x01\\x11\\x04\"\\xdc\\xc9\\xf3\\x1f\\xc3\\x85\\x0f!J\\xa4h\\x11\\xa3F\\x8e\\x1eA\\x8a$i\\x12\\xa5J\\x96.a\\xca\\xa4i\\x13\\xa7\\xce\\x9e<\\x81\\xfe\\x04\\xfa0\"\\xbf\\x89\\x15/f\\xdc\\xd8\\xf1c\\xc8\\x91%O\\xa6\\\\\\xd9\\xf2e\\xcc\\x995o\\xe6\\xc4\\x9a\\xd5\\x1f\\x92\\x89\\xfc \\xfac\\x18\\xd4+\\xd8\\xa2c\\x91\\x9a]\\x9a\\xd6)\\xdb\\xa8o\\xa9\\xca\\xbdJ\\xb7\\xe0>4\\x00\\xbc Cf,XD\\xbe]\\x87\\x865J6\\xe9Y\\xa6j\\x9f\\xb6\\x95\\n\\xb7\\xea\\xdc\\xc6\\x8e\\xfdI\\xa97D\\xc4+=\\xf6z\\xe5\\xe5\\xea\\xd0/Q\\xb1G\\xcb*E\\xdbt-T\\xb7S\\xe3ZE\\x9d\\xfa\\xcb\\x0br\\xc7\\xb0\\xe0\\x11\\x11\\xe7\\x06?\\xdaB\\xbf\\xde\\xe6,x7h\\xc3\\xbfI+\\x1eN|\\xa0\\xbff\\xa1^\\x88\\xff\\xb3a\\xa3\\xc0\"S\\x83\\xf0A\\xb7\\xbd9\\xb0\\xee\\xcf\\x85}\\x8fN,\\xfc4\\xea\\x86SB\\r1p\\xa1\\x01\\x83:X\\xcc\\xa1\\xca/\\xb3\\xf5\\xa5\\x19`\\xb9yFXo\\xa2!\\x16\\x9ci\\x8ca\\xb5O\\x0e\\xa0x\\x01\\x808\\x14p\\xd2\\xc5\\x18\\xf3\\xa0\\xa0H\\x0cb$\\x93\\x97\\x81\\xd2\\xb5\\x97\\xe0`\\xbc\\x85v\\x18p\\xa5-F\\xdc>\\xd4\\xa4#\\xcd\\x0b\\x88\\x90\\x01\\x81\\x86\\x10T3B\\x121\\xc4!\"\\x89\\x7f\\xe1\\xd6\\x19\\x8a\\xd7\\xc9\\xe7`\\x8b\\xdc5\\x86D8{\\x00\\x90\\x87\\x8d]TPA\\x17\\xd8\\xa0`\\x03 1\\x18\\xe3\\\\f%\"8\\xa4u\\xf15\\xc8\\xe2v\\xf6I\\xe8B\\x06G\\x94\\x91M\\x08a\\\\\\xe2\\xe6%a<\\xb2\\x85\\rx@\\xf2\\xcb\\r\\\\\\x06I\\xdd{\\x0b\\xaa\\x98\\x1d}\\x10\\xa2\\xa6\\xda\\x0e\\xa4,Q\\xc6;\\x8d\\x84\\xc0\\xa6\\xa23\\xc8AE\\x01sh9\"{^V\\x07\\x1f\\x83+jW_\\x84<\\xf9\\xf3\\xc5\\x02j\\xd4\\xc0\\xc6\\xa1\\x134bj#3\\x10\\xc1\\x80\\r\\x8b\\xd8\\xc3\\xcc\\xa4\\x12Y\\xfft\\xd1\\x9e\\n\\xa6\\x88\\xdd|\\x0f\\xbaH\\xd7>H\\x80\\x83\\xc1&\\xa4\\xc0\\xc1\\x06\\x05e\\x94a\\xc0\\xb1c\\x18qB\\x1d\\x8a\\xd8\\xd9Om\\x11\\xf5\\x01\\x002\\x0f\\xf8B+\\x91af\\n\\xa8\\xae\\x12\\xf2\\x03\\x8e\\n\\xbf\\xaa\\x91\\x05\\x1cW\\xb4q\\xc4\\xb9\\xd1\\xfc\\xc0@\\x11\\xc7\\xe8\\x11\\xcc\\xb3B\\xf5\\x93\\x02\\x05\\xf9h\\xe1\\x8e/\\xee\\xd5Z\\xa4\\x98\\x9a\\x06\\xbak?\\xe0H\\x00\\xee\\x0e&\\xa8Q\\xc2:Y\\xc0\\x00\\xc3\\x05Bx\\xf0\\x89\\x0f1\\xf4\\x02oD\\xd0\\x1c@\\x8e\\r,\\xbcbL\\xbe\\xd8b\\xfag\\xaeI\\xf6\\xb4O?M\\xf8!0\\x06\\x0b\\x10\\xfc\\x87!\\xea\\\\\\x11M\\x0f\\x0c\\xe0P\\x80\\x08\\xc2L\\xccA;eT\\x10\\x02#\\x05@\\x82\\x8a/_^\\xea\\'\\xaeH\\x96\\x99\\x15\\xc9\\x16\\x98\\x0cn\\xca&\\xac|D\\x03\\'\\xc4\\xd5) \\x03\\x18X\\xc2\\x12\\xea\\'\\x07\\x0fX\\xefY\\xfd8\\x80\\x05\\xf8\\xd7:8\\x80\\x0f\\x05\\x80\\x90\\x05\\x01;64\\xb2\\x15\\xee_MX\\xc3\\x02\\xddg\\x81\\x00lB\\r\\x19`\\x83\\x15\\xe4Q\\xc1\\x0bb\\xef\\x00<\\xd8\\xe0\\xf6\\x96\\x90\\rel!\\x84#\\x04\\x93\\xc7\\xff\\x0exB\\t\\x91,\\x08k@\\x00\\x03\\x15\\x00\\x00\\x15\\\\\\x83\\x14\\x04\\x98\\xe1\\xfdl\\x98\\xc1\\xd4m\\x90\\x14l\\x98\\x87\\x11\\xe8\\xe0\\x00g\\x00B\\xf8\\x08jP0\\x121\\x94\\xeb;\\x04\\x07Rp\\x8fJ\\xa4\\x00\\x04\\x07\\x88i\\x00\\x18!\\x04\\x06d\\x14\\x9f\\x9ap\\x80\\x08\\xe8 \\x85/D\\x02\\x1d\\xf5\\xa4DA\\x85\\xd9GP\\x9e\\xf3t$\\xfb\\x823rp\\x8f\\x03h\\xe2\\x0b{X\\xc1\\n\\xc6\\xd1\\x8e\\x138\\xec\\x9e\\x18\\xfc\\x8294\\xe1\\x8ce8\\x80\\x03v\\x08\\xeaP\\xf9XB\\xa3\\xaa\\x0f\\xa9M\\xf0\\x04\\xbe\\x8f?\\x82\\xc1\\x8e9<\\x03\\x10X\\x18\\x86\\x98\\x87\\x81\\x85@\\xe0\\xe1\\r\\xa7\\x10\\x03\\x8es<\\x9d\\x1d{\\x92\\x88\\xc4Y\\x16\\x94?\\x88a\\x8cB\\x98B\\x0f1\\xc8s\\x9e\\xf5\\x00\\t\\x17\\x08c\\xcdl6Q\\xd0\\xc8\\x89\\xe5\\x84\\xbe\\x08\"7 \\x86\\'\\x82\\xc1\\xe8F\\x13\\xc39#\\xcaS\\x9bO\\xc4c\\x05\\x97\\xb8;>i\\xc8V\\xec\\x12\\x91\\xbd4D\\xd2\\x82\\xbe2B\\xc5\\x88\\xe9\\xb3m\\x1a\\xd4\\x95\"\\xae\\xa5K\\xd7\\x01}\\xb8\\xfa\\xd5\\xb0\\x8e\\xb5\\xacg-\\xebT\\xd8\\xfa\\xd6w\\xc8\\xb5\\xaeu\\x9d\\x80^\\xfbZ\\x00\\xc0\\x066\\x14:@l\\x9b|\\xe0&\\x03\\xc0I\\x04\"0\\x89I0\\xa0\\x07\\'\\x08\\x08\\x00;'" + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\x00\\x00\\x08\\x0c\\x04\\x0c\\x10\\x10\\x10\\x18\\x12\\x1b\"\\x0e\\x12!\\x18!)!\\x18#\\x1e\\'1\\x00\\x00)))-%-1))1)111191111991991J99999BB99c\\x10\\x10s\\x1c\\x1ck33B9BB=FJ9BJBBZG4yx%BBJJBJFANJJRRJJRJRJJZRRJRRRRRZZNNZRRZRZRRc`WRcRZxLLk^Zc^gk^cgckkkksccoko{kk{sgskssss{sw{{{\\x84s{\\x84{{~x\\x84\\x84{\\x9c\\x8cBB\\x8c\\x8a\"\\x8e\\x83]\\x8e\\x83{\\x84\\x84\\x84\\x8c{\\x84\\x8c\\x84\\x88\\x94\\x84\\x84\\xc2\\xc2\\r\\xb8\\xb39\\xd6\\xd6\\x08\\xd4\\xd4)\\x9c\\x96x\\xb7\\xb1c\\xd2\\xd2V\\xd4\\xd4{\\x8c\\x8c\\x8c\\x94\\x84\\x8c\\x92\\x8a\\x90\\x91\\x8c\\x99\\x9c\\x8c\\xa5\\x9c\\x94\\x94\\x9c\\x94\\x9c\\xa7\\x92\\x8f\\xa5\\x9c\\x94\\xa5\\xa5\\x94\\x9c\\x9c\\x9c\\xa2\\x9c\\xa2\\xad\\xa5\\x94\\xad\\x9c\\xa0\\xa9\\xa5\\xa5\\xc5\\xb7\\x9e\\xa5\\xa0\\xad\\xad\\xa5\\xad\\xad\\xad\\xad\\xb5\\xa5\\xad\\xb5\\xad\\xad\\xb5\\xb1\\xb5\\xbd\\xad\\xad\\xbd\\xb5\\xb5\\xbd\\xbd\\xb1\\xc1\\xb5\\xb9\\xbd\\xbd\\xbd\\xc6\\xb5\\xbd\\xc6\\xbd\\xbd\\xbd\\xbd\\xc6\\xc6\\xbd\\xc6\\xc6\\xc6\\xc6\\xce\\xc7\\xb5\\xce\\xc6\\xc6\\xce\\xce\\xc6\\xd6\\xc6\\xc6\\xd6\\xce\\xc6\\xc6\\xc6\\xce\\xce\\xc6\\xce\\xce\\xce\\xce\\xce\\xd6\\xce\\xd6\\xce\\xce\\xde\\xce\\xce\\xce\\xc6\\xd6\\xce\\xce\\xd6\\xd6\\xce\\xd6\\xd6\\xd6\\xd6\\xd6\\xd6\\xde\\xde\\xde\\x00\\xde\\xde\\x08\\xde\\xde\\x10\\xe7\\xe7\\x0c\\xe7\\xe7\\x18\\xef\\xef\\x10\\xef\\xef\\x18\\xf7\\xf7\\x10\\xf7\\xf7\\x18\\xff\\xff\\x18\\xe7\\xe7!\\xef\\xef!\\xf7\\xf7!\\xff\\xff!\\xde\\xde)\\xe7\\xe7)\\xef\\xef)\\xf7\\xf7)\\xff\\xff)\\xe7\\xde1\\xe7\\xe71\\xef\\xef1\\xf7\\xf71\\xff\\xff1\\xe7\\xe79\\xef\\xef9\\xf7\\xf79\\xff\\xff9\\xde\\xdeB\\xe7\\xe7B\\xef\\xefB\\xf7\\xf7B\\xe7\\xdeR\\xe7\\xe7J\\xef\\xefJ\\xe7\\xe7V\\xef\\xefR\\xff\\xffB\\xff\\xffJ\\xff\\xffR\\xef\\xe7Z\\xf3\\xf3Z\\xe4\\xe4h\\xde\\xde{\\xff\\xffZ\\xfb\\xfbg\\xff\\xffk\\xff\\xffs\\xe2\\xe2\\x7f\\xef\\xef{\\xe4\\xe4\\x8c\\xef\\xef\\x84\\xf7\\xf7\\x84\\xf3\\xf3\\x90\\xff\\xff\\x88\\xff\\xff\\x94\\xde\\xde\\xa0\\xe7\\xde\\xa5\\xeb\\xeb\\x9c\\xef\\xef\\xa5\\xf7\\xf7\\x9c\\xf7\\xf7\\xa5\\xff\\xff\\x9c\\xff\\xff\\xa5\\xe7\\xb5\\xb5\\xe7\\xbd\\xbd\\xde\\xce\\xd6\\xde\\xd6\\xd6\\xde\\xd6\\xde\\xde\\xde\\xd6\\xde\\xde\\xde\\xe7\\xde\\xde\\xe7\\xe7\\xad\\xef\\xe7\\xb5\\xe7\\xe7\\xbd\\xef\\xe7\\xc6\\xe7\\xe7\\xde\\xef\\xe7\\xde\\xef\\xef\\xad\\xef\\xef\\xb5\\xf7\\xf7\\xad\\xff\\xff\\xad\\xff\\xff\\xb5\\xef\\xef\\xbd\\xf7\\xef\\xbd\\xef\\xef\\xca\\xf7\\xf7\\xbd\\xff\\xff\\xbd\\xff\\xff\\xc6\\xf7\\xf7\\xce\\xff\\xf7\\xce\\xff\\xff\\xce\\xef\\xef\\xd6\\xf7\\xef\\xd6\\xf7\\xf7\\xd6\\xff\\xff\\xd6\\xef\\xef\\xde\\xf7\\xf7\\xde\\xff\\xff\\xde\\xde\\xde\\xe7\\xe7\\xde\\xe7\\xe7\\xe7\\xe7\\xef\\xe7\\xe7\\xef\\xef\\xe7\\xf7\\xf7\\xe7\\xff\\xff\\xe7\\xde\\xde\\xef\\xe7\\xe7\\xef\\xef\\xe7\\xef\\xef\\xef\\xef\\xf7\\xef\\xef\\xf7\\xf7\\xef\\xff\\xef\\xef\\xff\\xff\\xef\\xe7\\xe7\\xf7\\xef\\xef\\xf7\\xf7\\xef\\xf7\\xf7\\xf7\\xf7\\xf7\\xff\\xf7\\xff\\xf7\\xf7\\xff\\xff\\xf7\\xde\\xde\\xff\\xef\\xe7\\xff\\xef\\xef\\xff\\xf7\\xf7\\xff\\xf7\\xff\\xff\\xff\\xf7\\xff\\xff\\xff\\xff,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xfe\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0\\xe1\\xc0z\\x0e#\\n\\xac\\x17\\x07\\xcb\\x95+f\\xbe\\x00\\x03\\x16l#F\\x89\\x12\\xeb\\xbd\\xa9a\\x8c\\xe0\\xbb7b\\xda\\tt\\x07R`\\x9e\\x16\"\\\\\\\\\\xb8 \\x13\\x08\\x10\\x0b\\x15\\\\\\xdci\\xe9\\xb0\\xde\\x96\\x033\\xee\\x94+\\x93\\xc3\\xc3\\x81\\x03;\\xd4x\\xd1\\x91\\xa6\\xa5\\xb97o\\xec\\xc41S\\x84\\x06\\x02\\x04\\x17\\xa2\\xe4\\xe1\\x87\\x8fgC6\\x03\\x00l01`\\x80\\x08\\x1c#\\x0e8\\x80p\\xe0\\x8a\\xd7\\x81\\xf3\\xaa\\xc8\\x98\\xb1e\\xe7[\\x87\\xe5\\xb4|\\x00\\x10`C\\x98b\\xff\\x8ci\\x89\\x00`\\x01\\xae\\xbb\\xff\\x86U\\x11S\\x0eq\\xc4\\xc6~\\x14(hL\\x10\\x0e\\x87 \\xdf\\x10+u,\\xf1\\r\\x9b\\x7f\"$\\x18|\\xc5\\xe8T\\xbf\\xbb>\\xd5p\\x8e\\xa8\\x86\\xcc\\xbf\\x1c\\x03\\xde\\x10\\x8c\\xb7\\xa9Q(\\xc4\\xe3\\xa0\\xf4Y\\xdd\\xb0\\x9e\\x1f\\x88v\\x0ed\\xf8\\xed\\xaf\\x9f4I\\x86d!\\xfe2D%\\xef\\x85\\xed \\n\\x0c3\\x00\\xc2\\x166}^E\"\\x94\\xec\\xb4W|\\x94\\x9a\\xfe\\xd2\\xe5|\\xf6\\xda\\xa7Pr\\x0e\\xd4\\x0e\\x87q\\x80\\x08\\xa7\\xf1\\xe3\\x84\"\\x9f\\xe0\\xf9\\xcf{\\xde\\xf1\\xf3\\x8b\\'\\xd7\\x801\\xc0\\x11\\x10\\xf1#\\x8b\"\\xb0\\xd0\\xd3O\\x8a\\x9bW\\xaat\\xda\\xf8X!\\x02\\x0cH\\xff\\xa3\\xc2\\x06e \\xcd\\xd5\\xee\\xfd\\xe0S\\\\W\\xdeH\\xa2\\n\\xbd\\x13A\\xf4\\x0e\\x0c\\x05\\xc8v\\x0f:I,\\xd2\\xca\\x9c\\x06\\xd1\\xe2\\xc99\\x1bd\\x10\\xc7C\\xab(\"\\xcb>\\xb5z\\x07\\xd1\\xbc\\xa7\\xa1\\xd5\\x1dt\\xe0\\x80\\x92\\xfc#23`\\x07\\xc7\\x1cV\\x8f\\xcd\\xfd\\xe3\\x17\\x8bP\\x06\\xd4\\xf8\\xe1@\\x81x\\xa1\\x008\\x18\\x08\\xa8\\xdc\\xe7\\x0c^\\xd4\\xc2\\x83\\x1e\\xe8\\x80\\x05A\\x08\\xc2\\x10Z`\\x04\\x15\\x88a}\\xe1\\xc8\\xc64x\\x01\\x0bT\\x84\\xc2\\x11\\x93\\x08B\\x8e(@\\x84\\x18\\xfa!hJ+\\xc3\\x06\\xa4\\x10\\xcc\\x1e\\xac\\xce\\x87\\x0c\\x8ca\\x03;&\\xca7\\x98 \\x83s\\x13\\x03\\x1an\\xd0\\x81 `A\\x02[0\\x01\\x16p\\x11\\x8bQ\\x80\\x02\\x13\\xa0\\x1d\\x85*\\x9a\\xf0\\x05,\\xc0@\\x0228C\\x0c\\x1f*\\x90y\\xb9k\\x0c\\x18\\xf0\\xfe\\xc2:6 \\x83I\\x15G \\xde\\xb3\\x07?\\x1a\\x88H\\xe9\\xbc\\x90+[\\x8b*\\x14\\x0cR\\x8e1\\xdc\\xc1\\ra\\xf8\\x01\\x14`@\\x04\\x1a\\xbc\\xc0\\t\\xa1P\\x05,v\\xc1\\rp\\xd0\\x83\\x1f\\xf2\\xf8\\x079b@\\x842x\\xa1\\x1e\\xef\\xb8\\x03;\\xdc\\xf5\\xd4\\x7f\\x88A\\x02\\xb2Q\\x81\\nf\\x84[\\xcc!v\\x8e\\x8a\\x15e\\xd2\\xba\\x90\\x011\\x18\\xc4\\x18lX\\xc70\\xcaP\\x86.\\xe4!\\x0e=\\x18\\x821\\xea\\xc1\\xcc\\xb5\\tD\\r;\\xd0B\\x19\\xc4`\\x0cb0\\xa3\\x93uT\\x17\\x06\\x1a\\xb3\\x03\\x0c\\x94\\x01v\\xa7\\x81\\x88\\xf3:\\xc9aj\\xb5c\\x08\\x13`/A\\xccQ\\x06?\\xe0\\xa1ge`*\\x11v\\x10\\x07x\\xcd\\n\\xb1\\xff(\\x07\\x0cv0\\x8crDGi)\\xf2C\\x0cR \\x9034\\x80\\x08\\x99\\xdb[\\xce\\xe6\\x88\\xc8f\\xfe\\xc3\\x0e3\\x18\\xc1,\\xdb\\xe6\\x857X\\x81\\rex\\x83P\\xac\\xa0\\x03EA\\xa4\\x8e\\xbc\\x03\\xd6\\x07v\\xb27\\x8fIG\\xb0V\\xad\\x87\\x04Z0\\xa3\\n\"3\\x85A\\x9d\\xd7\\xfe\\xdeD\\xa9\\x05\\x90\"\\xe4\\x0ei\\xb8\\xc3\\x19\\xca\\xe0\\x06/\\xe4A\\r\\x1f\\x88\\xc1!\\xc5x\\x8fv\\xb0\\x03\\n,\\x98\\x11\\xc4R\\xd4\\x0e\\x1d\\xe6a F\\xb0[\\x1b\\xd7\\xfc\\xbf\\xf74z\\x8cy\\xe8\\x01\\x04\\x1e\\x9c\\xae7x\\xa1\\x0cgPC\\x1f\\x84\\x92\\x02\\n\\xb8\\xc6\\x9b\\xe58\\x068E\\xed\\x87ax\\xf9!\\xd2a\\x03\\x0bTP\\xbdr@\\x80\\x06s\\xc8\\xe2\\xa9#\\xec\\xb0\\xa7\\x15\\xfa\\x03rKH;\\xe2\\xd0\\x0664\\xd9\\x0f\\xe7P\\x03\\x04\\x8e\\x10\\x87z\\xd8\\xb8\\x1d\\xf3\\xa8\\x87;n\\x8cj\\x1c\\x1f\\xf0\\x08\\t\\xc0\\xe3@\\xb6\\xc0\\x80#\\x90\\xc3\\xd9I#/\\xb6\\xff\\x11\\x06\\x15\\x9c\\x8c!wh\\xb01n\\xac\\x83\\x06`\\xe1\\x91\\x13\\xd46\\xd2\\xae\\x8c4cT\\xc1\\x01\\xd14\\xc8\\x0c$P\\x85c\\xc8zw\\xffX\\xf7C\\xd4 \\x03\\t`q!\\xf8\\x10\\xf1@\\x8c!\\x01\\x11\\xac\\xc19,\\r\\xa3\\xc2\\x91f\\x0e2l@\\x04\\xeb8H9R\\x80\\x01,\\xd8\\xfb\\xde\\xa2,\\x87\\x1bb@\\xef\\x99\\x1e\\xc4\\x1fm\\xd0\\x829\\xef<\\xee\\x86\\x06\\xa4\\xc0\\x0c\\\\\\xaa\\xa7\\x03\\x15.\\x10cx\\xe1\\x05\\x1f\\xb8\\x1fB\\x8c\\xa1\\x02\\x14\\x1c!\\x0f\\xe6(\\x88\\xc7\\xebq\\x0c/\\xa8@\\x04\\xb9^H=\\xbc\\x90\\x83>(N b\\x80\\x00\\n\\x8c\\x90\\x07\\xc0J\\x9c\\r=0\\x81\\x07\\x08\\'!\\x19\\xa4\\xc0\\x06U\\x18F;n\\xbc9e\\xb7cE=\\xf8y\\x15<\\x8e\\x10c7\\x1d!g\\xf0\\xc0\\x06^\\xd0\\x05\\x88\\x12\\xf9a\\xde\\x04\\xb0\\x08L`\\x82\\x8d5\\x04\\n&`\\xab\\x16\\x9a<\\x0cb\\xe4\\x01%S\\xd0\\x01\\r\\xf2.m\\xce\\xc8X\\x02\\x1b\\xa0\\x81\\x0f\\xc6\\x00Lc\\xf4A\\rU\\xa0A\\x08P\\xf0\\x81\\x198}!\\xfa:\\x01\\x0bf\\xe0\\x83\\x00\\xeb \\x07V7\\x01\\x0c\\xb6\\xd0\\xb6\\xd5\\xd0\\xaa\\x0c*\\x90\\x80\\x04>P\\x82\\xb1\\xd2\\xe0\\x03\\x18\\xc8\\xc0\\x07d@u\\x90\\x94\\x83\\xe8\\xd7\\x0b\\x81\\x08D\\xa0\\x82\\x1e\\xa8a\\xcd\\xbc\\x91\\x8e=\\xde@\\x04\\x13H\\xa0\\x01\\x12\\x80\\x00\\x06\\xb4$\\x87\\x00\"$ \\x00\\x00;'", + "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00\\xd7\\xd7\\xd7\\xbe\\xbe\\xbe\\x9f\\x9f\\x9f\\xf3\\xf3\\xf3\\xe2\\xe2\\xe2\\xb9\\xb9\\xb9\\xdf\\xdf\\xdf\\xce\\xce\\xce\\xe8\\xe8\\xe8\\xf5\\xf5\\xf5\\xaf\\xaf\\xaf\\xed\\xed\\xed\\xf0\\xf0\\xf0\\xaa\\xaa\\xaa\\xa4\\xa4\\xa4\\xf4\\xf4\\xf4\\xca\\xca\\xca\\xea\\xea\\xea\\xd4\\xd4\\xd4\\xf1\\xf1\\xf1\\xfc\\xfc\\xfc\\xf9\\xf9\\xf9\\xdd\\xdd\\xdd\\xc2\\xc2\\xc2\\xf8\\xf8\\xf8\\xec\\xec\\xec\\xb4\\xb4\\xb4\\xe6\\xe6\\xe6\\xd1\\xd1\\xd1\\xef\\xef\\xef\\xe4\\xe4\\xe4\\xf6\\xf6\\xf6\\xda\\xda\\xda\\xc6\\xc6\\xc6\\xb1\\xb1\\xb1\\xfb\\xfb\\xfb\\xac\\xa9\\xa5\\x8b\\x8b\\x8b\\xdb\\xda\\xdaXXX\\xd8\\xd8\\xd8\\x8c\\x8c\\x8c\\x97\\x97\\x97\\x7f\\x7f\\x80fffooo\\xd5\\xd5\\xd5\\xd6\\xd6\\xd6\\x9e\\x9d\\x9d\\xb2\\xb2\\xb2\\xcc\\xcc\\xcd\\xbb\\xbb\\xbb\\xbc\\xbc\\xbc\\x95\\x95\\x95\\xa8\\xa8\\xa8\\xc4\\xc4\\xc4\\xeb\\xeb\\xeb\\xc5\\xc5\\xc6///FFF\\x00\\x00\\x00\\x0f\\x0f\\x0fyyy}}}\\xba\\xba\\xba\\x94\\x94\\x94LLLeee\\xdb\\xdb\\xdc\\xb6\\xb6\\xb6\\x8a\\x8a\\x8a\\xbd\\xbd\\xbd\\xb0\\xb0\\xb0\\xcc\\xcc\\xcc\\x82\\x82\\x82\\xb3\\xb3\\xb3,,,\\\\\\\\\\\\OOO\\xa7\\xa7\\xa7\\xe8\\xe8\\xe9\\x9e\\x9e\\x9e\\xd5\\xd5\\xd6\\xde\\xde\\xde\\xcd\\xcd\\xcd\\xd2\\xd2\\xd2\\xf2\\xf2\\xf2\\xe1\\xe1\\xe1\\xee\\xee\\xee\\xae\\xae\\xae\\xb7\\xb7\\xb7rrs\\xb1\\xb0\\xae<<\\xf4\\n\\xb6\\xe8X\\xa4f\\x97\\xa6u\\xca6\\xea[\\xaar\\xaf\\x1e\\xde\\x99\\xb8\\xeb\\x0b\\x03\\x8d\\xc5\\x1e-\\xab\\x14m\\xd3\\xb5P\\xddN\\x8dkus\\xcf\\xce\\x0f\\x01\\xb4`\\x81\\x80\\xa8h\\xbe\\x91M\\x03\\xae\\xac\\x9apf\\xd7&\\xedw2j\\xc1\\x97Y\\x1b\\xff\\x96\\x9e\\xf0n\\xec\\x12\\x14\\x80\\x04\\xd1>\\xba\\xaf\\xe4\\xd3\\x81-\\xaf.\\xac\\x99\\xfc@\\xeaT\\xd0\\xbf\\x18\\xc2\\x1e\\xf7r\\xef\\xf1\\xf5\\x06\\xddx\\xf6\\xddg\\x9eC\"\\x88@\\xc1\\x0b\\'\\xf4\\xa7\\\\w\\xf0\\xf1\\xf6\\x9cx\\xf5\\xd9G]\\x82\\x0b6\\xe8X{\\xb91\\xf7\\x9d|\\xbeEW\\xa0\\x81?\\x05\\x85\\xe1\\x0b^8\\xc8\\xdd{\\xbb9\\x17\\x1e}#ju\\xa0#\\'jx\\xdb\\x83,6\\x07\\xde|\\xbf\\xc5hW\\x89\\x0f\\xd5\\xa8\\xa2{\\xba\\xe9\\x08\\xe2\\x80\\x15\\x92w\\xa1\\x82|\\xd8\\x98\\xdc\\x8aE~( \\x85>\\xfe\\xc8\\x90\\x89\"0\\x80\\x88\\x93\\xdb\\x11\\xe9a\\x80\\x13\\xc2\\xe8\\xe3\\x85Y\\x88\\x01\\x03\\x97\\x1c\\xfe\\x17\\xa1\\x8b<\\x8a\\xe8\\x9a\\x1f;\\xe8\\xc0\\x03\\x0fJ\\\\\\x88\\xc7\\x1bg\\x0e\\xd9!\\x80\\x12\\xbe\\xd8#p541\\x06\\nI8A\\xc0\\x8c\"\\x98@B\\x9e\\x1b\\xfa\\x07a\\x8b;\\x86H\\xe0f\\t\\xc4\\xe0C\\x0e\\x06\\x080\\x05\\xa2\\x8a\\xc2\\x80\\x86\\x9ejBz$\\x95\\x05\\x12P\\xc5\\x19qHA\\x04\\x1bX4\\xa2\\x18\\x82\\x9d\\xfe\\xff\\x00\\xea\\xa3FN)\\xe6\\x88M\\xc40\\x81\"D\\x08\\x92\\xc3 7\\x0c\\xe0P\\r\\xb1\\xce\\x9a\\xa3\\x94a\\xfei\\x1f\\n:l%A\\n-\\x00\\xe0H\\t\\xc56\\x8ac\\x94`\\xfa\\xe9\\xa6t\\t\\xcc\\x11Cg781\\x00\\xb5$\\x00b\\x84\\xb1\\xd8\\xf6\\xd9\\xe6\\xa4\\xc0A\\x91\\x83\\x95@9R\\x06q\\x8a\\xae\\xa0\\x02\\xba_\\xaa+i\\x92\\x9b%\\x01\\x05\\xbc\\\\9\\xc2\\xc4\\xb8\\xf5\\xdek-\\x94\\xf9\\xb2\\xb9\\xef\\x88RX\\x01pCn\\xec0m\\xc1\\xf8\\xf2\\xa90\\x92#\\xca\\x80\\xc3\\xc3W\\xb4`\\xc3\\xc4$\\xd8[\\xf1\\x9a\\x91b\\\\\\xa0\\x0c$.\\x84B\\x0b78D\\xae\\xc8\\x07{iq\\xc9\\xa4\\xda\\x872\\xbc\\x07\\xb0\\xd0\\xb2\\xcb\\x14\\xc7\\xbc\\'\\xc9\\xa3\\xdeJ\\xde\\xcd?\\t\\xf0\\xf1C/\\x1b|#\\xc23\\x07\\xad\\xactD3\\x94\\x02\\nA%=\\xb2\\xa8\\xb6>\\r\\\\\\xd4\\x0b\\xb1\\x80C\\xd5=/-3\\xd0Yo\\x0b\\xdc\\xbbV\\xe2\\xd0\\xc2\\xab\\x8e\\x10\\xb2\\x07\\x170\\x8b\\xfd3\\xd6\\xc9\\x9a\\xbd\\x19\\x0e\\x85\\xa4\\x8cB\\nl\\xb3\\xff@A\\x04[$ru\\xadu\\xb3\\xbb\\xd9\\xde)\\xc7`C\\xdf\\x11\\x9d\\x90\\x9d\\xcf\\xa1\\x12\\xae\\xad\\xe1\\x87!n\\xa5\\x0030N\\x81\\xe3\\x83#;9\\xbfuY.5\\n\\x9as\\x0e9\\xad\\x9e\\xaf\\x0b:]\\x8b\\xec\\x902\\x0b\\x0f\\xbc*[\\xe3\\x8f\\xcb\\x1dy\\xea\\x0b\\xdb\\xb7F\\x0f9U\\x81\\x02\\n9\\xa30C\\x82\"(\\xa1\\xe0\\xe6\\xb5?96\\xdd\\x9f\\x8f\\x18H\\x17p\\x98\\x91B\\n>\\xb4\\x90\\x82\\x00\\xc4\\x03\\x11Q\\x1dB$\\xdf\\xe5\\xdc\\x92\\xab^\\xe5B\\x8a\\x07\\xec\\xc8\\x02d\\xe8@G\\x18\\x08t\\x9e\\xad\\xf8c*TC\\xe6\\rQaG\\x0fL\\x18A@h\\xca\\x83\\x8f\\xbb\\xc91Z\\x88\\x0fP\\x80\\x85<\\xe8\\xa0\\x07C\\x80\\x00c\\x90\\xf3\\xbd\\xdb\\xbd/w\\x01TH\\n\\x84\\xc0\\x030DAXB\\xf9\\n\\x03\\xd3\\x84\\xba\\x07\\x02pD\\x0b\\xb9B\\r6\\x85\\x17\\r\\xbaO_\\x1f,\\x10u\\x16x\\xc2\\x8b\\x89G\\x01\\x8b\\x88\\xa1\\x0cgH\\xc3\\x1a\\xda\\xb0\\x86\\x01\\xc8\\xa1\\x0e\\x8fp\\x04\\x1a\\xf8\\xd0\\x873\\x98\\x01\\x10(\\n@\\xc4Ch\\xa1\\x08E\\xf8\\xc3\\x12\\x96\\x10\\x03$ !\\x0bj\\xf8B\\x03l\\xf0\\x04\\x07\\xf4!\\rQ\\xd0\\x83!\\xdaP\\x039\\xdc! \\x00;'", + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\x00\\x00\\x00\\x80\\x00\\x00\\x00\\x80\\x00\\x80\\x80\\x00\\x00\\x00\\x80\\x80\\x00\\x80\\x00\\x80\\x80\\x80\\x80\\x80\\xc0\\xc0\\xc0\\xff\\x00\\x00\\x00\\xff\\x00\\xff\\xff\\x00\\x00\\x00\\xff\\xff\\x00\\xff\\x00\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x003\\x00\\x00f\\x00\\x00\\x99\\x00\\x00\\xcc\\x00\\x00\\xff\\x003\\x00\\x0033\\x003f\\x003\\x99\\x003\\xcc\\x003\\xff\\x00f\\x00\\x00f3\\x00ff\\x00f\\x99\\x00f\\xcc\\x00f\\xff\\x00\\x99\\x00\\x00\\x993\\x00\\x99f\\x00\\x99\\x99\\x00\\x99\\xcc\\x00\\x99\\xff\\x00\\xcc\\x00\\x00\\xcc3\\x00\\xccf\\x00\\xcc\\x99\\x00\\xcc\\xcc\\x00\\xcc\\xff\\x00\\xff\\x00\\x00\\xff3\\x00\\xfff\\x00\\xff\\x99\\x00\\xff\\xcc\\x00\\xff\\xff3\\x00\\x003\\x0033\\x00f3\\x00\\x993\\x00\\xcc3\\x00\\xff33\\x0033333f33\\x9933\\xcc33\\xff3f\\x003f33ff3f\\x993f\\xcc3f\\xff3\\x99\\x003\\x9933\\x99f3\\x99\\x993\\x99\\xcc3\\x99\\xff3\\xcc\\x003\\xcc33\\xccf3\\xcc\\x993\\xcc\\xcc3\\xcc\\xff3\\xff\\x003\\xff33\\xfff3\\xff\\x993\\xff\\xcc3\\xff\\xfff\\x00\\x00f\\x003f\\x00ff\\x00\\x99f\\x00\\xccf\\x00\\xfff3\\x00f33f3ff3\\x99f3\\xccf3\\xffff\\x00ff3fffff\\x99ff\\xccff\\xfff\\x99\\x00f\\x993f\\x99ff\\x99\\x99f\\x99\\xccf\\x99\\xfff\\xcc\\x00f\\xcc3f\\xccff\\xcc\\x99f\\xcc\\xccf\\xcc\\xfff\\xff\\x00f\\xff3f\\xffff\\xff\\x99f\\xff\\xccf\\xff\\xff\\x99\\x00\\x00\\x99\\x003\\x99\\x00f\\x99\\x00\\x99\\x99\\x00\\xcc\\x99\\x00\\xff\\x993\\x00\\x9933\\x993f\\x993\\x99\\x993\\xcc\\x993\\xff\\x99f\\x00\\x99f3\\x99ff\\x99f\\x99\\x99f\\xcc\\x99f\\xff\\x99\\x99\\x00\\x99\\x993\\x99\\x99f\\x99\\x99\\x99\\x99\\x99\\xcc\\x99\\x99\\xff\\x99\\xcc\\x00\\x99\\xcc3\\x99\\xccf\\x99\\xcc\\x99\\x99\\xcc\\xcc\\x99\\xcc\\xff\\x99\\xff\\x00\\x99\\xff3\\x99\\xfff\\x99\\xff\\x99\\x99\\xff\\xcc\\x99\\xff\\xff\\xcc\\x00\\x00\\xcc\\x003\\xcc\\x00f\\xcc\\x00\\x99\\xcc\\x00\\xcc\\xcc\\x00\\xff\\xcc3\\x00\\xcc33\\xcc3f\\xcc3\\x99\\xcc3\\xcc\\xcc3\\xff\\xccf\\x00\\xccf3\\xccff\\xccf\\x99\\xccf\\xcc\\xccf\\xff\\xcc\\x99\\x00\\xcc\\x993\\xcc\\x99f\\xcc\\x99\\x99\\xcc\\x99\\xcc\\xcc\\x99\\xff\\xcc\\xcc\\x00\\xcc\\xcc3\\xcc\\xccf\\xcc\\xcc\\x99\\xcc\\xcc\\xcc\\xcc\\xcc\\xff\\xcc\\xff\\x00\\xcc\\xff3\\xcc\\xfff\\xcc\\xff\\x99\\xcc\\xff\\xcc\\xcc\\xff\\xff\\xff\\x00\\x00\\xff\\x003\\xff\\x00f\\xff\\x00\\x99\\xff\\x00\\xcc\\xff\\x00\\xff\\xff3\\x00\\xff33\\xff3f\\xff3\\x99\\xff3\\xcc\\xff3\\xff\\xfff\\x00\\xfff3\\xffff\\xfff\\x99\\xfff\\xcc\\xfff\\xff\\xff\\x99\\x00\\xff\\x993\\xff\\x99f\\xff\\x99\\x99\\xff\\x99\\xcc\\xff\\x99\\xff\\xff\\xcc\\x00\\xff\\xcc3\\xff\\xccf\\xff\\xcc\\x99\\xff\\xcc\\xcc\\xff\\xcc\\xff\\xff\\xff\\x00\\xff\\xff3\\xff\\xfff\\xff\\xff\\x99\\xff\\xff\\xcc\\xff\\xff\\xff!\\xf9\\x04\\x01\\x00\\x00\\x10\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cH\\xb0\\xa0\\xc1\\x83\\x08\\x13*\\\\\\xc8\\xb0\\xa1\\xc3\\x87\\x10#J\\x9cH\\xb1\\xa2\\xc5\\x8b\\x183j\\xdc\\xc8\\xb1\\xa3\\xc7\\x8f C\\x8a\\x1cI\\xb2\\xa4\\xc9\\x93(S\\xaa\\\\\\x99\\x11\\x05\\x8a\\x81.\\x17\\xc6d\\xf9\\xd0\\xe5\\xcb\\x7f3\\x13\\xe6\\xa4\\xc9\\xd0\\xa6\\xc0\\x996o\\xc2|\\x19\\xd3g\\xce\\xa0Cq\\xdeD\\xca\\x11i\\xd1\\xa5B\\x95*%\\xfa\\x14g\\xd2\\xa7T\\x7fF\\xc5XT*\\xd0\\xa8U\\xa5\\x8a\\x9d\\x9a\\xd5+\\xd4\\xa6T\\xc3\\xeeT{\\xd6\\xacX\\xac>7~-\\xbb\\x96\\xee\\xd9\\xafo\\xcbz\\x9c\\x9b\\x97 [\\xad}\\xb1\\xf6\\x95+t\\xee\\xd6\\xbfy\\xe3\\xb2\\xdd\\xc9Sb\\xe1\\xad\\x8d/2\\x8dL\\xb9\\xb2\\xe5\\xcb\\x981\\xc7u\\x18\\xd6 c\\xc6\"7C\\x04\\r\\xd8/d\\x90U\\x8f\\xa6\\xbd\\x0b\\x15/^\\xb2\\xa8\\xb3\\xaa~\\xec\\x96\\xb6Q\\xd9m;\\xfe\\x9d\\x8d{\\xe8n\\xbb\\x1f\\x7f\\x03N\\xcd:\\xf0j\\xd2\\x92\\x83\\x127\\xee\\xb6\\xf9\\xf2\\x90\\xaa\\xb5\\xb6]\\xee\\x9azn\\xc2I\\xa7\\xfa~\\xae\\xdcy\\xeb\\xd3\\x99\\xc3\\x8b\\x12\\x1fO\\xbe\\xbc\\xf9\\xf3\\xe8\\xd3\\xab_\\xcf\\xbe\\xbd\\xfb\\xf7\\xef\\x03\\x02\\x00;'", + "b'GIF89aP\\x002\\x00\\xf7\\x00\\x00z\\xa3\\x1d\\xce\\xa9E\\xf9\\xf6\\xee\\xba\\xba\\xba\\xc5\\xa2,\\x7f\\x7f\\x7f\\xb3\\xb3\\xb3\\x86r\\xf4\\n\\xb6\\xe8X\\xa4f\\x97\\xa6u\\xca6\\xea[\\xaar\\xaf\\x1e\\xde\\x99\\x18\\xefW\\xa2b\\x8f\\x96U\\x8a\\xb6\\xe9Z\\xa8n\\xa7\\xc6\\xb5\\xba\\xb9g\\xe7\\xc5y\\x1d\\x8b\\xee+\\xd9t`\\xcb\\xaa\\x0bkn\\x9d\\xf0.\\xec\\xcfz\\x1f\\x8f\\xf6;\\xf9\\xb4\\xe0\\xcb\\xab\\r\\xf3\\xfe\\xb7\\xaf\\x00\\x03\\x0f\\xd0\\xa1\\x170\\xd4H\\xb1C\\xc6\\x14\\x91\\x8dH@\\xa1{\\xf7\\t\\xe0\\xc3\\xa7\\xff\\xaa!\\x06p\\xe5\\xd4\\x843\\xf3>\\x94 \\x85\\xbf\\xf7\\xf0\\xe3\\xfbc\\xf0\\xe8w-\\x11u\\xe4\\xeb\\xd7\\xef\\x00\\x82q\\xdc\\xe9\\xb1vX\\x17\\x1e\\xbcWF\\x1cx\\xa8r\\xc6\\x82g\\xc0\\xd1\\xc7\\x18r\\xbcW\\xc7\\x02\\x105\\x81\\xc1{[\\x90\\x01F\\x1b\\x18\\x92\\x91 \\x83\\r>\\x18\\xa1?2Hp\\xde`\\x98\\tHW\\x01\\xef\\xb51\\x86\"f\\xf8\\x01\\x8a \\x82d\\x90A\\x03\\x9dd1\\xc7\\x1b`l1\\xdf\\x02\\xeem\\x01\\x06\\x1f\\xe8\\xf8X\\xc6\\x18g\\x98q\\t\\t\\x99dbF\\x1a\\xd6\\xe4\\xa3#\\x8f>:\\xf0\\xcaq\\xb9\\xa9\\x97U\\x11\\x0c\\xf8\\xb3\\xc5\\x1ah\\xf8\\xf1\\xc7 \\x051t\\x8a\\x02\\x16\\xd0\\xf1\\xc6\\x88\\xfe\\xc4\\x01@\\x16\\x81x\\xb9\\x86\"\\x88\\xa4\\xc3BG\\xfa\\xc4\\x00C\\x16z\\x80QI \\xf4\\x98\\xf1F\\x1c\\xfe\\xa4\\xb0\\x00\\x80)*\\xc7S\\x117\\xf8\\xd3F$Y\\xfc\\x91\\xc8A\\x89\\xb5PB5^BB\\x07*\\xa5\\xf8S\\x06 Ypp\\r_fAsK\\x1a}\\xf8x\\x00\\x08h\\xe0\\xb1E\\n\\x1f\\xa0\\xff\\x97\\xe8n\\x08\\x15\\xd8\\x06\\x1f%\\x10\\xc2\\xd9],n\\x01\\x88\\x1b\\xectyk\\t\\xf7\\x08G[\\x13\\xc3d\\xf1\\x06\\x87\\xab\\xbc`F\\xaa)\\xb4\\x82br\\xb4\\x1at\\xe1\\xad\\xb8\\x90\\xb9\\xebO\\x86x\\xf9\\xab9\\x06\\xe2j\\xc3^\\x90\\x91\\xe6\\x040n\\xbc\\xf1\\xaa\\x01.^zS\\x82+\\xae\\xfd\\xd4\\x88{c\\xb8\\x81\\x8a,\\xef\\x01R\\x82\\r\\xa1\\x91j\\xae\\x14\\xc0\\xe4\\xd1\\x87?;\\x84\\xe1\\x02\\x1dk\\xf8SA\\xbcZ\\xee\\x94\\xdf\\x1anh\\xcb\\xd3V\\x17\\xcaAG\\x06\\x02t\\nF\\x16(\\xc8f0qU\\xa83\\x07\\x18\\xfeH F\\x00g\\xd8\\xe1\\xcf\\x0cY\\xaaxP\\x0f\\x9e\\xa6!HV?\\xcd\\xf2^9\\x8c\\xf0s\\x87\\xa7h\\x14\\x93\\x80\\xc9\\xe5\\xa2\\xdc\\x0b\\x01\\xacl!\\x83\\x18\\xca\\x98\\xb0\\x87?\\xd2\\xd4\\xac\\xa8A\\x8dfS\\xc2\\xa4\\x881t!\\x19Y\\xac\\xc0O\\x81\\xfdR\\xe3O\\x18\\x05\\']\\x1b\\x16\\x1a\\x98\\xc1\\xf2*_p\\x83\\x06\\x19\\xfe\\xfc\\x10\\xe0\\xd5\\x04\\x1d\\xe2%\\x1a;\\xf3\\xff\\xccP~\\x92\\x04\\xad\\xc6{\\xf1\\xb8\\x81\\x87?#\\xa4=\\xdc\\xda\\\\<\\xf0\\x86?\\x9a|q\\x0c\"l\\xf8\\x83\\xc0\\xdd\\xd5\\xfe\\xc3\"\\x19n\\xe0\\xeb\\xb7BSx:G\\x0b\\xfc@\\xe0\\x8f\\x1cy\\xe0\\xa0\\x87?7(~\\xec_\\\\\\xe8\\x82F\\x84VD\\xd1\\x0e\\x1cN\\xdf1\\xebN\\x05B\\xe2H]\\x0cm\\x9e\\x85\\x00\\xfct\\xb9\\x86\\x05\\n\\xa0!\\xb3\\xeb\\x91\\x95v\\x129y\\xb0\\xdcC\\x14\\x17\\xa4A\\xb7\\x01\\xbb#\\xe4\\x1e&\\x11\\x00\\xbf\\x90\\xf1\\x9d8\\xd4\\xa8(\\r\\xfc\\xe2\\xb6?\\x03\\x90\\xbb\\xb8\\xf3(\\x99P\\xf9\\tQ\\x18\\x13\\xbd?\\x10d\\x7f\\xd0{h\\x10\\xe3\\xbdB\\x05\\x8e\\x124?\\xef\\x01@(\\xa8\\x90\\x85\\x88\\xa5\\xcfX\\xcd\\x83]\\x17\\x0205\\x15\\xb8$\\x0b\\xef\\xb3_A\\xba\\xf0\\x9e4\\xe8\\x8a.\\x0c)\\x10)2\\xe0\\x10\\xfc)\\x80\\x80\\x95\\x13\\x81\\xfa^W\\x9c\\x00P\\xc2\\x1f\\x0ep\\t\\x01*\\x97\\x00\\t\\x12\\x84^\\xfe\\xb0\\xe0\\xfe\\xfa\\xa1A\\x0e\\x020\\x869\\x00\\xa1?D\\x88\\xc0\\x83\\x99\\xc6\\x84(tI\\x00\\xffX\\xe8\\xc2\\x81\\x14\\xa1\\x82\\x93\\x98a\\x81\\xc8\\xd7A\\x7f\\x9ca\\x80Y8\\x1c\\x0fg\\x93\\xc0\\x12\\x9e0\\x85Sp\\x03\\x11\\xa9\\xb5\\x93\\xf7\\x9c\\xa1o\\x9f\\xa3\\xa1?\\xf0\\xf0\\xbf\\xf7p/\\x19\\xf3; \\x15}\\xa8\\x96\\x07T\\xce\\x81S\\xc8\\xc2\\x18\\xfcq\\x82\"\\x0e\\xc4=\\xa3\\xa0\\xc1\\x0c\\x13\\xe0\\x0f0\\xf8A|\\xfe\\x80\\x04*r`=\\xf4\\x8d\\xb0\\x8aMaF\\x14\\xe9\\x18\\x05^\\xd0\\x81e\\xf5\\xe3b\\xad\\xfc\\xb1\\x06?\\xcc\\xd0tv0\\x83)\\xf8\\xc1\\xc78\\xb8\\x81\\x03g(\\x83?\\x98\\xc7F.h \\r\\x84\\x9a\\xde;\\x14!3\\xecI\\xf2 \\xa6k\\x03\\x1d\\x92\\x18\\xc6\\xd0\\xf9\\x03\\x00\\r\\xe0\\xc7#\\x1c5\\x87fL\\x8d\\x02\\xa4D\\xd9I^\\x00\\x07Q\\xb6\\x84\\x00\\x8f\\xd3\\x01\\xe6vBA\\x7fD\\x02\\x14\\x18\\xfc\\x9b?\\xc6\\xe0\\x07\\x01,\\xe1=\\x92@\\x04\\xcb\\x12wH6:\\x03\\x82\\x90\\xfb\\xc2\\x05\\xcc\\x10\\xb1\\xcb\\xd9q \\x05\"\\x83\\x19.\\x98\\xaf\\x85\\xb0\\xa8\\x0ch\\x88@\\xf1\\xfc\\xa1\\xce89!\\x98k\\xdb\\xc6\\x19\"\\x04\\xff7y\\xe8A\\x94v;\\xe7?p\\xe6L\\x0bpmc\\x0c\\xd9\\xd74\\xdd`\\x8a\\xa1\\xf9\\x03\\x10\\x96\\xf0\\x05\\xd2\\xd6\\xc7\\x14\\x14\\x80\\xf3i\\xcfHC\\xc4\\xbaa\\xb5\\xcc\\xa1\\xd3\\x1fv@\\x83\\x1e\\xdb\\xe9N/\\xf1\\x01y\\xd3p\\x94\"P1Q\\x12F\\x03\\x04\\x8b\\xe0\\x90\\x04\\xd6\\xe1\\x86M\\xf8h\\x01\\x1d\\xed\\x89\\xde(i\\x86?\\x90T!\\x8d\\xc8\\x8f\\x1c\\xd0\\x90\\tI\\xbc\\'\\x0eih\\x00>G\\x12\\x0c|\\xc0\\x81n\\x0eX\\x06Le6\\xb1\\x9c\\xf6\\x84E\\xd3\\xec\\xe9A{\\xf3\\x13[\\x92\\x01\\r\\xf3\\x80\\xc7{\\xc6@\\x07\\x0e\\x8c\\xa3\\x87g\\xd1\\x06\\x08\\xe00\\xc7\\x14\\x9c\\xc3\\x04O\\xf5\\x87\\x0e\\xa6%/\\xac\\xf0q\\x9asp\\x04;\\xcb\\xb4\\x95D\\x1c\\xe0=d\\x80\\x83%\\xe24M4X\\x80\\x16k\\x0cI..\\x01\\x87\\x88U\\xa2\\x1eYX\\x04\\xddR \\x04\\xbaV\\xac\\'w\\x8d\\x03\\x1c\"\\xa5\\xb1\\x81\\xfcD\\x00\\x19(\\x01\\x1aX\\x06\\xd27\\x98\\x81\\xb0d`E\\x16H\\xc0\\x82r\\xc5\\x00\\x07ix\\x03\\x19*\\x11\\x0bK\\xff\\xcca\\x0f\\x1c\\x82\\x95\\xac^iW\\x03\\xb1\\xe1\\x0cypD\\x04&A\\xa6~\\x9cb\\x05\\n\\xa0\\x81\\x1b\\xd0\\xc0\\xa3\\xf8|I\\x0f\\xdf0\\x10\\x92\\xcc\\x80\\x03w\\xd8#\\x1d\\x97\\xa0\\x03\\x1c0\\x01\\x0ba b\\x0e\\x8b\\xe8\\x11\\xc3\\x0e\\xb5\\xdb\\xba\\xd2\\xa5\\x07\\xeeq\\xd4\\x18\\xdep\\x864\\x98!\\x0bY\\xc8C\\x1a\\xd0\\xa0\\x87=\\xc4\\xc1G\\xfe\\xc0\\xc0\\x1d\\xf2\\xe3)0\\xac\\x01\\xbfG\\xdaD{\\xdf\\x0b\\xdf\\xf9\\xd6W\\xbc\\xf3\\xd1\\x02\\x96\\x96y\\x98\"\\xdc\\xf5=v\\x88\\x03\\x18\\xc6\\xc0\\x865\\x80A\\x0e\\xa2|\\x8f\\x07\\xee \\x94\\x02\\xa4\\xd7S\\xf2i\\x83\\x84)la2d\\x18\\x85\\xd88\\x11\\xc5lV\\x97.`\\x80\\xbf\\xfb)T\\x02\\x88\\xf0\\x9b]p\\xa2Q1\\x8e1\\x02>\\xf0\\x9f\\xf2^\\xb65\\x87\\xe8A\\x01\\xa2\\xe3\\x01\\x0c\\x14\\x80\\x08\\\\\\xf9\\rX\\xc2\\xe0\\t\\x110\\xc0;*\\x10Gx&\\x10\\x8eT\\x18\\xc26*\\xb6\\xear\\xb8\\xca\\x10\\xcf4f\\xa9\\n\\xbc\\x8d\\x8fY\\xbce\\xbb\\xfc\\xc4\\xcb\\xa0\\xe9\\xa60)\\x83\\x1a\\xcb\\x92yY\\xcb\\xaf\\xb9Nl\\xc0\\\\\\x1c1\\xbb\\x19op\\xf6\\x8d\\x9c\\x81\\xd3RD\\x9a\\xa7\\xcd+\\xee\\xc1\\x10\\xf6A\\xe8B\\x1b\\xfa\\xd0\\x88N4\\xa2\\x89\\xc0\\xe8F\\xdf\\xe1\\x0e\\x85\\x88t\\xa4\\x07@i\\x1fX\\x1a\\x1c!\\xc8\\xb4-\\x0c\\xc0\\xe9O|\\xc2\\x10\\x0b\\xf0\\xc4\\x0f>\\xd0\\x8a l`\\x03\\x8f\\xe0D\\x07:0\\x83\\x1a@ \\x00;'", + "b'GIF89aP\\x001\\x00\\xf7\\x00\\x00\\xe3\\xe3\\xfc\\xb8\\xbb\\xc8\\xac\\xad\\xb0UUZo\\x83\\x8f\\xf9\\xfa\\xfd\\xf4\\xf6\\xfe\\xed\\xed\\xfe*FS\\xe2\\xe5\\xea\\x9a\\xa6\\xb3Ml\\x86\\x99\\x9b\\x9e\\xcb\\xd0\\xd5\\xdc\\xe2\\xeb\\xbb\\xbd\\xbe\\x87\\x8b\\x93\\\\fs\\xd1\\xd1\\xd3\\xf9\\xfa\\xfa\\xc5\\xc9\\xe3\\xe9\\xe9\\xfd\\xdc\\xdc\\xe9gku\\xdc\\xde\\xe2\\xaa\\xab\\xad;\\x84\\x87\\x8b\\xb2\\xae\\xae\\xc7\\xcb\\xd5\\xea\\xeb\\xfaegl\\xfa\\xff\\xff-/5\\xf3\\xf4\\xf6_}\\x8ey\\x9e\\xb3\\xc0\\xbf\\xcb\\xf2\\xf3\\xfboz\\x8b\\xfd\\xfd\\xfa\\xf3\\xf8\\xfaAFh\\x91\\x9f\\xaf@[\\x90\\xef\\xf0\\xfb\\xe4\\xe3\\xe6\\xe3\\xe4\\xf2\\xf2\\xfa\\xfd\\xb5\\xb7\\xb6\\xec\\xea\\xeb_^c\\xf4\\xf3\\xfe\\xed\\xee\\xf7\\xeb\\xec\\xf1\\xb7\\xb8\\xbawz\\x7f\\xd7\\xd9\\xe8\\xe5\\xe7\\xe8\\x8d\\x8e\\x91\\xf0\\xf2\\xfd\\xe8\\xe9\\xe786?C\\xa7\\xa7\\xaa\\xfd\\xfe\\xfe\\xfe\\xff\\xff\\xfd\\xfe\\xff\\xfb\\xfe\\xfd\\xfd\\xff\\xfe\\xfc\\xff\\xff\\xfc\\xfe\\xff\\xfc\\xff\\xfehgg\\xfe\\xff\\xfc\\xe2\\xe4\\xf6\\x9e\\x9c\\xa8\\xf1\\xf1\\xfe~\\x7f\\x83\\x9c\\x9a\\x98yu\\x82\\x9a\\x97\\x97nw\\x80\\xaa\\xa6\\xa7\\xc7\\xc8\\xc7\\xf8\\xfe\\xff\\xf9\\xfb\\xfe\\xfa\\xfd\\xfd\\xec\\xeb\\xf3\\xea\\xec\\xf7\\xd1\\xd7\\xe0\\xeb\\xeb\\xf3\\x8f\\x90\\x8e|\\x8a\\x9ea\\x7f\\xb7k\\x85\\x9f\\xe6\\xe6\\xf9\\x9d\\x9f\\x9a\\xf9\\xf8\\xf3\\xde\\xde\\xe0\\xf1\\xf3\\xf2rps\\x1f \\'W_xM`}\\xa7\\xa8\\xa6\\x8a\\x84\\x86\\xf7\\xf7\\xf6uro\\xe9\\xe6\\xe6fx\\x9c\\xef\\xef\\xf0[j\\x95\\xf3\\xf3\\xf5\\x1aDm\\x1d?Upmp\\x8a\\x98\\xa7\\x84\\x8a\\xa9\\xc5\\xc4\\xc6\\x9f\\x9f\\xa2\\xfc\\xfd\\xfb|{\\x89\\xee\\xee\\xea\\xfd\\xfd\\xfexyx\\xa1\\xa0\\xa0\\xfb\\xfb\\xff..3nx\\xa5\\x96\\x97\\xa6\\xe1\\xd7\\xd5\\x84\\x97\\xc0\\xc1\\xc1\\xd7uz\\x98\\xd7\\xd7\\xef\\xd6\\xd6\\xf8\\xd1\\xca\\xc6\\xff\\xff\\xff\\xfc\\xfe\\xfe!\\xf9\\x04\\x00\\x00\\x00\\x00\\x00,\\x00\\x00\\x00\\x00P\\x001\\x00\\x00\\x08\\xff\\x00\\xff\\t\\x1cHp`-\\x7f\\x08\\x13\"\\xace\\x0ba\\x9aq\\xfer\\x15\\x9cH\\xb1\\xa2\\xc5\\x8b\\x18)\\x1eT\\xa8p\\xdc\"y\\xbdbx\\x08b+\\xa3\\xc9\\x93(+n\\xe4\\xd8\\xf0\\x8f(\\x10+\\x0c\\xb9\\x91\\xe0/\\xa5\\xcd\\x9b\\x18W*\\xb4\\x05\\xef\\x08\\x1ftZ\\\\I\\xa9\\x99\\xb2V\\xad\\x7f\\xb8\\xfe\\x1d5\\xca\\xb4\\xa9Q\\x9c\\x16urD\\x18\\xca\\xd8\\x92\\t%S6\\x9c\\xca5!T\\x95]\\x116<\\x13\\x81\\x9d?^\\'\\x19\"\\xfc\\x84\\x02\\xc5\\xa7OW0aRA\\x92\\xe3W\\x8da\\x13\\xb2\\x12\\x05\\xc5\\x96D\\x93\\x1b\\x85l\\t#\\xc9E\\x8f\\xc3=\\\\\\xb8p`\\xf7\\xeeD\\xa7N\\xfdM\\xc0!j\\x07\\xd1\\x93\\xb6\\x96\\x11\\xc1\\xe2\\xef\\xdb\\x872\\xe7\\xce\\x81\\x99\\xc4(Hc\\xc7\\'\\xfduH\\x04\\xe5\\x96.\\x9bR\\x15\\xb8X0\\t\\x13W\\xd4\\'s\\xf9\\x13S\\xc4H\\xc2\\xbf\\x19k\\x8d\\x18\\xd8\\x90\\xcf\\x8fPaqc\\\\\\xb6\\xcc\\xd6\\xae\\x05`\\x12\\x11\\xe2\\xd0\\xe17\\xae\\xa4*\\x8f\\n\\xf4\\xe7\\x07\\xc8\\x87\\x85J\\x13\\xda\\xff\\xca\\xaa\\xbc\"\\xaee\\xfe\\xd6\\xb8\\xe0\\xb6M[\\x88/\\x03X\\xac\\x11\\xaf\\xfd\\xf1\\xf6\\x07\\x1ep\\\\\\xf3\\x97ue\\xfd\\xf2\\x16\\xf9\\xa3\\x00\\x18\\x88(\\x91E\\x06U|\\x11\\x826+\\x00\\x91\\n}\\x15\\xf9\\xa3I\\x11\\x03L\\x80\\x10\\x806\\xf9\\xa3Bau|!\\x0cB\\x9d\\x98\\xa1\\xc5{\\x90\\x18r\\x06\\x13\\xe2\\x19t\\xd0\\x04\\xd0}w!\\x86\\xb9a!\\x80\\x16\\xc6\\xf8cF\\x08P(\\xb4A\\x08\\xef\\x85\\x00B\\x12\\x1e@4\\x953\\xe6,\\xe0\\x87W0f\\xc4\\x8b?\\x10Hb\\x88o\\xfe\\xdc\\x10B\\x0c\\n]0\\xa5\\x12-\\xf0\\x08\\xc9\\x05\\xa6\\x94\\x93P\\x10\\x04\\x9c\\xa3\\xc0eIb\\xd4P8\\xc6 `\\xc4\\x03\\xfc\\xf9\\xc3A\\x08J$\\xe4\\xcc\\x17\\x1a\\xf8s\\x85)\\x86\\xb8\\xf7\\xc5\\x1eq\\x98\\xe0\\xcf\\x0eE\\x14q\\x02\\x99e\\xfe\\xb3\\x15G\\x91L K\\x0f\\x04\\xbc\\x88\\x10\\x03!\\xa8\\x92\\x90%!\\x00\\x91\\x90\\x1d@\\x0c\\xa0\\xe0\\x17e$\\x92\\xc7\\x0c\\x0f\\x16t\\xe8T\\xc0\\xa5\\x84\\xd02|\\x94\\x90\\x01\\x03f|\\xf0\\xc0\\r?0\\xff\\x80@\\x03\\x97\\x91\\x81\\x10\\x0e!\\x98\\x81\\xd0\\x9c{\\x14\\x10QB\\xd7\\xdc\\xa0\\x85{+\\x98R+B\\xf0\\xa4R\\xc2\\x19\\xac\\xb2p\\x82\\x04\\x9c\\xf9\\xf3\\x1fF\\x08I\\xc1\\x80!Z\\xec\\x01\\x826\\xdc\\x82 J6\\x10\\xb8\\xa0[A\\x08\\t\\x13\\x02\\x07\\x08E\\x13\\x82Y\\x03\\xe9\\x86\\x90\\x19_\\x9c\\x12\\xaa\\xa1\\xfe`\\xe1\\xc1\\x0c\"\\xe4\\xd1\\xca\\x1e\\xf4\\xb4\\xe0C\\x1e\\x03\\xfc H\\x16\\xd2f\\xe4O\\x17\\xaa\\xb8\\xe1C\\x0b{h\\xe0\\x86\\x08n\\x102\\x8b\\x088\\x84\\xe1\\xc2\\x0f5\\x90i\\xab?N\\xe4\\xeaO\\x1bE\\xb4p\\x05\\xa1\\xfe\\xc8\\x01\\xc9\\r\\x05l5\\xc1\\t+\\xec\\xd1\\x02=\\x89\\x94\\xf1\\xb0\\x08Z$\\x02\\t$edcY\\xa9\\x05\\xe9V\\xc2\\x00\\xff\\xbaaH\\x0c\\xad\\x02q\\xcc\\x1f\\xe0\\xc0R\\x8c<+hS\\x86\\x9f\\x7f\\xb9[r\\x08,\\xf8\\x93N\\x08\\x0c\\\\\\x86^\\x13\\xdaTaL\\x00\\xa80\\x92\\x06\\x14y\\xd0\\xd3\\xca\\n\\xc2tc\\x02%\\xeb\\x04`\\x8a\\x18qT\\xa1\\x81\\x0fZ\\xdc`!E\\xba\\t\\xe0F\\x1en\\xc4\\xff\\xc1\\xc0\\x03:4\\x11\\xc4(\\xfe\\xa4\\x10\\xc7\\x00\\x7f\\x0c\\xe3\\xca, \\xf8\\xf0\\x9dD\\x87\\x8e J\\x08g$\\x93\\x08\\x08\\x91\\\\\\xe6\\x8f\\x07_l2\\x88\\x13\\xd0\\x90\\xa5\\x01\\x08\\x030 \\xc1\\x18\\x9c\\xf8\\x03\\x03\\x08\\x93y\\xcf\\xfe\\x00\\xa1E\\x1e+\\xac\\xd9\\x01\\x19l 1\\xc1*\\xfeX\\xe0\\x817\\xe8\\xfc\\xf1\\xc0\\x0fU\\xec\\x01\\xc9w\\xed\"t\\xc4\\x00!\\xc8\\xb2\\xc4\\xb9\\x9a\\xaf\\x00\\x89\\x11\\xf5L\\xa3A\\x19\\xf4\\xc8\\xcd\\x02\\x150\\x14P\\x81-h,S\\x81\\xfa\\xfe\\x18\\x80\\x8a)\\xc2h\\xa0A\\x1c#\\x13\\xe4O\\te\\xe4a\\x08\\x10\\x8c\\xcc\\xf3M*\\x06\\xe0\\xc1\\x04\\xd8\\x90\\x0b@\\xb0B\\x1f\\x99\\xd8A\\x14R`\\x86\\x15\\xf8\\xa0\\x15~\"\\x83@\\xdcu\\x05\\x11\\x84@\\x01\\x99\\x00A\\x13\\xfc\\x81\\x9eRhc\\x00%X\\x02\"\\x16\\x90\\x08\\x1f\\xc0\\xc2\\x12\\xd1p\\xc6\\x01`\\xf0\\x86\\x7f\\xa0!\\n\\x15\\xa0A\\xfa*\\xe0\\x8fRP\\xe2\\x06\\xb3\\xc8\\x83\\xa4^\\xf3\\x0f\\x7fXa\\x00\\x1a0D\\x06\\xff0\\xe0\\x8f\\n\\x14\\xa0\\x0b]\\xa8\\xc0\\x15`\\xb0\\x0c6XA\\x0f\\x9a\\xe8\\x03 \\xfc\\x11\\x8b\\x06\\xd2C\\x04V\\xb8\\xccV\\xca\\xa1\\x85/d\"\\x047\\xf0\\x07.r\\xf7\\x05\\'\\xb0\\x82\\x06\\xdcxA\\x0f\\xca@\\x88$\\xd4\\xc1\\x01\\xf0\\x00\\x005\\n\\xf0\\xc2\\n \\x01\\x061\\xa4\\x01\\x1b&`\\x03E\\xc8\\xcfO\\xdb\\xc1\\xc1\\xc4hA\\x024\\x14\\xc0|Y`\\xc5/\\xa8p\\x00e\\x8c\"\\x00/\\xa0\\xc0(j\\x91\\x8by\\xc8\\xc0\\x0c\"\\xa0\\x07\\x0e\\xb4\\x98\\x90\\'\\xe4AA\\xda\\x10R\\xf3t\\x85\\x0cBx\\x0e\\x03fH\\xc4\\x0f\\x1a\\xd0\\x06\\x03\\xf0\\xc3\\x00\\x8dX\\x06\\x1a`0\\x05$\\x18\\xe0\\x00\\xed\\x00\\x84\\'L \\x87=\\x88\\x02+\\xe9\\x19\\xc0,\\x14\\xe1\\xa7 \\x00\\x80\\x062<\\x02*\\x1aa\\xc8`\\x88\\xe3\\x05c\\x88H!`0\\x02J\\xfc \\x11Z\\x18\\nq\\x12b\\x85V\\xf0\\x08\\x02\\xfeP\\x836\\x08\\xc1\\x82 \\xcc@\\x03\\xdc\\x90\\x06\\x11\\xfc\\xc1\\x88*\\xb8A\\x01m\\xa8@#\\x0e\\x10\\x054\\x00\\xa0\\x11\\x06\\x80A-\\x0ep\\xff\\x00\\xd5|@\\x0b\\xf4`\\x93?X\\xa0\\x85\\x01\\x08\\xc0\\x02h\\xa0\\xc1\\x11\\xa8a\\x80J\\xb0\\x01\\x0b\\x168\\xc0<(\\xb0\\t\\x05\\\\\\xe2\\x1fl\\x80\\x01\\'`0\\x8e\\x0c\\x0c\\x80\\x1e\\xec\\x12\\xc8\\xa8\\xa4\\x90%m\\x14\\x80\\x05\\xda\\x10\\x816 \\xa1\\x8d/\\xcc\\x02\\x11\\xe4X\\'\\rXP\\x86\\x19\\xac\\x01\\x00h\\xb0\\x05\\x00\\xa6@\\x05N\\xe4\\xe2\\x00\\x04\\xb4C(J\\x80\\x0e\\x10\\xc4A2r\\x98E\\x0cJ\\xe0\\x0f\\x1aT \\xa1\\x8d(\\x04\\'\\x0c\\xd0\\x01<\\xf8\\x03\\x1f\\x9b\\xa0\\x15?\\x0f`\\x00[d\\x81\\x121\\xd8\\x83#r\\x01\\x9c\\\\\\xa8E5 \\x00\\xa3!|\\x80\\x03\\t\\x18\\x02\\x04\\x89\\x18\\xdd\\x17\\xb4\\xa1\\x85\\x0b\\xd8\\x83\\x03\\x00[\\x82\\x0cR1\\x85)\\x14\\xe2\\xa7\\x80P\\x01+\\xb0\\xe1\\x8fk0\\xc0\\x84VH\\xc3\\x00\\xdc\\xc0\\x80\\x14\\xdcb\\x1e\\xf00@\\x05rP\\x016\\x00\"\\x01:@\\x854\\x06\\xd1\\x016\\xa0!\\x18\\xf9\\xbcC R\\xc0\\x00-\\x10\"c\\x13\\xb9\\x05BHP\\x85\\x0b8!\\x06bH\\x80\"\\x08a\\x08A\\xffH\\xc0\\x03\\xaa\\x90C\\x19Z\\xb0\\xad/TA\\tg\\xa0@#\\xfcq\\x80F\\xd4`\\x0cT\\x00\\x04\\x0c\\xca\\xe0\\x0f\\xeb\\xc0\\x02eS\\x1d\\xba\\xe0\\x0f\\xf1 V\\x02 \\x01o\\xd0\\x04\\xb6\\xa0\\x06XP\\x03\\x9c\\x00\\x08o\\x80\\x04\\x8d`\\x05j\\xe0\\x07O0\\x04Q\\xe0\\x0f:\\xb0\\x013\\x00\\x02\\x8a\\xe0n\\xf6\\xd3\\x00\\x1b\\xe0\\x07\\xba\\xd0\\x10\\rQ\\x02\\x13\\xc3\\x0e\\xce\\xf0\\x0b\\x18\\xf0\\x0b}\\xf0\\x08f\\x00\\x02?0\\x01\\xb5\\x10\\x0c\\t\\x80\\x07\\xf0\\x00\\x03\\x85@\\x03\\x07\\x80\\x01\\x1e\\xd04N\\x10\\x11=t\\re0\\x0b?\\x00\\x04\\xf3\\xa1\\x06\\xd8`\\x07\\xd8\\x00\\x03\\xd8\\x95O]\\x80\\x05\\x0fR\\x03\\xd4 \\x05\\x8b\\x80\\x03t\\x83\"\\x15\\x91\\x0bG \\x05N\\xc0\\x02\\xb7@\\x10\\xba\\xe1\\x04- \\x02\\'\\x90\\x000\\x80\\x06*\\x90*7 \\x00X\\xb0\\x0bl\\xf0\\x04\\x9e\\x80\\x06\\xbe r\\x0e\\xb0\\x01x8\\x0b\\xf2\\xff\\xd7C\\x1e\\xb0\\x07e\\x80\\x03\\x19\\xb0\\x03\\x13p\\x05j\\x00\\x0f1\\xc4\\x03P\\x88\\rM\\xf0\\x04O\\xe0\\x0f\\x82p\\x068\\xa0\\x01-\\x00Ho\\x18%\\x1a0\\x00.\\xd7C\\xb1P\\x05> \\n\\xa6\\x90\\x02\\x1ab\\x07M0\\x01X\\x10\\x04\\xcb\\xc0\\tX\\x80\\x05\\x00`\\x00\\xfe\\xd0\\x00\\x1e\\xf0\\x03>\\x10Pd\\xb2\\x0b\\xfe\\x00\\r-\\xa0\\x05\\xc2\\xf0\\x01\\xeb \\x05\\x13\\x90\\x05\\t\\xc5\\x03\\xcaP\\x01\\x13\\x80\"\\xd7\\xf0\\x00\\x1f\\xf0\\x03Z\\x00\\x02\\xf2`\\x85\\xb3\\x17\\x04k0\\x0e\\xb9\\xb0\\x0c\\x041F)\\xa0\\x05p\\x97\\x01$\\xd0\\x01\\xf0\\xc0\\x04\\xcb\\xc0\\x04W0\\x019\\x10\\x04]\\x90\\x05C\\x80\\x0c@\\x10\\x07\\x0bc)<\\xd3\\x10\\xca\\xa8?7@\\x0b%\\xd0\\x01\\xcd@\\x03\\xd4\\x84\\x06\\xed \\x01\\x0f\\x00\\x04\\x1c\\xe0\\x08\\x89\\xb0\\x07\\x8f\\x93\\x11[A\\x11\\xb6\"\\x01n\\x00\\tn \\x0c\\x1e \\x01\\xf7`\\r50\\x01\\x13\\x10\\x08\\xdfp\\x0ft\\xb0\\x08\\x8aP\\x05\\x0c\\x93\\x01\\xe0\\x88;\\x8bP6T\\x86\\x03, \\x00\\x1bp\\x02\\\\0\\x07s\\xbe \\x0f8\\x90T \\xa0\\x05L\\xc537\\xb1\\x0bc\\xa4\\x06r@\\x0f> \\x02N0\\x0cs\\xc0\\x05\\xfd \\x0b@\\xb0\\x08\\x7f\\x10\\x03U\\xc0R\"\\x80\\x0c-\\xf9\\x18\\xe9\\x11\\x0f>\\xd08U\\xe0\\x08q\\x00\\x05N\\x10\\x07\\x86\\xd0<\\xda\\xb0\\x07\\x8a\\xd0\\x05\\x05\\x83\\x1bct\\x04\\x1e\\xa0\\x92\\xfe\\xa2\\x05U\\xb0\\x02+0\\x00\\x84p9\\xda0\\x0bf@X\\x191F\\xd6\\xa7\\x08n\\xc0[ \\xd0\\x02\\x90@\\x0f\\x90\\x00070\\x14\\xfcA\\x1e8q\\x1eGp$\\tq\\x05\\x0f\\x10\\x07e\\x00\\t\\xdb\\xc2-\\xf40\\x0b\\x8e@\\x0b\\xa18-\\x17\\xa12i\\xd0\\r\\xd0\\x00\\r\\x1c\\x10\\x88\\x1dp|\\x899\\x1e\\xa8q\\x1dR\\x93\\x10\\xe5 \\x01\\xab\\xc2\\x00\\x1e@\\x02h\\x99\\x10\\xe68\\x11\\x01\\x01\\x00;'" ] }, { "Name": "ThumbnailPhotoFileName", "DataType": "nvarchar", - "Definition": "The ThumbnailPhotoFileName column in the SalesLT.Product entity contains the file names of thumbnail images associated with each product. The file names typically follow a pattern where they include a brief description of the product followed by '_small.gif' indicating the file is a small-sized GIF image. The values in this column indicate the visual representation of the product and are used to display product thumbnails in the application.", + "Definition": "The ThumbnailPhotoFileName column in the SalesLT.Product entity contains filenames of thumbnail images associated with each product. The filenames typically include a description of the product followed by '_small' and the file extension. This pattern indicates that the files are likely smaller, thumbnail-sized versions of product images, commonly in GIF format. The filenames help in referencing the specific thumbnail image for the corresponding product in the database.", "AllowedValues": null, "SampleValues": [ - "fork_small.gif", - "awc_jersey_male_small.gif", + "superlight_silver_small.gif", + "single_headlight_small.gif", "water_bottle_cage_small.gif", - "street_tires_small.gif", - "wheel_small.gif" + "tail_lights_small.gif", + "julianax_r_02_yellow_small.gif" ] }, { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.Product entity contains unique identifier values, represented in the form of GUIDs (Globally Unique Identifiers). These values are generated to ensure that each entry in the Product entity has a distinct and unique identifier. The GUID format follows a standard 32-character hexadecimal sequence, divided by hyphens into five groups in an 8-4-4-4-12 pattern. This column is typically used to guarantee the uniqueness of a row and enable efficient merging or data synchronization across different systems.", + "Definition": "The column rowguid in the SalesLT.Product entity contains unique identifier values (GUIDs) in the standard format of a 32-character hexadecimal string, divided into five groups separated by hyphens. Each value in this column is used to uniquely identify rows within the Product entity. The format typically ensures high uniqueness and is commonly used for synchronization or to generate unique keys across different tables or databases.", "AllowedValues": null, "SampleValues": [ - "3050E4DF-2BBA-4C2B-BDCC-B4C89972DB1C", - "8AE32663-8D6F-457D-8343-5B181FEC43A7", - "B59B7BF2-7AFC-4A74-B063-F942F1E0DA19", - "50ABEBCB-451E-42B9-8DBB-E5C4A34470E9", - "1909C60C-C490-411D-B3E6-12DDD7832482" + "22DF26F2-60BC-493E-A14A-5500633E9F7E", + "47AB0300-7B55-4D35-A786-80190976B9B5", + "AE638923-2B67-4679-B90E-ABBAB17DCA31", + "AAD81532-A572-49A5-83C3-DFA9E3B4FEA6", + "A3EE6897-52FE-42E4-92EC-7A91E7BB905A" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.Product entity contains the date and time when the product record was last updated. The values are stored in a datetime format that includes both the date and precise time down to fractional seconds. This allows for tracking the exact moment changes were made to a product's data. This column is important for maintaining an audit trail and ensuring data integrity in the product information.", + "Definition": "The ModifiedDate column in the SalesLT.Product entity contains timestamp values indicating the last date and time a product record was modified. The timestamps are in the format YYYY-MM-DD HH:MM:SS.ssssss. This column helps track changes and updates to product information, ensuring that the most recent modifications are recorded and can be referenced for audit or synchronization purposes.", "AllowedValues": null, "SampleValues": [ "2008-03-11 10:03:55.510000", @@ -257,4 +249,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductCategory.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductCategory.json index 3c3494f..64a011f 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductCategory.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductCategory.json @@ -1,7 +1,7 @@ { "Entity": "SalesLT.ProductCategory", - "Definition": "The SalesLT.ProductCategory entity contains data about the different product categories within a company's sales system. It includes information such as the unique identifier for each product category, the parent category if applicable, the name of the category, and metadata like unique row IDs and the date of the last modification. This entity can be used to answer questions related to the organization and hierarchy of product categories, such as finding all parent and subcategories, tracking category modifications, and retrieving specific category names.", - "EntityName": "Product Category Information", + "Definition": "The SalesLT.ProductCategory entity contains information about the different categories of products in the sales database. This entity includes details such as the unique identifier for each category, the identifier for parent categories, the name of the category, and metadata like the last modification date. Questions that can be answered using this entity include identifying all product categories, understanding the hierarchical structure of product categories, and tracking when categories were last updated.", + "EntityName": "Product Category Data", "Database": "AdventureWorksLT", "Warehouse": null, "EntityRelationships": [ @@ -17,10 +17,6 @@ { "ForeignEntity": "SalesLT.ProductCategory", "ForeignKeys": [ - { - "Column": "ParentProductCategoryID", - "ForeignColumn": "ProductCategoryID" - }, { "Column": "ParentProductCategoryID", "ForeignColumn": "ProductCategoryID" @@ -33,6 +29,7 @@ } ], "CompleteEntityRelationshipsGraph": [ + "SalesLT.ProductCategory -> SalesLT.ProductCategory", "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", "SalesLT.ProductCategory -> SalesLT.Product -> SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address" @@ -41,20 +38,20 @@ { "Name": "ProductCategoryID", "DataType": "int", - "Definition": "The ProductCategoryID column in the SalesLT.ProductCategory entity contains unique numeric identifiers for different product categories. Each value in this column corresponds to a specific category of products within the database. The values are integers and appear to be system-generated for internal categorization purposes. This column is used to link products to their respective categories efficiently.", + "Definition": "The ProductCategoryID column in the SalesLT.ProductCategory entity contains unique identifiers for different product categories. Each value represents a specific category of products within the database. These identifiers are numeric and typically range from single-digit to multi-digit numbers. The values in this column are used to categorize and differentiate products for organization and retrieval purposes.", "AllowedValues": null, "SampleValues": [ - 21, - 26, - 31, - 41, - 37 + 24, + 36, + 25, + 9, + 10 ] }, { "Name": "ParentProductCategoryID", "DataType": "int", - "Definition": "The ParentProductCategoryID column in the SalesLT.ProductCategory entity contains identifiers that reference the parent product categories. Each value in this column is a foreign key that links to the ID of a parent product category within the same table, defining hierarchical relationships between product categories. The values are integers that represent the unique identifier of a parent category, facilitating the organization of products into nested categories for better categorization and lookup.", + "Definition": "The ParentProductCategoryID column in the SalesLT.ProductCategory entity contains numerical identifiers that represent the parent product category ID for each product category. These values are integers and indicate a hierarchical structure within product categories, where each ID points to another category that serves as its parent in the hierarchy. The column helps to establish and navigate the relationships between broader and more specific product categories.", "AllowedValues": null, "SampleValues": [ 4, @@ -66,37 +63,37 @@ { "Name": "Name", "DataType": "nvarchar", - "Definition": "The Name column in the SalesLT.ProductCategory entity contains the names of product categories. These names are descriptive titles that classify and organize the various products sold, such as types of cycling gear and accessories. Each value is a string and represents a distinct category name within the product catalog, facilitating easier identification and grouping of related products.", + "Definition": "The Name column in the SalesLT.ProductCategory entity contains the names of various product categories. The values are descriptive terms representing different categories of products sold, such as types of accessories, apparel, and bicycle parts. The names are generally concise, composed of one or two words, and provide a quick reference to the type of product group.", "AllowedValues": null, "SampleValues": [ - "Helmets", - "Cranksets", - "Accessories", - "Pumps", - "Gloves" + "Locks", + "Jerseys", + "Road Frames", + "Components", + "Wheels" ] }, { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.ProductCategory entity contains unique identifiers for each product category in the format of a GUID (Globally Unique Identifier). These values are used to uniquely identify records and ensure that each entry is distinct. The GUID values are in the standard format, which includes a series of hexadecimal digits separated by hyphens.", + "Definition": "The rowguid column in the SalesLT.ProductCategory entity contains unique identifier values (GUIDs) for each product category. The values are in the standard 36-character UUID format, which includes alphanumeric characters separated by hyphens. This column is typically used to ensure each product category entry has a globally unique identifier for database operations and synchronization purposes. The GUID format aids in preventing duplication and maintaining data integrity across systems.", "AllowedValues": null, "SampleValues": [ - "4624B5CE-66D6-496B-9201-C053DF3556CC", - "000310C0-BCC8-42C4-B0C3-45AE611AF06B", + "43B445C8-B820-424E-A1D5-90D81DA0B46F", + "6D24AC07-7A84-4849-864A-865A14125BC9", "5515F857-075B-4F9A-87B7-43B4997077B3", - "954178BA-624F-42DB-95F6-CA035F36D130", - "D43BA4A3-EF0D-426B-90EB-4BE4547DD30C" + "5DEB3E55-9897-4416-B18A-515E970BC2D1", + "A9E54089-8A1E-4CF5-8646-E3801F685934" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.ProductCategory entity contains timestamp values indicating the date and time when a record was last updated. The format follows the YYYY-MM-DD HH:MM:SS pattern. Each entry corresponds to the precise moment a modification was made to a product category within the database. This column is useful for tracking changes and maintaining the historical integrity of data records.", + "Definition": "The ModifiedDate column in the SalesLT.ProductCategory entity contains timestamps indicating the last date and time a product category record was modified. The values in this column are in the datetime format 'YYYY-MM-DD HH:MM:SS' and include both date and time components down to the second. This column is useful for tracking changes and updates to product category records over time.", "AllowedValues": null, "SampleValues": [ "2002-06-01 00:00:00" ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductDescription.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductDescription.json index 3ee86cf..b5c36eb 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductDescription.json @@ -1,7 +1,7 @@ { "Entity": "SalesLT.ProductDescription", - "Definition": "The SalesLT.ProductDescription entity contains information about product descriptions including unique identifiers, descriptive text, a globally unique identifier (rowguid), and the date when the record was last modified. This entity is useful for retrieving detailed textual descriptions of products, tracking changes over time to descriptions, and ensuring each product description has a unique identifier. Questions that can be answered using this entity include finding the description of a specific product, understanding when a product description was last updated, and ensuring data consistency with the unique identifiers.", - "EntityName": "Product Description Information", + "Definition": "The SalesLT.ProductDescription entity contains details about product descriptions used in a sales database. It uniquely identifies each product description with a ProductDescriptionID, stores the actual description text, and includes metadata such as a unique rowguid and the date the record was last modified. This entity can be used to answer questions related to the specific descriptions of products, track historical changes to product descriptions, or generate reports that include detailed product information for sales and marketing purposes.", + "EntityName": "Product Descriptions", "Database": "AdventureWorksLT", "Warehouse": null, "EntityRelationships": [ @@ -24,46 +24,46 @@ { "Name": "ProductDescriptionID", "DataType": "int", - "Definition": "The ProductDescriptionID column in the SalesLT.ProductDescription entity contains unique numeric identifiers for each product description. The values are integers and are likely assigned sequentially or in a specific order to ensure each product description has a distinct identifier. This column is used to uniquely distinguish one product description from another.", + "Definition": "The ProductDescriptionID column in the SalesLT.ProductDescription entity contains unique numeric identifiers for each product description. Each value in this column is an integer that serves as a primary key to distinguish one product description from another. The values do not follow a specific format other than being positive integers and are used to reference specific product descriptions within the database.", "AllowedValues": null, "SampleValues": [ - 1909, - 1471, - 321, - 847, - 594 + 1569, + 1832, + 1763, + 1707, + 2003 ] }, { "Name": "Description", "DataType": "nvarchar", - "Definition": "The Description column in the SalesLT.ProductDescription entity contains textual descriptions of various products. These descriptions detail the features, uses, or benefits of the products and can be written in multiple languages. The content varies widely, including information about the product's material, functionality, design, and additional features. This column helps provide customers with a better understanding of what each product offers.", + "Definition": "The Description column in the SalesLT.ProductDescription entity contains detailed product descriptions in various languages. These descriptions provide specific information about the product\u2019s features and benefits, such as durability, functionality, and design. The descriptions appear to cater to a global market, offering text in languages like Chinese, Arabic, Thai, English, and French. This diversity indicates that the column is used to store localized product descriptions for different regions or customer bases.", "AllowedValues": null, "SampleValues": [ - "\u0646\u0627\u0642\u0644 \u0633\u0631\u0639\u0627\u062a \u0645\u0635\u0646\u0648\u0639 \u0645\u0646 \u0627\u0644\u0623\u0644\u0648\u0645\u0646\u064a\u0648\u0645 \u0630\u0648 \u0639\u0634\u0631 \u0633\u0631\u0639\u0627\u062a \u0645\u0639 \u0645\u062d\u0627\u0645\u0644 \u0628\u0643\u0631\u0627\u062a \u0645\u063a\u0644\u0642\u0629.", - "Unique shape provides easier reach to the levers.", - "\u00c9clairage peu on\u00e9reux pour la conduite de nuit\u00a0- utilise 3 piles\u00a0AAA.", - "\u0645\u0635\u062f\u0627\u062a \u0645\u0637\u0627\u0637\u064a\u0629 \u062a\u0645\u062a\u0635 \u0627\u0644\u0635\u062f\u0645\u0627\u062a.", - "Versatile 70 oz hydration pack offers extra storage, easy-fill access, and a waist belt." + "\u94a2\u4e1d\u6491\u8f6e\u5708\u5916\u80ce\u7684\u4ef7\u683c\u4fbf\u5b9c\uff0c\u8f6e\u80ce\u9762\u5374\u4e0e\u4ef7\u683c\u66f4\u8d35\u7684\u8f6e\u80ce\u540c\u6837\u51fa\u8272\u3002", + "\u0644\u0639\u0627\u0634\u0642\u064a \u0642\u064a\u0627\u062f\u0629 \u0627\u0644\u062f\u0631\u0627\u062c\u0627\u062a \u0641\u064a \u0627\u0644\u0645\u0645\u0631\u0627\u062a \u063a\u064a\u0631 \u0627\u0644\u0645\u0645\u0647\u062f\u0629. \u062f\u0631\u0627\u062c\u0629 \u0634\u062f\u064a\u062f\u0629 \u0627\u0644\u062a\u062d\u0645\u0644 \u064a\u0645\u0643\u0646\u0643 \u0627\u0644\u0627\u0646\u0637\u0644\u0627\u0642 \u0628\u0647\u0627 \u0625\u0644\u0649 \u0623\u064a \u0645\u0643\u0627\u0646 \u0628\u0645\u0627 \u062a\u0648\u0641\u0631\u0647 \u0644\u0643 \u0645\u0646 \u062a\u062d\u0643\u0645 \u0639\u0644\u0649 \u0627\u0644\u0637\u0631\u0642 \u0627\u0644\u0648\u0639\u0631\u0629\u060c \u0643\u0644 \u0647\u0630\u0627 \u062f\u0648\u0646 \u0623\u0646 \u062a\u062a\u062c\u0627\u0648\u0632 \u0645\u064a\u0632\u0627\u0646\u064a\u062a\u0643.", + "\u0e01\u0e32\u0e23\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a\u0e17\u0e35\u0e48\u0e21\u0e31\u0e48\u0e19\u0e04\u0e07 \u0e23\u0e31\u0e1a\u0e41\u0e23\u0e07\u0e01\u0e23\u0e30\u0e41\u0e17\u0e01\u0e41\u0e25\u0e30\u0e43\u0e2b\u0e49\u0e01\u0e32\u0e23\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e17\u0e35\u0e48\u0e41\u0e21\u0e48\u0e19\u0e22\u0e33", + "Triple crankset; alumunim crank arm; flawless shifting.", + "Un v\u00e9ritable v\u00e9lo multi-sports, qui offre une conduite optimis\u00e9e et une ligne r\u00e9volutionnaire. Sa ligne a\u00e9rodynamique vous permet de l'utiliser en course et ses vitesses de gravir les cols." ] }, { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The column contains a list of globally unique identifiers (GUIDs) in the standard format. Each GUID is a 128-bit number used to uniquely identify entities and consists of alphanumeric characters separated by hyphens in a specific pattern. This ensures that each value within the column is unique, which can be useful for tracking and referencing specific product descriptions in the SalesLT.ProductDescription entity.", + "Definition": "The rowguid column in the SalesLT.ProductDescription entity contains unique identifier values for each product description. These values are in the form of GUIDs (Globally Unique Identifiers), ensuring that each entry is distinct and can be reliably used to identify and reference specific product descriptions within the database. The pattern of the sample values indicates they are in the standard 36-character GUID format, including hyphens separating sections of hexadecimal digits.", "AllowedValues": null, "SampleValues": [ - "F016E3D7-6177-43A3-8BFF-160320966471", - "1B31B030-D5D5-45C5-AEA1-91A98317AE94", - "6243C374-FF8B-4E2B-AB4C-8BD40F723619", - "132DC806-E073-4C86-8EB8-7EB04E1193A6", - "EA772412-6369-4416-9CC9-C1A5D1FF9C52" + "A400C418-2DEF-490D-98BB-BDF8B7D47853", + "4F5E9527-565D-462E-88C0-6453FE86EA7A", + "853B8535-E4A6-4C17-B2AC-9E05DA2D6ECD", + "E11A3C2A-B074-48F9-8226-16D65C2F91C2", + "07ADF9DE-A65D-46D3-9FE3-4F7D49691066" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.ProductDescription entity contains the date and time when the product description was last modified. The values in this column follow the datetime format, which includes both the date and time down to fractions of a second. This column is typically used for tracking changes and ensuring data accuracy by recording when an update was made to each product description.", + "Definition": "The ModifiedDate column in the SalesLT.ProductDescription entity contains the date and time when the product description record was last updated. The values are in the format of YYYY-MM-DD HH:MM:SS.nnnnnn, which includes the date followed by the time down to microseconds. This column helps track changes and updates to the product description records over time.", "AllowedValues": null, "SampleValues": [ "2008-03-11 10:32:17.973000", @@ -71,4 +71,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModel.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModel.json index bcdf200..724116b 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModel.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModel.json @@ -1,6 +1,6 @@ { "Entity": "SalesLT.ProductModel", - "Definition": "The SalesLT.ProductModel entity contains information about different product models available within an organization. It includes details such as the unique identifier for each product model, the name of the model, and a description that is typically used in catalogs. Additionally, it records metadata such as a globally unique identifier (rowguid) and the last modified date. This entity can be used to answer questions related to the characteristics and descriptions of product models, as well as track modifications made to these models over time.", + "Definition": "The SalesLT.ProductModel entity contains information about different product models within a company's product catalog. It includes details such as the unique identifier for each product model, the name of the product model, and a description of the product model as listed in the catalog. This entity also includes a globally unique identifier and the date the record was last modified. Questions that can be answered using this entity include identifying product model names, retrieving specific product model descriptions, and tracking the last modification dates of product models.", "EntityName": "Product Model Information", "Database": "AdventureWorksLT", "Warehouse": null, @@ -8,10 +8,6 @@ { "ForeignEntity": "SalesLT.Product", "ForeignKeys": [ - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - }, { "Column": "ProductModelID", "ForeignColumn": "ProductModelID" @@ -21,14 +17,6 @@ { "ForeignEntity": "SalesLT.ProductModelProductDescription", "ForeignKeys": [ - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - }, - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - }, { "Column": "ProductModelID", "ForeignColumn": "ProductModelID" @@ -46,61 +34,61 @@ { "Name": "ProductModelID", "DataType": "int", - "Definition": "The ProductModelID column in the SalesLT.ProductModel entity contains numerical identifiers for different product models. Each value represents a unique product model in the database. The column is used to distinguish between various product models and links to product details and specifications. The values are integers and are likely used as primary keys or foreign keys in related tables for data integrity and relational mapping.", + "Definition": "The ProductModelID column in the SalesLT.ProductModel entity contains unique identifier numbers for different product models. These values are integers and are used to distinguish and reference various product models within the database. Each product model has a distinct ProductModelID which is used in various queries and joins to uniquely identify the model.", "AllowedValues": null, "SampleValues": [ + 13, + 57, + 95, 20, - 77, - 16, - 30, - 25 + 117 ] }, { "Name": "Name", "DataType": "nvarchar", - "Definition": "The column contains the names of different product models in a sales product database. The names often include descriptive components such as the type of product (e.g., 'Road,' 'Mountain') and numerical or specific identifiers (e.g., '750,' '200'). These names appear to follow a pattern combining text and numbers, providing a unique identifier for each product model. The values are primarily used for identifying and categorizing various product models within the sales inventory.", + "Definition": "The Name column in the SalesLT.ProductModel entity contains names of product models. These names typically include descriptive terms related to the product type and often feature a combination of words and numbers. The values may include elements such as the product category, model specifications, or unique identifiers. The format of the names varies, ranging from simple descriptive names to more specific and detailed descriptions.", "AllowedValues": null, "SampleValues": [ + "Touring Tire", + "Sport-100", "Road-750", - "LL Road Tire", - "Road-250", - "Mountain-200", - "Mountain-300" + "LL Mountain Seat/Saddle 1", + "All-Purpose Bike Stand" ] }, { "Name": "CatalogDescription", "DataType": "xml", - "Definition": "The CatalogDescription column in the SalesLT.ProductModel entity contains descriptive text about the product model, designed for use in catalogs or marketing materials. This column typically includes information such as features, specifications, and benefits of the product model. It is formatted as XML data to allow for structured and detailed descriptions. This data helps customers make informed purchasing decisions by providing them with comprehensive product information.", + "Definition": "The CatalogDescription column in the SalesLT.ProductModel entity contains textual data that provides a detailed description of the product models available in the catalog. This includes information such as features, specifications, and usage details, which helps customers understand the product better. The data in this column is typically lengthy and formatted in XML or JSON to support rich text descriptions. This column is useful for generating product literature and online catalog pages.", "AllowedValues": null, "SampleValues": null }, { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.ProductModel entity contains unique identifier values (UUID/GUID) for each row. These values are in a standard UUID format which is typically used for ensuring the uniqueness of records across tables and databases. The values are 36-character strings including hyphens, grouped in a pattern such as 8-4-4-4-12 characters. This column is likely used for ensuring data integrity and for uniquely identifying each product model in the SalesLT.ProductModel table.", + "Definition": "The rowguid column in the SalesLT.ProductModel entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). These GUIDs are used to ensure that each record in the ProductModel table can be uniquely identified across different tables, databases, and servers, providing a reliable way to distinguish each product model entry. The values follow the standard GUID format, consisting of 32 hexadecimal characters separated by hyphens into five groups.", "AllowedValues": null, "SampleValues": [ - "AA77697C-6D1C-48F1-845C-3CB089498715", - "699C2AC5-5406-46D2-863D-DCFB23FC7943", - "DDC67A2F-024A-4446-9B54-3C679BABA708", - "35677B42-72CA-4D9E-A966-DD874B83EF45", - "2771D2D2-2E35-4C12-966E-CE9070DF6D53" + "D71BD21C-239E-4C2B-98A3-101962D6B2D3", + "3CDF61D6-6209-436F-B235-82E8F159208B", + "3494E8FF-7DAF-4860-ABF6-97842048E272", + "E7B00DFF-8136-4947-B503-994584CC89E7", + "0434F63A-A361-4D0B-A9FC-8AC2A866CE85" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.ProductModel entity contains timestamp values indicating the date and time when a record was last updated. The values follow the standard datetime format, typically including year, month, day, hour, minute, second, and fractional seconds. This column is used to track changes and modifications made to each product model record over time.", + "Definition": "The ModifiedDate column in the SalesLT.ProductModel entity contains timestamp values indicating the date and time when each product model record was last modified. The values follow the standard SQL datetime format, including both date and time components, down to fractions of a second. This column is likely used to track changes and updates to product model records for auditing purposes.", "AllowedValues": null, "SampleValues": [ - "2006-06-01 00:00:00", - "2009-05-16 16:34:29.043000", "2009-05-16 16:34:29.010000", - "2007-06-01 00:00:00", - "2005-06-01 00:00:00" + "2005-06-01 00:00:00", + "2002-05-02 00:00:00", + "2009-05-16 16:34:29.027000", + "2009-05-16 16:34:29.043000" ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModelProductDescription.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModelProductDescription.json index 473765f..36914b3 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModelProductDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.ProductModelProductDescription.json @@ -1,7 +1,7 @@ { "Entity": "SalesLT.ProductModelProductDescription", - "Definition": "The SalesLT.ProductModelProductDescription entity represents the relationship between product models and their descriptions, capturing the cultural variations of the product descriptions. It includes identification details of product models and descriptions, along with cultural information that specifies the language and region for the description. Questions that can be answered using this entity include finding product descriptions based on cultural context, associating product models with their respective descriptions, and tracking the modifications made to product descriptions over time.", - "EntityName": "Product Model and Description Data", + "Definition": "The SalesLT.ProductModelProductDescription entity links product models to their descriptions across different cultures. It holds data about the association between a product model and its corresponding description, including which language or culture the description pertains to. This entity is useful for answering questions related to the multilingual descriptions of product models, tracking modifications, and ensuring cultural relevance in product information.", + "EntityName": "Product Model and Description Association", "Database": "AdventureWorksLT", "Warehouse": null, "EntityRelationships": [ @@ -17,10 +17,6 @@ { "ForeignEntity": "SalesLT.ProductModel", "ForeignKeys": [ - { - "Column": "ProductModelID", - "ForeignColumn": "ProductModelID" - }, { "Column": "ProductModelID", "ForeignColumn": "ProductModelID" @@ -38,63 +34,63 @@ { "Name": "ProductModelID", "DataType": "int", - "Definition": "The ProductModelID column in the SalesLT.ProductModelProductDescription entity contains numerical identifiers that represent different product models. Each ID is unique and corresponds to a specific product model within the database. The values in this column are integers and do not follow a specific pattern beyond being unique identifiers. These IDs are used to link product models with their descriptions and other related information.", + "Definition": "The ProductModelID column in the SalesLT.ProductModelProductDescription entity contains numeric identifiers that correspond to specific product models. Each unique ProductModelID represents a distinct product model and is used to link product descriptions to their respective models. The values are integers, and they appear to be sequential, serving as foreign keys to other related tables that provide additional details about the product models.", "AllowedValues": null, "SampleValues": [ - 78, - 27, - 55, - 22, - 35 + 1, + 91, + 47, + 3, + 40 ] }, { "Name": "ProductDescriptionID", "DataType": "int", - "Definition": "The ProductDescriptionID column in the SalesLT.ProductModelProductDescription entity contains unique numeric identifiers assigned to different product descriptions. Each value in this column corresponds to a specific product description and ensures that each description can be uniquely referenced in the database. The values are integer numbers, and there is no specific pattern or standard format beyond being unique identifiers.", + "Definition": "The ProductDescriptionID column in the SalesLT.ProductModelProductDescription entity contains unique numeric identifiers for product descriptions. These identifiers are used to link specific product models to their respective descriptions in the database. The values are integers with no apparent pattern, indicating each product description's distinct entry in the system.", "AllowedValues": null, "SampleValues": [ - 1649, - 1665, - 554, - 1910, - 1929 + 1799, + 1862, + 1905, + 1825, + 1426 ] }, { "Name": "Culture", "DataType": "nchar", - "Definition": "The Culture column in the SalesLT.ProductModelProductDescription entity contains culture or locale codes representing different languages and regions. These codes are often in the format of a two-letter language code, optionally followed by a hyphen and a variant or region code, indicating specific language and region combinations. For example, 'en' represents English, 'fr' represents French, and 'zh-cht' represents Traditional Chinese. These codes help in identifying and managing product descriptions in multiple languages and locales.", + "Definition": "The Culture column in the SalesLT.ProductModelProductDescription entity contains codes representing different cultures or languages. The values follow an abbreviation format, where some are two-letter language codes (e.g., 'he' for Hebrew, 'fr' for French, 'th' for Thai) and others follow a language-region format (e.g., 'zh-cht' for Traditional Chinese). These codes are used to indicate the language in which the product description is provided.", "AllowedValues": null, "SampleValues": [ - "ar ", + "he ", "fr ", - "th ", "zh-cht", - "en " + "th ", + "ar " ] }, { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.ProductModelProductDescription entity contains unique identifier values in the form of GUIDs (Globally Unique Identifiers). These values are 36-character strings, including hyphens, and follow the typical GUID format such as CBD361D0-B753-439C-86C8-11BA0ED91BB2. Each value is distinct and is used to uniquely identify a row within the table.", + "Definition": "The column rowguid in the SalesLT.ProductModelProductDescription entity contains globally unique identifier (GUID) values in the standard 36-character format. These values are used to uniquely identify each record in the table and ensure that each record can be distinctly referenced. The GUIDs are generated in a standard format that includes hexadecimal characters separated by hyphens. This column helps maintain the uniqueness of records across the database and may be used for tasks that require unique entity identification.", "AllowedValues": null, "SampleValues": [ - "CBD361D0-B753-439C-86C8-11BA0ED91BB2", - "EC20F340-5E99-4360-86D1-543273A1EE7D", - "10BBC606-98EF-4B02-93AE-ADFD6AC4B59A", - "50018DBD-0A1B-42D3-B258-813FE1738731", - "6C85FBF6-C8C2-4A7D-8851-8C3220A6EB5E" + "C07515EF-9092-4BDD-BA2A-A49AB7FD98D3", + "284B8A07-645B-48EB-B4C0-F8EAE2A44DDB", + "C00AB8B7-1451-4A28-AF77-621A2D6F0674", + "77117A9F-3529-4E90-965A-17F306A5A6C7", + "40B7B7EF-0816-4BD2-A9A8-D7533D635D16" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.ProductModelProductDescription entity contains timestamp values indicating the date and time when the record was last modified. The timestamps follow the YYYY-MM-DD HH:MM:SS format, which is common in SQL datetime data types. This column helps track changes and updates to the product model descriptions within the database, allowing for auditing and historical analysis of modifications.", + "Definition": "The ModifiedDate column in the SalesLT.ProductModelProductDescription entity contains the date and time when the corresponding record was last updated. The values are in the format 'YYYY-MM-DD HH:MM:SS' which includes both the date and the precise time of modification. This provides a time-stamp for tracking changes to the records and ensuring data is current as of the last update.", "AllowedValues": null, "SampleValues": [ "2007-06-01 00:00:00" ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderDetail.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderDetail.json index 6109234..37d7cdf 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderDetail.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderDetail.json @@ -1,7 +1,7 @@ { "Entity": "SalesLT.SalesOrderDetail", - "Definition": "The SalesLT.SalesOrderDetail entity contains detailed information about individual items within a sales order. Each record represents a specific product ordered, including its quantity, unit price, any applicable discount, and the total line amount for that product. This entity can be used to answer questions related to the contents of sales orders, such as identifying which products were sold, the quantity of each product ordered, pricing details, and discounts applied. It is useful for analyzing order composition, calculating total sales revenue, and tracking order modifications.", - "EntityName": "Sales Order Details", + "Definition": "The SalesLT.SalesOrderDetail entity contains detailed information about individual items within sales orders. This entity includes data on the sales order ID, the specific details of each order item such as quantity, product ID, unit price, and any discounts applied. It also includes calculated fields such as the line total for each order item. This entity can be used to answer questions related to the specifics of sales transactions, such as which products were purchased in each order, the quantity of each product ordered, and the total price of each order item.", + "EntityName": "Sales Line Items Information", "Database": "AdventureWorksLT", "Warehouse": null, "EntityRelationships": [ @@ -17,10 +17,6 @@ { "ForeignEntity": "SalesLT.SalesOrderHeader", "ForeignKeys": [ - { - "Column": "SalesOrderID", - "ForeignColumn": "SalesOrderID" - }, { "Column": "SalesOrderID", "ForeignColumn": "SalesOrderID" @@ -38,72 +34,72 @@ { "Name": "SalesOrderID", "DataType": "int", - "Definition": "The SalesOrderID column in the SalesLT.SalesOrderDetail entity contains unique identifiers for each sales order. These values are integers and are likely automatically generated. Each SalesOrderID associates a sales order with its specific details, enabling tracking and management of sales transactions within the database. The column ensures that each sales order detail can be linked back to its corresponding sales order in the system.", + "Definition": "The SalesOrderID column in the SalesLT.SalesOrderDetail entity contains unique numerical identifiers for each sales order. Each value represents a specific sales order, ensuring that each order can be individually referenced and tracked. The values are in a sequential numeric format, indicating the progression and uniqueness of each sales transaction within the database.", "AllowedValues": null, "SampleValues": [ - 71895, - 71898, - 71902, - 71846, - 71935 + 71938, + 71784, + 71935, + 71923, + 71946 ] }, { "Name": "SalesOrderDetailID", "DataType": "int", - "Definition": "The SalesOrderDetailID column in the SalesLT.SalesOrderDetail entity contains unique identifier values for each sales order detail record. The values in this column are numeric and appear to be sequentially assigned, acting as a primary key for the sales order details. Each value represents a specific line item within a sales order, ensuring that each record can be uniquely identified and referenced.", + "Definition": "The SalesOrderDetailID column in the SalesLT.SalesOrderDetail entity contains unique identifier values for each sales order detail record. The values are numeric and are used to distinguish each order detail entry within the database. These identifiers are essential for maintaining data integrity and enabling efficient querying and data manipulation within the sales order system.", "AllowedValues": null, "SampleValues": [ - 110741, - 111031, - 113140, - 113246, - 113254 + 110735, + 113231, + 110686, + 113257, + 113307 ] }, { "Name": "OrderQty", "DataType": "smallint", - "Definition": "The OrderQty column in the SalesLT.SalesOrderDetail entity contains numerical values representing the quantity of items ordered in each sales transaction. The values are integers and typically reflect the number of units of a product ordered in a specific sales order detail. This column helps in understanding the volume of items being purchased in individual transactions.", + "Definition": "The OrderQty column in the SalesLT.SalesOrderDetail entity contains the quantity of items ordered for each sales order detail. This column represents integer values indicating how many units of a product were included in a specific order. The values are numeric and can vary, showing the specific amount ordered for each line item within a sales order.", "AllowedValues": null, "SampleValues": [ - 10, - 13, - 25, - 14, - 12 + 11, + 9, + 16, + 23, + 1 ] }, { "Name": "ProductID", "DataType": "int", - "Definition": "The ProductID column in the SalesLT.SalesOrderDetail entity contains unique numeric identifiers for products associated with sales orders. Each value represents a specific product in the product catalog. The values are integers and are used to link each sales order detail to its corresponding product.", + "Definition": "The ProductID column in the SalesLT.SalesOrderDetail entity contains numerical identifiers for products. Each value in this column represents a unique product associated with a sales order detail, used to link sales order records to specific products within the inventory. The identifiers are likely integer numbers and may not follow any specific sequential order.", "AllowedValues": null, "SampleValues": [ - 925, 884, - 797, - 865, - 875 + 961, + 926, + 944, + 896 ] }, { "Name": "UnitPrice", "DataType": "money", - "Definition": "The UnitPrice column in the SalesLT.SalesOrderDetail entity contains the price per unit of items sold. The values are represented as decimal numbers, indicating the cost in a specific currency with four decimal places. This column is used to track the selling price of individual products within each sales order detail.", + "Definition": "The UnitPrice column in the SalesLT.SalesOrderDetail entity contains the unit prices of products sold in individual sales transactions. The values are represented as decimal numbers, likely indicating the price per unit of a product in a given currency. The prices can vary widely depending on the product and its specifications. The decimal format suggests precision is important for these financial values.", "AllowedValues": null, "SampleValues": [ - "24.2940", - "37.1520", - "430.5630", - "158.4300", - "72.1620" + "2.9940", + "72.0000", + "31.5840", + "31.3142", + "40.5942" ] }, { "Name": "UnitPriceDiscount", "DataType": "money", - "Definition": "The UnitPriceDiscount column in the SalesLT.SalesOrderDetail entity contains decimal values representing the discount applied to the unit price of an item in a sales order. The values are expressed as fractions of the unit price, where 1.0000 would represent a 100% discount and 0.0000 indicates no discount. The pattern shows values typically ranging between 0 and 1, representing various percentage discounts applied to the items sold.", + "Definition": "The UnitPriceDiscount column in the SalesLT.SalesOrderDetail entity contains numerical values representing the discount applied to the unit price of a product. The values are in decimal format where each value indicates the proportion of the discount relative to the unit price. For instance, a value of 0.4000 indicates a 40% discount, while a value of 0.0000 indicates no discount.", "AllowedValues": null, "SampleValues": [ "0.4000", @@ -116,37 +112,37 @@ { "Name": "LineTotal", "DataType": "numeric", - "Definition": "The LineTotal column in the SalesLT.SalesOrderDetail entity contains the total cost for each sales order line item. The values are represented as decimal numbers, reflecting the monetary amount in a currency format to several decimal places. This column is used to calculate the total price for individual line items within a sales order, including any applicable discounts or adjustments.", + "Definition": "The LineTotal column in the SalesLT.SalesOrderDetail entity contains the total price for each sales order line item. The values represent the monetary amount calculated by multiplying the unit price by the quantity ordered, potentially including any discounts applied. The values are represented as decimal numbers, which can vary greatly depending on the quantity and price of the items ordered. This column is important for financial and sales reporting within the database.", "AllowedValues": null, "SampleValues": [ - "971.982000", - "149.016000", - "187.872000", - "10.992000", - "111.762000" + "23.952000", + "923.388000", + "218.682000", + "13769.940000", + "269.946000" ] }, { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The column rowguid in the SalesLT.SalesOrderDetail entity contains unique identifier values in the form of globally unique identifiers (GUIDs). Each value in this column is a 36-character string that follows the UUID (universally unique identifier) standard, typically consisting of alphanumeric characters separated by hyphens. This column is used to ensure each row in the table can be uniquely identified across different systems or databases.", + "Definition": "The rowguid column in the SalesLT.SalesOrderDetail entity contains unique identifier values for each sales order detail entry. These values are in the form of GUIDs (Globally Unique Identifiers) which are 128-bit numbers typically represented in hexadecimal and are used to uniquely identify records. This ensures that each entry in the SalesOrderDetail table can be uniquely referenced across any system. The values follow a standard GUID format, e.g., 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'.", "AllowedValues": null, "SampleValues": [ - "6781A019-346F-4F87-A8A3-4727A2528B2E", - "5CA4F84A-BAFE-485C-B7AD-897F741F76CE", - "DA8F6556-76DE-42AD-8A9A-9664B87B3078", - "B9961E3A-66A8-466F-941B-14A6858E1EB3", - "4778038A-7634-44FF-9D24-91B1E4B50A4C" + "281D1C72-EC9A-4E76-93B8-F83217A26A2E", + "BFBD21A7-253A-411A-9FE7-56884370529E", + "686999FB-42E6-4D00-9A14-83FFA86833E3", + "61EFC1C5-71CE-4537-9EDE-723DD776A042", + "FDEDAB25-D27E-4D66-BB57-6A699846C3E9" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.SalesOrderDetail entity contains the date and time when a sales order detail was last modified. The values in this column follow the standard SQL datetime format 'YYYY-MM-DD HH:MM:SS'. This column is used to track changes and updates made to each sales order detail, indicating the most recent modification.", + "Definition": "The ModifiedDate column in the SalesLT.SalesOrderDetail entity contains timestamp values indicating when each record was last updated. The values are in the 'YYYY-MM-DD HH:MI:SS' format. This column helps in tracking the modification history of sales order details. It is essential for auditing and maintaining data integrity by recording the precise date and time of the latest changes.", "AllowedValues": null, "SampleValues": [ "2008-06-01 00:00:00" ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderHeader.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderHeader.json index bd6ae05..9ae9a28 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderHeader.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.SalesOrderHeader.json @@ -1,6 +1,6 @@ { "Entity": "SalesLT.SalesOrderHeader", - "Definition": "The SalesLT.SalesOrderHeader entity contains information about sales orders placed by customers. It includes details such as the order ID, dates related to the order (order date, due date, ship date), the status of the order, and the customer and address information. It also captures payment and shipping details, as well as financial totals like subtotal, tax amount, freight, and total due. This entity is useful for answering questions related to sales order histories, order processing statuses, customer purchase patterns, and financial analysis of sales transactions.", + "Definition": "The SalesLT.SalesOrderHeader entity contains summarized information about each sales order, including details such as order dates, status, shipping information, customer identification, and financial totals. It helps track the progression of a sales order from creation to shipment and invoicing. This entity is useful for answering questions related to sales order processing, such as the status of an order, shipping methods used, customer order details, and the total due amounts for sales transactions.", "EntityName": "Sales Order Information", "Database": "AdventureWorksLT", "Warehouse": null, @@ -8,10 +8,6 @@ { "ForeignEntity": "SalesLT.SalesOrderDetail", "ForeignKeys": [ - { - "Column": "SalesOrderID", - "ForeignColumn": "SalesOrderID" - }, { "Column": "SalesOrderID", "ForeignColumn": "SalesOrderID" @@ -21,10 +17,6 @@ { "ForeignEntity": "SalesLT.Address", "ForeignKeys": [ - { - "Column": "BillToAddressID", - "ForeignColumn": "AddressID" - }, { "Column": "BillToAddressID", "ForeignColumn": "AddressID" @@ -38,10 +30,6 @@ { "ForeignEntity": "SalesLT.Customer", "ForeignKeys": [ - { - "Column": "CustomerID", - "ForeignColumn": "CustomerID" - }, { "Column": "CustomerID", "ForeignColumn": "CustomerID" @@ -59,20 +47,20 @@ { "Name": "SalesOrderID", "DataType": "int", - "Definition": "The SalesOrderID column in the SalesLT.SalesOrderHeader entity contains unique identifiers for each sales order. The values in this column are integers and increment sequentially. This column serves as the primary key for the sales order records, ensuring each sales order can be uniquely identified and referenced within the database.", + "Definition": "The SalesOrderID column in the SalesLT.SalesOrderHeader entity contains unique identifiers for sales orders. These identifiers are numeric and sequential, indicating that each sales order is assigned a unique number upon creation to track and manage individual sales transactions. The values do not follow any specific pattern other than being unique and incrementally assigned.", "AllowedValues": null, "SampleValues": [ - 71917, + 71846, + 71832, + 71938, 71897, - 71796, - 71885, - 71782 + 71923 ] }, { "Name": "RevisionNumber", "DataType": "tinyint", - "Definition": "The RevisionNumber column in the SalesLT.SalesOrderHeader entity represents the version or revision of the sales order. Each time an order is modified, the RevisionNumber is incremented to indicate the most recent version. The values in this column are integers and typically start from 0, incrementing by 1 with each revision made to the sales order. This helps in tracking changes and maintaining the history of modifications to a sales order.", + "Definition": "The RevisionNumber column in the SalesLT.SalesOrderHeader entity contains integer values that indicate the number of times a sales order has been revised. This column is used to track changes or updates made to the original sales order after its initial creation. The values in this column help identify the version history of each sales order to maintain an accurate record of modifications. A higher number signifies more revisions have been made.", "AllowedValues": null, "SampleValues": [ 2 @@ -81,7 +69,7 @@ { "Name": "OrderDate", "DataType": "datetime", - "Definition": "The OrderDate column in the SalesLT.SalesOrderHeader entity contains the date and time when each sales order was placed. The values are represented in the standard SQL datetime format, typically including both the date and the time in the format 'YYYY-MM-DD HH:MM:SS'. This column is used to track and record the exact timestamp of each sales transaction.\n", + "Definition": "The OrderDate column in the SalesLT.SalesOrderHeader entity contains the dates and times when sales orders were placed. The data follows the standard datetime format 'YYYY-MM-DD HH:MM:SS'. This column is used to record the precise date and time for each order, and it may be used for chronological sorting, filtering orders within specific time frames, or analyzing sales trends over time.", "AllowedValues": null, "SampleValues": [ "2008-06-01 00:00:00" @@ -90,7 +78,7 @@ { "Name": "DueDate", "DataType": "datetime", - "Definition": "The DueDate column in the SalesLT.SalesOrderHeader entity contains the date and time by which the sales order is expected to be completed or delivered. The values in this column follow the standard date-time format 'YYYY-MM-DD HH:MI:SS', indicating the specific due date and time. This column is crucial for tracking the expected fulfillment dates of sales orders.", + "Definition": "The DueDate column in the SalesLT.SalesOrderHeader entity contains the date and time by which the sales order is due to be completed or delivered. The values in this column are in the datetime format 'YYYY-MM-DD HH:MM:SS'. This data assists in tracking when sales orders need to be fulfilled by, and ensures timely delivery or completion of orders. Notably, the time portion of the data often appears as '00:00:00', indicating that the primary focus is on the date rather than a specific time of day.", "AllowedValues": null, "SampleValues": [ "2008-06-13 00:00:00" @@ -99,7 +87,7 @@ { "Name": "ShipDate", "DataType": "datetime", - "Definition": "The ShipDate column in the SalesLT.SalesOrderHeader entity contains the dates when sales orders were shipped. The values in this column are stored in a datetime format indicating the precise date and time of shipment. The format includes the year, month, day, hour, minute, and second. This column is used to track and manage the shipment dates of orders for reporting and logistical purposes.", + "Definition": "The ShipDate column in the SalesLT.SalesOrderHeader entity contains the date and time when the shipment of an order was processed. The values in this column are in the datetime format, typically in the YYYY-MM-DD HH:MI:SS layout. This column is used to track when orders have been shipped to customers.", "AllowedValues": null, "SampleValues": [ "2008-06-08 00:00:00" @@ -108,7 +96,7 @@ { "Name": "Status", "DataType": "tinyint", - "Definition": "The Status column in the SalesLT.SalesOrderHeader entity likely indicates the current state or phase of a sales order. The values in this column are numerical and each number represents a specific status code that corresponds to a particular stage in the sales process. For instance, a status value of 5 may represent a specific stage, such as 'completed' or 'shipped', depending on the business context and defined status code mappings. The column helps in tracking and managing the progression of sales orders through different stages from initiation to completion.", + "Definition": "The Status column in the SalesLT.SalesOrderHeader entity represents the current state or condition of the sales order. The values in this column are numeric codes, such as '5', that indicate different statuses of the sales order. These statuses are likely defined by a specific business logic which assigns meaning to each numeric code, identifying different stages in the sales order processing workflow.", "AllowedValues": null, "SampleValues": [ 5 @@ -117,7 +105,7 @@ { "Name": "OnlineOrderFlag", "DataType": "bit", - "Definition": "The OnlineOrderFlag column in the SalesLT.SalesOrderHeader entity indicates whether a sales order was placed online. This column contains boolean values where 'True' denotes an order placed through an online platform, and 'False' indicates an order placed through other means. This flag helps to differentiate between online and offline sales transactions.", + "Definition": "The OnlineOrderFlag column in the SalesLT.SalesOrderHeader entity indicates whether a sales order was placed online or not. The values are typically boolean, with 'True' representing orders placed online and 'False' representing orders not placed online. This column helps to identify the source of the sales order for tracking and analysis purposes.", "AllowedValues": null, "SampleValues": [ false @@ -126,85 +114,85 @@ { "Name": "SalesOrderNumber", "DataType": "nvarchar", - "Definition": "The SalesOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique identifiers for sales orders. Each identifier is prefixed with 'SO' followed by a sequence of digits. This pattern helps distinguish sales orders and makes them easily recognizable and sortable. These sales order numbers are typically used to reference specific transactions throughout the sales and fulfillment processes.", + "Definition": "The SalesOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique alphanumeric identifiers for sales orders. Each sales order number starts with the prefix 'SO' followed by a sequence of digits. This pattern ensures that each sales order can be individually tracked and referenced within the system. The column helps in uniquely identifying and managing sales orders within the database.", "AllowedValues": null, "SampleValues": [ - "SO71923", - "SO71867", - "SO71780", - "SO71815", - "SO71845" + "SO71858", + "SO71936", + "SO71816", + "SO71885", + "SO71867" ] }, { "Name": "PurchaseOrderNumber", "DataType": "nvarchar", - "Definition": "The PurchaseOrderNumber column in the SalesLT.SalesOrderHeader entity contains unique identifiers for purchase orders. The values in this column follow a specific format, starting with the prefix \"PO\" followed by a series of digits. This column is used to track and reference individual purchase orders within the sales order system.", + "Definition": "The PurchaseOrderNumber column in the SalesLT.SalesOrderHeader entity contains alphanumeric codes representing unique purchase order numbers assigned to each sales order. The values follow a pattern that starts with the prefix 'PO' followed by a sequence of digits. These purchase order numbers are used to track and reference sales transactions.", "AllowedValues": null, "SampleValues": [ - "PO17052159664", - "PO5713190501", - "PO2378131604", - "PO5539125166", - "PO6119130779" + "PO29111718", + "PO3770176273", + "PO8671170385", + "PO10353140756", + "PO2697119362" ] }, { "Name": "AccountNumber", "DataType": "nvarchar", - "Definition": "The AccountNumber column in the SalesLT.SalesOrderHeader entity contains a unique identifier for each sales order, formatted as a string with numeric sections separated by hyphens. The format appears to be consistent, following a pattern of '10-4020-XXXXXX' where 'X' represents a series of digits. This standardized format helps in maintaining a structured and organized system for referencing sales orders.", + "Definition": "The AccountNumber column in the SalesLT.SalesOrderHeader entity contains alphanumeric identifiers for customer accounts. The values follow a specific pattern, typically consisting of a numeric sequence formatted as '10-4020-XXXXXX', where 'XXXXXX' is a unique six-digit number. This column is used to link sales orders to particular customer accounts within the system.", "AllowedValues": null, "SampleValues": [ + "10-4020-000649", + "10-4020-000223", + "10-4020-000502", "10-4020-000276", - "10-4020-000088", - "10-4020-000304", - "10-4020-000016", - "10-4020-000006" + "10-4020-000609" ] }, { "Name": "CustomerID", "DataType": "int", - "Definition": "The CustomerID column in the SalesLT.SalesOrderHeader entity contains unique identifiers for customers who made purchases. The values are integers and each number corresponds to a specific customer in the database. These IDs are used to link sales orders to the respective customers who placed them.", + "Definition": "The CustomerID column in the SalesLT.SalesOrderHeader entity contains unique numeric identifiers assigned to each customer. The values in this column are integers that uniquely distinguish one customer from another within the sales order header records. This column is used to link sales orders to the corresponding customer information. Each CustomerID represents a specific customer in the database.", "AllowedValues": null, "SampleValues": [ - 29584, - 29485, - 29932, - 29957, - 29922 + 29975, + 30113, + 29531, + 29938, + 29584 ] }, { "Name": "ShipToAddressID", "DataType": "int", - "Definition": "The ShipToAddressID column in the SalesLT.SalesOrderHeader entity contains numerical identifiers that correspond to specific shipping addresses within the database. Each value in this column uniquely represents a different address to which sales orders are shipped. This column is used to reference the address details stored in another related table, helping to maintain normalized data and efficient database management. The values are integers and are likely used as foreign keys connecting sales orders to shipping address records.", + "Definition": "The ShipToAddressID column in the SalesLT.SalesOrderHeader entity contains unique identifier numbers for shipping addresses used in sales orders. These identifier numbers are likely assigned sequentially or based on some internal addressing schema. The column facilitates linking each sales order to a specific shipping address within the database. The values in this column are integers and do not follow any externally recognized standard.", "AllowedValues": null, "SampleValues": [ - 1026, - 993, - 1090, - 649, - 669 + 635, + 660, + 992, + 1086, + 649 ] }, { "Name": "BillToAddressID", "DataType": "int", - "Definition": "The BillToAddressID column in the SalesLT.SalesOrderHeader entity contains numeric identifiers that correspond to the addresses where the bills are sent for each sales order. These identifiers are unique and serve as foreign keys linking to an address table, which provides detailed billing address information. Each value in this column uniquely identifies a specific billing address associated with a sales order.", + "Definition": "The BillToAddressID column in the SalesLT.SalesOrderHeader entity contains integer values that represent unique identifiers for billing addresses associated with sales orders. Each value corresponds to a specific address recorded in a related address table. The integers are used to link the sales order records to their respective billing address records, ensuring accurate invoicing and customer identification.", "AllowedValues": null, "SampleValues": [ - 1038, - 640, - 1058, - 1034, - 649 + 652, + 651, + 635, + 669, + 653 ] }, { "Name": "ShipMethod", "DataType": "nvarchar", - "Definition": "The ShipMethod column in the SalesLT.SalesOrderHeader entity contains the shipping method used for delivering the sales orders. This column typically includes the names or identifiers of various shipping carriers or services. Based on the sample value provided, it seems that shipping methods are described in a format that includes a carrier name followed by a numerical identifier or service level. This information is used to indicate how orders are shipped to customers, helping in logistics and tracking.", + "Definition": "The ShipMethod column in the SalesLT.SalesOrderHeader entity contains the names of shipping methods used for orders. The values represent different shipping options available for delivering products to customers. These values are generally descriptive and may include specific transport types or service levels provided by the shipping company. The values typically follow a pattern of descriptive shipping terms like \"CARGO TRANSPORT\" with added numerical identifiers to distinguish various methods.", "AllowedValues": null, "SampleValues": [ "CARGO TRANSPORT 5" @@ -213,90 +201,90 @@ { "Name": "CreditCardApprovalCode", "DataType": "varchar", - "Definition": "The CreditCardApprovalCode column in the SalesLT.SalesOrderHeader entity contains the unique approval codes provided by credit card processors for transactions. These codes confirm that the credit card payment has been authorized and successfully processed for each sales order. The data in this column is typically alphanumeric and linked to individual sales transactions, ensuring that each credit card payment is verified.", + "Definition": "The CreditCardApprovalCode column in the SalesLT.SalesOrderHeader entity contains the approval codes received from credit card companies when a customer's credit card transaction is authorized. This column typically holds alphanumeric strings that represent the unique approval identifier for each transaction. These codes are used to verify that the credit card payment was successfully processed and authorized.", "AllowedValues": null, "SampleValues": [] }, { "Name": "SubTotal", "DataType": "money", - "Definition": "The SubTotal column in the SalesLT.SalesOrderHeader entity contains the pre-tax sales amount for each sales order. These values are represented as decimal numbers indicating the sum of the item prices before any taxes or additional fees are applied. The values vary significantly, indicating a range of sales order totals from small to large amounts.", + "Definition": "The SubTotal column in the SalesLT.SalesOrderHeader entity represents the total amount for a sales order before taxes and shipping are applied. The values in this column are numeric and likely represent monetary amounts with up to four decimal places, indicating precision in the currency calculation. This column is used to calculate the preliminary cost of an order, reflecting the aggregate price of all items included in the order.", "AllowedValues": null, "SampleValues": [ - "106.5408", - "98278.6910", - "78.8100", - "13823.7083", - "1059.3100" + "88812.8625", + "2453.7645", + "2137.2310", + "246.7392", + "74058.8078" ] }, { "Name": "TaxAmt", "DataType": "money", - "Definition": "The TaxAmt column in the SalesLT.SalesOrderHeader entity contains the tax amount applied to each sales order. The values in this column are numeric and represent the monetary amount of tax in a sales transaction. The amounts can vary widely, likely depending on the total sale price and applicable tax rates. This column is essential for financial calculations and reporting related to sales taxes.", + "Definition": "The TaxAmt column in the SalesLT.SalesOrderHeader entity contains the total tax amount applied to each sales order. The values are represented as decimal numbers with up to four decimal places. These amounts indicate the monetary tax applied to the sales order in the corresponding currency of the transaction.", "AllowedValues": null, "SampleValues": [ - "265.9421", - "44.0309", - "1014.8712", - "6708.6741", - "8684.9465" + "19.7391", + "1105.8967", + "8684.9465", + "91.3263", + "1014.8712" ] }, { "Name": "Freight", "DataType": "money", - "Definition": "The Freight column in the SalesLT.SalesOrderHeader entity contains numerical values representing the cost of shipping for each sales order. The values are given in a monetary format with up to four decimal places. These values can vary significantly depending on the size, weight, and destination of the shipment. The column helps track the shipping expenses associated with each order in the sales ledger.", + "Definition": "The Freight column in the SalesLT.SalesOrderHeader entity contains numerical values representing the freight cost associated with each sales order. The values are likely to be in a currency format, indicating the monetary amount charged for shipping and handling. This column includes a wide range of values, reflecting the variability in freight charges depending on factors such as order size, weight, and shipping method. The values can be fractional, showing precision in the cost calculations.", "AllowedValues": null, "SampleValues": [ - "50.4085", - "1599.5247", + "60.3918", + "0.9738", + "1440.8659", "61.3441", - "13.7597", - "84.9541" + "345.5927" ] }, { "Name": "TotalDue", "DataType": "money", - "Definition": "The TotalDue column in the SalesLT.SalesOrderHeader entity represents the total monetary amount due for each sales order. The values in this column are numeric and denote the final amount that needs to be paid, including any taxes and additional charges. The values can vary significantly, reflecting differing sizes and quantities of orders. This column is crucial for financial reporting and analysis related to sales transactions.", + "Definition": "The TotalDue column in the SalesLT.SalesOrderHeader entity contains the final amount payable for a sales order after all calculations, including taxes, discounts, and additional charges, have been applied. The values in this column are expressed as decimal numbers representing monetary amounts. It is used to track the total revenue generated from each sales order and is crucial for financial reporting and analysis.", "AllowedValues": null, "SampleValues": [ - "14017.9083", - "87.0851", - "86222.8072", - "3754.9733", - "608.1766" + "1170.5376", + "108597.9536", + "70698.9922", + "3293.7761", + "14017.9083" ] }, { "Name": "Comment", "DataType": "nvarchar", - "Definition": "The Comment column in the SalesLT.SalesOrderHeader entity contains text notes or remarks related to a specific sales order. These comments are typically entered by sales representatives or customer service personnel to provide additional context or information about the order. The data in this column can include special instructions, customer preferences, or any other relevant details that need to be communicated. This column may also be null if no comments were made for the order.", + "Definition": "The Comment column in the SalesLT.SalesOrderHeader entity contains optional textual notes or remarks provided by customers or sales representatives about specific sales orders. This may include special instructions, delivery notes, or any other relevant information related to the order. The data in this column is typically used to provide additional context or details that are not covered by other columns in the sales order header.", "AllowedValues": null, "SampleValues": [] }, { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The rowguid column in the SalesLT.SalesOrderHeader entity contains unique identifier values for each record in the form of a globally unique identifier (GUID). These GUIDs are typically 128-bit numbers represented as a string of hexadecimal digits in a specific pattern, including dashes. This ensures that every value in the column is unique, which is useful for identifying records distinctly within the table.", + "Definition": "The rowguid column in the SalesLT.SalesOrderHeader entity contains unique identifier values in the UUID/GUID (Universally Unique Identifier/Globally Unique Identifier) format. Each value in this column is a 36-character string including hyphens, following the standard UUID format. This column is likely used to ensure distinctiveness and aid in the unique identification of each sales order record within the database.", "AllowedValues": null, "SampleValues": [ - "31D41E8F-6F43-4CAE-BEE3-3CCCB262F231", - "625D76FC-C26F-4149-BF24-939FB2BCCD77", - "BB3FEE84-C8BF-4DD2-BCCA-675AB6A11C38", - "96F84D24-3355-43D2-B5A3-55E97C17E58C", - "7033C6EC-B12C-45BC-BD96-56EFDE4C7DD0" + "F1BE45A5-5C57-4A50-93C6-5F8BE44CB7CB", + "E3C189E7-98DE-4C40-B6C2-0D1D13F9BB33", + "7DB2329E-6446-42A8-8915-9C8370B68ED8", + "917EF5BA-F32D-4563-8588-66DB0BCDC846", + "BB3FEE84-C8BF-4DD2-BCCA-675AB6A11C38" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.SalesOrderHeader entity contains timestamp values indicating the date and time when each sales order record was last updated. The format of the data is typically in 'YYYY-MM-DD HH:MM:SS'. This column helps track changes and maintain the history of updates made to sales order records.", + "Definition": "The ModifiedDate column in the SalesLT.SalesOrderHeader entity contains the timestamps of when each sales order record was last updated. The data is in the format 'YYYY-MM-DD HH:MM:SS'. This indicates the date and time when changes were made to the respective records in the sales order header. This column helps in tracking the modification history of the sales orders.", "AllowedValues": null, "SampleValues": [ "2008-06-08 00:00:00" ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.vGetAllCategories.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.vGetAllCategories.json index 72cfaa5..9a778b1 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.vGetAllCategories.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.vGetAllCategories.json @@ -1,7 +1,7 @@ { "Entity": "SalesLT.vGetAllCategories", - "Definition": "The SalesLT.vGetAllCategories entity provides information about product categories and subcategories within a sales database. It includes details about the names of parent product categories and their associated subcategories, along with unique identifiers for each product category. This entity can be used to answer questions related to the hierarchical structure of product categories, identifying parent categories for specific subcategories, and organizing products based on their categories.", - "EntityName": "Product Categories Overview", + "Definition": "The SalesLT.vGetAllCategories entity contains information about product categories and their hierarchical relationships. It includes both parent and child product category names as well as unique identifiers for each product category. This entity can be used to answer questions related to the structure and organization of product categories, such as finding all subcategories under a specific parent category or identifying the parent category of a given product category.", + "EntityName": "Product Category Information", "Database": "AdventureWorksLT", "Warehouse": null, "EntityRelationships": [], @@ -10,7 +10,7 @@ { "Name": "ParentProductCategoryName", "DataType": "nvarchar", - "Definition": "The ParentProductCategoryName column in the SalesLT.vGetAllCategories entity contains the names of the top-level categories for products. These categories are broad classifications that group products into overarching segments. Sample values indicate categories such as Components, Clothing, Bikes, and Accessories. The values in this column help in organizing products into major groups for easier identification and management.", + "Definition": "The ParentProductCategoryName column in the SalesLT.vGetAllCategories entity contains the names of the primary categories for products. These categories are broad classifications that group related products together. Sample values indicate that the entries generally represent major product categories, such as Components, Clothing, Bikes, and Accessories. This column helps in identifying and organizing products at a high-level classification within the product hierarchy.", "AllowedValues": null, "SampleValues": [ "Components", @@ -22,28 +22,28 @@ { "Name": "ProductCategoryName", "DataType": "nvarchar", - "Definition": "The ProductCategoryName column in the SalesLT.vGetAllCategories entity contains the names of various product categories. These categories represent different types of products available, likely related to sports or outdoor activities, such as cycling equipment and apparel. The values are generally descriptive names of product categories, ensuring that each category is easily identifiable.", + "Definition": "The ProductCategoryName column in the SalesLT.vGetAllCategories entity contains the names of various product categories. These category names represent different parts and accessories related to cycling, such as bike components and apparel. The values are descriptive and specific to the type of product or accessory they denote. This column helps in categorizing products for better organization and retrieval in the database.", "AllowedValues": null, "SampleValues": [ - "Tights", - "Derailleurs", - "Bike Stands", - "Mountain Bikes", + "Fenders", + "Saddles", + "Handlebars", + "Bottom Brackets", "Vests" ] }, { "Name": "ProductCategoryID", "DataType": "int", - "Definition": "The ProductCategoryID column in the SalesLT.vGetAllCategories entity contains unique numerical identifiers for different product categories. Each value represents a specific category within the product catalog, allowing for the classification and organization of products. These identifiers are likely used as foreign keys to link product data with their respective categories. The values are integers without any specific pattern other than being unique to each category.", + "Definition": "The ProductCategoryID column in the SalesLT.vGetAllCategories entity contains unique numeric identifiers assigned to different product categories. Each number corresponds to a specific category such as clothing, accessories, or equipment. These identifiers are used to distinguish and organize products into their respective categories within the database.", "AllowedValues": null, "SampleValues": [ - 37, + 39, 38, - 8, - 22, - 17 + 17, + 41, + 36 ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductAndDescription.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductAndDescription.json index 33f035d..315c3c4 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductAndDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductAndDescription.json @@ -1,7 +1,7 @@ { "Entity": "SalesLT.vProductAndDescription", - "Definition": "The SalesLT.vProductAndDescription entity provides detailed information about products, including their unique identifier (ProductID), name, product model, and associated descriptions in different cultures. This entity is useful for queries that require product details along with multilingual descriptions. It can answer questions related to product identification, model specifications, and cultural descriptions of products for localization purposes.", - "EntityName": "Product and Description Information", + "Definition": "The SalesLT.vProductAndDescription entity provides a comprehensive view of product information along with their descriptions in different cultures. It includes details such as the product ID and name, the product model, the culture code indicating the language or region, and the product description tailored to that particular culture. This entity is useful for questions related to product details, multilingual product descriptions, and product model information.", + "EntityName": "Product Information and Descriptions", "Database": "AdventureWorksLT", "Warehouse": null, "EntityRelationships": [], @@ -10,67 +10,67 @@ { "Name": "ProductID", "DataType": "int", - "Definition": "The column ProductID in the SalesLT.vProductAndDescription entity contains unique numeric identifiers for each product in the system. Each value in this column represents a specific product and is used to differentiate and reference individual products within the database. The values are whole numbers and there is no specific pattern or order to the numbering.", + "Definition": "The ProductID column in the SalesLT.vProductAndDescription entity contains unique numeric identifiers for each product. The values in this column are whole numbers that serve as primary keys to distinguish individual products in the database. Each number corresponds to a specific product's details and description within the SalesLT.vProductAndDescription entity.", "AllowedValues": null, "SampleValues": [ - 764, - 826, - 986, - 911, - 805 + 995, + 889, + 904, + 909, + 724 ] }, { "Name": "Name", "DataType": "nvarchar", - "Definition": "The Name column in the SalesLT.vProductAndDescription entity contains product names that describe various items. The values typically include the product type and additional attributes such as color, size, or specific model descriptions. The format often involves a combination of text and numbers, indicating various characteristics of the products, such as size in inches or specific variations of the item. This column helps identify and differentiate products within the sales inventory.", + "Definition": "The Name column in the SalesLT.vProductAndDescription entity contains descriptive names of various products. The values include specific product details such as type, model, color, and size. These names are typically composed of multiple parts describing different attributes of the product, often separated by commas or hyphens. The data in this column helps identify and differentiate products based on their unique features and specifications.", "AllowedValues": null, "SampleValues": [ - "Road-750 Black, 44", - "HL Touring Handlebars", - "LL Touring Frame - Yellow, 54", - "Mountain Bike Socks, M", - "HL Road Frame - Black, 48" + "Rear Derailleur", + "Sport-100 Helmet, Red", + "HL Road Frame - Red, 58", + "ML Road Frame - Red, 58", + "LL Road Rear Wheel" ] }, { "Name": "ProductModel", "DataType": "nvarchar", - "Definition": "The ProductModel column in the SalesLT.vProductAndDescription entity contains the names of different product models. These names are generally descriptive of the product and often include details such as the type and specific features of the product. The values can include combinations of product categories, model names, and specific attributes, potentially reflecting variations designed for different uses or specifications. This column helps in identifying and differentiating between various products available in the inventory.", + "Definition": "The ProductModel column in the SalesLT.vProductAndDescription entity contains the names of various product models sold. Each value represents the model name of a product, which can include different types of items such as bicycles and bicycle components. The values are descriptive and may include combinations of letters, numbers, and hyphens to distinguish between different product models. The names are specific and indicative of the product's type or series within a broader category.", "AllowedValues": null, "SampleValues": [ - "ML Mountain Pedal", - "ML Touring Seat/Saddle", - "Road-150", - "Water Bottle", - "HL Mountain Tire" + "All-Purpose Bike Stand", + "Road-450", + "LL Crankset", + "Mountain-200", + "LL Headset" ] }, { "Name": "Culture", "DataType": "nchar", - "Definition": "The Culture column in the SalesLT.vProductAndDescription entity contains language culture codes used to represent specific languages or language variants. These codes typically follow the ISO 639-1 standard for language codes, which use two-letter abbreviations, and can also include additional specifications such as region or script variants. Examples include 'ar' for Arabic, 'he' for Hebrew, 'fr' for French, 'en' for English, and 'zh-cht' for Traditional Chinese. This column helps in identifying the appropriate language or cultural version of the product description.", + "Definition": "The Culture column in the SalesLT.vProductAndDescription entity contains language codes that identify the culture or locale associated with product descriptions. The values follow a pattern of two-letter lowercase codes, which likely correspond to the ISO 639-1 standard for language codes. Examples include 'ar' for Arabic, 'en' for English, 'th' for Thai, 'he' for Hebrew, and 'fr' for French. These codes are used to localize product information for different regions and languages.", "AllowedValues": null, "SampleValues": [ "ar ", - "he ", - "fr ", "en ", - "zh-cht" + "th ", + "he ", + "fr " ] }, { "Name": "Description", "DataType": "nvarchar", - "Definition": "The Description column in the SalesLT.vProductAndDescription entity contains product descriptions in various languages. These descriptions provide details about the products, including their features, uses, and benefits. The text in this column can include phrases that highlight the product's quality, material, design, and specific target audience. The text is generally descriptive and aims to offer potential customers valuable information about the product.", + "Definition": "The Description column in the SalesLT.vProductAndDescription entity contains detailed textual descriptions of various products. These descriptions provide information about the features, specifications, and unique selling points of the products. The values in this column are multilingual, indicating that the product descriptions are available in different languages, catering to a diverse customer base.", "AllowedValues": null, "SampleValues": [ - "\u05d8\u05d1\u05e2\u05ea \u05e0\u05d8\u05d5\u05dc\u05ea \u05ea\u05d1\u05e8\u05d9\u05d2 \u05de\u05e1\u05e4\u05e7\u05ea \u05d0\u05d9\u05db\u05d5\u05ea \u05d1\u05de\u05d7\u05d9\u05e8 \u05d7\u05e1\u05db\u05d5\u05e0\u05d9.", - "\u0623\u0646\u0628\u0648\u0628\u0629 \u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u0623\u063a\u0631\u0627\u0636.", - "\u05de\u05e1\u05d2\u05e8\u05ea \u05d4- HL \u05de\u05d0\u05dc\u05d5\u05de\u05d9\u05e0\u05d9\u05d5\u05dd \u05de\u05e2\u05d5\u05e6\u05d1\u05ea \u05d1\u05d4\u05ea\u05d0\u05de\u05d4 \u05d4\u05df \u05dc\u05de\u05e8\u05d0\u05d4 \u05d8\u05d5\u05d1 \u05d5\u05d4\u05df \u05dc\u05d7\u05d5\u05d6\u05e7; \u05d4\u05d9\u05d0 \u05ea\u05e2\u05de\u05d5\u05d3 \u05d1\u05d0\u05ea\u05d2\u05e8\u05d9\u05dd \u05d4\u05de\u05d7\u05de\u05d9\u05e8\u05d9\u05dd \u05d1\u05d9\u05d5\u05ea\u05e8 \u05e9\u05dc \u05e8\u05db\u05d9\u05d1\u05d4 \u05d9\u05d5\u05de\u05d9\u05d5\u05de\u05d9\u05ea. \u05d2\u05d9\u05e8\u05e1\u05d4 \u05dc\u05d2\u05d1\u05e8\u05d9\u05dd.", - "\u9ad8\u5f3a\u5ea6\u7684\u66f2\u81c2\u3002", - "\u7537\u58eb\u516b\u62fc\u7247\u7ade\u8d5b\u7528\u8fd0\u52a8\u77ed\u88e4 \u2013 \u6c28\u7eb6\u6750\u8d28\u3001\u5f39\u6027\u8170\u5e26\u5e76\u5e26\u817f\u5939\u3002" + "High-performance carbon road fork with curved legs.", + "Chaque cadre est fabriqu\u00e9 artisanalement dans notre atelier de Bordeaux afin d'obtenir le diam\u00e8tre et l'\u00e9paisseur adapt\u00e9s \u00e0 un v\u00e9lo tout-terrain de premier choix. Le cadre en aluminium soud\u00e9 \u00e0 chaud pr\u00e9sente un tube d'un plus grand diam\u00e8tre, afin d'absorber les bosses.", + "\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e40\u0e01\u0e35\u0e22\u0e23\u0e4c\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e19\u0e37\u0e2d\u0e01\u0e27\u0e48\u0e32", + "\u05de\u05db\u05e0\u05e1\u05d9 \u05d2\u05d1\u05e8\u05d9\u05dd \u05e7\u05e6\u05e8\u05d9\u05dd \u05dc\u05ea\u05d7\u05e8\u05d5\u05d9\u05d5\u05ea, 8 \u05d7\u05dc\u05e7\u05d9\u05dd \u2013 \u05e2\u05e9\u05d5\u05d9\u05d9\u05dd \u05e1\u05e4\u05e0\u05d3\u05e7\u05e1 \u05e2\u05dd \u05d7\u05d2\u05d5\u05e8\u05d4 \u05d0\u05dc\u05e1\u05d8\u05d9\u05ea \u05d5\u05d4\u05d9\u05d3\u05d5\u05e7 \u05e8\u05d2\u05dc\u05d9\u05d9\u05dd.", + "\u0e08\u0e38\u0e4a\u0e1a\u0e22\u0e32\u0e07\u0e1c\u0e19\u0e36\u0e01\u0e14\u0e49\u0e27\u0e22\u0e15\u0e19\u0e40\u0e2d\u0e07" ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductModelCatalogDescription.json b/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductModelCatalogDescription.json index 5662f8c..14410f9 100644 --- a/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductModelCatalogDescription.json +++ b/text_2_sql/data_dictionary/generated_samples/SalesLT.vProductModelCatalogDescription.json @@ -1,6 +1,6 @@ { "Entity": "SalesLT.vProductModelCatalogDescription", - "Definition": "The SalesLT.vProductModelCatalogDescription entity holds detailed catalog information about product models for sales analysis. This entity includes descriptions and specifications such as product name, manufacturer details, maintenance information, and product features like materials, colors, and rider experience. It also contains metadata like product URLs, photo IDs, and warranty details. This entity is used to answer questions related to specific product model descriptions, specification comparisons, and catalog presentation for marketing or sales purposes.", + "Definition": "The SalesLT.vProductModelCatalogDescription entity contains detailed descriptions and catalog-specific information about different product models. It includes various attributes such as product names, summaries, manufacturer details, warranty information, maintenance descriptions, and specific features related to bike components. Additionally, it offers visual details like picture angles and sizes, along with meta information such as the date of last modification and unique identifiers. This entity can be used to answer questions related to the detailed characteristics and specifications of products, including their warranty and maintenance information, as well as visual and style attributes.", "EntityName": "Product Model Catalog Description", "Database": "AdventureWorksLT", "Warehouse": null, @@ -10,46 +10,46 @@ { "Name": "ProductModelID", "DataType": "int", - "Definition": "The ProductModelID column in the SalesLT.vProductModelCatalogDescription entity contains numerical identifiers used to uniquely represent different product models. These values are integers that act as keys to distinguish various products within the catalog. Each integer value corresponds to a specific product model, ensuring that each model can be referenced and identified without ambiguity.", + "Definition": "The ProductModelID column in the SalesLT.vProductModelCatalogDescription entity contains numerical identifiers for different product models. These identifiers are used to uniquely distinguish each product model within the database. The values are integers and each number corresponds to a specific product model entry. This column is essential for linking product models to their respective descriptions in the catalog.", "AllowedValues": null, "SampleValues": [ 34, + 28, 35, 25, - 19, 23 ] }, { "Name": "Name", "DataType": "nvarchar", - "Definition": "The Name column in the SalesLT.vProductModelCatalogDescription entity contains a list of product names for different bicycle models. The names typically include a type or style of bicycle followed by a numeric identifier, indicating either a model series or version. The values are generally descriptive and use a combination of letters and numbers to differentiate between various models and styles of bicycles, such as Touring, Road, and Mountain.", + "Definition": "The Name column in the SalesLT.vProductModelCatalogDescription entity contains the names of various product models. The names typically consist of a descriptor followed by a numerical value, which likely indicates the specific model or version of the product. These descriptors often pertain to the type or category of the product, such as \"Touring,\" \"Road,\" or \"Mountain.\"", "AllowedValues": null, "SampleValues": [ - "Touring-1000", "Touring-2000", "Road-450", - "Road-150", - "Mountain-100" + "Mountain-500", + "Touring-1000", + "Road-150" ] }, { "Name": "Summary", "DataType": "nvarchar", - "Definition": "The Summary column in the SalesLT.vProductModelCatalogDescription entity contains brief descriptions of product models, focusing on their key features and benefits. These summaries highlight specific characteristics, performance enhancements, and unique selling points of each product. The text often emphasizes aspects such as design, construction, functionality, and intended use. These descriptions are meant to provide prospective buyers with a quick understanding of what makes each product model appealing and suitable for their needs.", + "Definition": "The Summary column in the SalesLT.vProductModelCatalogDescription entity contains descriptive text summing up the features and benefits of various bicycle models. The summaries highlight key selling points such as design, comfort, performance, and specific components used in each bike. The descriptions are detailed and aim to entice potential customers by emphasizing the unique qualities of each bike model, including aspects like frame material, suspension, gear range, and additional accessories. These summaries are tailored to appeal to a wide range of customers, whether they are looking for competitive racing bikes or comfortable travel bicycles.", "AllowedValues": null, "SampleValues": [ "Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame,super-smooth front suspension, and traction for all terrain. ", + "Travel in style and comfort. Designed for maximum comfort and safety.Wide gear range takes on all hills. High-tech aluminum alloy construction provides durability without added weight. ", + "Suitable for any type of riding, on or off-road.Fits any budget. Smooth-shifting with a comfortable ride. ", "This bike is ridden by race winners. Developed with theAdventure Works Cycles professional race team, it has a extremely lightheat-treated aluminum frame, and steering that allows precision control. ", - "The plush custom saddle keeps you riding all day, and there's plenty of space to add panniers and bike bags to the newly-redesigned carrier.This bike has great stability when fully-loaded. ", - "A true multi-sport bike that offers streamlined riding and a revolutionary design. Aerodynamic design lets you ride with the pros, and the gearing will conquer hilly roads. ", - "Suitable for any type of riding, on or off-road.Fits any budget. Smooth-shifting with a comfortable ride. " + "The plush custom saddle keeps you riding all day, and there's plenty of space to add panniers and bike bags to the newly-redesigned carrier.This bike has great stability when fully-loaded. " ] }, { "Name": "Manufacturer", "DataType": "nvarchar", - "Definition": "The Manufacturer column in the SalesLT.vProductModelCatalogDescription entity contains the names of companies that produce or distribute the products listed in the catalog. In this dataset, it appears to be typically filled with the name \"AdventureWorks,\" which suggests that this column might commonly or exclusively hold the value representing the AdventureWorks company. This column would be used to identify which manufacturer's products are being described in the catalog.", + "Definition": "The Manufacturer column in the SalesLT.vProductModelCatalogDescription entity contains the names of companies that produce or assemble the products listed in the catalog. In the provided sample, the value is \"AdventureWorks,\" which suggests that this column stores the brand or company name responsible for manufacturing the products. The Manufacturer field likely holds text values that identify different manufacturers associated with various product models in the catalog.", "AllowedValues": null, "SampleValues": [ "AdventureWorks" @@ -58,7 +58,7 @@ { "Name": "Copyright", "DataType": "nvarchar", - "Definition": "The Copyright column in the SalesLT.vProductModelCatalogDescription entity contains the year indicating the copyright date for the catalog descriptions of product models. The values in this column follow a four-digit year format, representing the year in which the copyright was established. This column primarily helps in identifying the version or time frame associated with the catalog's descriptions.", + "Definition": "The Copyright column in the SalesLT.vProductModelCatalogDescription entity contains the copyright year of the product model catalog description. The values reflect the year when the copyright was established, presented in a four-digit numerical format. This indicates the time period during which the intellectual property rights for the catalog description were secured.", "AllowedValues": null, "SampleValues": [ "2002" @@ -67,7 +67,7 @@ { "Name": "ProductURL", "DataType": "nvarchar", - "Definition": "The ProductURL column in the SalesLT.vProductModelCatalogDescription entity contains URLs for product information or product pages on the Adventure Works website. The values are formatted as complete web addresses, typically starting with 'HTTP://'. These URLs are used to link to detailed product descriptions or additional resources hosted online. The values follow a standard URL format, ensuring easy access to the product's web page.", + "Definition": "The ProductURL column in the SalesLT.vProductModelCatalogDescription entity contains URLs that link to product pages on the Adventure Works website. The values in this column follow the standard URL format, beginning with 'HTTP://' or 'HTTPS://', followed by the domain name 'www.Adventure-works.com'. This column is used to provide direct access to more detailed information about each product model on the company's website.", "AllowedValues": null, "SampleValues": [ "HTTP://www.Adventure-works.com" @@ -76,7 +76,7 @@ { "Name": "WarrantyPeriod", "DataType": "nvarchar", - "Definition": "The WarrantyPeriod column in the SalesLT.vProductModelCatalogDescription entity contains information about the duration of the warranty for each product model. The values in this column are expressed in years, indicating the length of time the warranty is valid. The pattern observed in the sample values shows that the warranty periods are specified in whole years, such as 1 year, 3 years, and 4 years. This column helps to understand the terms of warranty coverage for the products listed.", + "Definition": "The WarrantyPeriod column in the SalesLT.vProductModelCatalogDescription entity contains information about the length of the warranty period for products. The values are expressed as a combination of a numerical value and the word \"year\" or \"years,\" indicating the duration of the warranty in years. This suggests that warranty periods are provided in whole years rather than partial years or other units of time. The data helps determine how long a product is covered under warranty.", "AllowedValues": null, "SampleValues": [ "4 years", @@ -87,7 +87,7 @@ { "Name": "WarrantyDescription", "DataType": "nvarchar", - "Definition": "The WarrantyDescription column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the warranty coverage for different product models. The information typically includes the scope of the warranty, such as parts and labor, and may detail the specific terms and conditions that apply. Values in this column likely describe various aspects of the warranty provided with the products, ensuring customers are informed about the protection and services available.", + "Definition": "The WarrantyDescription column in the SalesLT.vProductModelCatalogDescription entity contains text descriptions of the warranties associated with different product models. These descriptions typically explain the scope of coverage, such as what parts and services are included under the warranty terms. The descriptions may vary in length and detail, but generally outline the protections and benefits that come with the purchase of the product. Common inclusions in these descriptions are mentions of parts and labor coverage.", "AllowedValues": null, "SampleValues": [ "parts and labor" @@ -96,7 +96,7 @@ { "Name": "NoOfYears", "DataType": "nvarchar", - "Definition": "The NoOfYears column in the SalesLT.vProductModelCatalogDescription entity contains units of time in years, indicating the duration associated with a product model. The values are formatted as a number followed by the word \"years,\" indicating the total number of years. This column helps determine the longevity or time span related to the product model featured in the catalog description.", + "Definition": "The NoOfYears column in the SalesLT.vProductModelCatalogDescription entity contains the duration or lifespan information of a product model, typically indicated in years. The values in this column follow a format that includes a numeric value followed by the word \"years.\" This column helps identify the length of time a product model is associated with or has been in the catalog.", "AllowedValues": null, "SampleValues": [ "7 years", @@ -108,7 +108,7 @@ { "Name": "MaintenanceDescription", "DataType": "nvarchar", - "Definition": "The MaintenanceDescription column in the SalesLT.vProductModelCatalogDescription entity contains textual descriptions of maintenance-related information for products. The descriptions typically indicate the availability of maintenance contracts and may specify the points of contact, such as dealers or retail stores, where these maintenance services can be obtained. The text generally follows a pattern of mentioning maintenance contracts and specifying the locations where they are available.", + "Definition": "The MaintenanceDescription column in the SalesLT.vProductModelCatalogDescription entity contains descriptive text regarding the maintenance options and services available for products. The descriptions typically mention the availability of maintenance contracts through dealers or retail stores associated with AdventureWorks. The text may vary slightly but consistently communicates where and how maintenance support can be obtained.", "AllowedValues": null, "SampleValues": [ "maintenance contract available through your dealer or any AdventureWorks retail store.", @@ -119,7 +119,7 @@ { "Name": "Wheel", "DataType": "nvarchar", - "Definition": "The Wheel column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of different types of wheels used in various product models. These descriptions focus on the features and qualities of the wheels, such as their material, durability, performance, and intended user experience. The values are written as detailed sentences highlighting specific characteristics, such as double-walled rims, aerodynamic rims, or aluminum alloy construction, and are aimed at informing potential buyers about the benefits of the wheels.", + "Definition": "The Wheel column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of wheel-related features and specifications for different product models. These descriptions highlight aspects such as durability, performance, material composition, and suitability for various rider experience levels. The information is geared towards providing detailed insights into the quality and characteristics of the wheels used in the products.", "AllowedValues": null, "SampleValues": [ "Strong wheels with double-walled rims.", @@ -132,20 +132,20 @@ { "Name": "Saddle", "DataType": "nvarchar", - "Definition": "The Saddle column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various product features specific to bicycle saddles. These descriptions highlight aspects such as comfort, design, material, and specific enhancements like rubber bumpers, cut-out shells, and gel padding. The descriptions are detailed and focus on the benefits and attributes that make the saddles suitable for different types of rides and user comfort.", + "Definition": "The Saddle column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of bicycle saddles. The descriptions highlight features such as the material used, comfort enhancements, design innovations, and weight specifications. These entries tend to focus on attributes that improve the riding experience, including padding, pressure relief, and lightweight construction.", "AllowedValues": null, "SampleValues": [ - "Comfortable saddle with bump absorping rubber bumpers.", - "Cut-out shell for a more comfortable ride.", - "Anatomic design and made from durable leather for a full-day of riding in comfort.", + "Made from synthetic leather and features gel padding for increased comfort.", "New design relieves pressure for long rides.", - "Made from synthetic leather and features gel padding for increased comfort." + "Cut-out shell for a more comfortable ride.", + "Comfortable saddle with bump absorping rubber bumpers.", + "Lightweight kevlar racing saddle." ] }, { "Name": "Pedal", "DataType": "nvarchar", - "Definition": "The Pedal column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of various types of pedals available for different types of bicycles. The descriptions highlight key features and benefits of each pedal, such as adjustable tension, expanded platforms, and stability for all-day riding. These descriptions are written in a user-friendly manner to help customers understand the advantages and specifications of each pedal option.", + "Definition": "The Pedal column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of different types of bicycle pedals. These descriptions highlight the specific features, advantages, and uses of each pedal type, such as clipless pedals with adjustable tension, platforms suitable for various shoe types, and stability for all-day riding. The information is provided in sentence form, detailing the product's unique selling points and designed purpose.", "AllowedValues": null, "SampleValues": [ "Top-of-the-line clipless pedals with adjustable tension.", @@ -156,7 +156,7 @@ { "Name": "BikeFrame", "DataType": "nvarchar", - "Definition": "The BikeFrame column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the bicycle frames used in various bike models. The descriptions highlight the material, often aluminum or aluminum alloy, and detail specific features such as custom shaping, hand-crafting, welding, heat-treatment, and innovative designs for comfort and performance. Terms like \"lightweight,\" \"strength,\" \"quality,\" and \"performance\" frequently appear, indicating a focus on durability and riding experience. The descriptions also emphasize manufacturing techniques and technological advancements in bike frame construction.", + "Definition": "The BikeFrame column in the SalesLT.vProductModelCatalogDescription entity contains textual descriptions of the bicycle frames used in different product models. These descriptions highlight various attributes such as material (e.g., aluminum), quality, construction techniques (e.g., welded and heat-treated), design benefits (e.g., strength, comfort, performance), and specific manufacturing processes (e.g., hand-crafted parts). The entries emphasize the unique features and technological advancements of each bike frame to appeal to potential buyers.", "AllowedValues": null, "SampleValues": [ "The aluminum frame is custom-shaped for both good looks and strength;it will withstand the most rigorous challenges of daily riding.", @@ -169,7 +169,7 @@ { "Name": "Crankset", "DataType": "nvarchar", - "Definition": "The Crankset column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of bicycle cranksets, highlighting their features and attributes. The descriptions include details such as the material of the crank arm, the performance of the shifting mechanism, and other notable characteristics like rigidity and strength. These descriptions are likely used for cataloging and marketing purposes to inform potential customers about the quality and specifications of the cranksets.", + "Definition": "The Crankset column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the crankset features for various product models. The values include specific attributes and qualities of the crankset, such as materials, construction, and performance characteristics. Each value provides a brief, descriptive phrase highlighting key selling points or technical details of the crankset. The descriptions are typically short phrases that emphasize aspects like durability, rigidity, and functionality.", "AllowedValues": null, "SampleValues": [ " Triple crankset; alumunim crank arm; flawless shifting. ", @@ -180,7 +180,7 @@ { "Name": "PictureAngle", "DataType": "nvarchar", - "Definition": "The PictureAngle column in the SalesLT.vProductModelCatalogDescription entity contains descriptors of the angle at which product pictures are taken. The values are textual descriptions indicating different perspectives of product images, such as 'front', 'side', 'back', etc. This column helps in identifying from which viewpoint a product image is shown in the catalog to provide a comprehensive view of the product to potential customers. The values generally follow common descriptive terms related to camera angles.", + "Definition": "The PictureAngle column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the angle at which a product picture is taken. The values in this column describe the perspective or viewpoint from which the product image is captured, such as 'front'. This helps users understand the visual representation of the product in the catalog.", "AllowedValues": null, "SampleValues": [ "front" @@ -189,7 +189,7 @@ { "Name": "PictureSize", "DataType": "nvarchar", - "Definition": "The PictureSize column in the SalesLT.vProductModelCatalogDescription entity contains values that indicate the size of the pictures used in the product model catalog descriptions. The values in this column are likely descriptive terms, such as \"small,\" referring to the dimensions or scale of the images. The column helps categorize the images based on their sizes for organizational and display purposes in the product catalog.", + "Definition": "The PictureSize column in the SalesLT.vProductModelCatalogDescription entity contains information about the size classification of pictures used in the catalog descriptions of product models. Based on the sample value provided, the sizes are described using general descriptive terms. This column helps to categorize and filter products based on the picture size used in their catalog entries.", "AllowedValues": null, "SampleValues": [ "small" @@ -198,7 +198,7 @@ { "Name": "ProductPhotoID", "DataType": "nvarchar", - "Definition": "The ProductPhotoID column in the SalesLT.vProductModelCatalogDescription entity contains unique identifier numbers for the photos of products. These values are numeric and are used to reference specific product images within the catalog system. The identifiers do not follow a particular sequence and each number uniquely corresponds to a distinct product photo.", + "Definition": "The ProductPhotoID column in the SalesLT.vProductModelCatalogDescription entity contains unique numeric identifiers for the photos associated with products in the catalog. Each value in this column is a distinct integer that corresponds to a specific product photo, indicating which image is linked to a particular product model. This column helps in associating product models with their respective images within the catalog.", "AllowedValues": null, "SampleValues": [ "87", @@ -211,7 +211,7 @@ { "Name": "Material", "DataType": "nvarchar", - "Definition": "The Material column in the SalesLT.vProductModelCatalogDescription entity contains information about the type of material used in the products. The values consist of descriptions of various materials, primarily focusing on different types of aluminum alloys. The descriptions may include specific material names or general material types used in the manufacturing of the products. There may be some variations or spelling differences in the recorded material types.", + "Definition": "The Material column in the SalesLT.vProductModelCatalogDescription entity contains the type of material used in the product models. The values in this column are descriptive names of materials, which can include various types of metals, alloys, and other substances. The sample values suggest that common materials include different forms of aluminum and aluminum alloys. The data is presented in a plain text format with no special codes or abbreviations.", "AllowedValues": null, "SampleValues": [ "Aluminum Alloy", @@ -222,7 +222,7 @@ { "Name": "Color", "DataType": "nvarchar", - "Definition": "The Color column in the SalesLT.vProductModelCatalogDescription entity contains descriptive text indicating the color availability of a product model. The descriptions specify whether the product is available in most colors, all colors, or all colors except certain types such as metallic. The text is formatted in a casual, descriptive manner and provides insights into the range of colors offered for the specific product model.", + "Definition": "The Color column in the SalesLT.vProductModelCatalogDescription entity contains descriptive sentences about the color availability of the products. The values generally indicate the range or exceptions in color availability, such as stating if the product is available in most colors, all colors, or specific exclusions. The descriptions often follow a common format, starting with \"Available in\" followed by details about the color options. This column helps in providing a textual representation of the color options available for each product model.", "AllowedValues": null, "SampleValues": [ "Available in most colors.", @@ -234,7 +234,7 @@ { "Name": "ProductLine", "DataType": "nvarchar", - "Definition": "The ProductLine column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of different categories or types of bikes. The values indicate specific segments or models within the bicycle product range, such as touring bikes, road bikes, and mountain bikes. This categorization helps in identifying and organizing products based on their intended use or design.", + "Definition": "The ProductLine column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of different categories of bikes. The values in this column represent various types of bikes, which can include classifications such as Touring bike, Road bike, and Mountain bike. The column helps categorize products within the catalog for better organization and ease of reference.", "AllowedValues": null, "SampleValues": [ "Touring bike", @@ -245,7 +245,7 @@ { "Name": "Style", "DataType": "nvarchar", - "Definition": "The Style column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the target gender for a product. The values typically indicate whether a product is designed for men, women, or is unisex. The descriptions help classify products based on intended user demographics in the catalog.", + "Definition": "The Style column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the targeted gender for products. The values in this column indicate whether a product is meant for men, women, or for both genders (unisex). The data helps in categorizing products based on the intended user demographic for marketing and sales purposes.", "AllowedValues": null, "SampleValues": [ "Unisex", @@ -255,7 +255,7 @@ { "Name": "RiderExperience", "DataType": "nvarchar", - "Definition": "The RiderExperience column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the skill levels suitable for using a particular product. The values in this column denote a range of rider experience levels, indicating the minimum and maximum level of expertise required. The descriptions follow a pattern where they range from one experience level to another, such as 'Novice to Intermediate' or 'Advanced to Professional.' This helps customers understand if the product is appropriate for their skill level as a rider.", + "Definition": "The RiderExperience column in the SalesLT.vProductModelCatalogDescription entity contains descriptions of the skill levels that a product is suitable for. The values follow a pattern indicating a range of rider experience levels, such as Novice, Intermediate, Advanced, and Professional. These ranges help indicate the suitability of the product for riders with different levels of expertise and ability.", "AllowedValues": null, "SampleValues": [ "Novice to Intermediate riders", @@ -268,20 +268,20 @@ { "Name": "rowguid", "DataType": "uniqueidentifier", - "Definition": "The column rowguid in the SalesLT.vProductModelCatalogDescription entity contains unique identifier values in the UUID (Universally Unique Identifier) format. Each value is a 128-bit number used to uniquely identify records in the database. The format consists of 32 hexadecimal characters displayed in five groups separated by hyphens, following the pattern 8-4-4-4-12. The sample values suggest that this column is used to ensure the uniqueness of each row within the table.", + "Definition": "The rowguid column in the SalesLT.vProductModelCatalogDescription entity contains unique identifier values in the form of globally unique identifiers (GUIDs). Each value is a 36-character string in the standard GUID format, which includes hexadecimal characters and hyphens separating specific character groups. This column is used to uniquely identify each row in the table and ensures that each entry can be reliably distinguished from others.", "AllowedValues": null, "SampleValues": [ + "FCA0665B-B956-489A-A5EC-6F0B4AA14D02", "94FFB702-0CBC-4E3F-B840-C51F0D11C8F6", "AA10D9E6-E33F-4DA8-ACE1-992FCD6BB171", - "866DBAD3-5999-4329-BEAC-D826D959D9A1", - "8456BB94-B4DD-4A47-A76B-D0E54AB4285D", - "FCA0665B-B956-489A-A5EC-6F0B4AA14D02" + "52E7F2C1-DBFF-4518-927D-C7D46F9ED32E", + "8456BB94-B4DD-4A47-A76B-D0E54AB4285D" ] }, { "Name": "ModifiedDate", "DataType": "datetime", - "Definition": "The ModifiedDate column in the SalesLT.vProductModelCatalogDescription entity contains timestamp values indicating the date and time when the product model catalog descriptions were last modified. The values are stored in a standard datetime format, which includes the year, month, day, hour, minute, second, and fractional seconds. This column allows tracking of changes and updates to the catalog descriptions over time.", + "Definition": "The ModifiedDate column in the SalesLT.vProductModelCatalogDescription entity contains the date and time when a product model catalog description was last updated. The values follow the format 'YYYY-MM-DD HH:MM:SS.ssssss', representing year, month, day, hour, minute, second, and fractional seconds. This column is used to track changes and ensure that the catalog description data is current and up-to-date. The precise timestamp allows for accurate monitoring and auditing of modifications.", "AllowedValues": null, "SampleValues": [ "2006-11-20 09:56:38.273000", @@ -289,4 +289,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/text_2_sql/data_dictionary/manual_samples/entities.json b/text_2_sql/data_dictionary/manual_samples/entities.json index fdd2174..e745a04 100644 --- a/text_2_sql/data_dictionary/manual_samples/entities.json +++ b/text_2_sql/data_dictionary/manual_samples/entities.json @@ -4,22 +4,22 @@ { "Definition": "A unique identifier for each sales order ticket. This ID is auto-generated and serves as the primary key for the SalesOrderTicket table.", "Name": "SalesOrderID", - "Type": "INT" + "DataType": "INT" }, { "Definition": "The date and time when the sales order was created. This is used to track when the order was initiated.", "Name": "OrderDate", - "Type": "DATETIME" + "DataType": "DATETIME" }, { "Definition": "The date by which the order is expected to be fulfilled or delivered. It helps in managing delivery timelines.", "Name": "DueDate", - "Type": "DATETIME" + "DataType": "DATETIME" }, { "Definition": "The date when the order was shipped to the customer. This is used for tracking shipping and fulfillment status.", "Name": "ShipDate", - "Type": "DATETIME" + "DataType": "DATETIME" }, { "AllowedValues": [ @@ -29,44 +29,72 @@ ], "Definition": "The current status of the order, represented as a numeric code (e.g., 1 for In Progress, 2 for Completed, 3 for Canceled).", "Name": "Status", - "Type": "TINYINT" + "DataType": "TINYINT" }, { "Definition": "The total amount due for the order, including all line items, taxes, and shipping charges.", "Name": "TotalDue", - "Type": "MONEY" + "DataType": "MONEY" }, { "Definition": "The date and time when the sales order ticket record was last modified. This is used for tracking updates and changes to the order.", "Name": "ModifiedDate", - "Type": "DATETIME" + "DataType": "DATETIME" } ], - "Description": "This table stores detailed information about sales order tickets, including the order details, customer information, order status, and timestamps. It is used to manage and track sales orders throughout the order lifecycle, from creation to fulfillment.", + "Definition": "This table stores detailed information about sales order tickets, including the order details, customer information, order status, and timestamps. It is used to manage and track sales orders throughout the order lifecycle, from creation to fulfillment.", "Entity": "SalesOrderDetail", - "EntityName": "Sales Order Detail" + "EntityName": "Sales Order Detail", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.Product", + "ForeignKeys": [ + { + "Column": "ProductID", + "ForeignColumn": "ProductID" + } + ] + }, + { + "ForeignEntity": "SalesLT.SalesOrderHeader", + "ForeignKeys": [ + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.SalesOrderDetail -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address" + ] }, { "Columns": [ { "Definition": "A unique identifier for each sales order. This ID is auto-generated and serves as the primary key for the SalesOrderHeader table.", "Name": "SalesOrderID", - "Type": "INT" + "DataType": "INT" }, { "Definition": "The date and time when the sales order was created. This field is used to track when the order was initiated.", "Name": "OrderDate", - "Type": "DATETIME" + "DataType": "DATETIME" }, { "Definition": "The date by which the order is expected to be fulfilled or delivered. It helps in managing delivery timelines.", "Name": "DueDate", - "Type": "DATETIME" + "DataType": "DATETIME" }, { "Definition": "The date when the order was shipped to the customer. This is used for tracking shipping and fulfillment status.", "Name": "ShipDate", - "Type": "DATETIME" + "DataType": "DATETIME" }, { "AllowedValues": [ @@ -76,7 +104,7 @@ ], "Definition": "The current status of the order, represented as a numeric code (e.g., 1 for In Progress, 2 for Completed, 3 for Canceled).", "Name": "Status", - "Type": "TINYINT" + "DataType": "TINYINT" }, { "AllowedValues": [ @@ -85,153 +113,237 @@ ], "Definition": "Indicates whether the order was placed online.", "Name": "OnlineOrderFlag", - "Type": "BIT" + "DataType": "BIT" }, { "Definition": "A unique order number assigned to the sales order. This is used for tracking and identification purposes.", "Name": "SalesOrderNumber", - "Type": "NVARCHAR(25)" + "DataType": "NVARCHAR(25)" }, { "Definition": "The purchase order number provided by the customer. This field links the sales order to the customer's purchase order.", "Name": "PurchaseOrderNumber", - "Type": "NVARCHAR(25)" + "DataType": "NVARCHAR(25)" }, { "Definition": "The account number of the customer placing the order. This helps link the order to the customer's account.", "Name": "AccountNumber", - "Type": "NVARCHAR(15)" + "DataType": "NVARCHAR(15)" }, { "Definition": "A foreign key that links to the Customer table, representing the customer who placed the order.", "Name": "CustomerID", - "Type": "INT" + "DataType": "INT" }, { "Definition": "A foreign key that links to the Address table, representing the shipping address for the order.", "Name": "ShipToAddressID", - "Type": "INT" + "DataType": "INT" }, { "Definition": "A foreign key that links to the Address table, representing the billing address for the order.", "Name": "BillToAddressID", - "Type": "INT" + "DataType": "INT" }, { "Definition": "The shipping method used for the order (e.g., UPS, FedEx). This field helps track shipping preferences.", "Name": "ShipMethod", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "The total cost of the order before taxes and shipping charges. This field is used to calculate the final total. The currency is pound sterling (GBP).", "Name": "SubTotal", - "Type": "MONEY" + "DataType": "MONEY" }, { "Definition": "The tax amount applied to the order. This is calculated based on the order subtotal and applicable tax rates. The currency is pound sterling (GBP).", "Name": "TaxAmt", - "Type": "MONEY" + "DataType": "MONEY" }, { "Definition": "The shipping charge applied to the order. This field represents the cost of shipping the order to the customer. The currency is pound sterling (GBP).", "Name": "Freight", - "Type": "MONEY" + "DataType": "MONEY" }, { "Definition": "The total amount due for the order, including all line items, taxes, and shipping charges. The currency is pound sterling (GBP).", "Name": "TotalDue", - "Type": "MONEY" + "DataType": "MONEY" }, { "Definition": "Any additional comments or notes related to the sales order. This field can include special instructions or remarks.", "Name": "Comment", - "Type": "NVARCHAR(255)" + "DataType": "NVARCHAR(255)" }, { "Definition": "The date and time when the sales order header record was last modified. This is used for tracking updates and changes to the order.", "Name": "ModifiedDate", - "Type": "DATETIME" + "DataType": "DATETIME" } ], - "Description": "This table contains high-level information about sales orders, including order dates, customer details, shipping information, and order status. It is used to manage and track sales orders from initiation to fulfillment.", + "Definition": "This table contains high-level information about sales orders, including order dates, customer details, shipping information, and order status. It is used to manage and track sales orders from initiation to fulfillment.", "Entity": "SalesOrderHeader", - "EntityName": "Sales Order Header" + "EntityName": "Sales Order Header", + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.SalesOrderDetail", + "ForeignKeys": [ + { + "Column": "SalesOrderID", + "ForeignColumn": "SalesOrderID" + }, + ] + }, + { + "ForeignEntity": "SalesLT.Address", + "ForeignKeys": [ + { + "Column": "BillToAddressID", + "ForeignColumn": "AddressID" + }, + { + "Column": "ShipToAddressID", + "ForeignColumn": "AddressID" + } + ] + }, + { + "ForeignEntity": "SalesLT.Customer", + "ForeignKeys": [ + { + "Column": "CustomerID", + "ForeignColumn": "CustomerID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.SalesOrderHeader -> SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer", + "SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress -> SalesLT.Address" + ] }, { "Columns": [ { "Definition": "A unique identifier for each address. This ID is auto-generated and serves as the primary key for the Address table.", "Name": "AddressID", - "Type": "INT" + "DataType": "INT" }, { "Definition": "The city in which the address is located. This is used to specify the city for the address.", "Name": "City", - "Type": "NVARCHAR(30)" + "DataType": "NVARCHAR(30)" }, { "Definition": "The state or province in which the address is located. This is used to specify the state or province for the address.", "Name": "StateProvince", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "The country or region in which the address is located. This is used to specify the country or region for the address.", "Name": "CountryRegion", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "The postal code associated with the address. This is used to specify the postal code for the address, which helps in geographical sorting and shipping.", "Name": "PostalCode", - "Type": "NVARCHAR(15)" + "DataType": "NVARCHAR(15)" }, { "Definition": "The date and time when the address record was last modified. This is used for tracking updates and changes to the address information.", "Name": "ModifiedDate", - "Type": "DATETIME" + "DataType": "DATETIME" } ], - "Description": "This table stores address information for customers, including street addresses, city, state, postal code, and country/region. It is used to maintain contact and shipping information for orders, as well as to manage customer locations.", + "Definition": "This table stores address information for customers, including street addresses, city, state, postal code, and country/region. It is used to maintain contact and shipping information for orders, as well as to manage customer locations.", "Entity": "Address", - "EntityName": "Address" + "EntityName": "Address", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [ + { + "ForeignEntity": "SalesLT.CustomerAddress", + "ForeignKeys": [ + { + "Column": "AddressID", + "ForeignColumn": "AddressID" + } + ] + }, + { + "ForeignEntity": "SalesLT.SalesOrderHeader", + "ForeignKeys": [ + { + "Column": "AddressID", + "ForeignColumn": "BillToAddressID" + }, + { + "Column": "AddressID", + "ForeignColumn": "BillToAddressID" + }, + { + "Column": "AddressID", + "ForeignColumn": "BillToAddressID" + }, + { + "Column": "AddressID", + "ForeignColumn": "ShipToAddressID" + } + ] + } + ], + "CompleteEntityRelationshipsGraph": [ + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.Address -> SalesLT.CustomerAddress -> SalesLT.Customer -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductCategory", + "SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.SalesOrderDetail -> SalesLT.Product -> SalesLT.ProductModel -> SalesLT.ProductModelProductDescription -> SalesLT.ProductDescription", + "SalesLT.Address -> SalesLT.SalesOrderHeader -> SalesLT.Customer -> SalesLT.CustomerAddress" + ] }, { "Columns": [ { "Definition": "A unique identifier for each product category. This ID is used to reference specific categories.", "Name": "ProductCategoryID", - "Type": "INT" + "DataType": "INT" }, { "Definition": "The name of the parent product category. This represents the top-level category under which subcategories are grouped.", "Name": "ParentProductCategoryName", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "The name of the product category. This can refer to either a top-level category or a subcategory, depending on the context.", "Name": "ProductCategoryName", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" } ], - "Description": "This view provides a comprehensive list of all product categories and their corresponding subcategories in the SalesLT schema of the AdventureWorksLT database. It is used to understand the hierarchical structure of product categories, facilitating product organization and categorization.", + "Definition": "This view provides a comprehensive list of all product categories and their corresponding subcategories in the SalesLT schema of the AdventureWorksLT database. It is used to understand the hierarchical structure of product categories, facilitating product organization and categorization.", "Entity": "vGetAllCategories", - "EntityName": "Get All Categories" + "EntityName": "Get All Categories", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [], + "CompleteEntityRelationshipsGraph": [] }, { "Columns": [ { "Definition": "A unique identifier for each product. This ID is used to distinguish individual products.", "Name": "ProductID", - "Type": "INT" + "DataType": "INT" }, { "Definition": "The name of the product. This provides a brief and identifiable name for each product.", "Name": "Name", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "The model name associated with the product. This indicates the specific model type or version of the product.", "Name": "ProductModel", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "The culture or language code for the product description. This is used to localize the product description, such as 'en' for English or 'fr' for French.", @@ -242,143 +354,151 @@ "es", "de" ], - "Type": "NVARCHAR(6)" + "DataType": "NVARCHAR(6)" }, { "Definition": "A detailed description of the product. This text provides additional information about the product, which can vary based on the culture or language.", - "Name": "Description", - "Type": "NVARCHAR(400)" + "Name": "Definition", + "DataType": "NVARCHAR(400)" } ], - "Description": "This view provides detailed information about products, including their names, associated product models, descriptions, and the specific culture or language of the description. It is useful for understanding product details and translating product descriptions for different cultures.", + "Definition": "This view provides detailed information about products, including their names, associated product models, descriptions, and the specific culture or language of the description. It is useful for understanding product details and translating product descriptions for different cultures.", "Entity": "vProductAndDescription", - "EntityName": "Product and Description" + "EntityName": "Product and Description", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [], + "CompleteEntityRelationshipsGraph": [] }, { "Columns": [ { "Definition": "A unique identifier for each product model. This ID is used to distinguish different product models.", "Name": "ProductModelID", - "Type": "INT" + "DataType": "INT" }, { "Definition": "The name of the product model, providing a recognizable title for each model.", "Name": "Name", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "A brief summary of the product model, highlighting key features and characteristics.", "Name": "Summary", - "Type": "NVARCHAR(MAX)" + "DataType": "NVARCHAR(MAX)" }, { "Definition": "The name of the manufacturer of the product model.", "Name": "Manufacturer", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "Copyright information related to the product model, indicating the legal ownership of the product design and content.", "Name": "Copyright", - "Type": "NVARCHAR(30)" + "DataType": "NVARCHAR(30)" }, { "Definition": "The URL for the product model, providing a link to more information or to purchase the product.", "Name": "ProductURL", - "Type": "NVARCHAR(256)" + "DataType": "NVARCHAR(256)" }, { "Definition": "The duration of the warranty period for the product model, specifying how long the warranty is valid.", "Name": "WarrantyPeriod", - "Type": "NVARCHAR(30)" + "DataType": "NVARCHAR(30)" }, { "Definition": "A description of the warranty provided for the product model, detailing what is covered under the warranty.", "Name": "WarrantyDescription", - "Type": "NVARCHAR(255)" + "DataType": "NVARCHAR(255)" }, { "Definition": "The number of years the warranty is valid for the product model.", "Name": "NoOfYears", - "Type": "INT" + "DataType": "INT" }, { "Definition": "A description of the maintenance requirements and recommendations for the product model.", "Name": "MaintenanceDescription", - "Type": "NVARCHAR(MAX)" + "DataType": "NVARCHAR(MAX)" }, { "Definition": "Details about the type of wheels used in the product model.", "Name": "Wheel", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "Information about the saddle of the product model, such as material and design.", "Name": "Saddle", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "Details regarding the pedal design and specifications of the product model.", "Name": "Pedal", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "Description of the bike frame used in the product model, including material and type.", "Name": "BikeFrame", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "Information about the crankset of the product model, specifying its design and features.", "Name": "Crankset", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "The angle at which the product model is photographed, providing a visual perspective of the product.", "Name": "PictureAngle", - "Type": "NVARCHAR(20)" + "DataType": "NVARCHAR(20)" }, { "Definition": "The size of the product model's picture, specifying dimensions or resolution.", "Name": "PictureSize", - "Type": "NVARCHAR(20)" + "DataType": "NVARCHAR(20)" }, { "Definition": "An identifier linking to the product photo, which provides a visual representation of the product model.", "Name": "ProductPhotoID", - "Type": "INT" + "DataType": "INT" }, { "Definition": "The material used in the construction of the product model, indicating durability and quality.", "Name": "Material", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "The color of the product model, providing information about the appearance of the product.", "Name": "Color", - "Type": "NVARCHAR(15)" + "DataType": "NVARCHAR(15)" }, { "Definition": "A code representing the product line to which the model belongs, categorizing the product within a broader product range.", "Name": "ProductLine", - "Type": "NVARCHAR(2)" + "DataType": "NVARCHAR(2)" }, { "Definition": "The style of the product model, indicating design and aesthetic aspects.", "Name": "Style", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "A description of the target rider's experience level for which the product model is designed, such as beginner, intermediate, or expert.", "Name": "RiderExperience", - "Type": "NVARCHAR(50)" + "DataType": "NVARCHAR(50)" }, { "Definition": "The date and time when the product model information was last modified, indicating the currency of the data.", "Name": "ModifiedDate", - "Type": "DATETIME" + "DataType": "DATETIME" } ], - "Description": "This view provides detailed catalog information about product models, including descriptions, manufacturing details, warranty information, and specifications related to product design and features. It is useful for generating comprehensive product catalogs and providing detailed product information to customers.", + "Definition": "This view provides detailed catalog information about product models, including descriptions, manufacturing details, warranty information, and specifications related to product design and features. It is useful for generating comprehensive product catalogs and providing detailed product information to customers.", "Entity": "vProductModelCatalogDescription", - "EntityName": "Product Model Catalog Description" + "EntityName": "Product Model Catalog Description", + "Database": "AdventureWorksLT", + "Warehouse": null, + "EntityRelationships": [], + "CompleteEntityRelationshipsGraph": [] } -] +] \ No newline at end of file From 59b6e69bbd05fdd8f701636bd9ddee66d5898440 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 20:12:36 +0000 Subject: [PATCH 16/17] Reduce path duplicates --- .../data_dictionary/data_dictionary_creator.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/text_2_sql/data_dictionary/data_dictionary_creator.py b/text_2_sql/data_dictionary/data_dictionary_creator.py index 01f2a99..8de5e9e 100644 --- a/text_2_sql/data_dictionary/data_dictionary_creator.py +++ b/text_2_sql/data_dictionary/data_dictionary_creator.py @@ -53,6 +53,14 @@ def pivot(self): def add_foreign_key(self, foreign_key: ForeignKeyRelationship): """A method to add a foreign key to the entity relationship.""" + + for existing_foreign_key in self.foreign_keys: + if ( + existing_foreign_key.column == foreign_key.column + and existing_foreign_key.foreign_column == foreign_key.foreign_column + ): + return + self.foreign_keys.append(foreign_key) @classmethod @@ -328,6 +336,11 @@ def get_entity_relationships_from_graph( successors_not_visited = [ successor for successor in successors if successor not in visited ] + + if len(path) == 1 and entity in successors: + # We can do a self join on the entity in this case but we don't want to propagate this + result.append(f"{entity} -> {entity}") + if len(successors_not_visited) == 0 and len(path) > 1: # Add the complete path to the result as a string result.append(" -> ".join(path)) From 59a2a6d9d204e3148e1eba033cb098fb5c7078b8 Mon Sep 17 00:00:00 2001 From: Ben Constable Date: Thu, 14 Nov 2024 20:21:10 +0000 Subject: [PATCH 17/17] Update --- deploy_ai_search/text_2_sql_query_cache.py | 4 +-- .../vector_based_sql_plugin.py | 34 +++++++++++++------ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/deploy_ai_search/text_2_sql_query_cache.py b/deploy_ai_search/text_2_sql_query_cache.py index fda9c1d..18296c6 100644 --- a/deploy_ai_search/text_2_sql_query_cache.py +++ b/deploy_ai_search/text_2_sql_query_cache.py @@ -49,11 +49,11 @@ def get_index_fields(self) -> list[SearchableField]: vector_search_profile_name=self.vector_search_profile_name, ), ComplexField( - name="Decomposition", + name="SqlQueryDecomposition", collection=True, fields=[ SearchableField( - name="SQLQuery", + name="SqlQuery", type=SearchFieldDataType.String, filterable=True, ), diff --git a/text_2_sql/semantic_kernel/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py b/text_2_sql/semantic_kernel/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py index 6544137..53bfa31 100644 --- a/text_2_sql/semantic_kernel/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py +++ b/text_2_sql/semantic_kernel/plugins/vector_based_sql_plugin/vector_based_sql_plugin.py @@ -143,7 +143,7 @@ async def fetch_queries_from_cache(self, question: str) -> str: cached_schemas = await run_ai_search_query( question, ["QuestionEmbedding"], - ["Question", "Query", "Schemas"], + ["Question", "SqlQueryDecomposition", "Schemas"], os.environ["AIService__AzureSearchOptions__Text2SqlQueryCache__Index"], os.environ[ "AIService__AzureSearchOptions__Text2SqlQueryCache__SemanticConfig" @@ -172,17 +172,27 @@ async def fetch_queries_from_cache(self, question: str) -> str: if cached_schemas[0]["@search.reranker_score"] > 2.75: logging.info("Score is greater than 3") - sql_query = cached_schemas[0]["Query"] - schemas = cached_schemas[0]["Schemas"] + sql_queries = cached_schemas[0]["SqlQueryDecomposition"] + query_result_store = {} - logging.info("SQL Query: %s", sql_query) + query_tasks = [] - # Run the SQL query - sql_result = await self.query_execution(sql_query) - logging.info("SQL Query Result: %s", sql_result) + for sql_query in sql_queries: + logging.info("SQL Query: %s", sql_query) - pre_fetched_results_string = f"""[BEGIN PRE-FETCHED RESULTS FOR SQL QUERY = '{sql_query}']\n{ - json.dumps(sql_result, default=str)}\nSchema={json.dumps(schemas, default=str)}\n[END PRE-FETCHED RESULTS FOR SQL QUERY]\n""" + # Run the SQL query + query_tasks.append(self.query_execution(sql_query["SqlQuery"])) + + sql_results = await asyncio.gather(*query_tasks) + + for sql_query, sql_result in zip(sql_queries, sql_results): + query_result_store[sql_query["SqlQuery"]] = { + "result": sql_result, + "schemas": sql_queries["schemas"], + } + + pre_fetched_results_string = f"""[BEGIN PRE-FETCHED RESULTS FOR CACHED SQL QUERIES]\n{ + json.dumps(query_result_store, default=str)}\n[END PRE-FETCHED RESULTS FOR CACHED SQL QUERIES]\n""" return pre_fetched_results_string @@ -330,8 +340,10 @@ async def run_sql_query( entry = { "Question": self.question, - "Query": sql_query, - "Schemas": cleaned_schemas, + "SqlQueryDecomposition": { + "SqlQuery": sql_query, + "Schemas": cleaned_schemas, + }, } except Exception as e: logging.error("Error: %s", e)