UNPKG

vue-cesium

Version:
1 lines 48.7 kB
{"version":3,"file":"PrimitiveCluster.mjs","sources":["../../../../../packages/shared/src/PrimitiveCluster.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2023-05-26 13:30:22\n * @Description: Do not edit\n * @LastEditors: zouyaoji 370681295@qq.com\n * @LastEditTime: 2024-04-02 00:43:38\n * @FilePath: \\vue-cesium\\packages\\shared\\src\\PrimitiveCluster.ts\n */\nimport { defaultValue } from '@vue-cesium/utils/util'\nimport KDBush from 'kdbush'\nimport { VcPrimitiveClusterOptions } from '@vue-cesium/utils/types'\n\n/**\n * 图元聚合\n * https://github.com/tingyuxuan2302/cesium-vue3-vite/blob/github/src/utils/cesiumCtrl/primitiveCluster.js\n */\nexport default class PrimitiveCluster {\n _enabled: boolean\n _pixelRange: number\n _minimumClusterSize: number\n _clusterBillboards: boolean\n _clusterLabels: boolean\n _clusterPoints: boolean\n _labelCollection: any\n _billboardCollection: any\n _pointCollection: any\n _clusterBillboardCollection: any\n _clusterLabelCollection: any\n _clusterPointCollection: any\n _collectionIndicesByEntity: any\n _unusedLabelIndices: any[]\n _unusedBillboardIndices: any[]\n _unusedPointIndices: any[]\n _previousClusters: any[]\n _previousHeight: number\n _enabledDirty: boolean\n _clusterDirty: boolean\n _cluster: any\n _removeEventListener: Cesium.Event.RemoveCallback\n _clusterEvent: Cesium.Event\n show: boolean\n _scene: Cesium.Scene\n _pixelRangeDirty: boolean\n _minimumClusterSizeDirty: boolean\n constructor(options?: VcPrimitiveClusterOptions) {\n options = defaultValue(options, {})\n\n this._enabled = defaultValue(options.enabled, false)\n this._pixelRange = defaultValue(options.pixelRange, 80)\n this._minimumClusterSize = defaultValue(options.minimumClusterSize, 2)\n this._clusterBillboards = defaultValue(options.clusterBillboards, true)\n this._clusterLabels = defaultValue(options.clusterLabels, true)\n this._clusterPoints = defaultValue(options.clusterPoints, true)\n\n this._labelCollection = undefined\n this._billboardCollection = undefined\n this._pointCollection = undefined\n\n this._clusterBillboardCollection = undefined\n this._clusterLabelCollection = undefined\n this._clusterPointCollection = undefined\n\n this._collectionIndicesByEntity = {}\n\n this._unusedLabelIndices = []\n this._unusedBillboardIndices = []\n this._unusedPointIndices = []\n\n this._previousClusters = []\n this._previousHeight = undefined\n\n this._enabledDirty = false\n this._clusterDirty = false\n\n this._cluster = undefined\n this._removeEventListener = undefined\n\n this._clusterEvent = new Cesium.Event()\n\n /**\n * Determines if entities in this collection will be shown.\n *\n * @type {Boolean}\n * @default true\n */\n this.show = defaultValue(options.show, true)\n }\n\n _initialize(scene: Cesium.Scene) {\n this._scene = scene\n\n const cluster = createDeclutterCallback(this)\n this._cluster = cluster\n this._removeEventListener = scene.camera.changed.addEventListener(cluster)\n }\n\n get enabled() {\n return this._enabled\n }\n\n set enabled(value) {\n this._enabledDirty = value !== this._enabled\n this._enabled = value\n }\n\n get pixelRange() {\n return this._pixelRange\n }\n set pixelRange(value) {\n this._clusterDirty = this._clusterDirty || value !== this._pixelRange\n this._pixelRange = value\n }\n\n get minimumClusterSize() {\n return this._minimumClusterSize\n }\n set minimumClusterSize(value) {\n this._clusterDirty = this._clusterDirty || value !== this._minimumClusterSize\n this._minimumClusterSize = value\n }\n\n get clusterEvent() {\n return this._clusterEvent\n }\n\n get clusterBillboards() {\n return this._clusterBillboards\n }\n set clusterBillboards(value) {\n this._clusterDirty = this._clusterDirty || value !== this._clusterBillboards\n this._clusterBillboards = value\n }\n\n get clusterLabels() {\n return this._clusterLabels\n }\n set clusterLabels(value) {\n this._clusterDirty = this._clusterDirty || value !== this._clusterLabels\n this._clusterLabels = value\n }\n\n get clusterPoints() {\n return this._clusterPoints\n }\n set clusterPoints(value) {\n this._clusterDirty = this._clusterDirty || value !== this._clusterPoints\n this._clusterPoints = value\n }\n\n getLabel(entity) {\n return createGetEntity.call(this, entity, '_labelCollection', Cesium.LabelCollection, '_unusedLabelIndices', 'labelIndex')\n }\n\n removeLabel(entity) {\n const { defined } = Cesium\n const entityIndices = this._collectionIndicesByEntity && this._collectionIndicesByEntity[entity.id]\n if (!defined(this._labelCollection) || !defined(entityIndices) || !defined(entityIndices.labelIndex)) {\n return\n }\n\n const index = entityIndices.labelIndex\n entityIndices.labelIndex = undefined\n removeEntityIndicesIfUnused(this, entity.id)\n\n const label = this._labelCollection.get(index)\n label.show = false\n label.text = ''\n label.id = undefined\n\n this._unusedLabelIndices.push(index)\n\n this._clusterDirty = true\n }\n\n getBillboard(entity) {\n return createGetEntity.call(this, entity, '_billboardCollection', Cesium.BillboardCollection, '_unusedBillboardIndices', 'billboardIndex')\n }\n\n removeBillboard(entity) {\n const { defined } = Cesium\n const entityIndices = this._collectionIndicesByEntity && this._collectionIndicesByEntity[entity.id]\n if (!defined(this._billboardCollection) || !defined(entityIndices) || !defined(entityIndices.billboardIndex)) {\n return\n }\n\n const index = entityIndices.billboardIndex\n entityIndices.billboardIndex = undefined\n removeEntityIndicesIfUnused(this, entity.id)\n\n const billboard = this._billboardCollection.get(index)\n billboard.id = undefined\n billboard.show = false\n billboard.image = undefined\n\n this._unusedBillboardIndices.push(index)\n\n this._clusterDirty = true\n }\n\n getPoint(entity) {\n return createGetEntity.call(this, entity, '_pointCollection', Cesium.PointPrimitiveCollection, '_unusedPointIndices', 'pointIndex')\n }\n\n removePoint(entity) {\n const { defined } = Cesium\n const entityIndices = this._collectionIndicesByEntity && this._collectionIndicesByEntity[entity.id]\n if (!defined(this._pointCollection) || !defined(entityIndices) || !defined(entityIndices.pointIndex)) {\n return\n }\n\n const index = entityIndices.pointIndex\n entityIndices.pointIndex = undefined\n removeEntityIndicesIfUnused(this, entity.id)\n\n const point = this._pointCollection.get(index)\n point.show = false\n point.id = undefined\n\n this._unusedPointIndices.push(index)\n\n this._clusterDirty = true\n }\n\n update(frameState) {\n if (!this.show) {\n return\n }\n\n const { defined } = Cesium\n\n // If clustering is enabled before the label collection is updated,\n // the glyphs haven't been created so the screen space bounding boxes\n // are incorrect.\n let commandList\n if (defined(this._labelCollection) && this._labelCollection.length > 0 && this._labelCollection.get(0)._glyphs.length === 0) {\n commandList = frameState.commandList\n frameState.commandList = []\n this._labelCollection.update(frameState)\n frameState.commandList = commandList\n }\n\n // If clustering is enabled before the billboard collection is updated,\n // the images haven't been added to the image atlas so the screen space bounding boxes\n // are incorrect.\n if (defined(this._billboardCollection) && this._billboardCollection.length > 0 && !defined(this._billboardCollection.get(0).width)) {\n commandList = frameState.commandList\n frameState.commandList = []\n this._billboardCollection.update(frameState)\n frameState.commandList = commandList\n }\n\n if (this._enabledDirty) {\n this._enabledDirty = false\n updateEnable(this)\n this._clusterDirty = true\n }\n\n if (this._clusterDirty) {\n this._clusterDirty = false\n this._cluster()\n }\n\n if (defined(this._clusterLabelCollection)) {\n this._clusterLabelCollection.update(frameState)\n }\n if (defined(this._clusterBillboardCollection)) {\n this._clusterBillboardCollection.update(frameState)\n }\n if (defined(this._clusterPointCollection)) {\n this._clusterPointCollection.update(frameState)\n }\n\n if (defined(this._labelCollection)) {\n this._labelCollection.update(frameState)\n }\n if (defined(this._billboardCollection)) {\n this._billboardCollection.update(frameState)\n }\n if (defined(this._pointCollection)) {\n this._pointCollection.update(frameState)\n }\n }\n\n destroy() {\n const { defined } = Cesium\n this._labelCollection = this._labelCollection && this._labelCollection.destroy()\n this._billboardCollection = this._billboardCollection && this._billboardCollection.destroy()\n this._pointCollection = this._pointCollection && this._pointCollection.destroy()\n\n this._clusterLabelCollection = this._clusterLabelCollection && this._clusterLabelCollection.destroy()\n this._clusterBillboardCollection = this._clusterBillboardCollection && this._clusterBillboardCollection.destroy()\n this._clusterPointCollection = this._clusterPointCollection && this._clusterPointCollection.destroy()\n\n if (defined(this._removeEventListener)) {\n this._removeEventListener()\n this._removeEventListener = undefined\n }\n\n this._labelCollection = undefined\n this._billboardCollection = undefined\n this._pointCollection = undefined\n\n this._clusterBillboardCollection = undefined\n this._clusterLabelCollection = undefined\n this._clusterPointCollection = undefined\n\n this._collectionIndicesByEntity = undefined\n\n this._unusedLabelIndices = []\n this._unusedBillboardIndices = []\n this._unusedPointIndices = []\n\n this._previousClusters = []\n this._previousHeight = undefined\n\n this._enabledDirty = false\n this._pixelRangeDirty = false\n this._minimumClusterSizeDirty = false\n\n return undefined\n }\n}\n\nfunction updateEnable(entityCluster) {\n if (entityCluster.enabled) {\n return\n }\n\n const { defined } = Cesium\n\n if (defined(entityCluster._clusterLabelCollection)) {\n entityCluster._clusterLabelCollection.destroy()\n }\n if (defined(entityCluster._clusterBillboardCollection)) {\n entityCluster._clusterBillboardCollection.destroy()\n }\n if (defined(entityCluster._clusterPointCollection)) {\n entityCluster._clusterPointCollection.destroy()\n }\n\n entityCluster._clusterLabelCollection = undefined\n entityCluster._clusterBillboardCollection = undefined\n entityCluster._clusterPointCollection = undefined\n\n disableCollectionClustering(entityCluster._labelCollection)\n disableCollectionClustering(entityCluster._billboardCollection)\n disableCollectionClustering(entityCluster._pointCollection)\n}\n\nfunction disableCollectionClustering(collection) {\n const { defined } = Cesium\n\n if (!defined(collection)) {\n return\n }\n\n const length = collection.length\n for (let i = 0; i < length; ++i) {\n collection.get(i).clusterShow = true\n }\n}\n\nfunction createGetEntity(this, entity, collectionProperty, CollectionConstructor, unusedIndicesProperty, entityIndexProperty) {\n const { defined } = Cesium\n let collection = this[collectionProperty]\n\n if (!defined(this._collectionIndicesByEntity)) {\n this._collectionIndicesByEntity = {}\n }\n\n let entityIndices = this._collectionIndicesByEntity[entity.id]\n\n if (!defined(entityIndices)) {\n entityIndices = this._collectionIndicesByEntity[entity.id] = {\n billboardIndex: undefined,\n labelIndex: undefined,\n pointIndex: undefined\n }\n }\n\n if (defined(collection) && defined(entityIndices[entityIndexProperty])) {\n return collection.get(entityIndices[entityIndexProperty])\n }\n\n if (!defined(collection)) {\n collection = this[collectionProperty] = new CollectionConstructor({\n scene: this._scene\n })\n }\n\n let index\n let entityItem\n\n const unusedIndices = this[unusedIndicesProperty]\n if (unusedIndices.length > 0) {\n index = unusedIndices.pop()\n entityItem = collection.get(index)\n } else {\n entityItem = collection.add()\n index = collection.length - 1\n }\n\n entityIndices[entityIndexProperty] = index\n\n const that = this\n Promise.resolve().then(function () {\n that._clusterDirty = true\n })\n\n return entityItem\n}\n\nfunction removeEntityIndicesIfUnused(entityCluster, entityId) {\n const { defined } = Cesium\n const indices = entityCluster._collectionIndicesByEntity[entityId]\n\n if (!defined(indices.billboardIndex) && !defined(indices.labelIndex) && !defined(indices.pointIndex)) {\n delete entityCluster._collectionIndicesByEntity[entityId]\n }\n}\n\nfunction getX(point) {\n return point.coord.x\n}\n\nfunction getY(point) {\n return point.coord.y\n}\n\nfunction expandBoundingBox(bbox, pixelRange) {\n bbox.x -= pixelRange\n bbox.y -= pixelRange\n bbox.width += pixelRange * 2.0\n bbox.height += pixelRange * 2.0\n}\n\nfunction getBoundingBox(item, coord, pixelRange, entityCluster, result) {\n const { defined, Label, Billboard, PointPrimitive, BoundingRectangle } = Cesium\n const labelBoundingBoxScratch = new BoundingRectangle()\n if (defined(item._labelCollection) && entityCluster._clusterLabels) {\n result = Label['getScreenSpaceBoundingBox'](item, coord, result)\n } else if (defined(item._billboardCollection) && entityCluster._clusterBillboards) {\n result = Billboard['getScreenSpaceBoundingBox'](item, coord, result)\n } else if (defined(item._pointPrimitiveCollection) && entityCluster._clusterPoints) {\n result = PointPrimitive['getScreenSpaceBoundingBox'](item, coord, result)\n }\n\n expandBoundingBox(result, pixelRange)\n\n if (\n entityCluster._clusterLabels &&\n !defined(item._labelCollection) &&\n defined(item.id) &&\n hasLabelIndex(entityCluster, item.id.id) &&\n defined(item.id._label)\n ) {\n const labelIndex = entityCluster._collectionIndicesByEntity[item.id.id].labelIndex\n const label = entityCluster._labelCollection.get(labelIndex)\n const labelBBox = Label['getScreenSpaceBoundingBox'](label, coord, labelBoundingBoxScratch)\n expandBoundingBox(labelBBox, pixelRange)\n result = BoundingRectangle.union(result, labelBBox, result)\n }\n\n return result\n}\n\nfunction addNonClusteredItem(item, entityCluster) {\n const { defined } = Cesium\n item.clusterShow = true\n\n if (!defined(item._labelCollection) && defined(item.id) && hasLabelIndex(entityCluster, item.id.id) && defined(item.id._label)) {\n const labelIndex = entityCluster._collectionIndicesByEntity[item.id.id].labelIndex\n const label = entityCluster._labelCollection.get(labelIndex)\n label.clusterShow = true\n }\n}\n\nfunction addCluster(position, numPoints, ids, entityCluster) {\n const cluster = {\n billboard: entityCluster._clusterBillboardCollection.add(),\n label: entityCluster._clusterLabelCollection.add(),\n point: entityCluster._clusterPointCollection.add()\n }\n\n cluster.billboard.show = false\n cluster.point.show = false\n cluster.label.show = true\n cluster.label.text = numPoints.toLocaleString()\n cluster.label.id = ids\n cluster.billboard.position = cluster.label.position = cluster.point.position = position\n cluster.billboard.owner = entityCluster\n cluster.label.owner = entityCluster\n cluster.point.owner = entityCluster\n\n entityCluster._clusterEvent.raiseEvent(ids, cluster)\n}\n\nfunction hasLabelIndex(entityCluster, entityId) {\n const { defined } = Cesium\n return (\n defined(entityCluster) &&\n defined(entityCluster._collectionIndicesByEntity[entityId]) &&\n defined(entityCluster._collectionIndicesByEntity[entityId].labelIndex)\n )\n}\n\nfunction getScreenSpacePositions(collection, points, scene, occluder, entityCluster) {\n const { defined, SceneMode } = Cesium\n if (!defined(collection)) {\n return\n }\n\n const length = collection.length\n for (let i = 0; i < length; ++i) {\n const item = collection.get(i)\n item.clusterShow = false\n\n if (!item.show || (entityCluster._scene.mode === SceneMode.SCENE3D && !occluder.isPointVisible(item.position))) {\n continue\n }\n\n // const canClusterLabels =\n // entityCluster._clusterLabels && defined(item._labelCollection);\n // const canClusterBillboards =\n // entityCluster._clusterBillboards && defined(item.id._billboard);\n // const canClusterPoints =\n // entityCluster._clusterPoints && defined(item.id._point);\n // if (canClusterLabels && (canClusterPoints || canClusterBillboards)) {\n // continue;\n // }\n\n const coord = item.computeScreenSpacePosition(scene)\n if (!defined(coord)) {\n continue\n }\n\n points.push({\n index: i,\n collection: collection,\n clustered: false,\n coord: coord\n })\n }\n}\n\nfunction createDeclutterCallback(entityCluster) {\n const { defined, LabelCollection, BillboardCollection, PointPrimitiveCollection, Billboard, Matrix4, Cartesian3, Cartesian2, BoundingRectangle } =\n Cesium\n\n const pointBoundinRectangleScratch = new BoundingRectangle()\n const totalBoundingRectangleScratch = new BoundingRectangle()\n const neighborBoundingRectangleScratch = new BoundingRectangle()\n\n return function (amount) {\n if ((defined(amount) && amount < 0.05) || !entityCluster.enabled) {\n return\n }\n\n const scene = entityCluster._scene\n\n const labelCollection = entityCluster._labelCollection\n const billboardCollection = entityCluster._billboardCollection\n const pointCollection = entityCluster._pointCollection\n\n if (\n (!defined(labelCollection) && !defined(billboardCollection) && !defined(pointCollection)) ||\n (!entityCluster._clusterBillboards && !entityCluster._clusterLabels && !entityCluster._clusterPoints)\n ) {\n return\n }\n\n let clusteredLabelCollection = entityCluster._clusterLabelCollection\n let clusteredBillboardCollection = entityCluster._clusterBillboardCollection\n let clusteredPointCollection = entityCluster._clusterPointCollection\n\n if (defined(clusteredLabelCollection)) {\n clusteredLabelCollection.removeAll()\n } else {\n clusteredLabelCollection = entityCluster._clusterLabelCollection = new LabelCollection({\n scene: scene\n })\n }\n\n if (defined(clusteredBillboardCollection)) {\n clusteredBillboardCollection.removeAll()\n } else {\n clusteredBillboardCollection = entityCluster._clusterBillboardCollection = new BillboardCollection({\n scene: scene\n })\n }\n\n if (defined(clusteredPointCollection)) {\n clusteredPointCollection.removeAll()\n } else {\n clusteredPointCollection = entityCluster._clusterPointCollection = new PointPrimitiveCollection()\n }\n\n const pixelRange = entityCluster._pixelRange\n const minimumClusterSize = entityCluster._minimumClusterSize\n\n const clusters = entityCluster._previousClusters\n const newClusters = []\n\n const previousHeight = entityCluster._previousHeight\n const currentHeight = scene.camera.positionCartographic.height\n\n const ellipsoid = scene.mapProjection.ellipsoid\n const cameraPosition = scene.camera.positionWC\n const occluder = new Cesium['EllipsoidalOccluder'](ellipsoid, cameraPosition)\n\n const points = []\n if (entityCluster._clusterLabels) {\n getScreenSpacePositions(labelCollection, points, scene, occluder, entityCluster)\n }\n if (entityCluster._clusterBillboards) {\n getScreenSpacePositions(billboardCollection, points, scene, occluder, entityCluster)\n }\n if (entityCluster._clusterPoints) {\n getScreenSpacePositions(pointCollection, points, scene, occluder, entityCluster)\n }\n\n let i\n let j\n let length\n let bbox\n let neighbors\n let neighborLength\n let neighborIndex\n let neighborPoint\n let ids\n let numPoints\n\n let collection\n let collectionIndex\n\n const index = new KDBush(points.length, 64, Int32Array)\n for (let i = 0; i < points.length; i++) {\n index.add(points[i].coord.x, points[i].coord.y)\n }\n index.finish()\n\n if (currentHeight < previousHeight) {\n length = clusters.length\n for (i = 0; i < length; ++i) {\n const cluster = clusters[i]\n\n if (!occluder.isPointVisible(cluster.position)) {\n continue\n }\n\n const coord = Billboard['_computeScreenSpacePosition'](Matrix4.IDENTITY, cluster.position, Cartesian3.ZERO, Cartesian2.ZERO, scene)\n if (!defined(coord)) {\n continue\n }\n\n const factor = 1.0 - currentHeight / previousHeight\n let width = (cluster.width = cluster.width * factor)\n let height = (cluster.height = cluster.height * factor)\n\n width = Math.max(width, cluster.minimumWidth)\n height = Math.max(height, cluster.minimumHeight)\n\n const minX = coord.x - width * 0.5\n const minY = coord.y - height * 0.5\n const maxX = coord.x + width\n const maxY = coord.y + height\n\n neighbors = index.range(minX, minY, maxX, maxY)\n neighborLength = neighbors.length\n numPoints = 0\n ids = []\n\n for (j = 0; j < neighborLength; ++j) {\n neighborIndex = neighbors[j]\n neighborPoint = points[neighborIndex]\n if (!neighborPoint.clustered) {\n ++numPoints\n\n collection = neighborPoint.collection\n collectionIndex = neighborPoint.index\n ids.push(collection.get(collectionIndex).id)\n }\n }\n\n if (numPoints >= minimumClusterSize) {\n addCluster(cluster.position, numPoints, ids, entityCluster)\n newClusters.push(cluster)\n\n for (j = 0; j < neighborLength; ++j) {\n points[neighbors[j]].clustered = true\n }\n }\n }\n }\n\n length = points.length\n for (i = 0; i < length; ++i) {\n const point = points[i]\n if (point.clustered) {\n continue\n }\n\n point.clustered = true\n\n collection = point.collection\n collectionIndex = point.index\n\n const item = collection.get(collectionIndex)\n bbox = getBoundingBox(item, point.coord, pixelRange, entityCluster, pointBoundinRectangleScratch)\n const totalBBox = BoundingRectangle.clone(bbox, totalBoundingRectangleScratch)\n\n neighbors = index.range(bbox.x, bbox.y, bbox.x + bbox.width, bbox.y + bbox.height)\n neighborLength = neighbors.length\n\n const clusterPosition = Cartesian3.clone(item.position)\n numPoints = 1\n ids = [item.id]\n\n for (j = 0; j < neighborLength; ++j) {\n neighborIndex = neighbors[j]\n neighborPoint = points[neighborIndex]\n if (!neighborPoint.clustered) {\n const neighborItem = neighborPoint.collection.get(neighborPoint.index)\n const neighborBBox = getBoundingBox(neighborItem, neighborPoint.coord, pixelRange, entityCluster, neighborBoundingRectangleScratch)\n\n Cartesian3.add(neighborItem.position, clusterPosition, clusterPosition)\n\n BoundingRectangle.union(totalBBox, neighborBBox, totalBBox)\n ++numPoints\n\n ids.push(neighborItem.id)\n }\n }\n\n if (numPoints >= minimumClusterSize) {\n const position = Cartesian3.multiplyByScalar(clusterPosition, 1.0 / numPoints, clusterPosition)\n addCluster(position, numPoints, ids, entityCluster)\n newClusters.push({\n position: position,\n width: totalBBox.width,\n height: totalBBox.height,\n minimumWidth: bbox.width,\n minimumHeight: bbox.height\n })\n\n for (j = 0; j < neighborLength; ++j) {\n points[neighbors[j]].clustered = true\n }\n } else {\n addNonClusteredItem(item, entityCluster)\n }\n }\n\n if (clusteredLabelCollection.length === 0) {\n clusteredLabelCollection.destroy()\n entityCluster._clusterLabelCollection = undefined\n }\n\n if (clusteredBillboardCollection.length === 0) {\n clusteredBillboardCollection.destroy()\n entityCluster._clusterBillboardCollection = undefined\n }\n\n if (clusteredPointCollection.length === 0) {\n clusteredPointCollection.destroy()\n entityCluster._clusterPointCollection = undefined\n }\n\n entityCluster._previousClusters = newClusters\n entityCluster._previousHeight = currentHeight\n }\n}\n"],"names":["i"],"mappings":"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"}