@comunica/actor-query-source-identify-rdfjs 4.4.1 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/QuerySourceRdfJs.js +3 -5
- package/lib/QuerySourceRdfJs.js.map +1 -1
- package/package.json +10 -10
package/lib/QuerySourceRdfJs.js
CHANGED
|
@@ -73,11 +73,9 @@ class QuerySourceRdfJs {
|
|
|
73
73
|
operation.graph = this.dataFactory.defaultGraph();
|
|
74
74
|
}
|
|
75
75
|
// Determine metadata
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
.catch(error => it.destroy(error));
|
|
80
|
-
}
|
|
76
|
+
const variables = (0, bus_query_source_identify_1.getVariables)(operation).map(variable => ({ variable, canBeUndef: false }));
|
|
77
|
+
this.setMetadata(it, operation, context, forceEstimateCardinality, { variables })
|
|
78
|
+
.catch(error => it.destroy(error));
|
|
81
79
|
return it;
|
|
82
80
|
}
|
|
83
81
|
// Check if the source supports quoted triple filtering
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuerySourceRdfJs.js","sourceRoot":"","sources":["QuerySourceRdfJs.ts"],"names":[],"mappings":"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","sourcesContent":["import { filterMatchingQuotedQuads, getVariables, quadsToBindings } from '@comunica/bus-query-source-identify';\nimport { KeysQueryOperation } from '@comunica/context-entries';\nimport type {\n IQuerySource,\n BindingsStream,\n IActionContext,\n FragmentSelectorShape,\n ComunicaDataFactory,\n QuerySourceReference,\n} from '@comunica/types';\nimport type { BindingsFactory } from '@comunica/utils-bindings-factory';\nimport { MetadataValidationState } from '@comunica/utils-metadata';\nimport type * as RDF from '@rdfjs/types';\nimport { ArrayIterator, AsyncIterator, wrap as wrapAsyncIterator } from 'asynciterator';\nimport { someTermsNested, filterTermsNested, someTerms, uniqTerms } from 'rdf-terms';\nimport type { Algebra } from 'sparqlalgebrajs';\nimport { Factory } from 'sparqlalgebrajs';\nimport type { IRdfJsSourceExtended } from './IRdfJsSourceExtended';\n\nexport class QuerySourceRdfJs implements IQuerySource {\n protected readonly selectorShape: FragmentSelectorShape;\n public referenceValue: QuerySourceReference;\n protected readonly source: IRdfJsSourceExtended | RDF.DatasetCore;\n private readonly dataFactory: ComunicaDataFactory;\n private readonly bindingsFactory: BindingsFactory;\n private readonly dummyDefaultGraph: RDF.Variable;\n\n public constructor(\n source: RDF.Source | RDF.DatasetCore,\n dataFactory: ComunicaDataFactory,\n bindingsFactory: BindingsFactory,\n ) {\n this.source = source;\n this.referenceValue = source;\n this.dataFactory = dataFactory;\n this.bindingsFactory = bindingsFactory;\n const AF = new Factory(<RDF.DataFactory> this.dataFactory);\n this.selectorShape = {\n type: 'operation',\n operation: {\n operationType: 'pattern',\n pattern: AF.createPattern(\n this.dataFactory.variable('s'),\n this.dataFactory.variable('p'),\n this.dataFactory.variable('o'),\n ),\n },\n variablesOptional: [\n this.dataFactory.variable('s'),\n this.dataFactory.variable('p'),\n this.dataFactory.variable('o'),\n ],\n };\n this.dummyDefaultGraph = this.dataFactory.variable('__comunica:defaultGraph');\n }\n\n public static nullifyVariables(term: RDF.Term | undefined, quotedTripleFiltering: boolean): RDF.Term | undefined {\n return !term || term.termType === 'Variable' || (!quotedTripleFiltering &&\n term.termType === 'Quad' && someTermsNested(term, value => value.termType === 'Variable')) ?\n undefined :\n term;\n }\n\n public static hasDuplicateVariables(pattern: RDF.BaseQuad): boolean {\n const variables = filterTermsNested(pattern, term => term.termType === 'Variable');\n return variables.length > 1 && uniqTerms(variables).length < variables.length;\n }\n\n public async getSelectorShape(): Promise<FragmentSelectorShape> {\n return this.selectorShape;\n }\n\n public queryBindings(operation: Algebra.Operation, context: IActionContext): BindingsStream {\n if (operation.type !== 'pattern') {\n throw new Error(`Attempted to pass non-pattern operation '${operation.type}' to QuerySourceRdfJs`);\n }\n\n // Check if we're running in union default graph mode\n const unionDefaultGraph = Boolean(context.get(KeysQueryOperation.unionDefaultGraph));\n if (operation.graph.termType === 'DefaultGraph' && unionDefaultGraph) {\n operation.graph = this.dummyDefaultGraph;\n }\n\n // Get bindings directly if the source allows it\n // This will be more efficient, as it avoids the intermediary quads translation and representation.\n if ('matchBindings' in this.source && this.source.matchBindings) {\n const rawStream = this.source.matchBindings(\n this.bindingsFactory,\n operation.subject,\n operation.predicate,\n operation.object,\n operation.graph,\n );\n let it: AsyncIterator<RDF.Bindings> = rawStream instanceof AsyncIterator ?\n rawStream :\n wrapAsyncIterator<RDF.Bindings>(rawStream, { autoStart: false });\n\n // Check if non-default-graph triples need to be filtered out.\n // SPARQL query semantics allow graph variables to only match with named graphs, excluding the default graph\n // But this is not the case when using union default graph semantics\n let forceEstimateCardinality = false;\n if (operation.graph.termType === 'Variable' && !unionDefaultGraph) {\n forceEstimateCardinality = true;\n const variable = operation.graph;\n it = it.filter(bindings => bindings.get(variable)!.termType !== 'DefaultGraph');\n }\n\n // Remove bindings to the dummy __comunica:defaultGraph variable if needed\n if (operation.graph.equals(this.dummyDefaultGraph)) {\n it = it.map(bindings => bindings.delete(this.dummyDefaultGraph));\n // Restore graph for determining variable metadata\n operation.graph = this.dataFactory.defaultGraph();\n }\n\n // Determine metadata\n if (!it.getProperty('metadata')) {\n const variables = getVariables(operation).map(variable => ({ variable, canBeUndef: false }));\n this.setMetadata(it, operation, context, forceEstimateCardinality, { variables })\n .catch(error => it.destroy(error));\n }\n\n return it;\n }\n\n // Check if the source supports quoted triple filtering\n const quotedTripleFiltering = Boolean('features' in this.source && this.source.features?.quotedTripleFiltering);\n\n // Create an async iterator from the matched quad stream\n const rawStream = this.source.match(\n QuerySourceRdfJs.nullifyVariables(operation.subject, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.predicate, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.object, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.graph, quotedTripleFiltering),\n );\n let it: AsyncIterator<RDF.Quad> = rawStream instanceof AsyncIterator ?\n rawStream :\n wrapAsyncIterator<RDF.Quad>(rawStream, { autoStart: false });\n\n // Perform post-match-filtering if the source does not support quoted triple filtering.\n if (!quotedTripleFiltering) {\n it = filterMatchingQuotedQuads(operation, it);\n }\n\n // Determine metadata\n if (!it.getProperty('metadata')) {\n this.setMetadata(it, operation, context)\n .catch(error => it.destroy(error));\n }\n\n // Restore graph for determining variable metadata\n if (operation.graph.equals(this.dummyDefaultGraph)) {\n operation.graph = this.dataFactory.defaultGraph();\n }\n\n return quadsToBindings(\n it,\n operation,\n this.dataFactory,\n this.bindingsFactory,\n Boolean(context.get(KeysQueryOperation.unionDefaultGraph)),\n );\n }\n\n protected async setMetadata(\n it: AsyncIterator<any>,\n operation: Algebra.Pattern,\n context: IActionContext,\n forceEstimateCardinality = false,\n extraMetadata: Record<string, any> = {},\n ): Promise<void> {\n // Check if the source supports quoted triple filtering\n const quotedTripleFiltering = Boolean('features' in this.source && this.source.features?.quotedTripleFiltering);\n\n // Check if we're running in union default graph mode\n const unionDefaultGraph = Boolean(context.get(KeysQueryOperation.unionDefaultGraph));\n if (operation.graph.termType === 'DefaultGraph' && unionDefaultGraph) {\n operation.graph = this.dummyDefaultGraph;\n }\n\n let cardinality: number;\n if ('countQuads' in this.source && this.source.countQuads) {\n // If the source provides a dedicated method for determining cardinality, use that.\n cardinality = await this.source.countQuads(\n QuerySourceRdfJs.nullifyVariables(operation.subject, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.predicate, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.object, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.graph, quotedTripleFiltering),\n );\n } else {\n // Otherwise, fallback to a sub-optimal alternative where we just call match again to count the quads.\n // WARNING: we can NOT reuse the original data stream here,\n // because we may lose data elements due to things happening async.\n let i = 0;\n cardinality = await new Promise((resolve, reject) => {\n let matches = this.source.match(\n QuerySourceRdfJs.nullifyVariables(operation.subject, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.predicate, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.object, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.graph, quotedTripleFiltering),\n );\n\n // If it's not a stream, turn it into one\n if (typeof (<any> matches).on !== 'function') {\n matches = <RDF.Stream>(new ArrayIterator(<RDF.DatasetCore> matches));\n }\n\n (<RDF.Stream>matches).on('error', reject);\n (<RDF.Stream>matches).on('end', () => resolve(i));\n (<RDF.Stream>matches).on('data', () => i++);\n });\n }\n\n // If `match` would require filtering afterwards, our count will be an over-estimate.\n const wouldRequirePostFiltering = (!quotedTripleFiltering &&\n someTerms(operation, term => term.termType === 'Quad')) ||\n QuerySourceRdfJs.hasDuplicateVariables(operation);\n\n it.setProperty('metadata', {\n state: new MetadataValidationState(),\n cardinality: {\n type: wouldRequirePostFiltering || forceEstimateCardinality ? 'estimate' : 'exact',\n value: cardinality,\n },\n // Force requestTime to zero, since this will be free for future calls, as we're fully indexed at this stage.\n requestTime: 0,\n ...extraMetadata,\n });\n }\n\n public queryQuads(\n _operation: Algebra.Operation,\n _context: IActionContext,\n ): AsyncIterator<RDF.Quad> {\n throw new Error('queryQuads is not implemented in QuerySourceRdfJs');\n }\n\n public queryBoolean(\n _operation: Algebra.Ask,\n _context: IActionContext,\n ): Promise<boolean> {\n throw new Error('queryBoolean is not implemented in QuerySourceRdfJs');\n }\n\n public queryVoid(\n _operation: Algebra.Update,\n _context: IActionContext,\n ): Promise<void> {\n throw new Error('queryVoid is not implemented in QuerySourceRdfJs');\n }\n\n public toString(): string {\n return `QuerySourceRdfJs(${this.source.constructor.name})`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"QuerySourceRdfJs.js","sourceRoot":"","sources":["QuerySourceRdfJs.ts"],"names":[],"mappings":"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","sourcesContent":["import { filterMatchingQuotedQuads, getVariables, quadsToBindings } from '@comunica/bus-query-source-identify';\nimport { KeysQueryOperation } from '@comunica/context-entries';\nimport type {\n IQuerySource,\n BindingsStream,\n IActionContext,\n FragmentSelectorShape,\n ComunicaDataFactory,\n QuerySourceReference,\n} from '@comunica/types';\nimport type { BindingsFactory } from '@comunica/utils-bindings-factory';\nimport { MetadataValidationState } from '@comunica/utils-metadata';\nimport type * as RDF from '@rdfjs/types';\nimport { ArrayIterator, AsyncIterator, wrap as wrapAsyncIterator } from 'asynciterator';\nimport { someTermsNested, filterTermsNested, someTerms, uniqTerms } from 'rdf-terms';\nimport type { Algebra } from 'sparqlalgebrajs';\nimport { Factory } from 'sparqlalgebrajs';\nimport type { IRdfJsSourceExtended } from './IRdfJsSourceExtended';\n\nexport class QuerySourceRdfJs implements IQuerySource {\n protected readonly selectorShape: FragmentSelectorShape;\n public referenceValue: QuerySourceReference;\n protected readonly source: IRdfJsSourceExtended | RDF.DatasetCore;\n private readonly dataFactory: ComunicaDataFactory;\n private readonly bindingsFactory: BindingsFactory;\n private readonly dummyDefaultGraph: RDF.Variable;\n\n public constructor(\n source: RDF.Source | RDF.DatasetCore,\n dataFactory: ComunicaDataFactory,\n bindingsFactory: BindingsFactory,\n ) {\n this.source = source;\n this.referenceValue = source;\n this.dataFactory = dataFactory;\n this.bindingsFactory = bindingsFactory;\n const AF = new Factory(<RDF.DataFactory> this.dataFactory);\n this.selectorShape = {\n type: 'operation',\n operation: {\n operationType: 'pattern',\n pattern: AF.createPattern(\n this.dataFactory.variable('s'),\n this.dataFactory.variable('p'),\n this.dataFactory.variable('o'),\n ),\n },\n variablesOptional: [\n this.dataFactory.variable('s'),\n this.dataFactory.variable('p'),\n this.dataFactory.variable('o'),\n ],\n };\n this.dummyDefaultGraph = this.dataFactory.variable('__comunica:defaultGraph');\n }\n\n public static nullifyVariables(term: RDF.Term | undefined, quotedTripleFiltering: boolean): RDF.Term | undefined {\n return !term || term.termType === 'Variable' || (!quotedTripleFiltering &&\n term.termType === 'Quad' && someTermsNested(term, value => value.termType === 'Variable')) ?\n undefined :\n term;\n }\n\n public static hasDuplicateVariables(pattern: RDF.BaseQuad): boolean {\n const variables = filterTermsNested(pattern, term => term.termType === 'Variable');\n return variables.length > 1 && uniqTerms(variables).length < variables.length;\n }\n\n public async getSelectorShape(): Promise<FragmentSelectorShape> {\n return this.selectorShape;\n }\n\n public queryBindings(operation: Algebra.Operation, context: IActionContext): BindingsStream {\n if (operation.type !== 'pattern') {\n throw new Error(`Attempted to pass non-pattern operation '${operation.type}' to QuerySourceRdfJs`);\n }\n\n // Check if we're running in union default graph mode\n const unionDefaultGraph = Boolean(context.get(KeysQueryOperation.unionDefaultGraph));\n if (operation.graph.termType === 'DefaultGraph' && unionDefaultGraph) {\n operation.graph = this.dummyDefaultGraph;\n }\n\n // Get bindings directly if the source allows it\n // This will be more efficient, as it avoids the intermediary quads translation and representation.\n if ('matchBindings' in this.source && this.source.matchBindings) {\n const rawStream = this.source.matchBindings(\n this.bindingsFactory,\n operation.subject,\n operation.predicate,\n operation.object,\n operation.graph,\n );\n let it: AsyncIterator<RDF.Bindings> = rawStream instanceof AsyncIterator ?\n rawStream :\n wrapAsyncIterator<RDF.Bindings>(rawStream, { autoStart: false });\n\n // Check if non-default-graph triples need to be filtered out.\n // SPARQL query semantics allow graph variables to only match with named graphs, excluding the default graph\n // But this is not the case when using union default graph semantics\n let forceEstimateCardinality = false;\n if (operation.graph.termType === 'Variable' && !unionDefaultGraph) {\n forceEstimateCardinality = true;\n const variable = operation.graph;\n it = it.filter(bindings => bindings.get(variable)!.termType !== 'DefaultGraph');\n }\n\n // Remove bindings to the dummy __comunica:defaultGraph variable if needed\n if (operation.graph.equals(this.dummyDefaultGraph)) {\n it = it.map(bindings => bindings.delete(this.dummyDefaultGraph));\n // Restore graph for determining variable metadata\n operation.graph = this.dataFactory.defaultGraph();\n }\n\n // Determine metadata\n const variables = getVariables(operation).map(variable => ({ variable, canBeUndef: false }));\n this.setMetadata(it, operation, context, forceEstimateCardinality, { variables })\n .catch(error => it.destroy(error));\n\n return it;\n }\n\n // Check if the source supports quoted triple filtering\n const quotedTripleFiltering = Boolean('features' in this.source && this.source.features?.quotedTripleFiltering);\n\n // Create an async iterator from the matched quad stream\n const rawStream = this.source.match(\n QuerySourceRdfJs.nullifyVariables(operation.subject, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.predicate, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.object, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.graph, quotedTripleFiltering),\n );\n let it: AsyncIterator<RDF.Quad> = rawStream instanceof AsyncIterator ?\n rawStream :\n wrapAsyncIterator<RDF.Quad>(rawStream, { autoStart: false });\n\n // Perform post-match-filtering if the source does not support quoted triple filtering.\n if (!quotedTripleFiltering) {\n it = filterMatchingQuotedQuads(operation, it);\n }\n\n // Determine metadata\n if (!it.getProperty('metadata')) {\n this.setMetadata(it, operation, context)\n .catch(error => it.destroy(error));\n }\n\n // Restore graph for determining variable metadata\n if (operation.graph.equals(this.dummyDefaultGraph)) {\n operation.graph = this.dataFactory.defaultGraph();\n }\n\n return quadsToBindings(\n it,\n operation,\n this.dataFactory,\n this.bindingsFactory,\n Boolean(context.get(KeysQueryOperation.unionDefaultGraph)),\n );\n }\n\n protected async setMetadata(\n it: AsyncIterator<any>,\n operation: Algebra.Pattern,\n context: IActionContext,\n forceEstimateCardinality = false,\n extraMetadata: Record<string, any> = {},\n ): Promise<void> {\n // Check if the source supports quoted triple filtering\n const quotedTripleFiltering = Boolean('features' in this.source && this.source.features?.quotedTripleFiltering);\n\n // Check if we're running in union default graph mode\n const unionDefaultGraph = Boolean(context.get(KeysQueryOperation.unionDefaultGraph));\n if (operation.graph.termType === 'DefaultGraph' && unionDefaultGraph) {\n operation.graph = this.dummyDefaultGraph;\n }\n\n let cardinality: number;\n if ('countQuads' in this.source && this.source.countQuads) {\n // If the source provides a dedicated method for determining cardinality, use that.\n cardinality = await this.source.countQuads(\n QuerySourceRdfJs.nullifyVariables(operation.subject, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.predicate, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.object, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.graph, quotedTripleFiltering),\n );\n } else {\n // Otherwise, fallback to a sub-optimal alternative where we just call match again to count the quads.\n // WARNING: we can NOT reuse the original data stream here,\n // because we may lose data elements due to things happening async.\n let i = 0;\n cardinality = await new Promise((resolve, reject) => {\n let matches = this.source.match(\n QuerySourceRdfJs.nullifyVariables(operation.subject, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.predicate, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.object, quotedTripleFiltering),\n QuerySourceRdfJs.nullifyVariables(operation.graph, quotedTripleFiltering),\n );\n\n // If it's not a stream, turn it into one\n if (typeof (<any> matches).on !== 'function') {\n matches = <RDF.Stream>(new ArrayIterator(<RDF.DatasetCore> matches));\n }\n\n (<RDF.Stream>matches).on('error', reject);\n (<RDF.Stream>matches).on('end', () => resolve(i));\n (<RDF.Stream>matches).on('data', () => i++);\n });\n }\n\n // If `match` would require filtering afterwards, our count will be an over-estimate.\n const wouldRequirePostFiltering = (!quotedTripleFiltering &&\n someTerms(operation, term => term.termType === 'Quad')) ||\n QuerySourceRdfJs.hasDuplicateVariables(operation);\n\n it.setProperty('metadata', {\n state: new MetadataValidationState(),\n cardinality: {\n type: wouldRequirePostFiltering || forceEstimateCardinality ? 'estimate' : 'exact',\n value: cardinality,\n },\n // Force requestTime to zero, since this will be free for future calls, as we're fully indexed at this stage.\n requestTime: 0,\n ...extraMetadata,\n });\n }\n\n public queryQuads(\n _operation: Algebra.Operation,\n _context: IActionContext,\n ): AsyncIterator<RDF.Quad> {\n throw new Error('queryQuads is not implemented in QuerySourceRdfJs');\n }\n\n public queryBoolean(\n _operation: Algebra.Ask,\n _context: IActionContext,\n ): Promise<boolean> {\n throw new Error('queryBoolean is not implemented in QuerySourceRdfJs');\n }\n\n public queryVoid(\n _operation: Algebra.Update,\n _context: IActionContext,\n ): Promise<void> {\n throw new Error('queryVoid is not implemented in QuerySourceRdfJs');\n }\n\n public toString(): string {\n return `QuerySourceRdfJs(${this.source.constructor.name})`;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comunica/actor-query-source-identify-rdfjs",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0",
|
|
4
4
|
"description": "A rdfjs query-source-identify actor",
|
|
5
5
|
"lsd:module": true,
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,17 +41,17 @@
|
|
|
41
41
|
"build:components": "componentsjs-generator"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@comunica/bus-merge-bindings-context": "^4.
|
|
45
|
-
"@comunica/bus-query-source-identify": "^4.
|
|
46
|
-
"@comunica/context-entries": "^4.
|
|
47
|
-
"@comunica/core": "^4.
|
|
48
|
-
"@comunica/types": "^4.
|
|
49
|
-
"@comunica/utils-bindings-factory": "^4.
|
|
50
|
-
"@comunica/utils-metadata": "^4.
|
|
44
|
+
"@comunica/bus-merge-bindings-context": "^4.5.0",
|
|
45
|
+
"@comunica/bus-query-source-identify": "^4.5.0",
|
|
46
|
+
"@comunica/context-entries": "^4.5.0",
|
|
47
|
+
"@comunica/core": "^4.5.0",
|
|
48
|
+
"@comunica/types": "^4.5.0",
|
|
49
|
+
"@comunica/utils-bindings-factory": "^4.5.0",
|
|
50
|
+
"@comunica/utils-metadata": "^4.5.0",
|
|
51
51
|
"@rdfjs/types": "*",
|
|
52
52
|
"asynciterator": "^3.9.0",
|
|
53
53
|
"rdf-terms": "^1.11.0",
|
|
54
|
-
"sparqlalgebrajs": "^
|
|
54
|
+
"sparqlalgebrajs": "^5.0.2"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "2bcd98c387a021fc5c08d375793c205ca3d1bf0d"
|
|
57
57
|
}
|