@ohif/app 3.9.1 → 3.9.2

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.
Files changed (38) hide show
  1. package/dist/{1185.bundle.023fe7179faaa50019d3.js → 1185.bundle.d328aabb2b43e9ea1f96.js} +62 -14
  2. package/dist/{1266.bundle.e9abd5c45b5236544151.js → 1266.bundle.46de27eda2ef1fce1243.js} +5 -0
  3. package/dist/{1436.bundle.773756cd51b69e887bac.js → 1436.bundle.27ae9c87e9fc7f52cad3.js} +234 -63
  4. package/dist/{1927.bundle.49539e3ab5b0aad1399c.js → 1927.bundle.2b2fa0b539d6ac5b0dc3.js} +1 -1
  5. package/dist/{3200.bundle.a12825fb5aec200d33e2.js → 3200.bundle.ccb809fb554332d9a0f5.js} +15 -7
  6. package/dist/{149.bundle.ce5596fc563276036744.js → 3900.bundle.3937999d1ee1f391647a.js} +35 -1
  7. package/dist/{4571.bundle.3b1691730b3c57bf4d35.js → 4571.bundle.a37be49663df2f4a2c8a.js} +99 -89
  8. package/dist/{5247.bundle.6dc2a50f21821b2ffdf5.js → 5247.bundle.1a1d7c27de482e4a73f3.js} +2 -2
  9. package/dist/{5252.bundle.5ec502c53a9cc877ed8d.js → 5252.bundle.f2675336275573a288d5.js} +13 -1
  10. package/dist/{1520.bundle.97dbd9bfa83148e5334d.js → 5630.bundle.1bd2402f37597078c1a1.js} +70 -59
  11. package/dist/{5717.bundle.848e13f256818475f57f.js → 5717.bundle.32836c212103dbbe8e4a.js} +247 -64
  12. package/dist/{7197.bundle.c28453cdb392072d8bf8.js → 7197.bundle.42a975bb7ae4a8df2d00.js} +2 -2
  13. package/dist/{7955.bundle.6a255705b1ef5906f4a8.js → 7955.bundle.f6c5edb284bdf8b80f2a.js} +1 -1
  14. package/dist/{8228.bundle.55ac03d7165248f47d4e.js → 8228.bundle.0a7997d04c82dd8c11c5.js} +2 -2
  15. package/dist/{8523.bundle.648334132159465cdc41.js → 8523.bundle.c0ec85de98ba380ebeb4.js} +55 -13
  16. package/dist/{9551.bundle.6c260a9869e14dcc3543.js → 9551.bundle.63b2679dd7beee6396d8.js} +1 -1
  17. package/dist/{app.bundle.d02143bec2df7fec9964.js → app.bundle.632bc6188462e1c95a41.js} +143 -80
  18. package/dist/app.bundle.css +2 -2
  19. package/dist/index.html +1 -1
  20. package/dist/{polySeg.bundle.b79ae514989e86301c71.js → polySeg.bundle.6e85073e3abf2e6e6078.js} +1 -1
  21. package/dist/serve.json +1 -10
  22. package/dist/{suv-peak-worker.bundle.31c3b3b957204af93b7e.js → suv-peak-worker.bundle.1f483dc7131d7c26b517.js} +3 -3
  23. package/dist/sw.js +1 -1
  24. package/package.json +19 -19
  25. /package/dist/{1374.bundle.019bbc010eeb66109e8b.js → 1374.bundle.1ee8326c0748c7b1a7c0.js} +0 -0
  26. /package/dist/{213.bundle.e663335fb0884edde6d8.js → 213.bundle.8c04fecea2e3796e4d73.js} +0 -0
  27. /package/dist/{2424.bundle.b7da298db43541d3a7c0.js → 2424.bundle.38b19314ebd984c9d393.js} +0 -0
  28. /package/dist/{2825.bundle.b04c941a87fd580deb6d.js → 2825.bundle.0307cae794e8b057c674.js} +0 -0
  29. /package/dist/{3198.bundle.c82b7424070ffd02faf1.js → 3198.bundle.ab612063af0d67397377.js} +0 -0
  30. /package/dist/{4834.bundle.aad44c2628cdefb7a4dd.js → 4834.bundle.c25348524be5214e90d6.js} +0 -0
  31. /package/dist/{5139.bundle.367a6827071448e2923d.js → 5139.bundle.db30dc02cf41e91c8985.js} +0 -0
  32. /package/dist/{5687.bundle.5731ec23dd9eb43a083e.js → 5687.bundle.05de4787676bf79f9906.js} +0 -0
  33. /package/dist/{717.bundle.0f32b7b57347b5141248.js → 717.bundle.3a4b8835adf03e4554c7.js} +0 -0
  34. /package/dist/{8008.bundle.5bf7b274246be10e2f05.js → 8008.bundle.d4187a30e8f656a21316.js} +0 -0
  35. /package/dist/{8259.bundle.623c29b26b170a8a085b.js → 8259.bundle.990db2fa9ce0800319e9.js} +0 -0
  36. /package/dist/{8558.bundle.01d05fd73da5db8e60f9.js → 8558.bundle.63714e2329c22c9cb9da.js} +0 -0
  37. /package/dist/{9611.bundle.767595c93877e5166c03.js → 9611.bundle.78a4ffb439f65cfd0379.js} +0 -0
  38. /package/dist/{9862.bundle.7146682e56aa66130ae6.js → 9862.bundle.aa2f8e0010f1be1bc87d.js} +0 -0
@@ -934,7 +934,7 @@ class BaseVolumeViewport extends _Viewport__WEBPACK_IMPORTED_MODULE_18__/* ["def
934
934
  sliceIndex ??= currentIndex;
935
935
  const { viewPlaneNormal, focalPoint } = this.getCamera();
936
936
  const querySeparator = volumeId.includes('?') ? '&' : '?';
937
- return `volumeId:${volumeId}${querySeparator}sliceIndex=${sliceIndex}&viewPlaneNormal=${viewPlaneNormal.join(',')}&focalPoint=${focalPoint.join(',')}`;
937
+ return `volumeId:${volumeId}${querySeparator}sliceIndex=${sliceIndex}&viewPlaneNormal=${viewPlaneNormal.join(',')}`;
938
938
  }
939
939
  _addVolumeId(volumeId) {
940
940
  this.volumeIds.add(volumeId);
@@ -16844,6 +16844,12 @@ var cache = __webpack_require__(49038);
16844
16844
 
16845
16845
 
16846
16846
 
16847
+ function convertDataType(data, targetDataType) {
16848
+ const Constructor = (0,getBufferConfiguration/* getConstructorFromType */.j)(targetDataType);
16849
+ const convertedData = new Constructor(data.length);
16850
+ convertedData.set(data);
16851
+ return convertedData;
16852
+ }
16847
16853
  function vtkStreamingOpenGLTexture(publicAPI, model) {
16848
16854
  model.classHierarchy.push('vtkStreamingOpenGLTexture');
16849
16855
  model.updatedFrames = [];
@@ -16894,10 +16900,14 @@ function vtkStreamingOpenGLTexture(publicAPI, model) {
16894
16900
  if (!image) {
16895
16901
  continue;
16896
16902
  }
16897
- const data = image.voxelManager.getScalarData();
16903
+ let data = image.voxelManager.getScalarData();
16898
16904
  const gl = model.context;
16899
- const dataType = data.constructor.name;
16900
- const [pixData] = publicAPI.updateArrayDataTypeForGL(dataType, [data]);
16905
+ if (volume.dataType !== data.constructor.name) {
16906
+ data = convertDataType(data, volume.dataType);
16907
+ }
16908
+ const [pixData] = publicAPI.updateArrayDataTypeForGL(volume.dataType, [
16909
+ data,
16910
+ ]);
16901
16911
  publicAPI.bind();
16902
16912
  const zOffset = i;
16903
16913
  gl.texSubImage3D(model.target, 0, 0, 0, zOffset, model.width, model.height, 1, model.format, model.openGLDataType, pixData);
@@ -16931,8 +16941,12 @@ function vtkStreamingOpenGLTexture(publicAPI, model) {
16931
16941
  constructor = data.constructor;
16932
16942
  }
16933
16943
  const gl = model.context;
16934
- const dataType = data.constructor.name;
16935
- const [pixData] = publicAPI.updateArrayDataTypeForGL(dataType, [data]);
16944
+ if (volume.dataType !== data.constructor.name) {
16945
+ data = convertDataType(data, volume.dataType);
16946
+ }
16947
+ const [pixData] = publicAPI.updateArrayDataTypeForGL(volume.dataType, [
16948
+ data,
16949
+ ]);
16936
16950
  publicAPI.bind();
16937
16951
  let zOffset = i;
16938
16952
  gl.texSubImage3D(model.target, 0, 0, 0, zOffset, model.width, model.height, 1, model.format, model.openGLDataType, pixData);
@@ -25049,12 +25063,20 @@ const deepMerge = (target = {}, source = {}, optionsArgument = undefined) => {
25049
25063
  /* harmony import */ var _getScalingParameters__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(32173);
25050
25064
  /* harmony import */ var _hasFloatScalingParameters__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(30169);
25051
25065
  /* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(59693);
25066
+ /* harmony import */ var _cache_cache__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(49038);
25067
+
25052
25068
 
25053
25069
 
25054
25070
 
25055
25071
 
25056
25072
 
25057
25073
 
25074
+ const constructorToTypedArray = {
25075
+ Uint8Array: 'Uint8Array',
25076
+ Int16Array: 'Int16Array',
25077
+ Uint16Array: 'Uint16Array',
25078
+ Float32Array: 'Float32Array',
25079
+ };
25058
25080
  function generateVolumePropsFromImageIds(imageIds, volumeId) {
25059
25081
  const volumeMetadata = (0,_makeVolumeMetadata__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(imageIds);
25060
25082
  const { ImageOrientationPatient, PixelSpacing, Columns, Rows } = volumeMetadata;
@@ -25087,6 +25109,10 @@ function generateVolumePropsFromImageIds(imageIds, volumeId) {
25087
25109
  function _determineDataType(imageIds, volumeMetadata) {
25088
25110
  const { BitsAllocated, PixelRepresentation } = volumeMetadata;
25089
25111
  const signed = PixelRepresentation === 1;
25112
+ const cachedDataType = _getDataTypeFromCache(imageIds);
25113
+ if (cachedDataType) {
25114
+ return cachedDataType;
25115
+ }
25090
25116
  const [firstIndex, middleIndex, lastIndex] = [
25091
25117
  0,
25092
25118
  Math.floor(imageIds.length / 2),
@@ -25121,6 +25147,19 @@ function _determineDataType(imageIds, volumeMetadata) {
25121
25147
  throw new Error(`Bits allocated of ${BitsAllocated} is not defined to generate scalarData for the volume.`);
25122
25148
  }
25123
25149
  }
25150
+ function _getDataTypeFromCache(imageIds) {
25151
+ const indices = [0, Math.floor(imageIds.length / 2), imageIds.length - 1];
25152
+ const images = indices.map((i) => _cache_cache__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Ay.getImage(imageIds[i]));
25153
+ if (!images.every(Boolean)) {
25154
+ return null;
25155
+ }
25156
+ const constructorName = images[0].getPixelData().constructor.name;
25157
+ if (images.every((img) => img.getPixelData().constructor.name === constructorName) &&
25158
+ constructorName in constructorToTypedArray) {
25159
+ return constructorToTypedArray[constructorName];
25160
+ }
25161
+ return null;
25162
+ }
25124
25163
 
25125
25164
 
25126
25165
 
@@ -25768,6 +25807,15 @@ const imageRetrieveMetadataProvider = {
25768
25807
  add: (key, payload) => {
25769
25808
  retrieveConfigurationState.set(key, payload);
25770
25809
  },
25810
+ clone: () => {
25811
+ return new Map(retrieveConfigurationState);
25812
+ },
25813
+ restore: (state) => {
25814
+ retrieveConfigurationState.clear();
25815
+ state.forEach((value, key) => {
25816
+ retrieveConfigurationState.set(key, value);
25817
+ });
25818
+ },
25771
25819
  get: (type, ...queries) => {
25772
25820
  if (type === IMAGE_RETRIEVE_CONFIGURATION) {
25773
25821
  return queries
@@ -26693,7 +26741,10 @@ function calculateViewportsSpatialRegistration(viewport1, viewport2) {
26693
26741
 
26694
26742
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/utilities/getViewportImageCornersInWorld.js
26695
26743
  function getViewportImageCornersInWorld(viewport) {
26696
- const { imageData, dimensions } = viewport.getImageData();
26744
+ const { imageData, dimensions } = viewport.getImageData() || {};
26745
+ if (!imageData || !dimensions) {
26746
+ return [];
26747
+ }
26697
26748
  const { canvas } = viewport;
26698
26749
  const ratio = window.devicePixelRatio;
26699
26750
  const topLeftCanvas = [0, 0];
@@ -30108,6 +30159,10 @@ function getPixelDataTypeFromMinMax(min, max) {
30108
30159
  }
30109
30160
  return pixelDataType || Float32Array;
30110
30161
  }
30162
+ function validatePixelDataType(min, max, type) {
30163
+ const pixelDataType = getPixelDataTypeFromMinMax(min, max);
30164
+ return pixelDataType === type;
30165
+ }
30111
30166
 
30112
30167
  ;// CONCATENATED MODULE: ../../../node_modules/@cornerstonejs/dicom-image-loader/dist/esm/imageLoader/convertColorSpace.js
30113
30168
 
@@ -31760,7 +31815,7 @@ const workerFn = () => {
31760
31815
  const instance = new Worker(new URL(/* worker import */ __webpack_require__.p + __webpack_require__.u(1927), __webpack_require__.b), { type: undefined });
31761
31816
  return instance;
31762
31817
  };
31763
- function init(options) {
31818
+ function init(options = {}) {
31764
31819
  setOptions(options);
31765
31820
  imageLoader_registerLoaders();
31766
31821
  const workerManager = (0,esm.getWebWorkerManager)();
@@ -66971,7 +67026,7 @@ function vtkOpenGLTexture(publicAPI, model) {
66971
67026
  }
66972
67027
  return result;
66973
67028
  };
66974
- publicAPI.useHalfFloat = () => model.enableHalfFloat && model.canUseHalfFloat;
67029
+ publicAPI.useHalfFloat = () => model.enableUseHalfFloat && model.canUseHalfFloat;
66975
67030
 
66976
67031
  //----------------------------------------------------------------------------
66977
67032
  publicAPI.setInternalFormat = iFormat => {
@@ -67605,18 +67660,21 @@ function vtkOpenGLTexture(publicAPI, model) {
67605
67660
  }
67606
67661
  function setCanUseHalfFloat(dataType, offset, scale, preferSizeOverAccuracy) {
67607
67662
  publicAPI.getOpenGLDataType(dataType);
67663
+
67664
+ // Don't consider halfFloat and convert back to Float when the range of data does not generate an accurate halfFloat
67665
+ // AND it is not preferable to have a smaller texture than an exact texture.
67666
+ const isExactHalfFloat = hasExactHalfFloat(offset, scale) || preferSizeOverAccuracy;
67608
67667
  let useHalfFloat = false;
67609
67668
  if (model._openGLRenderWindow.getWebgl2()) {
67610
- useHalfFloat = model.openGLDataType === model.context.HALF_FLOAT;
67669
+ // If OES_texture_float_linear is not available, and using a half float would still be exact, force half floats
67670
+ // This is because half floats are always texture filterable in webgl2, while full *32F floats are not (unless the extension is present)
67671
+ const forceHalfFloat = model.openGLDataType === model.context.FLOAT && model.context.getExtension('OES_texture_float_linear') === null && isExactHalfFloat;
67672
+ useHalfFloat = forceHalfFloat || model.openGLDataType === model.context.HALF_FLOAT;
67611
67673
  } else {
67612
67674
  const halfFloatExt = model.context.getExtension('OES_texture_half_float');
67613
67675
  useHalfFloat = halfFloatExt && model.openGLDataType === halfFloatExt.HALF_FLOAT_OES;
67614
67676
  }
67615
-
67616
- // Don't consider halfFloat and convert back to Float when the range of data does not generate an accurate halfFloat
67617
- // AND it is not preferable to have a smaller texture than an exact texture.
67618
- const isHalfFloat = useHalfFloat && (hasExactHalfFloat(offset, scale) || preferSizeOverAccuracy);
67619
- model.canUseHalfFloat = isHalfFloat;
67677
+ model.canUseHalfFloat = useHalfFloat && isExactHalfFloat;
67620
67678
  }
67621
67679
  function processDataArray(dataArray, preferSizeOverAccuracy) {
67622
67680
  const numComps = dataArray.getNumberOfComponents();
@@ -95921,8 +95979,8 @@ function WorkList({
95921
95979
  };
95922
95980
  });
95923
95981
  const hasStudies = numOfStudies > 0;
95924
- const versionNumber = "3.9.1";
95925
- const commitHash = "610faa5a2738da5eabc40e57e338c359f481e852";
95982
+ const versionNumber = "3.9.2";
95983
+ const commitHash = "e5286d9fc2449da50b738e7e6208d489cce1633e";
95926
95984
  const menuOptions = [{
95927
95985
  title: t('Header:About'),
95928
95986
  icon: 'info',
@@ -96708,7 +96766,7 @@ function ViewerViewportGrid(props) {
96708
96766
  isActive: isActive
96709
96767
  }, /*#__PURE__*/react.createElement("div", {
96710
96768
  "data-cy": "viewport-pane",
96711
- className: classnames_default()('flex h-full w-full flex-col', {
96769
+ className: classnames_default()('flex h-full w-full min-w-[5px] flex-col', {
96712
96770
  'pointer-events-none': !isActive && (appConfig?.activateViewportBeforeInteraction ?? true)
96713
96771
  })
96714
96772
  }, /*#__PURE__*/react.createElement(ViewportComponent, {
@@ -96797,35 +96855,35 @@ modes.push("@ohif/mode-preclinical-4d");
96797
96855
  async function loadModule(module) {
96798
96856
  if (typeof module !== 'string') return module;
96799
96857
  if (module === "@ohif/extension-default") {
96800
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(1520), __webpack_require__.e(2591)]).then(__webpack_require__.bind(__webpack_require__, 71520));
96858
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(5630), __webpack_require__.e(2591)]).then(__webpack_require__.bind(__webpack_require__, 55630));
96801
96859
  return imported.default;
96802
96860
  }
96803
96861
  if (module === "@ohif/extension-cornerstone") {
96804
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(4182)]).then(__webpack_require__.bind(__webpack_require__, 11185));
96862
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(4182)]).then(__webpack_require__.bind(__webpack_require__, 11185));
96805
96863
  return imported.default;
96806
96864
  }
96807
96865
  if (module === "@ohif/extension-measurement-tracking") {
96808
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(5261), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(3200)]).then(__webpack_require__.bind(__webpack_require__, 71903));
96866
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(5261), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(3200)]).then(__webpack_require__.bind(__webpack_require__, 71903));
96809
96867
  return imported.default;
96810
96868
  }
96811
96869
  if (module === "@ohif/extension-cornerstone-dicom-sr") {
96812
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(1801)]).then(__webpack_require__.bind(__webpack_require__, 85687));
96870
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(1801)]).then(__webpack_require__.bind(__webpack_require__, 85687));
96813
96871
  return imported.default;
96814
96872
  }
96815
96873
  if (module === "@ohif/extension-cornerstone-dicom-seg") {
96816
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3970), __webpack_require__.e(1520), __webpack_require__.e(7197)]).then(__webpack_require__.bind(__webpack_require__, 96975));
96874
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3970), __webpack_require__.e(5630), __webpack_require__.e(7197)]).then(__webpack_require__.bind(__webpack_require__, 96975));
96817
96875
  return imported.default;
96818
96876
  }
96819
96877
  if (module === "@ohif/extension-cornerstone-dicom-pmap") {
96820
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(5139)]).then(__webpack_require__.bind(__webpack_require__, 82098));
96878
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(5139)]).then(__webpack_require__.bind(__webpack_require__, 82098));
96821
96879
  return imported.default;
96822
96880
  }
96823
96881
  if (module === "@ohif/extension-cornerstone-dynamic-volume") {
96824
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(717)]).then(__webpack_require__.bind(__webpack_require__, 14696));
96882
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(717)]).then(__webpack_require__.bind(__webpack_require__, 14696));
96825
96883
  return imported.default;
96826
96884
  }
96827
96885
  if (module === "@ohif/extension-dicom-microscopy") {
96828
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(5807), __webpack_require__.e(1520), __webpack_require__.e(5247)]).then(__webpack_require__.bind(__webpack_require__, 22801));
96886
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(5807), __webpack_require__.e(5630), __webpack_require__.e(5247)]).then(__webpack_require__.bind(__webpack_require__, 22801));
96829
96887
  return imported.default;
96830
96888
  }
96831
96889
  if (module === "@ohif/extension-dicom-pdf") {
@@ -96837,7 +96895,7 @@ async function loadModule(module) {
96837
96895
  return imported.default;
96838
96896
  }
96839
96897
  if (module === "@ohif/extension-tmtv") {
96840
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(3198)]).then(__webpack_require__.bind(__webpack_require__, 57289));
96898
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(3198)]).then(__webpack_require__.bind(__webpack_require__, 57289));
96841
96899
  return imported.default;
96842
96900
  }
96843
96901
  if (module === "@ohif/extension-test") {
@@ -96849,7 +96907,7 @@ async function loadModule(module) {
96849
96907
  return imported.default;
96850
96908
  }
96851
96909
  if (module === "@ohif/mode-longitudinal") {
96852
- const imported = await Promise.all(/* import() */[__webpack_require__.e(149), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(1520), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(1266)]).then(__webpack_require__.bind(__webpack_require__, 35589));
96910
+ const imported = await Promise.all(/* import() */[__webpack_require__.e(3900), __webpack_require__.e(1436), __webpack_require__.e(3334), __webpack_require__.e(3970), __webpack_require__.e(5630), __webpack_require__.e(1185), __webpack_require__.e(5687), __webpack_require__.e(1266)]).then(__webpack_require__.bind(__webpack_require__, 35589));
96853
96911
  return imported.default;
96854
96912
  }
96855
96913
  if (module === "@ohif/mode-segmentation") {
@@ -97351,9 +97409,9 @@ function ModeRoute({
97351
97409
  const hangingProtocolIdToUse = hangingProtocolService.getProtocolById(runTimeHangingProtocolId) ? runTimeHangingProtocolId : hangingProtocol;
97352
97410
 
97353
97411
  // Determine the index of the stageId if the hangingProtocolIdToUse is defined
97354
- const stageIndex = hangingProtocolIdToUse ? hangingProtocolService.getStageIndex(hangingProtocolIdToUse, {
97412
+ const stageIndex = Array.isArray(hangingProtocolIdToUse) ? -1 : hangingProtocolService.getStageIndex(hangingProtocolIdToUse, {
97355
97413
  stageId: runTimeStageId || undefined
97356
- }) : -1;
97414
+ });
97357
97415
  // Ensure that the stage index is never negative
97358
97416
  // If stageIndex is negative (e.g., if stage wasn't found), use 0 as the default
97359
97417
  const stageIndexToUse = Math.max(0, stageIndex);
@@ -107353,7 +107411,7 @@ class CustomizationService extends pubSubServiceInterface/* PubSubService */.R {
107353
107411
  return customization;
107354
107412
  }
107355
107413
  const parent = this.getCustomization(customizationType);
107356
- const result = parent ? Object.assign(Object.create(parent), customization) : customization;
107414
+ const result = parent ? Object.assign({}, parent, customization) : customization;
107357
107415
  // Execute an nested type information
107358
107416
  return result.transform?.(this) || result;
107359
107417
  }
@@ -108484,7 +108542,7 @@ class StudyPrefetcherService extends pubSubServiceInterface/* PubSubService */.R
108484
108542
  this._displaySetLoadingStates.clear();
108485
108543
  this._imageIdsToDisplaySetsMap.clear();
108486
108544
  this._inflightRequests.clear();
108487
- this.imageLoadPoolManager.clearRequestStack(IMAGE_REQUEST_TYPE);
108545
+ this.imageLoadPoolManager.clearRequestStack(this.requestType);
108488
108546
  this._broadcastEvent(this.EVENTS.SERVICE_STOPPED, {});
108489
108547
  }
108490
108548
 
@@ -109726,7 +109784,11 @@ function _getPaletteColor(paletteColorLookupTableData, lutDescriptor) {
109726
109784
  }
109727
109785
  // EXTERNAL MODULE: ../../core/src/utils/toNumber.js
109728
109786
  var toNumber = __webpack_require__(37827);
109787
+ // EXTERNAL MODULE: ../../../node_modules/gl-matrix/esm/index.js + 1 modules
109788
+ var esm = __webpack_require__(3823);
109729
109789
  ;// CONCATENATED MODULE: ../../core/src/utils/combineFrameInstance.ts
109790
+
109791
+
109730
109792
  /**
109731
109793
  * Combine the Per instance frame data, the shared frame data
109732
109794
  * and the root data objects.
@@ -109741,21 +109803,34 @@ const combineFrameInstance = (frame, instance) => {
109741
109803
  const {
109742
109804
  PerFrameFunctionalGroupsSequence,
109743
109805
  SharedFunctionalGroupsSequence,
109744
- NumberOfFrames
109806
+ NumberOfFrames,
109807
+ SpacingBetweenSlices
109745
109808
  } = instance;
109746
109809
  if (PerFrameFunctionalGroupsSequence || NumberOfFrames > 1) {
109747
109810
  const frameNumber = Number.parseInt(frame || 1);
109748
- const shared = (SharedFunctionalGroupsSequence ? Object.values(SharedFunctionalGroupsSequence[0]) : []).filter(it => !!it).map(it => it[0]).filter(it => it !== undefined && typeof it === 'object');
109749
- const perFrame = (PerFrameFunctionalGroupsSequence ? Object.values(PerFrameFunctionalGroupsSequence[frameNumber - 1]) : []).filter(it => !!it).map(it => it[0]).filter(it => it !== undefined && typeof it === 'object');
109811
+ const shared = SharedFunctionalGroupsSequence ? Object.values(SharedFunctionalGroupsSequence[0]).filter(Boolean).map(it => it[0]).filter(it => typeof it === 'object') : [];
109812
+ const perFrame = PerFrameFunctionalGroupsSequence ? Object.values(PerFrameFunctionalGroupsSequence[frameNumber - 1]).filter(Boolean).map(it => it[0]).filter(it => typeof it === 'object') : [];
109750
109813
 
109751
109814
  // this is to fix NM multiframe datasets with position and orientation
109752
109815
  // information inside DetectorInformationSequence
109753
109816
  if (!instance.ImageOrientationPatient && instance.DetectorInformationSequence) {
109754
109817
  instance.ImageOrientationPatient = instance.DetectorInformationSequence[0].ImageOrientationPatient;
109755
109818
  }
109819
+ let ImagePositionPatientToUse = instance.ImagePositionPatient;
109756
109820
  if (!instance.ImagePositionPatient && instance.DetectorInformationSequence) {
109757
- instance.ImagePositionPatient = instance.DetectorInformationSequence[0].ImagePositionPatient;
109821
+ const imagePositionPatient = instance.DetectorInformationSequence[0].ImagePositionPatient;
109822
+ const imageOrientationPatient = instance.ImageOrientationPatient;
109823
+
109824
+ // Calculate the position for the current frame
109825
+ if (imageOrientationPatient && SpacingBetweenSlices) {
109826
+ const rowOrientation = esm/* vec3.fromValues */.eR.fromValues(imageOrientationPatient[0], imageOrientationPatient[1], imageOrientationPatient[2]);
109827
+ const colOrientation = esm/* vec3.fromValues */.eR.fromValues(imageOrientationPatient[3], imageOrientationPatient[4], imageOrientationPatient[5]);
109828
+ const normalVector = esm/* vec3.cross */.eR.cross(esm/* vec3.create */.eR.create(), rowOrientation, colOrientation);
109829
+ const position = esm/* vec3.scaleAndAdd */.eR.scaleAndAdd(esm/* vec3.create */.eR.create(), imagePositionPatient, normalVector, SpacingBetweenSlices * (frameNumber - 1));
109830
+ ImagePositionPatientToUse = [position[0], position[1], position[2]];
109831
+ }
109758
109832
  }
109833
+ console.debug('🚀 ~ ImagePositionPatientToUse:', ImagePositionPatientToUse);
109759
109834
  const newInstance = Object.assign(instance, {
109760
109835
  frameNumber: frameNumber
109761
109836
  });
@@ -109771,7 +109846,7 @@ const combineFrameInstance = (frame, instance) => {
109771
109846
  // back to the dicomMetaStore so we don't have to do this again.
109772
109847
  return {
109773
109848
  ...newInstance,
109774
- ImagePositionPatient: newInstance.ImagePositionPatient ?? [0, 0, frameNumber]
109849
+ ImagePositionPatient: ImagePositionPatientToUse ?? newInstance.ImagePositionPatient ?? [0, 0, frameNumber]
109775
109850
  };
109776
109851
  } else {
109777
109852
  return instance;
@@ -109789,7 +109864,6 @@ const combineFrameInstance = (frame, instance) => {
109789
109864
 
109790
109865
  class MetadataProvider {
109791
109866
  constructor() {
109792
- this.studies = new Map();
109793
109867
  this.imageURIToUIDs = new Map();
109794
109868
  this.imageUIDsByImageId = new Map();
109795
109869
  // Can be used to store custom metadata for a specific type.
@@ -109798,6 +109872,10 @@ class MetadataProvider {
109798
109872
  this.customMetadata = new Map();
109799
109873
  }
109800
109874
  addImageIdToUIDs(imageId, uids) {
109875
+ if (!imageId) {
109876
+ throw new Error('MetadataProvider::Empty imageId');
109877
+ }
109878
+
109801
109879
  // This method is a fallback for when you don't have WADO-URI or WADO-RS.
109802
109880
  // You can add instances fetched by any method by calling addInstance, and hook an imageId to point at it here.
109803
109881
  // An example would be dicom hosted at some random site.
@@ -109813,6 +109891,9 @@ class MetadataProvider {
109813
109891
  this.customMetadata.get(type)[imageURI] = metadata;
109814
109892
  }
109815
109893
  _getInstance(imageId) {
109894
+ if (!imageId) {
109895
+ throw new Error('MetadataProvider::Empty imageId');
109896
+ }
109816
109897
  const uids = this.getUIDsFromImageID(imageId);
109817
109898
  if (!uids) {
109818
109899
  return;
@@ -110184,17 +110265,6 @@ class MetadataProvider {
110184
110265
  return;
110185
110266
  }
110186
110267
  getUIDsFromImageID(imageId) {
110187
- if (!imageId) {
110188
- throw new Error('MetadataProvider::Empty imageId');
110189
- }
110190
- // TODO: adding csiv here is not really correct. Probably need to use
110191
- // metadataProvider.addImageIdToUIDs(imageId, {
110192
- // StudyInstanceUID,
110193
- // SeriesInstanceUID,
110194
- // SOPInstanceUID,
110195
- // })
110196
- // somewhere else
110197
-
110198
110268
  const cachedUIDs = this.imageUIDsByImageId.get(imageId);
110199
110269
  if (cachedUIDs) {
110200
110270
  return cachedUIDs;
@@ -115012,7 +115082,7 @@ const detectionOptions = {
115012
115082
  }
115013
115083
  });
115014
115084
  ;// CONCATENATED MODULE: ../../i18n/package.json
115015
- const package_namespaceObject = {"rE":"3.9.0"};
115085
+ const package_namespaceObject = {"rE":"3.9.1"};
115016
115086
  ;// CONCATENATED MODULE: ../../i18n/src/utils.js
115017
115087
  const languagesMap = {
115018
115088
  ar: 'Arabic',
@@ -239571,13 +239641,6 @@ SidePanel.propTypes = {
239571
239641
  side: prop_types_default().oneOf(['left', 'right']).isRequired,
239572
239642
  className: (prop_types_default()).string,
239573
239643
  activeTabIndex: (prop_types_default()).number,
239574
- tabs: prop_types_default().oneOfType([prop_types_default().arrayOf(prop_types_default().shape({
239575
- iconName: (prop_types_default()).string.isRequired,
239576
- iconLabel: (prop_types_default()).string.isRequired,
239577
- name: (prop_types_default()).string.isRequired,
239578
- label: (prop_types_default()).string.isRequired,
239579
- content: (prop_types_default()).func // TODO: Should be node, but it keeps complaining?
239580
- }))]),
239581
239644
  onOpen: (prop_types_default()).func,
239582
239645
  onClose: (prop_types_default()).func,
239583
239646
  onActiveTabIndexChange: (prop_types_default()).func,
@@ -242197,9 +242260,7 @@ const DataRow = ({
242197
242260
  return /*#__PURE__*/react.createElement("div", {
242198
242261
  key: cleanText,
242199
242262
  className: "whitespace-pre-wrap"
242200
- }, indentation, cleanText.includes(':') ? /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("span", {
242201
- className: "font-medium"
242202
- }, cleanText.split(':')[0], ":"), cleanText.split(':')[1]) : /*#__PURE__*/react.createElement("span", {
242263
+ }, indentation, /*#__PURE__*/react.createElement("span", {
242203
242264
  className: "font-medium"
242204
242265
  }, cleanText));
242205
242266
  };
@@ -242307,11 +242368,13 @@ const DataRow = ({
242307
242368
  className: "text-foreground"
242308
242369
  }), /*#__PURE__*/react.createElement("span", {
242309
242370
  className: "pl-2"
242310
- }, isLocked ? 'Unlock' : 'Lock')))))), details && details.primary?.length > 0 && /*#__PURE__*/react.createElement("div", {
242371
+ }, isLocked ? 'Unlock' : 'Lock')))))), details && (details.primary?.length > 0 || details.secondary?.length > 0) && /*#__PURE__*/react.createElement("div", {
242311
242372
  className: "ml-7 px-2 py-2"
242312
242373
  }, /*#__PURE__*/react.createElement("div", {
242313
- className: "text-secondary-foreground text-base leading-normal"
242314
- }, renderDetails(details.primary))));
242374
+ className: "text-secondary-foreground flex items-center gap-1 text-base leading-normal"
242375
+ }, details.primary?.length > 0 && renderDetails(details.primary), details.secondary?.length > 0 && /*#__PURE__*/react.createElement("div", {
242376
+ className: "text-muted-foreground ml-auto text-sm"
242377
+ }, renderDetails(details.secondary)))));
242315
242378
  };
242316
242379
  /* harmony default export */ const DataRow_DataRow = (DataRow);
242317
242380
  ;// CONCATENATED MODULE: ../../ui-next/src/components/DataRow/index.ts
@@ -242497,7 +242560,7 @@ const SegmentationSegments = ({
242497
242560
  return null;
242498
242561
  }
242499
242562
  const segmentCount = Object.keys(representationToUse.segments).length;
242500
- const height = mode === 'collapsed' ? 'h-[600px]' : `h-[${segmentCount * 200}px]`;
242563
+ const height = mode === 'collapsed' ? 'h-[900px]' : `h-[${segmentCount * 200}px]`;
242501
242564
  return /*#__PURE__*/react.createElement(ScrollArea_ScrollArea, {
242502
242565
  className: `ohif-scrollbar invisible-scrollbar bg-bkg-low space-y-px ${height}`,
242503
242566
  showArrows: true
@@ -243248,24 +243311,24 @@ Stack: ${error.stack}
243248
243311
  }, /*#__PURE__*/react.createElement(Dialog_DialogContent, {
243249
243312
  className: "border-input h-[50vh] w-[90vw] border-2 sm:max-w-[900px]"
243250
243313
  }, /*#__PURE__*/react.createElement(DialogHeader, null, /*#__PURE__*/react.createElement(Dialog_DialogTitle, {
243251
- className: "text-xl"
243252
- }, title), /*#__PURE__*/react.createElement(Dialog_DialogDescription, {
243253
- className: "text-lg"
243254
- }, subtitle)), /*#__PURE__*/react.createElement(ScrollArea_ScrollArea, {
243255
- className: "h-[calc(90vh-120px)]"
243314
+ className: "text-muted-foreground flex justify-between text-xl"
243256
243315
  }, /*#__PURE__*/react.createElement("div", {
243257
- className: "space-y-4 pr-4 font-mono text-base"
243258
- }, /*#__PURE__*/react.createElement("div", {
243259
- className: "flex justify-end"
243260
- }, /*#__PURE__*/react.createElement("button", {
243316
+ className: "flex items-center"
243317
+ }, title), /*#__PURE__*/react.createElement("button", {
243261
243318
  onClick: () => {
243262
243319
  copyErrorDetails();
243263
243320
  setShowDetails(false);
243264
243321
  },
243265
- className: "text-aqua-pale hover:text-aqua-pale/80 flex items-center gap-2 rounded bg-gray-800 px-4 py-2"
243322
+ className: "text-aqua-pale hover:text-aqua-pale/80 flex items-center gap-2 rounded bg-gray-800 px-4 py-2 font-light"
243266
243323
  }, /*#__PURE__*/react.createElement(Icons.Code, {
243267
243324
  className: "h-4 w-4"
243268
- }), t('Copy Details'))), /*#__PURE__*/react.createElement("div", {
243325
+ }), t('Copy Details'))), /*#__PURE__*/react.createElement(Dialog_DialogDescription, {
243326
+ className: "text-lg"
243327
+ }, subtitle)), /*#__PURE__*/react.createElement(ScrollArea_ScrollArea, {
243328
+ className: "h-[100%]"
243329
+ }, /*#__PURE__*/react.createElement("div", {
243330
+ className: "space-y-4 pr-4 font-mono text-base"
243331
+ }, /*#__PURE__*/react.createElement("div", {
243269
243332
  className: "space-y-4"
243270
243333
  }, /*#__PURE__*/react.createElement("p", {
243271
243334
  className: "text-aqua-pale break-words text-lg"
@@ -265572,7 +265635,7 @@ const SidePanel_SidePanel = ({
265572
265635
  position: side === 'left' ? 'right' : 'left',
265573
265636
  key: index,
265574
265637
  content: getToolTipContent(childComponent.label, childComponent.disabled),
265575
- className: classnames_default()('flex items-center', side === 'left' ? 'justify-end ' : 'justify-start ')
265638
+ className: classnames_default()('flex items-center', side === 'left' ? 'justify-end' : 'justify-start')
265576
265639
  }, /*#__PURE__*/react.createElement("div", {
265577
265640
  id: `${childComponent.name}-btn`,
265578
265641
  "data-cy": `${childComponent.name}-btn`,
@@ -265610,7 +265673,7 @@ const SidePanel_SidePanel = ({
265610
265673
  const getTabGridComponent = () => {
265611
265674
  const numCols = getNumGridColumns(tabs.length, gridWidth);
265612
265675
  return /*#__PURE__*/react.createElement("div", {
265613
- className: classnames_default()('flex grow ', side === 'right' ? 'justify-start' : 'justify-end')
265676
+ className: classnames_default()('flex grow', side === 'right' ? 'justify-start' : 'justify-end')
265614
265677
  }, /*#__PURE__*/react.createElement("div", {
265615
265678
  className: classnames_default()('bg-primary-dark text-primary-active flex flex-wrap'),
265616
265679
  style: getGridStyle(side, tabs.length, gridWidth, expandedWidth)
@@ -265649,7 +265712,7 @@ const SidePanel_SidePanel = ({
265649
265712
  };
265650
265713
  const getOneTabComponent = () => {
265651
265714
  return /*#__PURE__*/react.createElement("div", {
265652
- className: classnames_default()('text-primary-active flex grow cursor-pointer select-none justify-center self-center text-[13px]'),
265715
+ className: classnames_default()('text-primary-active flex grow cursor-pointer select-none justify-center self-center text-[13px]'),
265653
265716
  style: {
265654
265717
  ...(side === 'left' ? {
265655
265718
  marginLeft: `${closeIconWidth}px`
@@ -265663,7 +265726,7 @@ const SidePanel_SidePanel = ({
265663
265726
  };
265664
265727
  const getOpenStateComponent = () => {
265665
265728
  return /*#__PURE__*/react.createElement("div", {
265666
- className: "bg-primary-dark flex select-none rounded-t pt-1.5 pb-[2px]\t"
265729
+ className: "bg-primary-dark flex select-none rounded-t pt-1.5 pb-[2px]"
265667
265730
  }, getCloseIcon(), tabs.length === 1 ? getOneTabComponent() : getTabGridComponent());
265668
265731
  };
265669
265732
  return /*#__PURE__*/react.createElement("div", {
@@ -421567,7 +421630,7 @@ function __disposeResources(env) {
421567
421630
  /******/ // This function allow to reference async chunks
421568
421631
  /******/ __webpack_require__.u = (chunkId) => {
421569
421632
  /******/ // return url for filenames based on template
421570
- /******/ return "" + ({"572":"polySeg","3054":"histogram-worker","3584":"suv-peak-worker"}[chunkId] || chunkId) + ".bundle." + {"149":"ce5596fc563276036744","213":"e663335fb0884edde6d8","572":"b79ae514989e86301c71","717":"0f32b7b57347b5141248","1185":"023fe7179faaa50019d3","1266":"e9abd5c45b5236544151","1374":"019bbc010eeb66109e8b","1436":"773756cd51b69e887bac","1520":"97dbd9bfa83148e5334d","1801":"c552846463998fdc9ad4","1927":"49539e3ab5b0aad1399c","2424":"b7da298db43541d3a7c0","2591":"e1bbdc34a55bee082ff2","2701":"8c1ff2e0faaa7d2f4716","2825":"b04c941a87fd580deb6d","3054":"f0e060cf2637a2ca94b7","3121":"d3e7092e305cf6cecdb5","3198":"c82b7424070ffd02faf1","3200":"a12825fb5aec200d33e2","3334":"0e6ba24024018199ab66","3584":"31c3b3b957204af93b7e","3970":"31942cc0c12a008e7ba0","4182":"ec850ce1f74b1f6fe559","4202":"5c8120ed4841da0af211","4834":"aad44c2628cdefb7a4dd","5139":"367a6827071448e2923d","5247":"6dc2a50f21821b2ffdf5","5261":"74682659cce85f3ae592","5687":"5731ec23dd9eb43a083e","5807":"dac5ce36534a71c77723","6939":"9b79da82315a25f37d96","7159":"9f4856182f1eda29c59d","7197":"c28453cdb392072d8bf8","7955":"6a255705b1ef5906f4a8","8008":"5bf7b274246be10e2f05","8228":"55ac03d7165248f47d4e","8259":"623c29b26b170a8a085b","8295":"4ecb27f9e58526f12bcb","8558":"01d05fd73da5db8e60f9","9551":"6c260a9869e14dcc3543","9611":"767595c93877e5166c03","9862":"7146682e56aa66130ae6"}[chunkId] + ".js";
421633
+ /******/ return "" + ({"572":"polySeg","3054":"histogram-worker","3584":"suv-peak-worker"}[chunkId] || chunkId) + ".bundle." + {"213":"8c04fecea2e3796e4d73","572":"6e85073e3abf2e6e6078","717":"3a4b8835adf03e4554c7","1185":"d328aabb2b43e9ea1f96","1266":"46de27eda2ef1fce1243","1374":"1ee8326c0748c7b1a7c0","1436":"27ae9c87e9fc7f52cad3","1801":"c552846463998fdc9ad4","1927":"2b2fa0b539d6ac5b0dc3","2424":"38b19314ebd984c9d393","2591":"e1bbdc34a55bee082ff2","2701":"8c1ff2e0faaa7d2f4716","2825":"0307cae794e8b057c674","3054":"f0e060cf2637a2ca94b7","3121":"d3e7092e305cf6cecdb5","3198":"ab612063af0d67397377","3200":"ccb809fb554332d9a0f5","3334":"0e6ba24024018199ab66","3584":"1f483dc7131d7c26b517","3900":"3937999d1ee1f391647a","3970":"31942cc0c12a008e7ba0","4182":"ec850ce1f74b1f6fe559","4202":"5c8120ed4841da0af211","4834":"c25348524be5214e90d6","5139":"db30dc02cf41e91c8985","5247":"1a1d7c27de482e4a73f3","5261":"74682659cce85f3ae592","5630":"1bd2402f37597078c1a1","5687":"05de4787676bf79f9906","5807":"dac5ce36534a71c77723","6939":"9b79da82315a25f37d96","7159":"9f4856182f1eda29c59d","7197":"42a975bb7ae4a8df2d00","7955":"f6c5edb284bdf8b80f2a","8008":"d4187a30e8f656a21316","8228":"0a7997d04c82dd8c11c5","8259":"990db2fa9ce0800319e9","8295":"4ecb27f9e58526f12bcb","8558":"63714e2329c22c9cb9da","9551":"63b2679dd7beee6396d8","9611":"78a4ffb439f65cfd0379","9862":"aa2f8e0010f1be1bc87d"}[chunkId] + ".js";
421571
421634
  /******/ };
421572
421635
  /******/ })();
421573
421636
  /******/